Some thinking in a Cold day

Today I was reading some posts (Simone, Ayende, Alessandro and others). I want now to express my opinion, I’m using my English blog, even if English is not my first language because I like to make it readable by all people, and I hope that I can be clear enough, please everyone to excuse my English :D

I found myself in the same situation of Simone, quite often I’m the one who strive itself to be up to date, I use most of my spare time reading books, blogs, trying new techniques, trying to learn how to write better code, but quite often I’m the only one to do this kind of process at work. (different situation arise with communities such as DotNetMarche)

I agree with Simone when He say in a comment to another post:

Il problema è che quando ad un dev vengono offerti 1000€ al mese, indipendentemente dal livello di seniority, è anche difficile per il dipendente trovare la “voglia” di fare bene il suo lavoro, anzi, se riesce, cerca di fregare il datore di lavoro per ripicca.” ([My Translation]: The problem is that when a Developer earn 1000€/month even if he is a Senior, it is difficult that the developer really wants to do his work well).

But sometimes I found people that even at these conditions have the desire to improve, but they are stopped by external factors. My opinion is that (at least for my little experience here in Italy) managers are the major cause for the problem. When a developer must write code at light speed because no one wants to do real planning, or studying architecture the whole game is over. When a company has a project, it usually start this way: Take X programmers, throw them in a room, and tell them that they should write a software that does Y,Z,K,.. and It should be ready for…say…YESTERDAY. I found people that have the will to improve, they have the desire to try new technologies, they have the will to study in their spare time, but finally they have no way to try to apply what they have studied in a real project because simply “There is no time” or because they are forced to rely on “the old thing that work”.

I do not blame Microsoft for doing “Tools for Morts” because I think that there is need for both approach: the one for the mere mortals and the one for those who strive to write better code every day. But the people I agree with most is Ayende, because I really think that IoC, DI, MVC, ORM and the like are complex concepts supported by complex frameworks, but they permit actually to write simpler code.

Lets imagine a team of programmers that is composed by a little part (10% or less) of real skilled developers, and the 90% of those called “mere mortals”. The big problem is, how should I organize the team? Should I take the Least Skilled developer and force the team to use his style of programming to have code that is understood by the 100% of the team or should I take the Most Skilled developer and try to leverage the knowledge of the team to make everyone understand His code? I really think that the solution is in the middle. A complex software is composed by Complex parts and simple parts, in my opinion I think that the most skilled developer should focus on the architectural and infrastructural thing, building the base code that permits to the rest of team to write simple code. Simple code is better, have less bug, is more manteniable, and so on, it is a matter of “ Write the simpliest thing that could possibly work “, and I think that IoC, TDD, DI, ORM, Mock Object, AOP and so on are really good techniques to move the complexities away from the code and into the framework. It is real that frameworks based on these technologies are Complex, but they permits to mere mortals to write simplier code.

Naturally all these things are IMHO, :D good day to everyone :D :D

Alk.