Much like The Pragmatic Programmer advocates, I try to "Invest Regularly in My Knowledge Portfolio", which usually involves reading books (unlike most programmers), various programming-related blogs, and listening to a few podcasts as well.
In addition, I also make it a point to try to learn other programming languages. I think this one activity goes a along way towards making me a better programmer, as it opens my mind up to new concepts and ideas that I may not have otherwise considered while using Java, which tends to be the predominant language used in my everyday work.
So over the past few years I've made it a point to learn Python and Lisp, beefed up my skills with JavaScript (which had been waning a bit since I hadn't used it for many years), and dove into using regular expressions (regex is really an ancillary language -- a language that is typically used with some other programming language in order to process text data -- but it's still a language in and of itself and well worth learning). I've also started exploring Flex/Flash development as well.
My big concern about learning these languages is that, while I may be able to apply some of the concepts toward my own development work, which almost always involves Java, I have very limited ways in which to apply the languages themselves, which in some cases I've found far and away superior to Java for certain situations. And I'm starting to see this as a point of frustration for trying to expand my skillset as a software developer.
I think that most people agree that in order to truly understand the language paradigms, concepts, strengths and weaknesses behind many of the programming languages available nowadays, programmers really need to be able to work with a languages on a regular basis. And while I do try to work with whatever languages I choose to learn on my own time as much as I possibly can, being able to use these languages in a real-world development situation would go a long way towards helping me fully understand them. Coding examples from a book, or working on some simple toy application has indeed helped me immensely, and exposed me to new ideas, but without really being able to take the language for a spin on a substantial project I don't feel like I'm getting the full picture of what these languages can really do.
I see the potential...but I can't fully explore and exploit it.
My other fear is that, after all that effort to learn a new language, that knowledge will atrophy...resulting in wasted effort. Sure it won't be a total waste, as I'll have applied some of the knowledge to my Java work, but how will I ever know that I've been doing things the right way if I haven't really had the opportunity to fully explore alternatives?
One solution is to find some way to apply these languages in the workplace so I can really see what kind of capabilities they have. But in order to do this I have to convince the stakeholders or project managers that it's worth it to explore these alternatives, rather than just stick with the tried-and-true Java stuff...and I think we can all predict how well that will work.
It's difficult to convince people to take a risk on something they don't know for sure is going to be the best option, when they know that something like Java has a better chance (although by no means a guarantee) of success. It's always easier to go for the sure thing, and I understand this completely. But a consequence of this is that, as a developer, I feel as though I'm being limited in my growth opportunities by default -- I can't convince people there might be a better way without exploring the alternatives fully, but I can't explore the alternatives fully without having some substantial application within which to apply the technology. Chicken...meet egg....
Sure, I can try to sneak the language in somewhere, but there's a big risk in doing that...especially if you're working with a rather hard-assed client or company. They don't take kindly to being tricked and I might find myself kicked to the curb for my troubles.
An alternative is to find a place to work that allows for this kind of technology exploration -- someplace like, say Google, that sets aside time for developers to really explore programming. But I'm realistic enough to know that I have no hope of ever working at Google, and finding any other company that does the same thing seems almost impossible.
And speaking of moving on to other opportunities: This too presents some interesting points of frustration along the same lines...
Lets say that, after so many years of working with language X, I want to move into something different -- programming language Y. It may be that I'm just tired of working in X, or -- as I explained above -- I want to simply see what it's like to work with Y in an actual project. So, I throw my resume out there to some prospective companies working with Y.
(Of course, this is assuming that anyone is even currently using language Y for a project, as it could be something so new that it hasn't shown up on anyone's radar yet. In which case I'd be wasting my time even looking for a new job at all.)
At any rate, some company doing Y projects gives my resume a look, and either sees my extensive background in language X and says, "no way" (maybe because they think that my experience with X works against me in some way), or at the very least sees that I haven't worked on any substantial Y projects (aside from typical toy learning projects) and doesn't give me a second thought. They want people with so many years of Y experience, or something along those lines.
Meanwhile, because of my long extensive background using X, I get pelted by every recruiter from here to Abu Dhabi asking me if I want to work on some X project, which I don't find particularly fun...and only serves to further my frustrations. But because I can't get the time of day from the companies using Y, my choices are either: A) Stay with my current employer and continue to use language X (if they haven't tossed me out on my ear for trying to sneak Y in the back door, that is), or B) Take a job with another company that's also using language X.
I'm effectively pigeonholed into being an X programmer, whether I like it or not. And despite my best efforts to get out of the rut, various factors -- current work environment, the job market, experience -- have effectively killed any hope of moving up and out of X programming.
I've actually encountered this type of situation in my own career, albeit in a slightly different form: For many years prior to my first gig as a programmer, I was involved pretty heavily on the hardware-side of the computer world: Troubleshooting, repair, installations, upgrades, help desk, and stuff like that. Basically most of the traditional IT-type work people think of. I was one of those guys that people would call when they had a problem, or needed some piece of hardware set up or installed and whatnot.
Now, I enjoyed the work for a time, but it became fairly mundane work eventually: Once you've solved the same hardware or configuration problem 18,000 times it gets a little boring. And that's where I ended up -- very...very...very bored. So I decided to move over into software development, which I enjoyed non-professionally for quite some time working on my own little toy projects. So I headed back to school...
Now, fast-forward several years: I've still been doing the hardware stuff during that time at school, but now I decide to start throwing my resume out there to get a programming gig.
What I found was that, despite my explicit desire to move over to the software development side of world, I was met with a shitload of resistance. It seemed that everywhere I interviewed people were either surprised, or otherwise just couldn't comprehend why I wanted to do software development. It's like the idea of branching out into other areas of the computer industry, or changing professions was somehow impossible to do in their eyes. As far as they were concerned, because I had all that experience doing the hardware stuff that's where I belonged.
Now, I obviously did eventually get that first programming gig, but it took a long time to find someone willing to accept the fact that I actually enjoyed programming more than doing all the hardware work, and that I was (and still am I think) much better suited for programming.
This isn't exactly the same kind of situation I see when trying to move from one language to another, but I do see a similar mentality emerging whenever I explore the possibility of moving outside my current job to do work with another technology or company. Perhaps it's just the area that I currently live in, or just bad luck on my part, but I am definitely picking up a similar vibe that I had when trying to move from the hardware world into software development. I'm hearing a lot of "well...you're an X programmer...why the heck would you want to work with Y?"
After experiencing this kind of situation now in two different -- yet oddly similar -- ways, I can't help but get the feeling that there are probably a good number of developers out there that have gotten themselves pigeonholed into being a blub programmer in some form or another...despite their best efforts to not end up that way.
Many companies, both in their desire to stick with what works (which is not wrong in any way, mind you), and with their insistence in looking more at what developers have done, rather than what they have the potential to do for a company seem to have inadvertently worked to limit developers' opportunities for growth in this regard.
(And I won't even touch the fact that there are companies out there that actively work against their own employee's attempts to learn and grow and move on to bigger and better things...which I have also witnessed, I'm sad to say).
I don't think it's all doom and gloom. I think the opportunities for engaging and using new technologies on a regular basis on-the-job are probably out there, and I'm sure there are plenty of employers that will look at more than just "X years with blub" on a resume. At least...I hope there are.
Because otherwise I have a bad feeling about the future of programming...
Wednesday, July 16, 2008
Pigeonholing Programmers
Posted by
Brian C Cunningham
at
9:33 AM
Subscribe to:
Post Comments (Atom)
6 comments:
Straight on. That is exactly the situation that I find myself in right now. The only silver bullet I can think of, is to start your own company. That way, you get to make the decisions your self. Of course this has a load of other problems associated.
I've actually considered going freelance, starting a company, or otherwise striking out on my own. But since I have a family to support, I can't just ditch the current job and start something.
That leaves me with doing something on the side in my spare time...what little I have at this moment. It's tough but I'm just starting down this path now.
I can probably take some of the blame for my own predicament -- I haven't really pushed myself to find something that's more interesting to me in a day-to-day work environment. I basically let myself get too comfortable.
I liked working with my current blub language (Java) when I started programming professionally, but as I've grown as a developer through the years I've opened myself up to much more interesting (and likely better) options in the software development world. Blub just doesn't cut it anymore.
I'll get myself out of the rut, I'm sure. It's just going to take some time.
This is a huge pain in the ass, but I was basically able to make the jump by building something in language Y in my spare time. If you've got either a product or code to show a company, you should be able to make the jump. Also, the importance of a very patient girlfriend/wife cannot be underestimated as no doubt, you will spend many late nights glued to the computer.
As a matter of fact, this is exactly what my wife and I have been discussing lately. We're trying to work out some schedule so that each of us can accomplish the things we'd like to do while at home (aside from the usual household chore related stuff) without alienating each other. It's a tricky situation for sure, but we've approached it seriously and are putting a lot of thought into it.
Of course, having a set schedule doesn't guarantee that I'll actually be totally productive when I'm supposed to at the allotted time (the creative aspects of programming tend to make it hard to produce on a set schedule, but this is mitigated by being able to work on something that you really want to, I think), nevertheless it's a start, and better than doing nothing at all.
This happened to me early on in my career. I graduated from college in 1999 and started in web development. After a few years of ASP/VBScript and Java Servlets, I wanted something different. Unfortunately, most employers looked at my resume and pegged me for a "web guy" and didn't provide much of an opportunity to do more server or desktop applications.
Finally, at one point in time, some of the web work slowed down at one employer so they let me work on some of our server apps. That gave me just enough experience to jump ship and land a position developing desktop applications.
That's a much better example of what I was talking about in the post than my "moving from the hardware to software side of the business" example...and I've experienced this, too. Early in my programming career I was doing a lot of Java Swing development (it's not as bad as some people think) and after spending a lot of time doing that, I wanted a change and was desperately trying to get into doing web development with the typical Java web stack (JSPs, Spring, Hibernate, etc). It took some persistence, but I finally managed to break into doing web development.
That's one reason I'm not too pessimistic about making another transition -- it's sometimes hard to do, but it just takes some patience and perseverance to make it happen.
Post a Comment