The native-vs.-webapp hubbub from a couple of weeks ago got me thinking about why "web developers" are looked down upon by "real programmers." I'll admit that I've held that prejudice myself. I looked at client-side web development back in the mid 1990's and decided that it wasn't for me. The web browsers of the time were primitive, and every one acted differently. The situation was a big mess.
I learned to be a programmer back in the days when, if you read the programming language manual, the operating system manual, and the library manual, then you could actually write code and expect it to work the first time you ran it. The machine was your servant. If the code you wrote didn't work, it was probably because you had screwed up.
In contrast, programming for web browsers requires a lot of experimentation, guesswork, vendor-specific APIs, and hacky workarounds. The code one wrote usually didn't work the first time, no matter how smart and careful the author was. The browser held a lot of secrets, and thus was the master.
How could any real programmer get involved in technology that mostly didn't work, and had no formal specifications nor complete documentation? This led to my belief that all the people writing scripts for browsers and calling them "applications" were merely programmer-wanna-bes. They may have been able to hack things together, but they didn't have that real programmer mindset.
Then again, to be completely honest, I was just too lazy to learn more about it, and I was making my living by writing native applications. It was all too easy to just dismiss it as something not worth wasting time on.
Browsers have come a long way too. It used to be that you could create a sophisticated UI only by implementing a Java applet (yuck) or using Flash (yuck). HTML5 is finally making it possible for web developers to draw things on the screen (!!!) without resorting to such madness. Web browsers now provide a platform similar to what personal computers provided twenty years ago. It's taken a while, but there are no more excuses for dismissing the web browser as a primitive toy.
It's now pretty easy for someone to create a slick website by installing Drupal, Joomla, Zope, or something similar, and then customizing it for a client's needs. However, the people who do that are not real programmers.
What distinguishes a real programmer from all the rest of the people who can create a web site?
- Can you write your own HTML and CSS, or do you just use prepackaged themes?
- When something doesn't work, can you debug and fix it, or do you just have to throw it away and try something else?
- Do you try to write portable code and adhere to standards, or are you happy with whatever works for 80% of your users?
- Do you design, develop, and test your code in modular fashion, or just throw the whole mess together?
- Do you adhere to coding standards and try to write code that is readable and maintainable?
- Do you care about the code you write?
In short, can you create your own software components, or can you only glue together components created by others? If you're a creator, then you're a real programmer.