Four researchers and software engineers estimated that a skilled human engineer would take 2 to 17 weeks to reimplement gotree, as AI successfully did in this work.
这一对比数据极具启发性,它量化了AI在特定任务上相对于人类的时间优势。这种时间压缩效应可能重塑软件开发流程,但也引发了关于AI能力与人类创造力本质差异的深层思考。
Four researchers and software engineers estimated that a skilled human engineer would take 2 to 17 weeks to reimplement gotree, as AI successfully did in this work.
这一对比数据极具启发性,它量化了AI在特定任务上相对于人类的时间优势。这种时间压缩效应可能重塑软件开发流程,但也引发了关于AI能力与人类创造力本质差异的深层思考。
It is not common for real software to be developed the way MirrorCode tasks are structured — against a precise, programmatically checkable specification.
这一重要提醒指出了MirrorCode评估方法与实际软件开发之间的差异。虽然该基准测试提供了有价值的AI能力证据,但如何将这种能力转化为实际开发环境中的表现仍是一个开放问题,这对AI在真实世界软件工程中的应用提出了挑战。
There were 1 billion commits in 2025. Now, it's 275 million per week, on pace for 14 billion this year if growth remains linear
令人惊讶的是:软件开发提交量呈现爆炸式增长,从2025年的10亿个提交激增至每周2.75亿个,预计全年将达到140亿个。这种指数级增长反映了AI时代代码生成速度的惊人变化,远超线性预测。
I've skimmed Crafting Interpreters and the Bytecode VM section seems to spend an inexplicable amount of time on not only parsing, but minutia having nothing to do with compilers (e.g. writing a custom dynamic array implementation in C).
This is what happened with Bitwise University.
In 2018, I pleaded with Per when he announced the project to just take Wirth's Oberon, re-implementing it but change the lexer so it's a curly brace language, maybe changing the grammar in some other places so it's more comfortable for a C programmer, and only then consider adding a new backend (or, in hindsight, work on them in parallel—the point being to just fall back on the existing, already available, known-to-work implementation once it becomes apparent that doing a backend from scratch is hard). I.e., avoid the yak-shaving and get to the compiler-writing as soon as possible.
He decided not to, and the first substantial episode—"Day 2", the third stream—spent an hour faffing with a C implementation of "stretchy buffers" https://bitwise.handmade.network/episode/bitwise/bitwise002/
We envision a component generator with knobs thatlet a user choose among design decisions, akin to sim-ilar work for code generation from design patterns [1].Such a tool is sufficiently parameterized to generateany combination of implementation trade-offs on thespectrum from fully static to fully dynamic compo-nents. The components that result can thus exhibitjust the right combination of flexibility, maintainabil-ity, and performance, with a minimum of specificationand hackery on the developer’s part.
for me, a software component is a reusable software element, typically some library classes, usually in source form (not binary form), which differs from Clemens Szyperski’s view
code of view wasn't about catching bugs. It was a primary mechanism for knowledge transfer. When your engineers learn architecture by reading senior engineer PRs, seniors maintain context by reviewing everything, and code of view was the learning loop. It was how shared theory was built and maintained across the entire team. But AI bypasses that entire loop. The code shows up, it works, it gets merged, but nobody learned anything. Nobody built context. Nobody can debug at a 3AM without reprompting the AI. And code of view was never about catching bugs. It was always about building shared understanding. AI skipped the most important step.
Definitely true
Another limitation in this implementation is that passing other options in the shebang to vite-node won't work, as I expect exact indexes in order to figure out what are the arguments to forward. It's not perfect but I think it's good enough to unblock people like me as a start. 👍
Another problem is that now your business logic is obfuscated inside the ORM layer. If you look at the structure of the source code of a typical Rails application, all you see are these nice MVC buckets. They may reveal the domain models of the application, but you can’t see the Use Cases of the system, what it’s actually meant to do.
Rails' observers were partly inspired by aspect-oriented programming -- they're about cross-cutting concerns. If you're putting business logic in observers that is tightly coupled to the models they're observing, you're doing it wrong IMO.
I want RSpec Rails development to be fast, and lightweight, much like it was when I joined the RSpec project.
As of right now the full build takes over an hour to run, and this makes cycling for PRs and quick iterative development very difficult.
We often think of software development as a ticket-in-code-out business but this is really only a very small portion of the entire thing. Completely independently of the work done as a programmer, there exists users with different jobs they are trying to perform, and they may or may not find it convenient to slot our software into that job. A manager is not necessarily the right person to evaluate how good a job we are doing because they also exist independently of the user–software–programmer network, and have their own sets of priorities which may or may not align with the rest of the system.
It's incredibly important to test your Facebook Login flow under a variety of conditions, and we've built a robust testing plan for you to follow.
I think Peter called this "secret knowledge".
As our app grows, an increasing amount of random code is landing in the app/services directory. I'm worried it will become impractical to improve on this, as the number of special cases will only increase. Some pain points off the top of my head (definitely not exhaustive):
I'm assuming some of the goals are to make it clear where to put new files (and to stay within current Rails conventions). We already have a few non-standard app folders in our project, such as app/services, app/queries, etc. and we put some non-ActiveRecord classes in app/models. If we are going to move files, it might make sense to first define where files should go, and then move each file to the appropriate place. This might be more of a reorganization project, than copying over a folder.
How to set up and validate locally Access content editor in wikis or in issues behind a feature flag :content_editor_on_issues. Copy some text from Google docs or any rich text document Press Cmd/Ctrl + Shift + V to paste raw text.
In computing, the robustness principle is a design guideline for software that states: "be conservative in what you do, be liberal in what you accept from others". It is often reworded as: "be conservative in what you send, be liberal in what you accept". The principle is also known as Postel's law, after Jon Postel, who used the wording in an early specification of TCP.
https://en.wikipedia.org/wiki/Robustness_principle
Robustness principle: be conservative in what you do, be liberal in what you accept from others.
Five core layers: 1. Presentation Layer 2. Application Layer 3. Domain Layer 4. Persistence Layer 5. Database Layer
In the layered architecture pattern, each layer fulfills a specific responsibility and role within the application. Some focus on user interface logic, while others handle the execution of business rules. These layers complement each other's unique purposes, but they aren't explicitly reliant on one another to perform their own tasks.
In software architecture, layers act as individual processes within the infrastructure of an application. These layers typically form a pattern, also called the n-tier architecture pattern.
Marking methods protected by default is a mitigation for one of the major issues in modern SW development: failure of imagination.
https://garrickvanburen.com/yes-all-software-should-have-a-philosophy-txt-file/
Makes me want all projects included a Philosophy.txt file along with the README.txt and License.txt. It’s far more useful and people-oriented than humans.txt
this intellectual background can also lead to arrogance. People who excel at software design become convinced that they have a unique ability to understand any kind of system at all, from first principles, without prior training, thanks to their superior powers of analysis. Success in the artificially constructed world of software design promotes a dangerous confidence.
Techmango is a leading provider of custom software development services. We have a team of experienced and skilled software developers who can create custom software solutions that meet the specific needs of your business. We have a proven track record of delivering high-quality custom software development projects on time and within budget. With over years of experience in the industry, Techmango will work closely with you to provide innovative software solutions that revolve around your specific business needs.
Web and mobile apps, SPAs, and SAAS products with thoughtful UX and robust implementation.
Mark: Yeah. And I actually think the Agile revolution in software development is software development catching up to the fact that it’s a writer-ly art. Writers don’t know where they’re going or how they’re going to express it when they start out. Neither, it turns out, does software developers. They can pretend by writing it the first time in a spec language and then coding it and then, checking the specification, then finding out that they’ve written the wrong thing and writing a new specification. That was when I was getting started, the right way to write software.
Agile software development is akin to the design of the writing process.
I came to this page looking for a way to add Xournal++ to the official winget repository. The accepted answer seems like it might do this: https://stackoverflow.com/a/64367435/6457597
Need to open issue on GH repo about creating manifest file for Xournal++
git_workspace/ ├── .vscode │ └── settings.json # global settings, my preferred ones ├── my-personal-projects/ │ └── project1/ │ └── .git/ └── company-projects/ ├── .vscode │ └── settings.json # local settings, overrides some of my personal ones ├── project2/ │ └── .git/ └── project3/ └── .git/
Page for how to contribute to the Hypothes.is Project.<br /> - Code on GitHub - main repository: h - new feature ideas and current bugs: product-backlog - Chat in - Slack: anyone who wants to talk to contributors & community members, hang out, discuss project, get questions answered - Public forum: Less technical place for users to ask questions & discuss needs - Documentation - Using the Hypothesis API: enables you to create applications and services which read or write data from the Hypothesis service - Developing Hypothesis: set up development environment and contribute to Hypothes.is - Roadmap - High level view of features the dev team is evaluating, planning, & building
One big feature that the Hypothes.is Notebook affords is indexing on replies (which currently aren't displayed on the Activity Page). I confirmed this on 2022-11-07 with one of Hypothes.is's support admins in their Slack channel.
Sadly, this won't help my personal use case since I'm using the obsidian-hypothesis-plugin which seems to only pull highlights, annotations, and page notes from the Activity Page
Consequently, I'll probably have to build something myself which will be somewhat painful but a good learning experience
I realize that having the same FE/BE on all platforms is the fabled cross-platform panacea. But I’ve yet to see this work well in practice for any app of significant complexity. Quite a few major development teams that were early adopters of ideas like this have since abandoned that approach e.g. AirBnB with React Native, or DropBox with their custom C++ core. As it turns out, while you do write less platform-specific code, you still have to deal with platform-specific bugs and performance issues (not too dissimilar from Qt, just the with additional headaches of mobile platforms). So creating one “universal” code base ends up being almost as much work as working with each platform’s native technologies.
(Test) Glutimate's argument against moving away from Qt for Anki development.
Video on Functional Core, Imperative Shell paradigm. Recommended in Hypothes.is testing documentation
the functional core, imperative shell pattern
Link to video on "Boundaries" doesn't go into depth on the functional core, imperative shell pattern. However, this one does: https://www.destroyallsoftware.com/screencasts/catalog/functional-core-imperative-shell
For new code, it’s usually a good idea to design the code so that it’s easy to test with “real” objects, rather than stubs or mocks.
We keep our functional tests separate from our unit tests, in the tests/functional directory. Because these are slow to run, we will usually write one or two functional tests to check a new feature works in the common case, and unit tests for all the other cases.
Keep functional & unit tests separate. Functional for common cases, unit for all others.
To run the backend test suite only call tox directly
Probably means, "Call tox directly if you only want to run the backend test suite."
In particular, it allowed for organizing common traits (such as extensibility, or different ways of showing examples as schemas that can be mixed in to the main object definitions.
when you start with something simple but special purpose, it inevitably accretes features that attempt to increase its generality, as users run into its limitations. But the result of this evolutionary process is usually a complicated mess compared to what could be achieved by designing for generality up-front, in a more holistic way.
I think this is true, but it's often difficult to design generality upfront. A nice approach is making sure that you are able to back into it and modify after the fact.
We should be trying to make our technologies have more "two-door" decisions.
Debugging is the process of finding and removing errors (bugs) from a software program. Bugs occur in programs when a line of code or a statement conflicts with other elements of the code. We also call errors or defects in hardware bugs.
Debugging and debugging software
Debugging is the process of finding and removing errors (bugs) from a software program. Bugs occur in programs when a line of code or a statement conflicts with other elements of the code. We also call errors or defects in hardware bugs.

The intent of this specification and related tools is to expand the reach of development containers, allow the usage of containers by themselves or different orchestration technologies, and allow any tool to manage and create them.
Any software developer will recognize it, The Eureka Moment. This is when you suddenly see how to solve a particular problem. We have them in all shapes and sizes and at the strangest moments. How does that work in SCRUM and DevOps teams?
The Eureka Moment in Agile Teams
Any software developer will recognize it, The Eureka Moment. This is when you suddenly see how to solve a particular problem. We have them in all shapes and sizes and at the strangest moments. How does that work in SCRUM and DevOps teams?

I learned the techniques programmers use to tame complexity: things like factoring, levels of abstraction, and separation of concerns.
with one foot in the design world and one foot in the programming world, I wondered if we could apply these software development principles to the way we designed and managed the product.
Instead read this gems brief source code completely before use OR copy the code straight into your codebase.
There are project layouts that put implementation files and test files together.
This is especially useful for UI library components, as it is generally unknown which events will be required from them for all desired use cases. For example, if a Button component only forwards a click event, then no use case that requires the mouseover or the keypress event can be used with it.
What does a Functional Design have to offer?
https://en.itpedia.nl/2019/01/16/wat-heeft-een-functioneel-ontwerp-te-bieden/
A functional design is a specification of the functions of the software that the end_users have agreed to. Many companies have a software_developer handbook that describes what topics a functional design should cover. This article looks at the steps of functional design in the context of software development.

How to Create Your Own Accounting Software: Technologies and Cost
What is an assembler language?
https://en.itpedia.nl/2019/11/11/wat-is-een-assembler-taal/
An #assembler_language is a low-level programming_language designed for a specific processor type. We can produce Assembler by compiling #source_code from a high-level programming language (such as C / C ++). But we can also write #programs in this language ourselves. In turn, we can convert Assembler_code into machine_code using an assembler.

Else, H. (2021). Giant, free index to world’s research papers released online. Nature. https://doi.org/10.1038/d41586-021-02895-8
Here's a framing I like from Gary Bernhardt (not set off in a quote block since this entire section, another than this sentence, is his). People tend to fixate on a single granularity of analysis when talking about efficiency. E.g., "thinking is the most important part so don't worry about typing speed". If we step back, the response to that is "efficiency exists at every point on the continuum from year-by-year strategy all the way down to millisecond-by-millisecond keystrokes". I think it's safe to assume that gains at the larger scale will have the biggest impact. But as we go to finer granularity, it's not obvious where the ROI drops off. Some examples, moving from coarse to fine: The macro point that you started with is: programming isn't just thinking; it's thinking plus tactical activities like editing code. Editing faster means more time for thinking. But editing code costs more than just the time spent typing! Programming is highly dependent on short-term memory. Every pause to edit is a distraction where you can forget the details that you're juggling. Slower editing effectively weakens your short-term memory, which reduces effectiveness. But editing code isn't just hitting keys! It's hitting keys plus the editor commands that those keys invoke. A more efficient editor can dramatically increase effective code editing speed, even if you type at the same WPM as before. But each editor command doesn't exist in a vacuum! There are often many ways to make the same edit. A Vim beginner might type "hhhhxxxxxxxx" when "bdw" is more efficient. An advanced Vim user might use "bdw", not realizing that it's slower than "diw" despite having the same number of keystrokes. (In QWERTY keyboard layout, the former is all on the left hand, whereas the latter alternates left-right-left hands. At 140 WPM, you're typing around 14 keystrokes per second, so each finger only has 70 ms to get into position and press the key. Alternating hands leaves more time for the next finger to get into position while the previous finger is mid-keypress.) We have to choose how deep to go when thinking about this. I think that there's clear ROI in thinking about 1-3, and in letting those inform both tool choice and practice. I don't think that (4) is worth a lot of thought. It seems like we naturally find "good enough" points there. But that also makes it a nice fence post to frame the others.
As with this post on reasons to measure, while this post is about practical reasons to improve productivity, the main reason I'm personally motivated to work on my own productivity isn't practical. The main reason is that I enjoy the process of getting better at things, whether that's some nerdy board game, a sport I have zero talent at that will never have any practical value to me, or work. For me, a secondary reason is that, given that my lifespan is finite, I want to allocate my time to things that I value, and increasing productivity allows me to do more of that, but that's not a thought i had until I was about 20, at which point I'd already been trying to improve at most things I spent significant time on for many years.
A specific example of something moving from one class of item to another in my work was this project on metrics analytics. There were a number of proposals on how to solve this problem. There was broad agreement that the problem was important with no dissenters, but the proposals were all the kinds of things you'd allocate a team to work on through multiple roadmap cycles. Getting a project that expensive off the ground requires a large amount of organizational buy-in, enough that many important problems don't get solved, including this one. But it turned out, if scoped properly and executed reasonably, the project was actually something a programmer could create an MVP of in a day, which takes no organizational buy-in to get off the ground. Instead of needing to get multiple directors and a VP to agree that the problem is among the org's most important problems, you just need a person who thinks the problem is worth solving.
Unlike most people who discuss this topic online, I've actually looked at where my time goes and a lot of it goes to things that are canonical examples of things that you shouldn't waste time improving because people don't spend much time doing them. An example of one of these, the most commonly cited bad-thing-to-optmize example that I've seen, is typing speed (when discussing this, people usually say that typing speed doesn't matter because more time is spent thinking than typing). But, when I look at where my time goes, a lot of it is spent typing.
It is commonly accepted, verging on a cliche, that you have no idea where your program spends time until you actually profile it, but the corollary that you also don't know where you spend your time until you've measured it is not nearly as accepted.
I'm not a naturally quick programmer. Learning to program was a real struggle for me and I was pretty slow at it for a long time (and I still am in aspects that I haven't practiced). My "one weird trick" is that I've explicitly worked on speeding up things that I do frequently and most people have not.
Everything a Product Owner Needs to Know Before Starting a Software Development Project
I always had to set the height of them literally almost 50% taller than the content itself to accommodate for the innards growing when the form was submitted with errors (the error messaging expanded the height). If I didn’t, the submit button would get cut off making the form un-submittable.
This works nicely wherever we show authors, but after we deploy to production, the folks from other parts of the world won’t get notified anymore about their songs. Mistakes like these are easy to make when using concerns.
The salary for each profession varies from similar factors. What determines the salary of software developers? After reading this article, I concluded that the greatest role is played by the country in which the developer works. For example, there are countries where developer salaries are much lower, although skills are not inferior. Skills, background and many other points also affect. Enjoy reading!
A litmus test on whether an option belongs to adapter config or kit config, would be to ask whether the option becomes irrelevant when you switch the adapter to static.
CSS seems like the right place to put visual information. On the other hand, few would argue that image "src" should not be specified as an attribute and the height/width seem as tied to the binary image data as the "src" is.
Clubhouse has really made a fuss around the digital world. It’s hard to imagine a person who hasn’t heard about this app, celebrities who joined it, or pranksters who already managed to confuse the audience. Taking into account the skyrocketing popularity, “how to make an app like Clubhouse” has become an urgent question in the software development business.
You might not always notice, but Material Design is constantly evolving and iterating based on research.
Write modules that solve a problem you know
Want to know how to build a taxi app that will become the next Uber or Carb? It is a reasonable question considering how convenient and cost-effective it is to use a taxi instead of maintaining your own vehicle. The best way for a cab company to ensure this convenience for customers is to build a taxi booking app.
How do you know if source maps are working correctly? Try adding a syntax error to one of your assets and use the console to debug. Does it show the correct file and source location? Or does it reference the top level application.js file?
I started Trailblazer GmbH 4 years ago with my relocation from Australia back to Europe. One of our consulting clients is the central police department of a German state that has kept me busy for more than three years now.
which entails computer programming (process of writing and maintaining the source code), but also encompasses a planned and structured process from the conception of the desired software to its final manifestation
Whether this is the life-cycle of a <user> entity or just a sign-up function, it has to be defined and coded somewhere.
Trailblazer extends the conventional MVC stack in Rails. Keep in mind that adding layers doesn't necessarily mean adding more code and complexity. The opposite is the case: Controller, view and model become lean endpoints for HTTP, rendering and persistence. Redundant code gets eliminated by putting very little application code into the right layer.
Trailblazer offers you a new, more intuitive file layout in applications.
Instead of grouping by technology, classes and views are structured by concept, and then by technology. A concept can relate to a model, or can be a completely abstract concern such as invoicing.
ActiveInteraction plays nicely with Rails. You can use interactions to handle your business logic instead of models or controllers.
Why is all this interaction code better? Two reasons: One, you can reuse the FindAccount interaction in other places, like your API controller or a Resque task. And two, if you want to change how accounts are found, you only have to change one place.
Pretty weak arguments though...
We could quite easily create a model class that isn’t based on ActiveRecord and have it work as Rails is quite decoupled from ActiveRecord, but there are advantages to keeping our model class inheriting from ActiveRecord.
Programming to interfaces is at the core of flexible structure.
With the introduction of CPUs which ran faster than the original 4.77 MHz Intel 8088 used in the IBM Personal Computer, programs which relied on the CPU's frequency for timing were executing faster than intended. Games in particular were often rendered unplayable. To provide some compatibility, the "turbo" button was added. Engaging turbo mode slows the system down to a state compatible with original 8086/8088 chips.
The problem with this is that it creates a strong coupling between your code and the implementation, exactly what the interface was supposed to prevent.
Unlike naming children, coding involves naming things on a daily basis. When you write code, naming things isn’t just hard, it’s a relentless demand for creativity. Fortunately, programmers are creative people.
Systemd flies in the face of the Unix philosophy: 'do one thing and do it well,' representing a complex collection of dozens of tightly coupled binaries
How should this be manually tested?
It must be called during the component's initialisation (but doesn't need to live inside the component; it can be called from an external module).
While the code may live online somewhere forever, an open source project only truly survives if someone maintains it.
artificial intelligence seems to be the future of software
Is this because AI will write the software? At some point the programmes (and data they need) will be too complex for human beings to understand.
We are unapologetic tinkerers who neither invent the wheel, nor are satisfied with the wheels already at our disposal. The best scholarship and the best pedagogy take the best of what already exists and make it better, at least better for the task at hand. We need to embrace this identity as hackers, acknowledge our indebtedness to those who have gone before us, forsake the illusion that we are creating (can create, should create) something wholly original, but also refuse to take for granted the things that have been passed down to us.
I think that this might be where I'm missing something. The article is about the relationship between open-source software development and scholarship, but now we're talking about "hacking" as the equivalent of a software developer. And I'm not sure that I agree with this.
I don't think that software-developers think of themselves as hackers. For me, there's an underlying subversive nature in the hacker category, which need not be present in a software developer. There's a conflation between software developer and hacker, which misses some of the nuance that's necessary.
We usually only see people launching projects once they're already done. I'm sure there are countless more unfinished and unlaunched side projects that the world will never know about. Don't let your side project become one of them.
Keep in mind that as a software developer, of any degree, learning is continuous. New technologies, new ways to write code, not so new approaches, persisting patterns. Read books, watch online courses, follow tutorials, keep learning!
I'm still deeply working on it every day, i'm around 1/2 month away for a first preview release.
The project organization is a bit weird because we have a mono-repository that contains projects and libraries. The projects are grouped by company and by browser / server / universal.
Since yarn already has retries on metadata operations, my perspective is that this PR is about filling in an (inadvertent I assume) gap.
Test plan You need a large NPM package in a private org on the npmjs.org registry. 10MB download size is ideal.
In my opinion, deleting a user is not a function executed by an item on itself but is a function done by the holder of the array. So in your case you would be better of moving the deleteUser up to App.
If you want to implement a form with a superb User Experience, you have to take care of many variables:
you took 4 hours to respond, so I implemented it myself
Yeah I see what you're saying. In my case, I had a group of classes that relied on each other but they were all part of one conceptual "module" so I made a new file that imports and exposes all of them. In that new file I put the imports in the right order and made sure no code accesses the classes except through the new interface.
Science as Amateur Software Development. (2020, September 26). https://www.youtube.com/watch?v=zwRdO9_GGhY&feature=youtu.be
With the new plugin based architectue, the library has really small core. Everything else is built around as a plugin.
One of the primary tasks of engineers is to minimize complexity. JSX changes such a fundamental part (syntax and semantics of the language) that the complexity bubbles up to everything it touches. Pretty much every pipeline tool I've had to work with has become far more complex than necessary because of JSX. It affects AST parsers, it affects linters, it affects code coverage, it affects build systems. That tons and tons of additional code that I now need to wade through and mentally parse and ignore whenever I need to debug or want to contribute to a library that adds JSX support.
it also allows for more divergence in how people write there code and where they put their logic, making different svelte codebases potentially even more different due to fewer constraints. This last point is actually something I really value, I read a lot of Svelte code by a lot of different people and broadly speaking things look the same and are in the same places.
Keep the local state isolated.Think about which state is local to a particular UI representation — and don’t hoist that state higher than necessary.
Picking the best solution is subjective, and I can only offer my point of view, so take this with a grain of salt.
I don't even have it on my PC. That's why I didn't test the code myself. Don't have time for everything in this world
PR’s welcome. As I said I don’t have bandwidth to cross check all the bundlers & transpilers combo.
I took the same approach with _layout.svelte and not just for the svelte-apollo client. Except I put all of that setup into another module (setup.js) and imported from _layout. I just couldn't stomach having all that code actually in my _layout file. It's for layout, supposedly, but it's the only component that is a parent to the whole app.
I got this working by using _layout.svelte as the point to initialise and set the Client we can then use getClient in each route that uses this layout.
Developing software is usually easier if you break your project into smaller separate pieces, since that often removes unexpected interactions and dramatically reduces the complexity of the problems you'll need to solve
Svelte started with no decoupling anywhere, with everything available at compile-time. Then <:Component> introduced separation at the component level -- but they're still coupled at properties. The spread feature would fill that gap. I see it as an intentional separation as opposed to an accidental shot at static analysis.
there is one major weakness to this approach and to scoped CSS: organization gets very hard – you end up with styles everywhere!
Keeping the CSS with the HTML for organization may have value however.
Eliminating needless classes frees up operating memory on the computer—and bandwidth in your head.
but adding logic to the <script> is unfortunate
And because it's real CSS, rather than some camelCased quotes-everywhere impostor, we can take advantage of the 'tweak in devtools, paste back into our source code' workflow, which I personally couldn't live without.
Your styles are scoped to the component. No more leakage, no more unpredictable cascade.
It's fashionable to dislike CSS. There are lots of reasons why that's the case, but it boils down to this: CSS is unpredictable. If you've never had the experience of tweaking a style rule and accidentally breaking some layout that you thought was completely unrelated — usually when you're trying to ship — then you're either new at this or you're a much better programmer than the rest of us.
It gets worse when you're working on a team. No-one dares touch styles authored by someone else, because it's often unclear what they're doing, what markup they apply to, and what disasters will unfold if you remove them. The consequence of all this is the append-only stylesheet. There's no way of knowing which code can safely be removed, so it's common to undo some existing style with another, more specific style — even on relatively small projects.
It’s become increasingly common to divide code into components, rather than by file type. React, for example, allows for the collocation of a components markup and JavaScript. In Svelte, this is taken one logical step further: the Javascript, markup and styling for a component can all exist together in a single `.svelte` file
Many changes, including bug fixes and documentation improvements can be implemented and reviewed via the normal GitHub pull request workflow. Some changes though are "substantial", and we ask that these be put through a bit of a design process and produce a consensus among the Yarn core team. The "RFC" (request for comments) process is intended to provide a consistent and controlled path for new features to enter the project.
It’s also been a year where we’ve had to acknowledge that we have reached the ideal of what we can achieve as a consulting firm in our current configuration, and — more importantly — that we don’t wish to transform the organization into something larger. As with most things that bring joy, the kind we experience within the confines our our tight-knit company are particularly problematic to scale — especially when faced with impending remote-working realities — so we’re opting to go the “love you and leave you” route instead.
But I love it, and so I plan to keep it alive.
For example, if error messages in two narrowly defined classes behave in the same way, the classes can be easily combined. But if some messages in a broad class behave differently, every object in the class must be examined before the class can be split. This illustrates the principle that "splits can be lumped more easily than lumps can be split".
Prefactoring is the application of experience to the creation of new software systems. Its relationship to its namesake refactoring is that lessons learned from refactoring are part of that experience.
"You wanted open source privacy-preserving Bluetooth contact tracing code? #DP3T software development kits/calibration apps for iOS and Android, and backend server, now on GitHub. iOS/Android apps with nice interface to follow." Michael Veale on Twitter (see context)
Deadlocks are a classic problem in transactional databases, but they are not dangerous unless they are so frequent that you cannot run certain transactions at all. Normally, you must write your applications so that they are always prepared to re-issue a transaction if it gets rolled back because of a deadlock.
there’s 3 steps to building software: Make it work Make it right Make it fast
The overall software architecture is actioning years of developers experiences through Uncle Bob's Clean Architecture. Thanks to Lerna and Yarn workspaces, GanttLab now comes with the entities, use-cases and gateways packages that are used by the adapter-webapp making up the web application on https://app.ganttlab.com.
This file that really does nothing but manage other project files is often called a “solution” in some environments.
you honestly don’t have the time to decide which of these options is better.
This starter takes advantage of Typescript and Emotion. This is a personal choice, and I'd encourage you to give it a shot. If you're interested in using plain ES6 and regular scss styling, see release v1 of this library.
backstage Issues and merge request related to improvements like refactorings, tests, maintenance etc
Code Owners allows for a version controlled single source of truth file outlining the exact GitLab users or groups that own certain files or paths in a repository.
However, since problems are only addressed when they arise, maintenance is reactive rather than proactive. Small problems left unaddressed can balloon into major failures due to focus on cost.
after nearly 10 years of continuous improvement
Not necessarily a good or favorable thing. It might actually be preferable to pick a younger software product that doesn't have the baggage of previous architectural decisions to slow them down. Newer projects can benefit from both (1) the mistakes of previously-originated projects and (2) the knowledge of what technologies/paradigms are popular today; they may therefore be more agile and better able to create something that fits with the current state of the art, as opposite to the state of the art from 10 years ago (which, as we all know, was much different: before the popularity of GraphQL, React, headless CMS, for example).
Older projects may have more technical debt and have more legacy technologies/paradigms/integrations/decisions that they now have the burden of supporting.
Traditional CMSes are "coupled", which means that the CMS also takes care of the presentation layer responsible for delivering the content to the clients. The content and the presentation are closely interlinked. Typically, content managers create and manage their content through tools like WYSIWYG editors. The CMS then delivers the content according to the front-end delivery layer built into the CMS. Typically, a traditional CMS supports your websites but not much else.
Loose coupling and separation of controls allow for more targeted development and debugging
Most traditional (monolithic) CMS systems are “coupled”, meaning that the content management application (CMA) and the content delivery application (CDA) come together in a single application, making back-end user tools, content editing and taxonomy, website design, and templates inseparable. Coupled systems are useful for blogs and basic websites as everything can be managed in one place. But this means that the CMS code is tightly connected to any custom code and templates, which means developers have to spend more time on installations, customizations, upgrades, hotfixes, etc. and they cannot easily move their code to another CMS.
Potential for political focus on building new features over technical improvements (such as refactoring)
Add back the Gemfile.lock We want to every clone of this repository to have a set of dependencies that we are sure will have green tests. We remove the lock in CI to make sure we are always running tests with the latest version.
Remove upper bound in our dependencies Doing this we are only asking people to fork our gem or open issues when they want to use a new version of the dependency and we still didn't tested with it.
Your idea should stem from solving someone’s problem. Ideally, your own problem. It’s important that you choose an idea which interests you. Interest is key to fuelling motivation which is crucial when making a web app. It takes effort building web apps and it’s important you have fun during the process.
Using versions is a maintenance burden on the preset, and we made this mistake with Neo. By specifying a version, we are forced to track with React when their version changes, possibly falling behind.
However, it did require us to think differently about the creation, maintenance, and sustainment of our components moving forward — an integrative process we call "storybook-driven development."
What does composition have to do with mocking?Everything. The essence of all software development is the process of breaking a large problem down into smaller, independent pieces (decomposition) and composing the solutions together to form an application that solves the large problem (composition).
As you know, we ship the smallest thing to provide initial value and then we learn from your feedback and continue to improve the feature over time.
most teams are flying blind on their estimates using past experiences and best guesses to offer a semblance of how long it’ll take to complete a project. It’s no wonder why estimates are often incorrect.
I don't want to bet more time on it without user feedback