Saturday, February 11, 2012

Learning New Technologies

As a tech guy and a developer, few things excite me more than learning something new (those things are NSFW).  In the last few months alone, thanks to my new position at work, I have been fortunate enough to tinker with several new(er) technologies, outside of simply reading about them.  Those techs include node.js (quickly becoming my 2nd fav language/platform behind python, maybe even contending for 1st), MongoDB, Redis, Silex (for PHP), and Infobright.  We are not exploring these for cool factors alone, but for true, practical applications at work.  Traditionally, my work has always be a strictly php/mysql shop.

What worries me, however, is that there are people in technology that are extremely reluctant to step outside that comfort zone.  I do understand the need for things to run smoothly with few to no errors.  My gripe, however, is when what we use is NOT working, and we still cling to the golden hammers with which we have become accustomed.  This is, unfortunately, becoming quite a common practice as technology companies mature and senior tech workers become older.

Now, this is where I am likely to be misunderstood.  I started off my tech career writing very basic C and C++, in school.  I learned PHP (and mysql) to solve a specific problem I was taking a stab at for my uncle and my father's company.  They needed a web presence for the company (which was a car donation based charity), and the tool for managing online donations quickly grew into a full inventory control system.  Since their were few (reasonable) options at the time for writing web applications in C, I turned to an older friend and master techie for advice.  He recommended PHP (just crossed version 4.0 at the time), which would be quick to get started up, easily hosted on shared hosting, and somewhat C-like in its syntax.  So away I chipped at trying to get apache, php, and mysql configured locally on Windows 98.  This was no easy task.

That small project, which ballooned into a huge project, is what basically launched my career as a programmer.  For over 10 years now, I have written various applications, mostly in PHP with mysql as a storage engine.  The company I have worked for, for 3 years, is mainly a php/mysql shop.  I owe my current success, salary, and the state of my career to this wonderful combination.  I am, however, a critic of said platform.  I will be the first to admit the limitations of using (what was designed as) a strictly web-based language (the cli was woefully hacked in).  I still think it is great for web based applications of many different flavors, however, I'm back to exploring more traditional client/server based languages/platforms.  Daemon programs, for example, are horrendously painful to write in php.  Given frequent memory leaks, very few blocking options (blocking sockets are very, very non-maintainable in php), and high resource usage, they are just not a great option.  However, daemons are very useful in many applications.  The golden hammer of php is not a viable solution for this particular problem.

To my original point, some techies would be very comfortable spending many extra hours hacking around php to get it to work, and then weeks or months dealing with the operational fallout (this is especially bad for startups without money for huge servers setups, and aren't ready for the switch to the cloud).  I'm not.  I've recently written things in node.js in hours that would have taken me weeks in php to implement, and then run them with minimal hardware and operational complexity.  The other side of that coin, however, is that node.js is very young, and still not considered production ready (current "stable" version is 0.7).  So you have to take that into consideration.

This was less of an educational post, like usual, and more of a rant.  My apologies.  I know, TL;DR.  Whatever.