GTK+, XML, XUL, HTML, MFC, VB, SQL, UNIX, Windows, VIM, PHP, CSS, C, C++, Ruby, Perl, Assembly, the list goes on and on and on. I’ve dabbled in various technologies throughout my career as a programmer. I actually learned programming logic in my TI-85. From there I started in on PHP with MySQL and Apache as the backend. Why, you’re asking now, do you care?
I just finished reading an excellent article at Joel on Software about how becoming completely proficient in a coding environment is taking longer and longer. I can agree with this. I’ve been programming complex PHP/MySQL applications for over 3 years now and I’m only recently beginning to realize how truly scalable and complex applications are built within this environment.
Joel points out that more and more of the memorization is in how to utilize the various API’s programmed in the language, not the actual language. Since I’ve built an extensive library of code in PHP and utilize other libraries written in PHP, most notably PEAR, I can agree with this.
Joel also makes a great point that learning a language is compounded by the fact that you must also learn that languages environment. PHP’s main environment is UNIX, thus you need to know that Apache barfs on missing directories or that certain shell commands require environment variables to be set properly before they will execute. You need to know how tr, sort, uniq, STDIN, and STDOUT work. If you don’t understand bitmasks and permissions you’re going to spend days figuring out why you can’t write and read files and when you DO figure out how to manipulate permissions you’ll most likely just chmod 777 because it works without any regards to security.
The outline above has largely deterred me from expanding my horizons into new languages. Sure I can hack Perl and I know how to use Visual Basic, but am I proficient? Hardly. Anyone who has looked at any of the open source PHP projects lately will agree with me on this one.