While I was in holiday, searching for a bakery, I was wondering : why can't you find good bread in every bakery ?

Maybe you have to be french to have this feeling, but there's this bakery where you go everytime. Maybe it's a bit further than the other one, but it's always full with people and the yearly holiday closing is the cause of local drama.

I was thinking : bread is bread. Two bakers will use the same ingredients, maybe bought from the same source. They both have the same recipe, or almost. So why is one bread a good tasting bread and the other some too soft, rubber like and not tasty at all ?

Trying to understand, I transposed the question to another job and I chose mine, naturally. Why are some programmers producing trustable code, doing the asked job, and some others are producing a code that will need fixes, that you won't trust and not always in line with was was asked for ?

And then, I kind of understand, and I don't like the answer I have.

Is it some difference in the number of years of experience ? This variable seems important when looking at job descriptions ("minimum this or that amount of years in this or tht domain"). To tell the truth, with the same number of years, the level of experience can be very different from one person to another.

This has an influence for sure, as each year, each project, brings a passive learning: while creating a program, we gain experience in the field, we learn from our mistakes.

But the difference is on the active learning. Active learning is the principle of keeping a student/studying mindset at every moment. Analyzing, searching, cutting the problem into pieces, looking at what we're doing and how, getting the global picture, taking information, read and listen.

What is for me obvious and should be at the heart of each development is not. A lot of programmers think that when they finished their studies, that was it, they know the whole thing, the technics and methods. Now they only have to understand the part specific to the problem solving, or sometimes learn bits of a new programming language or framework.

The problem is that the technical part of programming is only slighlty touched during the studies. It's a necessity to continue one's learning in this field which, at the same time, evolves. Programming is a young field and there are a lot of evolutions in the ways and art of programming. Not only on the concepts and paradigms (modular programming, object oriented, data oriented, aspect oriented,...) but also in the methods (eXtreme Programming, Test Driven Development, Lean Programming,...) or know how and expertise (code readability, physical and logical architecture, performance).

To make the matter worse, hardware evolves too, and fast. And it's changing the way problems can be solved while deprecating some other ways.

What in the end will make a progremmer stay in an active learning mindset vs. staying in a passive learning mode? My answer is in the love of what we're doing, the need of self improvement, the will of producing something nice, solid, that can be shared, something we can be proud of, even for the slightest moment.

And when someone loves his/her job, it's hard to realize than a baker can rise early in the morning to make a poor bread.

Or that a programmer looking at his code might think: ok then, it seems to work, that will do.