Code Simplicity: The Science of Software Development
What if every software developer could gain the knowledge of long experience without having to go through the pain of repeated failure? What if, instead of being a continuous chaos of complexity and...
View ArticleSoftware as Knowledge
I don’t often dive deep into the philosophical underpinnings of Code Simplicity, but I’ve been realizing more and more that there are a few philosophical principles behind the writings that would be...
View ArticleCode Simplicity, Second Revision
In June, I released a second revision of Code Simplicity. Some of you probably already know, but I thought that I should let everybody else know, too. The most important change is that book gets into...
View ArticleThe Accuracy of Future Predictions
One thing we know about software design is that the future is important. However, we also know that the future is very hard to predict. I think that I have come up with a way to explain exactly how...
View ArticleUsers Have Problems, Developers Have Solutions
In the world of software, it is the job of software developers to solve the problems of users. Users present a problem, and the developers solve it. Whenever these roles are reversed, trouble ensues....
View ArticleThe Philosophy of Testing
Much like we gain knowledge about the behavior of the physical universe via the scientific method, we gain knowledge about the behavior of our software via a system of assertion, observation, and...
View ArticleMake It Never Come Back
When solving a problem in a codebase, you’re not done when the symptoms stop. You’re done when the problem has disappeared and will never come back. It’s very easy to stop solving a problem when it no...
View ArticleThe Secret of Fast Programming: Stop Thinking
When I talk to developers about code complexity, they often say that they want to write simple code, but deadline pressure or underlying issues mean that they just don’t have the time or knowledge...
View ArticleThe Purpose of Technology
In general, when technology attempts to solve problems of matter, energy, space, or time, it is successful. When it attempts to solve human problems of the mind, communication, ability, etc. it fails...
View ArticleTest-Driven Development and the Cycle of Observation
Today there was an interesting discussion between Kent Beck, Martin Fowler, and David Heinemeier Hansson on the nature and use of Test-Driven Development (TDD), where one writes tests first and then...
View ArticleHow to Handle Code Complexity in a Software Company
Here’s an obvious statement that has some subtle consequences: Only an individual programmer can resolve code complexity. That is, resolving code complexity requires the attention of an individual...
View ArticleTwo is Too Many
There is a key rule that I personally operate by when I’m doing incremental development and design, which I call “two is too many.” It’s how I implement the “be only as generic as you need to be” rule...
View ArticleMeasuring Developer Productivity
Almost as long as I have been working to make the lives of software engineers better, people have been asking me how to measure developer productivity. How do we tell where there are productivity...
View ArticleEffective Engineering Productivity
Often, people who work on engineering productivity either come into conflict with the developers they are attempting to help, or spend a long time working on some project that ends up not mattering...
View ArticleRefactoring is About Features
There’s a point that I made in the book but which I have had to point out to people a few times since then, and so I wanted to emphasize it a bit more. When you clean up code, you are always doing it...
View ArticleThe Fundamental Philosophy of Debugging
Sometimes people have a very hard time debugging. Mostly, these are people who believe that in order to debug a system, you have to think about it instead of looking at it. Let me give you an example...
View ArticleKindness and Code
It is very easy to think of software development as being an entirely technical activity, where humans don’t really matter and everything is about the computer. However, the opposite is actually true....
View ArticleUnderstanding Software
Hey everybody. I’ve published a new book! It’s called Understanding Software. The book contains all of the content that I’ve written on software development and working in teams since the publication...
View ArticleHow to be a Great Programmer: Awareness, Understanding, and Responsibility
There are three key factors to being or becoming a great programmer: awareness, understanding, and responsibility. I’ve talked a lot about the subject of understanding. Heck, I even named my most...
View ArticleHow to Learn to Program
One question that people ask me all the time is, “How do I become a programmer?” Or, “How do I learn to program?” There are a lot of possible answers to this, depending on the person and how you want...
View Article