There are some myths about programming and development methodologies. Among several of those myths, the one that makes laugh a lot is that one that claims that “you do not need skilled programmers to build successful software”. I really cannot imagine a team of non skilled programmers doing a successful application. Most myths are claiming that “the used methodology and management is more important than having good programmers”. Then CMMI, Agile, and several points of view about developing applications and systems are applied daily in software development. But more than the methodology itself, the fact that communications and skilled programmers are making great teams, cannot be denied.
Actually I work on a company where we are using several parallel and distributed algorithms to process data related to telephonic applications, and another company have hired me to build an Industrial Control System. On both we are using almost all theoretical basis that I have, and they are required to understand how the software is being programmed. I am very glad to work on companies where both technical and theoretical knowledge is used.
I will cite an example again. On the past, I have worked on a company using a web server to distribute data. A new foreign programmer have been integrated into the team. One of his first tasks was to build an algorithm to delete the cache on a Berkeley DB set of files. His implementation was a plain request to the web server, and once the request have arrived to the server, his algorithm was launching several threads to clean-up the set of files. Due to the Linux threading model, each thread was a copy of the original process, very similar to a fork(2) call and the memory of the web server was consumed quickly with several requests, with the obvious behaviour of launching the OOM Killer, interrupting the common server function. The CEO then call me to repair that algorithm. We were using Gearman as job queue, and I have re-programmed the threading server response as Gearman job, and enhanced that algorithm reducing its processing time from 22 minutes to 4 minutes. To work as programmer on any kind of system — I do not mean a content management system, where all calls are almost plain — you need to have a deep knowledge of the platform where are you working, mainly if you will start using distributed and parallel processing. Here the lack of knowledge about the Linux threading model and how the web server was working, have caused a big problem on the overall process. And we were using Agile methodologies, and that programmer was not a good programmer. Finally we have lost one night of data processing, I was busy on that process one day, and my schedule for other important tasks was delayed, including several milestones.
So, all those methodology facts about not so good programmers doing successful software are just lies, due to my experience as programmer. Are mere marketing tricks. Also, the lack of a proper knowledge means that you cannot communicate requirements, solution specifications and similar daily tasks required to build really successful software.