We programmers live in a bubble, where the best technology always wins, where business concerns are the fever dreams of empty-headed suits, and where marketing means lying to customers to get their money. (We also believe we're perfectly logical Vulcans, even in the face of our passive aggressive sarcasm motivated by emotional reactions in Internet flamewars.)
One aspect of our brokenness is that we undervalue the things we know how to do, saying "Oh, it's just setting up a new Debian installation. Anyone can drop in a DVD and navigate a few prompts!" or "It's a little CRUD app anyone could whip up in a day and a half."
(My buddy Dave and I have reimplemented an 8-bit minicomputer BASIC/Logo programming environment with HTML 5 and JavaScript. The fact that you can run this in any modern web browser—including many smart phones—amazes me.)
When we undervalue our skills and underestimate the complexity of the things we do, we distort both the market for our abilities (why are our salaries and contract rates lower than they should be for what we do?) and the onramps for new programmers.
Without discussing whether PHP is a good programming language, consider what it takes to deploy your first PHP application:
- Write a document in a text editor. Even Notepad on Windows will do.
- Use an FTP client to upload it to your ISP. They've given you instructions. They've probably also helped you download the FTP client.
Sure, you have to set up your FTP client and figure out your username and password and put the file in the right directory, but that's it. You only have to understand the basics of HTML and some details of file paths in an FTP client. (I don't mean to downplay the learning of HTML; it's daunting for people who've never done any sort of programming or markup before, and it's a real learning experience, but it's something anyone doing web programming will have to learn and thus it's a wash in this comparison.)
Now do some Java web development. (Easy target, I know.) First, download Eclipse. Then set it up. Then install some plugins. Then configure your workspace. Then make a project. Then install a local deployment server or configure the remote application server. Then import all of the JARs you need and, if you're lucky, avoid Maven.
I'm no expert Java programmer by any means, but I've done this a few times and something in that process often trips me up. (I think I get stuck at a known bug with IcedTea and Geronimo on Linux where the app server suddenly wanders out of the outfield to chase butterflies and the only solution is to do a hard restart and clear out some cache directories manually from the command line. I think.)
I can't imagine doing the first part of that on Windows. (Actually I can, because I've done it, and I have scared neighbors by almost drop kicking the laptop off of my balcony.)
I realize that in this modern age of web development, no good-hearted person would ever use something as (gasp) 1990s as Java, so consider something that was cool as recently as 2006. Here's how you deploy a Rails application using Heroku:
- Install Rails.
- Generate your application.
- Make it print "Hello, world!"
- Create a git repository.
- Check in your application.
- Create a new Heroku application.
- Add a git remote for the Heroku repository.
- Push your application to the Heroku repository.
Easy, right? Oh, right—first you have to install Git and the Heroku application, and you have to know enough about Git to work with repositories and remote repositories. (I wouldn't even begin to think about how you'd make this all work on Windows, but I've already outed myself as a member of the technocratic elite by admitting I've used Linux on the desktop for almost a decade and a half.)
Those are good to know, but in terms of sheer complexity, that's a little bit different from "FTP this file to that directory".
I'm not saying that PHP is better or worse than Java is better or worse than Perl is better or worse than Ruby. I have my opinions and you have yours. I freely admit that Java application servers have their advantages over the alternatives and that Perl's Plack offers more useful features than raw PHP and that Heroku is better than me being my own system administrator in certain domains.
What I am saying is that the more someone has to learn to start something—the more hurdles from zero to "Hello, world!"—the more likely it seems that people will gravitate toward the easy thing. Scoff all you want at the idea of a programming environment in a web browser, for example, (it would be difficult to give up Vim and the command line) but ignore that such a thing would provide advantages for a lot of people at your own risk.
You're absolutely right. I'm more proud of the one extra human language (Latin) that I know halfway than the several computer languages I can program in. Why is that? (Because it's harder -- for me.) People are always telling me how computer illiterate they are, and how amazing it is that I can do what I do with a computer -- with no college or other classroom training, no less. But I always shrug it off, like it's no big deal. To me, it seems like any reasonably intelligent person -- say smart enough to learn to drive a car or balance a checkbook -- could learn to program. What's simpler than if/then/else or a for loop, after all? Computers just do what they're told to do, logically and predictably. What could be easier?
After 15 years, I still have a hard time even coming up with a name for what I do. Some programming, some sysadmin, some networking, security, scripting, data mining, debugging, patching....what do you call that without needing footnotes? "IT guru" sounds obnoxious, but mumbling something about "I do computer stuff" sells it short -- plus it makes them think I can fix their PC, the one thing I *don't* do. That uncertain, shrugging, "Oh, it's no big deal" attitude probably does cost us jobs, money, and respect. I guess I should settle on a name for it, even if it sounds pompous to me, and say it with the same pride that someone would say, "Oh, I'm a podiatrist/attorney/stockbroker."
this actually describes why products (websites mainly) are successful.
consider rocketmail and the original hotmail.
once upon a time you needed either a university account or some company account, then maybe elm or eudora to use mail. rocketmail and hotmail made mail accessible and easier for people.... off webmail went
originally people used newsgroups, and email lists. but web forums were the same concept but didnt involve using special software or filling your inbox. now social networks are taking over from web forums. they are still largely the same concept, but participation is easier.
ipods, thuogh not initially, were far easier initially than other mp3 players. other players you had to copy the files yourself, and had horrible menus which showed 'ASDASD~1.MP3' rather than a song title. ipods were easier for the purposes of listening to music.
there are many other examples.
but its amazing how removing just one extra click will cause people to shift from one platform to another.