I have often been caught in the cross fire of the ongoing and awfully brutal and emotional language wars. I am a C programmer by choice and a PHP/Perl Developer by trade, so I get some of the most heated and misfortunate of the angry or emotionally charged responses from people who just do not know a god damned thing about what they are talking about. Scarier is when I hear absurdities from people who actually do know something about their topic. For some reason they want to stick their toes into my pool and do not like the temperature of the water so they go into a tirade about how I should change the color of the water with some dye and install a heater, oh and the chlorine content is too low or too high and algae will form; who knows, maybe you should add this algae snake as well to keep it from getting to the bottom! I apologize for the extended analogy here but it stands. It is important that Comp Sci. and Developers alike learn at least one thing about languages before they enter the market and end up coding themselves into a corner – There is no such thing as a language level, Languages Span!
Every programming language was created with purpose in mind. That purpose may be minor or insignificant to the purpose of another language but who am I to assert that all languages must have garbage collection or scalar variable types. Choosing a language is more of a cost/benefit analysis that goes on before a project begins than it is a wild card or presupposition. Just because you have a team of 90 C developers doesn’t mean they can code in PHP or Python effectively, as is evidenced in past jobs and a book that I recommend called Dreaming in Code. Being a developer is very similar to learning to work on automobiles – Just because you know where the oil filter is and how to get to it on your Ford Mustang doesn’t mean you know where it is on an aircraft or missile boat. You have learned a trade and need to focus on that. There is much to programming that has its feet set firm in experience, but do not kid yourself – development is about 70% knowing your tools. Even the inexperienced are able to build amazing things.
PHP in particular is a language that nubile developers find easy to incorporate into their dreams and delusions. It is easy to pickup, requires only a minimal investment of money to get a public server (or a resourceful developer) and boom, your project is active, pulling in 50 million users and now its on the front page of Business Week with a picture of you next to it. Developers are still stuck, however. It seems that they would rather complain and bitch and moan about how PHP doesn’t scale or how Java doesn’t support pointers than to bother learning another language. Its unfortunate because the facts of the matter are, even if you specialize in a certain genre of development you are going to end up burning out or hitting a dead end. When the Model-T Ford was being phased out for the more modern look it was up to the mechanics to pick up their feet and learn how to work on the new cars. Many did, but some didn’t bother and eventually ran into the same wall that many developers are unwilling to scale.
Programming languages do not sit at a level. They span a number of features and build off of each other. The evolution of programming languages is probably one of the more interesting occurrences of the last 50 years, in that it is clear that every language of the present day stems from or combines features from a language of the past and that, my friends, is the brightest light of all. We are fighting over high and low level semantics when in reality we are all relatives. No language can avoid the use of memory management fully, and that means that somewhere, some how you have pointers in your language; they have just been abstracted away. PHP scales as much as it needs to, and is certainly able to keep up with the other languages (J2EE, ASP.net for instance). C is an amazing language of theoretical and highly efficient developers who are capable of dealing with walking on the unstable sand of the low level, below the huge castles that the sand sits on.
I would wager that there is more to be learned about what is NOT in languages than what is. Learning programming languages is not supposed to be a difficult process, but that doesn’t mean you wont bite your tongue a few times when you roll your r’s or forget to end a line with a semi-colon. Development is 70% knowing your tools, so why get stuck trying to use a hammer and screwdriver to help you create the bead around your door when a chisel may be available.