Had someone recently ask me about programming and whether it would make a good career for her. I took a few minutes and put down my thoughts. I think the following are good thoughts for people interested in building a career in programming – be in the Microsoft stack or other areas:
Build your own identity and get social: I do think you have to build your own brand as a developer separate from your “work identity”. I’ve got a journal that I post to fairly frequently; I find writing really gets my creativity going. I’m free to talk about anything I choose on any topic I find interesting, and ponder over my thoughts. I look back pretty often and can see how I’m progressing as a developer and it keeps me motivated to becoming a great programmer.
Be prepared to work hard: There’s a great amount of hard work that you will surely realize is what it takes to make it as a programmer (the famous 10,000 hours written about in Outliers). No one can become good at programming without putting in that time.
This means putting in that weekend and evening time when everyone else is asleep or having fun getting caught up on something interesting for your career. I find those two or three hours of uninterrupted study time in a weekend is worth 1 or two days of work-time.
Great programmers are born not made: I really hesitated to get into programming because it attracted so many passive-aggressive uber-nerd types (the classic Dungeons-and-Dragons type that lives in their mom’s basement!) And if you look at my team, they all have a certain personality type… I don’t really fit the mold.
I don’t kid myself that I’ll ever be a great programmer because that requires a special type of person that really obsesses about code quality and mastering every aspect, every detail of their environment. That’s not me (just look around my house!) – and in all fairness I’ve met only about 8 programmers in my career that fit that mold. It really is a top 1% of the profession, and if you have one of those guys on your team, consider yourself lucky – they’ll elevate everybody’s skill level and outperform any other 5 to 10 guys on the team.
We Need More BA’s and Female Programmers: That being said, the classic heads-down live-in-a-cubicle programming personality type is on the wane. What I’ve seen in the past five years is the rise of two types of techies – the business analyst (projects don’t fail because of ‘bad’ programmers, they fail because the programming team didn’t understand what ‘success means for the project) and the swiss-army knife developer that can do everything well – including interfacing with people and interpreting requirements.
This means a natural bent towards group think and collaboration that frankly many men do not excell at. We really do need more female programmers in our field and I wish we’d see more women coming out with Computer Science degrees – IT has always tended to be a male-dominated field and for the field to make progress we need to be more inclusive.
Management is parenting. There’s a very old-school way of thinking about software management that “my guys are lazy and to get them to work I have to stand over them and force them.” That top-down, command-and-control way of cracking the whip simply doesn’t work with programmers, who are trained professionals, adults, with a lot of initiative and drive to solve problems.
I’ve found in my career that people rise or sink to expectations – and that if you treat people as adults and give them a lot of freedom – tell them what to do but not HOW – they’ll always overperform. It’s a lot like being a parent – I’ve got two four year olds – and parenting is just 1) setting expectations and 2) being protective. So, you tell your team what needs to be done over the next two weeks, protect them from being hassled with last-second changes and fire drills during that period, and get out of their way as they reach their potential. Awesome!
Great companies foster a culture of learning. We do this on my team through technical brownbags, encouraging attending technical workshops and highlighting books and blogs we’ve liked in group emails and meetings. Great teams all look alike – there’s a high amount of autonomy (freedom to solve problems in any way you choose), mastery (that means having the tools and the experience you need) and purpose – a driving focus or mantra.
I remember writing a 200-page SDLC for a healthcare company I used to work for. What a waste – I don’t think anyone ever looked at it or used it! At my current company I got a little smarter and the TEAM came up with a “development manifesto” of the things that they thought mattered – things like checking in your code every day, having automated builds, documenting and sharing your discoveries.
I’ve gotten a real kick out of watching everyone on the team catch fire creatively and start coming up with these great ideas as we’ve ramped up our maturity level. It’s a lot like being physically fit – you don’t get off the couch one day and just start running a marathon, but you can each day get a little better in how you do things. Having the whole team commit to getting better has been a huge step forward for us.
Some more words about obsession and the great programmers…
A great post here mentions the obsessive approach great programmers (and creative minds like Steve Jobs) have about quality:
Jobs demanded the unseen features be as finished and polished as the visible. Look at the chip layout on an old Apple II motherboard, laid out in perfect, neat order. The original Mac case had the designers’ signatures inscribed inside, even though the case was sealed. The NeXT cube also had a black matte finish internally, even though the user never saw it. Jobs would never accept the “No one will ever see it” attitude. “For you to sleep well at night, the aesthetic, the quality, has to be carried all the way through,” he told Issacson.
… (One IT Instructor) adds that in a professional environment, no man is an island and neither is his work. “The sad thing about programming is it attracts loners, people who want to sit in a cube and write code. Those days are over… To survive as a developer or a business analyst you have to be an excellent coder, you have to be a business analyst, and you also have to manage others. You have to manage your teammates,” he said.
Coding habits are often a reflection of the person, said the teachers. “People take care of their own bodies like they take care of their own programs. If they are clean and well groomed, their code is neat and easy to understand. If they are slobs, their coding is going to be sloppy.”
For me in taking charge of my career, this meant long, long hours on the weekend and evenings hammering away at problems in a systematic way, and keeping track of the outcomes. I look in the mirror, and admit – I may not have the obsessive personality to become a GREAT programmer… but I am willing to put in the work to stay a good one and remain relevant in my field.
A friend of mine is fond of saying, “worry about your skills and not your job security, the former will take care of the latter.” Looking back, the difference in my career on the “extras” that gave me a boost were those evening/weekend hours. Like it or not, we are choosing to put 10,000 hours over 10 years at SOMETHING. Is it watching TV, or are we feeding our career and pushing our boundaries – going beyond the comfortable, the familiar?