Thursday, November 10, 2011

JEE Developers: Embrace the Polyglot in You

Are you a polyglot programmer?  The term almost has a guttural pronunciation.  In short, a polyglot person has the ability to speak multiple languages.  So, a polyglot programmer is one who can write code in multiple languages.  Most programmers I know are polyglots out of necessity or career evolution.  I started out with BASIC, then moved to LabVIEW, HTML, Visual Basic and even Lotus Notes, settling into Java and its cohorts later on.  Along the way I wrote C and C++ when the need arose, as well as the suite of UNIX/Linux scripting languages (Perl, Korn, Python, etc.).

Most of us have started out in one language only to switch later to more modern, and/or more expressive languages.  Occasionally we may digress, if the situation calls for older skills, but in general we have moved forward, building on previous knowledge.  I can hear some of you saying right now that true expertise takes years to build.  I can agree with that, to a degree.  It should take years to become an expert in some languages or technologies.  However, expertise is a relative term, and it should not take decades.  Furthermore, most projects don't staff all experts; there is room for intermediate levels as well.

There are those that have stayed with older languages, for whatever reasons; comfort not being the least of these.  However, it seems to be harder for those individuals to adapt to modern needs, and that makes them less desirable to recruiters.  To remain relevant, we need to stretch outside our comfort zones.  Stories are legion these days of folks searching for work, only to find out that their skills are simply outdated.  When I hire, I try to hire for organizational fit first and then skills second.  However, in this economy, recruiters are buyers in a buyer's market.  Some would say, that without the correct buzzwords on resumes or applications, otherwise competent resources are getting overlooked and ignored.  I would say that the skills of these programmers have become less relevant.  As one of my friends would say, "They may have placed themselves in a position to be unlucky."  If your skills are no longer relevant to the strategy of your company or its competitive advantage, you may be unlucky sooner than you would like.

I say embrace the polyglot way.  A good software architect chooses the right systems or layers for the right processing.  Polyglots are not only able to understand the code, they frequently write the code in those different systems or layers.  For example, in Oracle, if you need to process large data sets in a iterative and procedural manner, use PL/SQL.  PL/SQL also gives you better application management and performance, if done correctly.  Do high-level field translation and validation in the HTML form or view layer with JavaScript to enhance the UX.  Do more in-depth data validation in the business layer for data quality and security reasons.

As a software developer you can ill afford to dedicate your focus on one language while ignoring the rest.  Especially if your language (or framework) has complementary cohorts that are used routinely in application implementation.  If you call yourself a JEE developer, then you already have a lot of Java APIs to master.  On top of the JEE technologies, you should also know Spring and Hibernate, intimately, including Spring MVC and EL as well as HQL.  Groovy is also a good language to know especially if your web application needs dynamic integration, rapid prototyping, and/or can leverage ECMS.

You'd better know SQL, and if you work on Oracle projects, know PL/SQL.  If you are writing JEE web applications, know HTML, CSS, and JavaScript.  I am not saying that backend developers have to be frontend experts, but one should know what goes on over the fence from them.  In fact, for all networked applications, know the protocols you would be using (TCP/IP, HTTP/HTTPS, etc).

If your applications are deployed in a UNIX/Linux environment, know scripting languages.  For view-layer integration, know AJAX and JSON.  Finally, almost nothing is possible without XML.  Do you know what it means to be well-formed and valid?  Do you know DTDs and XSDs?  Could you translate XML to something else with XSL/XSLT?  If you are not developing some sort of web service or other integration with XML you most likely have XML configuration files in your application.

In short don't limit yourself when applying for positions or choosing projects because you only focus on Java or .Net.  Know the cohort technologies as well.  You don't need to be an expert in all things, just as an IT generalist is also in low demand.  You need to balance depth with width.  Focus on core technologies, and then be familiar with complementary technologies.  Develop more depth in the non-core technologies when you have sufficient comfort level in the core.  This is not fake-it-to-you-make-it either.  From time to time you will have the opportunity to be a temporary expert in more ancillary technologies or languages or frameworks.  You may even develop a temporary monopoly in new technologies or approaches.  That is where real value is added to your organization.  Even if you can get projects with your older skills, will you be happy with those projects?

If you know enough about the side technologies to spin-up quickly, that should be enough for most projects.  Scope the landscape for relevant technologies and then choose wisely when looking to enhance your capabilities.  In my experience, it is easier to keep current in these technologies if they are complementary, and if you have the chance to use them for real deliverables.  Don't place yourself in a position to be "unlucky".  Be cognizant of the relationship between your skills and the strategy of your organization and the direction in which you wish your career to proceed.  Embracing the polyglot approach can differentiate you from your contemporaries, making you more relevant to your organization and the job market.