Random Thoughts:Quality of programmers & Microsoft

Hi all, I found the blog (http://www.nandz.blogspot.com/2007/03/why-microsoft-is-bad-for-computer.html) interesting and I completely agree with what was depicted by the author about the bad programming habits & lack of knowledge of computer technology due to Microsoft hegemony. I know lots of experienced developers who do not know what is a process or what is inter-process communication or what is the difference between multi-processing and multithreading because they were not required to know all this in Microsoft platform. A number of B-Techs are being churned out nowadays who do not have even the basic knowledge of Linux/Unix and C. They boast of knowing Windows, VB, RDBMS (Most of the cases they get a theoretical knowledge of true RDBMS but get to work in MS Access). This type of education can make them above average “application” developers but not an expert in any field.

There is another menace that is rapidly decreasing the number of true programmers. I personally believe that it is a very bad idea to provide a developer with a framework unless the framework facilitates and bolsters application performance and ease of use to the end-user. Typically a framework stops the developer to think beyond the framework because almost everything is provided by it. He does not have to worry about cookies, sessions, functioning of the web server, database security or the innards of the OS. A developer becomes narrow-visioned who cannot think of anything but what is provided to him by the framework. In the next 3-5 years RAD tools and Frameworks are going to convert a developer into an high end user. They wont even bother to know what the OS they are working on, what protocol they are using to communicate with the server, what is a server, how things work under the hood as they do not need to know. Everything is on their platter.

2 Responses to “Random Thoughts:Quality of programmers & Microsoft”

  1. Let me give you another perspective.

    True programmers are a special breed. They think differently than others – their mind is wired differently.

    At every stage in the history of computing, there have been technologies that abstract away layer after layer. Today, a C programmer might call a Java programmer a “high end user” because they don’t have to deal with memory management or low level driver interfaces or platform specific details. Similarly, an assembly programmer would call a C programmer useless because they don’t understand the specifics of the instruction set or register manipulation.

    Are they wrong? No.

    Instead of looking at developers becoming high-end users, I’d encourage you to think of enabling high-end users being to do development work. Businesses are at a stage where there is a need to do simple tasks – like design reports, create macros, analyze processes etc. Some of these tasks require more than a typical understanding of the technology – so you have the quintessential user who is now doing some “development”. Frameworks help in this regard.

    The “real” programmers (depending on what you define as real) will always be one step deeper in the the technology. The problem is that there are about 6-7 abstraction layers within the software itself and another 3-4 in the hardware. So what does it mean to be a real programmer?

    Well, it depends on what circle you are in. It is true that greater value can be created by eschewing frameworks in your layer and going one (or a couple of) layer(s) deeper. For us, understanding network protocols is important but the exact network packet header is not, understanding persistence strategies is important but dealing with bit endianness is not, knowing how a webserver deals with sessions and cookies is critical but the specifics of HTTP are not. In fact, we do this because others can’t and so we can black box it for them and make some money in the process – the same way somebody black-boxed the HTTP protocol and the webserver for us.

    What does it mean for us? Well, all these people graduating from “engineering colleges” are not programmers in our sense of the word, but they’re perfectly fine for businesses trying to write an Excel Macro or create a quick ASP page. They are our customers and users (if we can make a better macro engine or a different type of web scripting mechanism). We wouldn’t hire them, but we can’t ignore them either. We exist because they do.

    So as long as we can get people who are a couple of layers deeper, we’ll be fine. But you already knew that.

  2. Partha says:

    If one looks at the current scenario of programmers I would say it is relatively worse than it was 12 years back. There were not many tools to develop applications. A simple editor such as notepad, vi or emac, a compiler and a linker was all that programmer could dream of. There were no IDE in true sense. So debugging was a pain. Resultantly the students had to learn the basic very well so that they make fewer mistakes. I started out programming with shell script on SCO Unix way back in 1995. I still remember how difficult it was to trace a bug in the shell scripts. So we had to learn the way to code in such a way that we don’t have to find too many bugs.

    Today the case is somewhat different. It is not that all the contemporary programmers are bad programmer. That would be a very cynical statement. But an average programmer who has an engineering degree from a university should have at least some fundamental knowledge. It is flabbergasting when I ask people, who claim to have done C programming in their college days, very simple questions such as

    What is the difference between Structure and Union?
    What is a header file?
    What is the job of a linker?
    Why do you have to typecast a pointer returned by alloc function when it has allocated memory space for a certain structure?
    What is the signal a child process sends back to its parent process when the child process has successfully ended?

    And they cannot answer these questions. They don’t have a clue. It is partly because C is one the most misunderstood, highly avoided language due to its complexity and syntax. Perhaps because of these reasons university professors give the students skin depth knowledge of C/C++. Another reason is that now a days very few programmers actually want to work in C/C++. They would rather work in VB.NET or Coldfusion and make a fortune. 15-20 years back we did not have a choice. We had to learn C and learn it really well because even if you did not want to be directly involved in C programming, you have get involved in it in some or the other way such as PRO-C in Oracle. Now a days it is easy to make an interface to interact with the database with the help of forms and drag-n-drop components but in those days if you had to make a form for Sybase database there was no other way but to make it in C.

Leave a Reply