MATTSTOCKTON.com

15 Jan, 2009

Habits of a Rockstar Software Engineer

Posted by: matt In: software ()

Every day, a software project dies. Some die a slow, painful, expensive, death. Others die a quick, not painless, and relatively embarrassing death . As Software Engineers, we never want our own projects to die. As individual contributors the livelihood of our projects are often times outside the realm of our control. At the same time, there are many things that are within our control that can help the projects that we work on be a success. This is a list of several habits of Rockstar Software Engineers — habits that when practiced, will not guarantee success in a software project…but will greatly limit the possibility for failure.

Learn from your (cube) neighbor – It doesn’t matter if your neighbor is a Junior Programmer or the CTO – run your ideas past them and see what they think. If your neighbor has more expertise then you, then they may have some tried and true advice to get you past the roadblock you’ve been hitting in your code for the last hour. If they are less experienced, then challenging them with a complex problem and discussing it with them may help grow their expertise — something that will surely help your team in the long run.

Keep it simple – This is so easy to say, yet so hard to do. This is the one item that I have to constantly remind myself of when developing software — Software geeks often generate their own requirements without even realizing it (‘Example: Oh, I bet they would like it if they could do this this way OR that way!’). Antoine de Saint-Exupery said it best – “A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away” – Ask yourself each day – ‘what can I remove from the software and still maintain the essence?’ – This alone will get you heads above the rest.

Your code must speak the same language as your client - I’ve been reading bits and pieces of the book Domain-Driven Design . The one main message I am taking away is that the language your code speaks and the language your customer speaks need to be one and the same. If your client keeps talking about how the ‘Policy’ can be sold by a ‘Salesperson’, then maybe you should name your classes ‘Policy’ and ‘Salesperson’, and name your method ‘sell’ not ‘widgetA’, ‘thingB’, and ‘update’ (OK – this is very over-simplified…but the point is that your code will ROT fast if you need to go through multiple layers of translation to understand the changing requirements…let your code be the voice of your customer!)

Water your brain – If you aren’t reading reference books to keep up to date, then you aren’t doing your job as a Rockstar Software Engineer. I don’t care how sweet your code is…if you can’t pick up a few books a year written by the software gods (even if it’s just for a quick refresher) – then you aren’t doing your team any favors. There’s plenty of great books out there to read (and plenty of crappy ones too — so be careful). Two books that I like to read at least once a year are: Smalltalk Best Practice Patterns and Design Patterns — yes I know, very old school, but there are timeless nuggets of information within each! Recent books I’ve read or are reading include the Domain-Driven Design mentioned above and another Kent Beck book, Implementation Patterns. I’m always looking for new books — what is in your library?

Test first - Sorry to break the news, but test-driven development is not a buzz word…it’s something you need to do. If nothing else, it will force you to Keep it Simple. If you write the tests first, you can define the criteria for success up front, therefore providing you with a finish line — when the tests pass, you’re done. Without a finish line, it is so easy to keep running….and running and running, until you have implemented what you think should be implemented…not what the customer needs

Introduce your code to your team - If you work in an environment where there is shared code ownership, this is incredibly important. When you are working on something that you know no one else on the team is familiar with, review the code with them when you make changes. This can accomplish several things at once. First, When you are on vacation without a cell phone, your team will know how to fix your wacky code – We’ve all been here… The last thing you want is to have a message from a co-worker on your hotel room phone in Mexico saying that all hell has broken loose! Secondly, the best brain to have on a software problem is the one that isn’t biased towards a solution. If you wrote the code, you are already biased — you think it is the best way to solve the problem, whether you like it or not. A fresh brain can point out the obvious ways to do it better — and that is a good thing for your team (even if it hurts your own ego a little bit).

These are just a few of the many habits practiced by Rockstar Software Engineers…what others can you think of? I’ll write some more of my thoughts on this in a future blog post

Reblog this post [with Zemanta]

1 Response to "Habits of a Rockstar Software Engineer"

1 | Lorinc Hever

February 6th, 2009 at 8:55 pm

Avatar

Good posts Matt!

Here is few more thought on software engineering. What do you think of them?

Martial art approach: when I was engaged to learn the sword the Master showed me 1 single cut and asked me to repeat it 10000 times. To able to solve big problems solve thousands of small problems.

Chess Grand Master approach. Chess Grand Masters knows about 15 000 chess table positions according to a book I’ve read years ago. This made me think how can I became a software grand master. Let’s take the model of 1 table position is 1 unique problem I solve whatever simple as it is. If I would solve only 1 unique problem per day it would take over 41 years to master software engineering…

When in Rome, do as the Romans do: if you are developing to Linux use Linux as your main OS, if your developing to Windows use … , Mac … etc. Get to know, like, love your target.

Less is more. If you able to reuse your code is good, if you able to reuse somebody else code it’s better (considering it’s legal reuse), if your are able to solve a problem without writing a single line of code it’s the best.

Comment Form


  • Belton: Love the app. However, recently after upgrading to iPhone 4 with ios5. My phone has been locking up when I try to open the text I sent. Also, some of
  • Lisa: My group texting was working until recently after updating my Iphone 4S, but now only the Iphone contacts in my group are receiving the messages. Wh
  • Mickey Eckles: Love the app. It seems like 2-3 names disappear on my lists randomly. One time they are all there. The next time I text, one or two people are miss

About

Rants, Raves, Thoughts, and Spins on Software, Technology, and maybe a bit of everything else!

Archives

My Tweets (@mstockton)

Powered by Twitter Tools