The One Thing Every Software Engineer Should Know

I'm a huge Steve Yegge fan, so It was a great honor to have Steve Yegge on a recent Stack Overflow podcast. One thing I couldn't have predicted, however, was one particular theme of Steve's experience at Google and Amazon that kept coming up time and time again:

This is a companion discussion topic for the original blog entry at:

@gdvanc: Sure, try feeling secure. But the world goes on. You can become a business man, true. Then you would become a leader in a corporation. What is more secure than that? But wait, now you are a leader…!?

Or you can try being securely a family programmer / developer who can do many things. But its not too secure. I mean, you need to engineer your software firm too. Its just a company like any other. And I bet if a company is bigger, then it has more resources to make itself better, better than a random family company. Now, which is more secure again? Why bigger companies usually buy (eat) smaller companies?

I still don’t like big companies just for the sake of the size. Big companies can become dead stones too, if their inner structure gets bogged down or there is lots of incompetent bosses trying to get ahead in their lives. But there is more potential in bigger companies, and software engineering is not going to stick to crafting in the long run.

If a big company has lots of family programmer type developers, then its bad for the company, because there is too much democratic debates and reinventing wheels. You cannot avoid reinventing stuff even if you go talk to people, because you cannot talk to everyone. Instead there has to be some kind of centralized way of distributing ideas, and need to use real software architecting. Companies need good architects but also good programmers. If you become a master programmer, you have nothing to be afraid of. You can work for you own company as master programmer or for some big corporation.

Nine dexterity? You are severely overestimating most programmers agility here.
Dylan on October 23, 2008 07:34 AM

Truths are more painful the more accurate they are. That one hurt. :slight_smile:

I always thought that was a good reason to group. :stuck_out_tongue:

Mmm. Baldur’s Gate 2. Greatest game ever. Sorry, I don’t have a real comment. I’m trying to think of where my old BG2 CDs are, and will it run on Vista.

Marketing is what Steve Jobs did when all Wozniak had was a bunch of parts he wanted to sell in kit form.

Timing and luck (and semi-criminal software licensing) is what Bill Gates did with MS-DOS.

Who wants to bet how many comments will be gaming-related versus marketing-related?


Some of us are just misanthropes, loners, or autistic. And some of us are ugly and smell bad too. Not everybody can be social.

DD reference for the win. Although you’re a few versions behind :wink:

/insert joke about min-max DD parties here.

Though that joke would represent the architype of a stunning and stunningly disfunctional development team.

I concur.

It’s certainly important for programmers to be able to communicate their ideas, but there are plenty of brilliant people out there with an aptitude for algorithms or architecture, but may not be great marketers. Isn’t it more the job of the software manager to promote his/her team and get that code out the door?

First, you’re correct about marketing yourself; however, a better place to start is honing, and practicing your elevator speech

Agree, I wrote about this in Can Your Team Pass The Elevator Test?

you want us to learn how to manipulate and mislead people into doing things for us through deceit and half-lies

Not at all. I believe programmers should cultivate communication skills. When you’re doing something cool/awesome, other people know why and how.

As usual, this is an awesome post - I like everything you’ve said, but my question (and perhaps it’s imperceivable on some level) is how do you get people to understand, how do you get people interested, and/or how do you get people excited about the project that is being developed?

I realize that this varies to some degree on a case-by-case basis, but, nonetheless, I always struggle with the how.

David, I’m not sure it’s a joke. The min-maxing analogy is relevant here!

While having a rounded out skillset is important in order to highlight and communicate the more awesome parts of your code, I think you also have to play to your class strengths.

To put it in more DD terms, pretty much -any class- could play the stats that Jeff represented. But they wouldn’t be amazing at it. They’d just be passable.

Just like a good party, you want to maximize where your class is most effective, and minimize where it isn’t (which is why it’s called min-maxing). The key here is understanding that the ‘coder’ class might not necessarily just encompass -coding-. It may also mean effectively understanding and communicating why your software would be useful to people.

That doesn’t mean you need to cover all of the marketing bases, though - another class in your party can do that. Someone who has put more stats into Charisma than a coder would. :wink:

Screw that, I came from marketing (I even have a degree in it). You know what? It sucks!

I think that not all engineer need to have marketing skills. If you say communication skills then all engineers would be concerned.

Marketing and communication are not the same, with Marketing you are selling something. I prefer to have a right documentation of an application than a marketing pdf. But one stuff is sure people with excellrnt marketing skills can sell themselves and can climb the management ladder faster.

One tool of internal marketing is powerpoint: do you really think that Joe the powerpoint specialist is better than his twin Jim that specialize in requirement gathering?

But i need to go listen to the podcast to be sure that i m not misunderstanding this :slight_smile:

So, I should choose to be a hybrid class Coder/Marketer? I was always a Fighter/Mage back in the day.

To keep yourself relevant and not just a cog, you must be able to express what you do to people who do not understand the importance of what you do.

However, start small. Market yourself to other IT geeks. Then work on moving into dangerous territory, like…the business people. Ideally, your manager is good at this stuff and can coach you. If not, find an online mentor. Rands is a good choice.

I think Jeff has a great point here, but it fails to impress those without leadership ambitions (a perfectly normal condition by the way).

So, instead thinking about it this way may help, as long as your a party member, you don’t need the Charisma, but if you want to become a party leader, or go solo, then you need the charisma. Otherwise if you like being a party member, which would you prefer as you leader:

-Single class Coder
-Single class Marketer
-Dual class Coder/Marketer