Become an exceptional programmer by learning to ship
renderedtext.com
renderedtext.com
Answers I usually get:
- "on their own": You want to tell me that someone should learn on their own how to go through all phases of shipping a software without guidance? And you think that will produce programmers who know how to do that 'correctly'? I'd like to advise you that playing the lottery has comparable chances and that you should try it.
- "at our competitors": That will only 'work' if your competitors don't have the same same idea.
New answers are very welcome, the topic seems quite stale to me.
I think this one is even more specific than that. He's saying he only wants programmers with a specific type of experience -- shipping products.
I've seen good Ruby and JavaScript developers learn their way up from expert-level html/css buildout people, from professionally-trained musicians and chefs, or in my case from a MA in Chinese literature.
Yes, programmers need to be able to model program execution in their head, and only some subset of humans can do that. But after that hurdle, the biggest factor in success is sustained practice, humility about your skills, and a willingness to listen to advice without following it dogmatically. These skills can be developed and demonstrated in lots of non-programming backgrounds.
In an interview, you want to establish that the candidate knows what they're talking about, can do basic boolean logic, functional decomposition, etc. But after that, you just talk to them about their internships, class projects, and hobbies. Find something they are clearly proud of, and ask them about it. Probe the strategic decisions and tradeoffs they made to see that they have some awareness of their process. If you find someone who can't talk about something they're really mastered, in any field, programming is not magically going to become the first skill they practice to mastery.
Ultimately, being able to identify people like this is an enormous strategic advantage. There is no boost to a team like a new junior teammate who asks questions, takes advice, works hard, and show enjoyment at tackling new hurdles. And nothing better for a businessperson than someone you can pay less now and continuously give big raises over the next few years while still getting a better deal than hiring a senior person.
1. Exceptional programmers write neat, maintainable code. Anyone can ship something that works right now but has maintenance costs up the wazoo later.
2. If you recruit based on open source contributions you'll miss out on the many, many fantastic devs who have no involvement in FOSS in their day jobs and like to switch off at night. (I love FOSS but I also love sleep)
3. All of what is written about in this blog entry is better termed experience. What you want is experience of working well in the industry. The blog entry is about as useful as saying "if you want a good employee then choose someone that's already shown they can do what you're asking". This is not new information.
There are dozens of projects I've supported that were built by guys who banged it out in a couple of weeks, or a month or so of development, and it's almost always built for a single purpose. The moment the business starts thinking about other ways to use it, it becomes a mess.
Unfortunately, there are a ton of businesses who think they can get ramped up with a tiny, banged out product to sell and then 'scale up'...when in reality, they have a throwaway toy on their hands.
People queue at your door if you have these skills.
Mediocre programmers create a lucrative market for unicorn shit as I was once told.
Given this, having a mediocre coder whose managed to ship finished projects is worth many times the mediocre coder who hasn't.
People have had such "requirements" since ages. "We only hire candidates with university degrees", "we only hire PhD's",.
Unless you're a small company, not everybody will "ship", or write audio codecs, or interact with prospects, and so on.
If reliability and predictability are the goals (and I think they are with this kind of thing), I think a far more sensible approach would be to treat developer groups like cults. "You can code however you want at home; here we are dogmatic, and everyone uses JetBrains. Everyone tests, everyone debugs, everyone ships."
It sounds draconian and not altogether pleasant (and I agree), but I wonder if it might be a solution for companies who distrust off-the-street devs so much that they erect hiring barriers out of fear.
This approach will get you people who shipped products no one (or very few people) wanted. It's not as bad as it sounds, but it's not the amazing you-big-developer-ubermensch-you thing these articles on shipping your way to a job make it seem.
I had to look it up, so for other's benefit: http://c2.com/cgi/wiki?NetNegativeProducingProgrammer
I could go on, but this demonstrates there are many good professional developers who do not fit the SV bubble's concept of a good developer.
My point was simply if you have to filter on some arbitrary criteria, finding people with a habit and verifiable record of shipping is probably a pretty good indicator.
My initial thoughts on this are that there are many us who are completely uninterested in spending time promoting our code. I'm fine with developing stuff and putting it up on github as an example of what I'm capable of doing, but promoting that code, getting other people involved and using it? That's marketing, not development.
Young programmers, due to lack of experience, sometimes don’t see that writing code is only a small part in producing software.
If you have something that "just works", you do a release, but to a development branch. Eventually some of those features can get backported to stable, or the release will get upgraded to stable after thorough testing, or all new feature development will end once it's been tested enough to ensure a stable release. There may be 10 development releases before a stable release comes out. The benefit is you get to "just ship" code, but stable users aren't forced to deal with your bugs and various changes just because you wanted to get an experimental feature out the door.
"To ship" is not a software development practice. It's silicon valley hype. It's the idea that delivering an average product is more important than designing, developing, testing, and producing a really good product. The author is right, this is difficult. But this is not what I think most people consider when they say "to ship".
But, shipping has also done me as much damage as good. Unreasonable deadlines lead to bad decisions. Crunch times make me stupider, take many months to recover from mentally, and frequently are so crowded with patching things up that the lessons I should have learned about what I did wrong are lost in the wind.
Any company that wants to get on their white horse and trumpet about the virtues of shipping should be required to back it up with strong data on the virtues of excellent project management as well as how they have figured out how to ship software on a deadline with absolutely no overtime!