The One Thing Every Software Engineer Should Know

@Jeremy: Yes, but Salary(MarketingExec) Salary(Jeremy) !?!

This boils down to : don’t build then sell, find out what will sell then build

…and as usual :

don’t copy what people already have - they have that already it won’t sell

don’t ask people what they want - generally people don’t have a proper idea what they want (or they won’t tell you) this is why marketing is hard

@Twylite: Programmers don’t communicate with customers. If they do, then they are doing analyst’s job and designer’s job and so on. The programmers should not need to care what they are creating. They are just programmers that make things happen according to blueprints and designs that others have made. Of course this is not that straight forward, so programmers need to understand some of the stuff. But I don’t like at all the idea that a programmer has responsibilities like engineering business, defining software and systems, architecting or such. One person cannot master everything, so I wouldn’t trust a programmer, though I would need a programmer. I want the programmer be as good a programmer as he possibly can.

I want grand master programmers, I want grand master analysts, I want grand master business engineers, grand master sales persons, grand master architects, grand master bosses… I don’t need a programmer who spends time advertising his code and skills to others. Sure there can be code reviews and design meetings. I want more collaboration, but a programmer should be a programmer. And sure a programmer cannot always be just a plain programmer, but you get the idea. I want the corporation be a lightning fast and good at every level, not that some guy goes to other guys telling about his code. I hate if I would have to go talk and hope to get some ideas about what others are doing. I want the ideas to be in a database documented and ready to be downloaded.

There is nothing wrong about sharing ideas and talking to others. But a company cannot rely on random talks. Think also craft versus engineering / manufacturing. They say software industry cannot be like factories, but of course it cannot if we don’t even try.

If the other people are not existing or not doing their job, its not the fault of the programmer.

I love the DD part.

Just wanted to say, glad to see you posting regularly again jeff.

…fundamental human communication. Not something us programmers have historically been so great at.

~ The comments show that this is still, and probably will be for the foreseeable future, the case.

In other words, you want us to learn how to manipulate and mislead people into doing things for us through deceit and half-lies. I got an MCSC not an MBA for a reason.

@Silvercode -

If you program only for the love of programming or are satisfied with being a drone in the code factory, then knock yourself out. Let someone else handle all that other nonsense.

If, however, you write code (at least in part) to provide you and your family with food, clothing, shelter, health care, expensive toys, and fun vacations, then understand that expanding your ken and your talent beyond your mind-boggling and awe-inspiring programming abilities and into the domain of your analysts, your architects, your project managers, and your boss - whether you do their jobs or not - will make you more valuable and more valuable means a more secure ability to provide food, clothing, shelter, health care, expensive toys, and fun vacations.

The choice between your coding acumen and your business acumen is almost never Either/Or.

You can make a wonderful living coding the hours away with no concern for the world around you, but you will likely still have limited your opportunities, increased the risk of writing code that’s never used, and left your income at some degree of risk. If you choose to rely on someone else to understand the business needs and customer requirements and everything else that is required to turn your artfully-designed strings of zeroes and ones into cash flow, then you have chosen to be reliant. You rely on their competence. You rely on the quality of communication between you and the non-coders. You rely on your ability to deliver more value per dollar than coders in countries you’ve never heard of. You rely on a lot of things not entirely in your control.

That’s okay; the world may need more people that will just sit and code whatever they’re told than it needs consummate IT professionals; more excellent line cooks than great chefs; more expert draftsmen than sought-after architects.

It’s not for me, though.

It’s hard to get heard on a blog like this, but there is a great Radiolab podcast on this topic: Robert Krulwich’s commencement address Tell Me A Story at CalTech

http://blogs.wnyc.org/radiolab/2008/07/29/tell-me-a-story/

Haha, now this is a topic I can get behind :wink:

I’ve explained programming in terms of DD before:
http://d20.jonnydigital.com/2006/12/object-oriented-programming-concepts-in-java-explained-with-dd

If the average is 10.5, then are you also suggesting that programmers should be in the top 5% of the population with statistics like that?

You can spend any amount of time improving your skills in any area.
Sure, if you’re Bill Murray in Groundhog Day, but most of us have to deal with things like the passage of time.

I understand the message here - most programmers don’t have communication skills. Those are important to have. But you’re one of the few public voices who seem to think that it has to be at the expense of core design and development skills. I wonder why that is.
Because of all the many activities in the world, coding is second only to reading in its isolationary effect. Simply put, if you work in a product-focused role, you spend all day staring at a screen, thinking deeply about how to solve a problem, so you won’t talk to people as much as if you were in a management or people-focused role.
Communication skills improve through practice, and where marketers, salesmen and managers all practice communicating constantly, engineers spend their most productive time NOT talking to people.

But I can’t improve my str stat! I need to maintain my noodly appendages in reverence of my chosen faith! (FSM for the win!)

Seriously though, I do agree that people need to concentrate on communication skills in addition to coding skills. That being said, it isn’t appropriate to waste all your time attempting to become a true generalist. Barely capable of all tasks, yet suitable for none.

In other words, you want us to learn how to manipulate and mislead people into doing things for us through deceit and half-lies. I got an MCSC not an MBA for a reason.
Alright, this always annoys me. MARKETING does not mean sleaze and half-lies.
Is your code no good? Are you no good at your job? And if not shouldn’t you be able to make people aware of how good you are, and why your ideas have merit? Shouldn’t YOU be the best person to market the products you’re actually involved in creating?
Maybe if people stopped passing all the marketing work over to people who don’t have an engineering background and can’t understand how a product works, we’d get a little less half-truths and outright guessing in the marketing-speak. Half the time, salesmen aren’t even lying to you, they just don’t know the real answer.
Marketing is about telling people why you are the best person to do the job you want to do. If you don’t honestly believe that, then you shouldn’t be doing the job. And if you do, you shouldn’t be afraid to say it.

And if the answer to those first two questions is Yes, shouldn’t you be able to convince people that there’s a problem that needs fixing? If You can’t market your solutions to your problems, then somebody less qualified but a better marketer will solve the problem for you. Badly.

Continuing the DD analogy, you forgot that programmers are the magician class. They can be excused for their odd behaviour because they know magic…

Maybe if people stopped passing all the marketing work over to people who don’t have an engineering background and can’t understand how a product works, we’d get a little less half-truths and outright guessing in the marketing-speak. Half the time, salesmen aren’t even lying to you, they just don’t know the real answer.

If You can’t market your solutions to your problems, then somebody less qualified but a better marketer will solve the problem for you. Badly.

Well said.

The marketeting department I would put them in the Thief Class…

As a side off-topic note, it is important to note that under the BGII’s DD rules, one could not have more than 18/19 INT plus some modifiers; therefore reaching INT 50 is definitely impossible. :wink:

I agree with the poster that also made some emphasis on Wisdom rather than full INT.

Chaotic Good is not a nice alignment either. I’d rather be Neutral Evil. Do not harm unless you have to… otherwise you’d never use Goto statement :wink:

A nice analogy tho’. A nice product not known by its potential customers is not a product at all, is it?

Now to find my Irenicus…

You keep using the word people in this article, but I’m not sure which people you have in mind.

If you mean customers, then I can’t agree that selling the product should be the main priority for an engineer. Assuming you are working in a reasonable sized company, there are going to be people much better at that job than you.

If you mean your employers, than I think I can see your point as far as your own career is concerned, but I don’t think it is good for the industry. All too often, decisions are based on which engineers have been best at selling themselves, rather than actual results.

If you mean your colleagues, I think this is just confusing marketing with communication.

BTW, how does this fit in with the concept of egoless programming?