Before i stepped into the computing industry, my first industrial programing experience was at Wolfram Research Inc as a intern in 1995. (Wolfram Research is famously known for their highly successful flagship product Mathematica) I thought, that the programers at Wolfram are the world's top mathematicians, gathered together to research and decide and write a extremely advanced technology. But i realized it is not so. Not at all. In fact, we might say it's just a bunch of PhDs (or equivalent experience). The people there, are not unlike average white-collar Joes. Each working individually. And, fights and bouts of arguments between co-workers are not uncommon. Sometimes downright ugly in emails. Almost nothing is as i naively imagined, as if some world's top mathematicians are gathered together there, daily to confer and solve the world's top problems as in some top secret government agency depicted in movies.
Well, that was my introduction to the industry. The bulk of my surprise is due to my naiveness and inexperience of the industry, of any industry, as i was just a intern and this is my first experience seeing how the real world works.
After Wolfram, after a couple of years i went into the web programing industry in 1998, using unix, Perl, Apache, Java, database technologies, in the center of world's software technology the Silicon Valley. My evaluation of industrial programers and how software are written is a precipitous fall from my observations at Wolfram. In the so-called Info Tech industry, the vast majority of programers are poorly qualified. I learned this from my colleagues, and in dealing with programers from other companies, service providers, data centers, sys admins, API gateways, and duties of field tutoring. I didn't think i have very qualified expertise in what i do, but the reality i realized is that most are far lesser than me, and that is the common situation. That they have no understanding of basic mathematics such as trigonometry or calculus. Most have no interest in math whatsoever, and would be hard pressed for them to explain what is a “algorithm”. 〔➤ Is Math Important for Programers?〕
I have always thought, that programing X software of field Y usually means that the programers are thoroughly fluent in languages, protocols, tools of X, and also being a top expert in field of Y. But to my great surprise, the fact is that that is almost never the case. In fact, most of the time the programers simply just had to learn a language, protocol, software tool, right at the moment as he is trying to implement a software for a field he never had experience in. I myself had to do jobs half of the time i've never done before. Constantly I'm learning new languages, protocols, systems, tools, APIs, other rising practices and technologies, reading semi-written or delve into non-existent docs. It is the norm in the IT industry, that most products are really produces of learning experiences. Extremely hurried grasping of new technologies in competition with deadlines. There is in fact little actual learning going on, as there are immense pressure to simply “get it to (demonstrably) work” and ship it.
Thinking back, in fact the Wolfram people are the most knowledgeable and inquisitive people i've met as colleagues, by far.
What prompted me to write this essay is after reading the essay:
〔Teach Yourself Programming in Ten Years By Peter Norvig. @ http://www.norvig.com/21-days.html〕
In which, the LISP dignitary Peter Norvig derides the widely popular computing books in the name of Teaching Yourself X In (Fast) Days. Although i agree with his sentiment that a language or technology takes time to master and use well, that these books form somewhat of a damaging fad and subtly multiply ignorance, but he fails to address the main point, that is: the cause of the popularity of such books, and how to remedy the situation.
When you work in the industry, and are given a responsibility of coding in some new language the company decided to use, or emerging protocol (such as voice-chat protocols or cellphone internet), or your engineering group adopted a new team coding/reviewing process, you are not going to tell you boss “nah, i want to do a good job so i'll study the issue a few months before i contribute”. Chances are, you are going to run out and buy a copy of “XYZ in 7 days”, and complete the job in a way satisfactorily to your company, as well feeling proud of your abilities in acquiring new material.
To see this in a different context, suppose you need to pass a important Math XYZ exam or review in your career or get a certificate, but you don't remember your Math XYZ. You will likely, run out and get a “XYZ for Dummies”. Chances are, the book will indeed help you, and you will pass your exam or interview, and actually have learned something about XYZ, but never looked at XYZ squarely again.
These books are the bedrock of the industry. It is not because people are impatient, or that they wish to hurry, but rather, it is the condition of the IT industry, in the same way modern society drives people to live certain life styles. No amount of patience or proselytization can right this, except that we change the industry's practice of quickly churning out bug-ridden software products to beat competitors. Companies do that due to market forces, and the market forces is a result of how people and organizations actually choose to purchase software. In my opinion, a solution to this is by installing the concept of responsible licenses. Please see this essay Responsible Software Licensing and spread the word.