What Every *Good* Developer Should Know

I came across this guy’s blog post titled “10 Things Every Good Web Developer Should Know.” The post is geared toward web developers, but it did get me thinking a bit about the more general questions. I’ve noticed shortcomings among developers (myself included) for a many years. What are some of the things that all GOOD developers SHOULD be expected to know? This list is hardly comprehensive, but I can think of a few things right away:

1. Linux/Unix

If you can’t do basic editing in vi you may find yourself in for a world of hurt at some point. I’ve known many programmers who attempt to write software in the safety of their IDE running on Windows only to find severe problems when it comes time to deploy on the server (and the server is typically some flavor of Linux). I recall a fellow software engineering student in my college days saying of his code, “It all works, it just won’t compile!” It sounds silly, right? Assuming software that is written, build and deployed in Windows will built and deploy just fine in another OS is equally as silly (yes, this goes for Java as well).

2. How to debug

Duh, right? Not so. I have helped many, many engineers with basic debugging. I don’t know if it is that I am particularly good at debugging (I’d like to think so), or that (some) others are particularly poor at it, but for most of my career I’ve heard, “Matt, this isn’t working, can you help?”

Generally this question is asked by an engineer who has spend a fair amount of time staring at the screen hoping to gain some diving inspiration and fix a bug. It never works this way. You have to be willing to dig into the code and actually find where the error is. Look through that stack trace! Run the debugger! When all else fails, start sticking print lines all over your code! Staring at the screen will rarely reveal a complex bug. A compile error, sure, but a bug, no.

3. Basic knowledge of C/C++ and or Assembly

In the day of virtual machines, powerful IDEs, scripted languages, OOAD and encapsulation on top of encapsulation on top of encapsulation, it can be too easy to write code and never understand exactly how much stuff has to happen for that code to work its magic. I have not written anything in assembly since college, and I have not written C code for 10 years, but I rely on my knowledge of the low-level “stuff” every time I write code. It helps to understand fundamentals of computer science, optimization, memory handling and what exactly makes all the magic of a 4GL come together. Many people get by without knowledge of assembly language, sure, but these people will not be “superstar” engineers… They’ll be programmers.

4. Version Control

There’s no excuse for not using version control. I would say it borders on negligent not to.

5. HTML, CSS, Javascript
This one may seem like another no-brainer, but I have run into many developers over the course of my career who simply do not have anything more than the most basic understanding of HTML.

6. System Administration

Just the other day sendmail quit working for me. I use sendmail to alert the team about project activity in Redmine, Subversion and Jenkins CI. I run project management software that is served using Ruby and Rails, Apache and Tomcat. I have written perl scripts for handling batch jobs and specialized email alerts. I have written bash scripts that tie in to various subversion triggers. I have installed Ant, Maven, Git, Subversion, Tomcat, Apache, GTK, GCC… You name it… All with NO help from a Linux administrator. Like it or not, these activities become the responsibility of the lead software engineer. If you embrace it and enjoy it, life will be easy. If you are lost, and waiting for the help of a system administrator, you may be in for a very long wait!

7. Database Design

EVERY good programmer MUST understand things likes normalization, joins, foreign keys, natural keys, sequences, race conditions, locking, and on and on. We cannot rely on a database designer. Even the largest companies I have worked for have, the ones with database administrators, have little if anything to say about database design. Database design is the responsibility of the software engineer. A poor design can cripple what may otherwise be good software.

8. Quality Assurance

Our goal as engineers it to deliver a high quality product with no defects. We all know that there will be defects, but this fact does not change the goal.

9. Communication, Documentation, Technical Writing

Even if your company does have the means to hire a dedicated technical writer, that employee will have no idea what your code is doing. Strong documentation is on the engineer (us). I never had to take a technical writing class in college. Fortunately, writing is something I enjoy. For the engineer who hopes to never have to write a document, he or she is likely to be very annoyed in this career.


4 thoughts on “What Every *Good* Developer Should Know

  1. Hey Matt,

    How’s things going?

    I saw your post of the guys “What Every *Good* Developer Should Know” and couldn’t help but laugh my ass off, sorry. This guy lives in a little bubble and needs to get out in the real world, oh and maybe wait until he’s programmed for a few more years and at a few more companies.

    Remember Matt I’ve been doing this for 30 years and about 10 different companies. I’ve gone the gamut from Game development writing in 6502 Assembly on the Apple II and Commodore 64 to Pascal on Apple DOS to C on PC DOS to C/C++Windows 2.x thru Windows 7 to C/C++Mac to C BSD and Java on Mac/Windows/Linux. A number of my close friends a developers from the late 80’s and early 90 and I speak for them as well. The reason I can speak for them is because we’ve had this conversion so many times over the years, if I only had a Nickel for the times. They would agree completely with me especially about how bad a writer I am i.e. speller.

    #10 What a joke, Communications, yea, you should be a 7 on a scale of 10 or better, but Documentation and Technical Writing a big fat 0. I got straight F’s in writing in school and have had no problem in my career. Does being a good writer make things easier, oh yea, you can write you boss emails much faster.

    #7 Also a 0. I put myself on a scale of a 1. I’ve had to do two weeks of database programming. Of all the developers I worked with over the years (about 100) less then 10 new database programming. But 80% could be up and running in a few weeks.

    #5 That’s all you need to know. The only HTML coding I have ever done was the two years working with you. And I didn’t know anything about HTML before stating, like I didn’t know C before starting my C job or C++ before starting my C++ job or Java before starting my current job. Young developers always think what they know is Gods gift to man.

    #6 What planet does he live on. My company pays me way to much money to be fulling around with that crap.

    #1 LOL, vi, are you kidding me. I know less then 10 people who use it. I’m not saying they shouldn’t but there’s no reason on earth to know vi. It’s amassing how the 90 developers I’ve worked with over the years have gotten by with out it. I still work with guys I worked with back in 1990. There are guys I work with now who have been programming for 40 years and don’t use vi, shocking.

    #4 #8 Absolutely!!!

    These guy who write these stupid top 10 lists need to get a love. Also they need to get out of there cubes and stop eating Hot Pockets:)

    P.S. I must say one of the best times I had as a developer was working with you and having a chance to mentor you. You’re a really great guy and coworker.

Comments are closed.