Finding Good Programmers
By: Keith Watanabe
Published On: 1-12-2008
Referenced Link: http://www.inter-sections.net/?p=33&akst_action=share-this
As promised, this is the follow up to the other article I had mentioned. On top of development, i've had a lot of recruitment experience. I've given many interviews in trying to find the best candidates for development jobs. And I've worked with a lot of people in IT, so I can generalize a lot my statements about programming towards those who work in IT. My advice here goes to those who recruit, not just recruiters, but HR people and interviewers at companies:
Passion For Technology
The best programmers I've known do not necessarily have degrees or certifications. Matter of fact, degrees and certifications can be extremely misleading. But great programmers love what they do. As the article suggests, this is a key in finding great programmers.I never considered myself a "great" programmer. Maybe "decent" or even "good" at best, but never "great." "Great" programmers are some of the kids I met up at UC Berkeley in the computer labs, who often talked about obscure algorithms and found problem solving to be something similar to those who might pick up a crossword puzzle magazine at a store. "Great" programmers are like my second roommate in college who programmed on his little Commodore 64 and is now working as a game developer doing interfaces. "Great" programmers is my close friend who helped get my start in the industry. This guy, like my old roommate, would program on some archaic machine, doing things like porting a bmp to jpg converter on an Apple GS. "Great" programmers are like these two guys I knew over at New.net. One guy who practically gave me the vision for building a scalable web application and is now working over at Yahoo as a senior engineering manager. While the other "great" programmer was this guy who went and grabbed his Bioinfomatics Phd at UCSD and is now working for Google to be intellectually stimulated. All of these people cared about what they were doing, which is why I consider them "great."
Then I've met people who just suck because they put together a PC at their home and called themselves "real IT" (using a deep bass voice). Just because you build a PC at home, doesn't mean you're suddenly IT. Adding a keyboard is simple that only the most novice of computer users could never do. But I'll get to these people in a minute.
Continual Learning
Part of having passion for what you do is that you're always at competition with yourself to improve what you know. While I hate to brag that I'm a good programmer, one of my goals as a developer/IT person is to constantly update my knowledge. I've worked with people whose skills stagnate because they lose their interest in updating their knowledge. My dad was that way and eventually it killed him (literally).The thing is that technology is constantly an evolving thing. There's always new formats, new techniques, new servers, new hardware, new languages, etc. coming out. It's almost frustrating because it's impossible these days to know everything. Heck, my university split the computer field into three distinct parts. These days, it's no longer meaningful just to be some webmaster. Now, you have to specialize to get good at anything. Still, the better people in IT tend to make attempts at going beyond just what they know and this is the critical point. This doesn't necessarily mean paying for a certification, but if you talk to anyone in the industry, once they start talking about trends and what they do and even how they do it, it's quite obvious that something good is there.
Problem Solving
This is one I think that most of the traditionalists in the industry will find to be a critical skill. While I do agree, I sometimes feel that like technology, this area is multi-faceted and that you can't make assumptions or generalizations on someone. To test a programmer, you have to give them a variety of tests to figure out what area of problem solving they are competent at. For instance, there are logical areas like the prototypical google tests or math quizzes. However, there's more practical problems where people like myself excel in. Giving a theoretical example works for people used to the abstract world. For someone like myself, I work in the real world and find application in what's available to me and how I can make use of it. I call the former type the Steve Wozniac type while I'm more of the "practical" problem solver.Focus on Skills
I've told everyone in this industry and have been told by veterans in this industry that your core strength are your skills. The article mentions that a person with a variety of skills is probably more valuable than the person who exactly matches for a job description for a particular skill. I think in theory this is true because the person who has a lot of skills can perform and learn quickly. Or at least that's what this situation tells me on average.For myself at my stage in my career, when it comes to programming or application setup, it's not a hard thing to do. Learning a new programming language takes me approximately one to two weeks since most are the same. Mastering a programming language would take a month in terms of feeling comfortable while I work on projects to get me practical experience. I think good programmers are similar in this regard because they have enough fundamental background in knowing how programming languages work. In the case of application setup, a lot of it is simply reading a lot of documentation and doing it a couple of times. For instance, just recently I learned how to make an rpm spec file as well as teaching myself ffmpeg. The hardest thing was simply sitting down and spending the time to understand how each of these things worked, then having enough patience to work with both.
Note that this is a little dangerous because you don't want to exclusively rely on a person's resume for what they know. I've seen many people put down anything just to get a job but could never back up what they know during an interview.
Companies and Project Reputations
This is another debatable issue. But the main thing is that I think really good programmers must work for companies or projects with hailed reputations. I mean, if you suddenly for whatever reason got a google, yahoo, Blizzard, EA employee at your doorstep, you probably should realize that this person is one of the best in the industry. At the same time, you should check to see if the person has good projects that they were able to do on their resume. You could always get a person from such a company who just went along for the ride but never innovated. But at least that person should have been on a project to give them enough experience and exposure to a broader range of thinking and led to some professional growth.Good Programmers Do
My high school physics teacher used to joke about the difference between math and physics. He would say that in physics, the numbers actually meant something. But he has a point: there is a dividing line between theoretical knowledge and real/practical knowledge and usage.Many of the good programmers that I know compliment their theoretical knowledge with having practical knowledge. These people are in the trenches, building things, working with problems and getting into trouble and figuring ways around the problems. Also, many of these programmers create things on the side.
In either case, these programmers enhance their knowledge through practical experience. The article mentions the "unseen projects" done by programmers. What this really means is how good programmers go beyond receiving a simple order from their boss and try to do more. I've constantly preached to my friends in IT to continue working on their skills by doing small projects at home. It's truly one of the best ways to learn and get better. Work and school can only take you so far. But I've learned much of my stuff just doing projects for myself at home. Look at this blog site for instance!
Potential
This is hard but I've found that people have the possibility to achieve more from certain characteristics. Like I meet some people who are hungry and want to achieve and are looking to make it. But because their resume is short, that they lack certain experience, or maybe this or that doesn't match that these people get the door slammed on them. One thing I look for in a person is not just the formal experience but this hunger and desire to do more. That person to me states that they have a lot of potential to do something innovative. Not everyone has to be this Steve Wozniac clone. There' s a huge danger in preventing modes of thinking in an industry that thrives on innovation. I've mentioned a similar problem before, but academia at times endangers the industry by planting notions that their classical way of doing computing is correct. Take a look at the Gang of Four book. A good part of academia criticizes that as being flawed. Then I hear programmer snobbery when people used to criticize scripting languages as not being able to build large scale applications.If we take a step back from even this, I see a bigger danger in how programmers with "real" degrees might even hurt their own industry by creating a type of elitism (i.e. google). But I have to ask these same people: what are you or we trying to achieve here? For myself in talking about society, I'd like to think that engineering is an open arena that allows new ways of thinking to breed better technologies. At the same time, we have to allow different ways of getting as many people to contribute in a positive manner. For instance, think about the huge criticism of the lack of women in engineering. Is there a reason? I think it's because the way engineering is perceived and handled has simply been so gung-ho and masculine it forgets how to integrate and allow women in engineering. As an example, think about the long hours of working in a lab. Does any woman want to spend their Friday nights sacrificing their eyes, health and hours trying to get some stupid program fixed? I think there's something in this area that needs to be explored.
Having A Strong, Informed Opinion
Arn Anderson once said that he worked something like 16 years to earn an opinion about the business of pro-wrestling. He has an excellent point that can be applied to many industries, especially computing. Just the other day, I was talking to my friend's friend about how they recently implemented some system in Java. They did all the best practices with J2EE, business delegates, MVC, etc. But the biggest two complaints made were 1) bloat; 2) overdesign.The programmers themselves were actually very good Java developers. So what's the problem about this picture?
The problem isn't about Java, nor the developers. The problem is that it's a difference of opinion. From talking to my friend's friend, he was someone in industry for a while with a lot of experience in both scripting and heavier languages like Java. His coworkers were more specialists in Java. However, he could perceive that the system didn't need all the wiring stated by the so-called best practices of J2EE. But his coworkers wouldn't understand.
Honestly, I don't think either group are wrong here. I do see his point in overdesign, but I could also see the argument for best software practices where maintenance might become an issue. For instance, if suddenly they hire new developers, how the common design patterns would be easily recognizable by the new guys and probably they could move fast in making changes on the system.
What I see overall those is that it's important that a person has a strong opinion of how something should work. When you work in the industry long enough, you'll understand what works best for you through your own experiences and what things blow up. If you can reasonably justify your thoughts, then there's really nothing wrong with it. But to get to this level, you need lots of experience as you stumble upon problems and solutions throughout your career.
When you interview developers, I think it's important to get an understanding of their viewpoint for certain subjects. The thing about computers is that they don't care. It's all binary to them so at the end of the day, whether you write a program with a massive file or well organized object hierarchy, there's no true difference. The only people these things matter to are users, business owners and the developers and people who have to maintain such entities. Programming is psychological and somewhat personal. My old TA from one of my introductory computer science courses had stated that programming is an art. It's true, the way one person programs differs from another. But art is about having an opinion about a subject matter. Compare how Britney Spears differs from Iron Maiden. Iron Maiden has always been passionate about their music, which is why they have such a loyal following. Then look at the rotten performance Britney Spears did at that awards ceremony. It's obvious she couldn't give a care because she doesn't give a damn about her so-called music.
So for good programmers, they should have and/or build up to a strong opinion on matters. For instance, find out if the programmers prefer scripting languages vs heavier languages. Or what if they believe that agile is truly better than waterfall. Or maybe that design patterns are useless and that you need to do things with a bottom-up approach. Good programmers have that experience edge that will allow them to reveal what makes them effective in an environment.
I was thinking about this so-called senior architect at my previous company. He was awful in every single way, but he got hired via corporate nepotism. But the thing that sucked the most about him was that he had no opinion on subject matters. I'm a firm believer that an architect should have a set of beliefs to enforce as guidelines for his developers. In this guy's case, he was just a pushover and his only beliefs were derived from magazines he might've read in passing.
Good Programmers Hang Out With Other Good Programmers
In my career tenure, I've been fortunate to have met some excellent developers. There aren't any "best" programmers in the sense that person A is #1 in the world. That's impossible and there's no objective way to grade such a performance. But I do recognize the incredible people in my career who have helped in one way or another lead me to the next step.There's an infection where if you get smart people, there's a chance that others can be elevated. When I worked at New.net/Idealab, I had the opportunity of working with some bright minds. I was probably four years ahead of my time because my coworker taught me the concept of MVC, while another pair showed me the Gang of Four design patterns book. Over at Nikko Citigroup, I was extremely lucky to get the opportunity to work with other quality system administrators. I learned so much about Linux because of their enthusiasm that until this day, I still use Linux as my primary desktop environment. And Ticketmaster had some of the best perl people I've ever worked with; I learned better practices to augment what I thought was really good knowledge. But at the same time I got to learn about how to make a more scalable website.
The bottom line is that good programmers should make strides to learn from the best while they're growing their career. Learn how to achieve the next level of thinking by getting clues for new trails. I made it a point for the longest time to do this in my career. In the end, it's really helped because I learned where to look whenever I had doubt in programming (and otherwise).
Good Programmers Share and Are Mentors
Insecurity breeds bad intentions is what I say. People who are insecure about their jobs tend to hold onto knowledge because they always fear that they'll eventually be let go. But I've always felt that a common characteristic in good programmers is that they enjoy sharing their knowledge and that they have a lot of confidence in themselves. The best example is Open Source software. I think the people who contribute to that are some of the best around. Also, these people have good intentions.Mentoring is a similar aspect. While a good programmer doesn't have to mentor, think about what this implies if you ever have tons of junior level programmers. You need leadership for the next generation so you've got to think in terms of growing your developers. If a programmer doesn't enjoy sharing his knowledge, what does that say about him? The other thing that's great about mentors is that the better ones get respect and are looked up to by younger people. Having that paragon of leadership will help a company survive a recruiting stormy day.
Word to the Wise
I've seen companies get trapped in believing that the number of certifications make a person better in IT. But what it tells me is that these people spent a lot of money and were able to pass a test. Even computer degrees really don't have meaning. Some of the best programmers I know never completed their CS degree or had something completely different than their current profession. In the case of those with computer degrees, some of these people cheated throughout school and so, if asked for their GPA, they could've got bragging rights. But when it comes to finishing something up, they never could deliver anything. On the other hand, the people who had no CS degrees simply were passionate for what they've done and were able to channel their energies into learning IT/programming without the formal training.
Post Comment
Trackbacks: (Trackback URL)
No Comments Posted Yet
