Posts Tagged 'engineering'

Update on “Thoughts on Software Development”

I got some good feedback on my previous post, Thoughts on Software Development. I wanted to get back to everyone with a few more things.

Matjew earlier questioned the value of computer science degrees and placed a great emphasis on the ability to learn how things work.¬† I appreciate his feedback. I’ll be the first one to admit that a computer science degree isn’t necessarily the best training for a career in software, and I spent five years earning one ūüôā However, I think that traditional engineers are no better, and are in many cases, worse.¬† I work at a CAD company and look at code written by mathemeticians, physicists, and mechanical engineers all day, and trust me, they’re no inherently better at software development than Asians are inherently good at math. ūüôā

Here’s why.¬† While problem solving skills and the desire and perserverence to understand how things work are admirable traits common among more traditional engineers, I have seen that this personality-type often backfires.¬† I can tell you with certainty that in most software projects:

  • Intuitive encapsulation:¬† Good
  • Disproportionately large amounts of time spent on debugging and maintenance:¬† Bad
  • Code that everyone can use: Good
  • Intellectual masturbation: Bad

Good code should self-documenting.¬† Code that is meant to be called by others should have some sort of recognizable interface.¬†¬† If you take¬†enormous¬†pride in making a career out of decyphering and maintaining difficult code, wouldn’t that time and pride be better spent making sure the code never got to that state of decay in the first place?¬† Doesn’t the “detective” attitude just enable and encourage more code that requires a genius figure out? I see too many “ultra-genius”¬†employees from the math, physics, and mechanical camp¬†who delight in telling long, long stories about how some code was, how it changed, and how it doesn’t make any sense any more, but they figured it out, and how that’s “cool,” and I have to ask myself, “why?”¬†

Here’s a great example of code written by a math person:

While understanding is good, the goal is to get the job done. We’ve all heard the phrase “Work smarter, not harder.” In software, having the humility request to stand on the shoulders of genius rather than prop them up, to demand that the code you work with is usable, rather than debugging and testing for hours and days just so you can say “I did it!”, is truly the smarter way to work and is what a real “good” engineer should do.