Ask Slashdot: How Do You Deal With Programmers Who Have Not Stayed Current?
skaffen42 writes "The recent Ask Slashdot about becoming a programmer later in life got me thinking about a related question. How do you deal with programmers who have not stayed current with new technologies? In the hiring process, this is easy; you simply don't hire them. However, at most companies where I've worked, there are usually a few programmers who have been employed long enough that the skill-set they were originally hired for has become irrelevant. At the same time, they have not bothered to stay current with newer technologies. They usually have enough business knowledge that they provide some value to the company, but from a technical perspective they are a slowly-increasing liability. As an example: I work with a developer who is 10 years my senior, but still doesn't understand how to write concurrent code and cannot be trusted to use a revision control system without causing a mess that somebody else will have to clean up. On top of that, he is really resistant to the idea of code reviews; I suspect he dislikes people he considers junior to him making suggestions about how to improve his code. So, how do my fellow Slashdotters handle situations like this? How do you help somebody like this to improve their skill-sets? And, most importantly, how do you do so without stepping on anybody's feelings?"
...cannot be trusted to use a revision control system without causing a mess that somebody else will have to clean up
One has to wonder what sort of code he's capable of producing if he can't even do that.
No sig today...
Oh I dunno, maybe outside of work he has plenty of other crap to think about like raise a family. Once the kids come you can forget the countless hours hacking away learning new things yourself for the sake of it like you used to.
He doesn't understand how to write concurrent code? ...
I know only four people who can write concurrent code correctly. Although, come to think of it, one of them can't write concurrent code correctly and two others I don't actually know. :)
Concurrent code isn't new. If this guy doesn't understand it then his problem isn't that he has neglected to stay current, but that he was never very skilled to begin with.
Maybe it's just that writing concurrent code is hard, annoying, prone to buggy results, and should be avoided, except in special circumstances where there is a great advantage.
The alternative is to offer him the training he is supposedly lacking. If he refuses then that is grounds for dismissal. This is my biggest beef with the corporate world. They want you current but do nothing to provide you the necessary tools or the time to stay current.
This is a sig. This is only a sig. Had this been an actual sig you would have been informed where to tune for more sigs.
You know, the manager takes everybody aside quaterly, or perhaps semi-annually and privately discusses strengths and weaknesses. If it's urgent there's a "see-me" meeting; but this is a slow leak, so it should be coming up in the guy's PRs. If it isn't, or there is no PR at all, management shares the blame. After having this mentioned in 2 or 3 PRs, and getting no bonuses or raises, it's shape up or ship out. Duh! That seems like management 101 to me.
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
In my (admittedly limited) experience, that's exactly why people get out of the trenches and go for jobs that rely more on them knowing what the customer wants than knowing how the latest toolstack/middlewhere/design style.
I have several young kids, so I do most of my extra learning on the job and by listening to tech podcasts during my commute. There's http://twit.tv/show/floss-weekly and http://se-radio.net/ and dozens of others. Instead of switching browser windows to Facebook while I'm waiting for a large file to move between servers, I switch to my RSS feed reader that subscribes to tech sites. And yes, maybe once or twice a year I'll buy a book on a new language and technology and force myself to read through it and toy with the examples. Figure I'm sacrificing maybe 10-20 hours of my free time for that every six months.
But more importantly, someone that's not keeping up with the latest trends in software development is screwing themselves. I can build the Javascript for a web page without using jQuery - but it would take me three times as long, so why would I want to? I can write the server-side of a REST application in Java and Struts 1 instead of dozens of newer options, but why would I do that? I can set up a test environment or two on individual physical servers instead of having six different test environments running in virtual machines, but that just means testing runs three times slower, so what have I gained?
In this industry, deciding you don't need to learn new things just means you're content to waste your time and the time of your colleagues.
It's really up to the management at your company to determine whether someone is pulling their weight or if their skills are up to snuff. You may have an opinion, but it's best to keep it to yourself. Many people provide value to an organization in ways that aren't always easily visible to co-workers. It's entirely possible the coders who doesn't seem to be "as up to date" in his skills may be providing benefits to the organization in ways you don't yet have the experience or perspective to appreciate.
I once kept what others might consider to be a sub-par programmer on my team because he was a good friend of my best programmer -- the type of programmer who provided 10x the value of any of his peers who complained about the sub-par programmer. Besides, the sub-par programmer had a great personality, broad work experience and helped round out the team and make the overall workplace a much more enjoyable place to be. We had to work through some of the coding skill issues, but as a manager it was a tradeoff I was happy to make considering the other ancillary benefits the person brought.
As a manager, one of my toughest jobs was dealing with the handful of younger programmers who felt it was their duty to judge the value of everyone else on the team -- usually on very narrowly defined terms. Most often it was a case of "the pot calling the kettle black" and the energy invested in pointing out the flaws of others would be much better spent on reflecting upon their own shortcomings and improving their own skills -- which were usually overrated. I can say that because I once was one of those overly self-confident younger programmers myself, but I have since gained some experience and perspective.
However I would not be at all surprised to learn that Old Guy is more than pulling his weight where it counts: producing reliable stuff that is efficient, well documented, properly tested and on time. What New Kid fails to recognise is that in a short time, some other New Kid will be sniping at HIM for the same reason he's whining on now.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
There's nothing wrong with raising a family instead of staying current as a developer, it's a perfectly fair choice, just don't then be surprised when the real world will let you no longer be a developer as a result of you opting to do other things than stay current. The world doesn't owe you the job you want to do in the way you want to do it, it's up to you to figure out what the world wants and what you feel you can and are willing to offer it that it needs.
It's perfectly doable to raise a family while staying current on programming languages. It's not as though the underlying principles ever really change, which is why experienced programmers can pick up new languages with consummate ease once they grok the underlying concepts. What you're talking about are idiots who think 'the world' is middle managers who will strip mine your life to get the project done a week earlier. Newsflash, older programmers aren't less capable, just less willing to be fed a shit sandwich than younger programmers.
If the guy's job description doesn't require "Concurrent code" then STFU and keep your petty issues to yourself, if it does then hes unable to perform the job and needs training or reassignment.
I don't often respond to ACs (and even less often positively), but you've hit the nail on the head here.
My current job requires absolutely no explicitly concurrent programming. I do mostly SQL, which has a high degree of implicit parallelism (arguably the highest possible, if you religiously avoid RBAR); I've also played around with OpenCL just for kicks. But even such fundamentals as semaphores and IPC matter not one whit to my continued employment.
I can appreciate the FP's problem, having worked with programmers who just don't have passion for the art anymore (and age has nothing to do with it, I've worked with a 60YO that made me look like a neophobe, and a 30YO that honestly would have liked his job better if he could do nothing but sharpen pencils all day). But most programming jobs don't require high-level cutting edge skills. Quite the opposite, I've more often found myself suffering for want of familiarity with ancient big-iron scripting languages than for the latest and greatest set of buzzwords.
Put bluntly, most programming jobs involve getting an ancient GL database to talk to an ancient POS system; converting 20 years worth of Excel VBA scripts (or god help you if someone's nephew actually knew Access) to "real" code; Hacking together a driver that lets a $2M instrument talk to a Win7 x64 box, when the most recent driver from the (now defunct) manufacturer runs on a German version of Windows ME (and FWIW, I didn't exactly pull that example out of my ass).
I'd love to see an actual breakdown of the numbers, but make no mistake, the number of programmers working on Real Software(tm) falls into a small minority of the total.
I'd call someone current who has 5 years of all of these: Objective-C & MAC/iOS experience, C#/WPF, Android 4.1, SQL/SQLite/Oracle, C/C#/C++, Java, Python, Javascript, HTML, .NET and everything else the Microsoft has. If you don't known all of those things then you need to catch up.
And yet in a heartbeat I would drop your buzzword-driven developer and hire a developer who had a solid knowledge of data structures and algorithms, operating systems and related topics, networking and distributed systems, concurrent systems, testing and strategies for error detection/recovery, requirements capture and modelling and other high-level functions, different programming styles and software architectures, and other similarly general foundations. I'd even do it without even asking which programming language(s) the developer with the solid foundations used lately.
Your buzzword guy might have 5 years with those technologies on paper, but if there are so many of them then probably there's not much real depth there. Sounds like someone who blindly follows trends, and who's mostly "up to their neck in code" in the sense that they copy and paste a whole bunch of examples but never really get into any tool long enough to use it idiomatically and play to its strengths/avoid its weaknesses. I don't buy the theory that a good programmer can sit down and learn any new language in a week -- that's a load of nonsense unless the new language happens to be little more than a search-and-replace away from one they already know -- but I'd rather take someone with solid foundations and have them get up to speed with whatever tools we need on a project than take someone who shaky foundations who happens to have used those tools before for about ten minutes. They'll still be current enough to do useful work with the tools, but their basic quality of work will be much greater.
Just to be clear, I'm not saying that having a general awareness and knowledge of recent language/tool/library developments in your field isn't useful from time to time. But trying to get coding time in with every new buzzword is a fool's game, and the mark of someone too inexperienced to realise the treadmill never stops.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
That adds up to 50 years, so I'd call them retired.
Although Android 4.1 has only been out for a year, so perhaps liar would be more accurate.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."