The New Beginning

2012/01/23 19:45

My experiences with professional software development and realization of how the perceived connections with science, engineering, craft, and art are skewed in the process we use to learn and teach creating and maintaining software.

I have been professionally programming for almost a decade now. Last seven years I spent as a software engineer in a relatively big multinational company whose business is web based. I went through different teams with very different attitudes and intentions and there were not many moments from a programmer's professional point of view that were happy or satisfying.

I read a lot of articles and watched many talks about agile practices. It seemed and still seems as there are many practices and methodologies that worked for some and failed miserably for others. Reasoning behind that seemed always very logical, but explaining (or rationalizing) reasons of success or failure after is usually relatively easy and as it appears not as useful for predicting outcome of other projects as it may seem. One reasonable hypothesis is that so many parameters are changed after the project starts, that assigning it to a certain group of similar projects that succeeded may be harmful if the project turns up not as similar and further adjustments are disallowed.

When I started in the big company there was the pure "waterfall hell" about which every developer hears horror stories and which inspired many Dilbert comics. But I was quite lucky. I came from a university (after two years of unfinished PhD studies) and I was the programmer among many web developers. I was doing the same monkey job as others, but I was able to automate 90% of my work and soon many tools were used by others. I went through more teams with similar results. Then I ended up in a team where I was the senior software engineer (aka .NET programmer) among DB engineers. I was responsible for how everything is done from the web GUI through server to the border of database. As you can imagine, if you are responsible for everything from estimates to development practices (as you are the only participant on inside), you can learn a lot and save time to learn even more, or so I thought.

It is true that I managed to learn tons of new things theoretically and was able to explain what are the advantages of TDD, BDD, small cycles, design patterns, etc. But my job was not reviewed to the level of code and at the end of the day all the projects I did were still plugged into 3 month release cycle with one month of QA. Obviously, I did not care about BDD, there is no direct client to deal with on a daily basis, I knew what I need to do from a project specification. Of course, when I needed to get back to the projects I worked on before it was much less fun than starting new ones and the time to fix or add features was shorter when done directly without TDD (for the rich web apps needed much more care with TDD as the code was spread across many environments). And even if I had some tests from start soon they became quite obsolete and pointless. I promised myself next time I will do it right too many times.

The realization

Then it occurred to me that for me it is like learning martial arts from books. I had some martial art experiences to recognize the pattern forming in front of my eyes. No one says that it is impossible to learn something like martial art by other means, but without a master-teacher, you are seriously handicapped.

Humans usually tend to overestimate their knowledge in a field they learned a bit more about than people around them. This causes them to form opinions. Once they have an opinion (even worse if they are already expressing it publicly), it causes a bias in the following learning process as they tend to ignore what contradicts and emphasize what supports it. With a teacher or a master the situation changes (imagine an exam at school, where you say that you have not learned the special relativity, because you think that is not as a good description as string theory might be in the future; or imagine the pain (literally) if you tell your Kung Fu master that you think that this kick is better in this situation than that jab he is teaching you).

What I needed is a discipline. But I had already all the burden of years I was programming I needed to get rid of and the solution is not as easy to telling yourself from now on I will respect all practices from this particular arbitrary book. The brain got wired somehow and controlling this brain by the same brain may need quite strong will (whatever that is). I needed a motivation.

Not long after, I read a tweet from Uncle Bob about apprenticeship call from 8th Light involving solving a test problem. I like solving problems. That is how my new journey started. And more about that next time.


Enter the code above