The One Thing Every Software Engineer Should Know
codinghorror.com
codinghorror.com
My answer would be: that code should be seen not as a static thing, like the answer to a math problem, but as an evolving effort to figure out the right question to be the answer to; and that it should thus be written to be easy to change.
Every programmer should
1. Learn C / Assembly - Understand how code interacts with hardware.
2. Learn Lisp - Understand how ideas interact with code (and vice versa).
3. Learn "O" notation - Understand algorithm complexity.
4. Be clean and flexible.
6. Refactor mercilessly.
8. goto 1
Interesting change of perspective. Could you expound - do you mean this in terms of product design?
Generally, I believe that the super-specializing niche engineering that's popular today is best served by broadening your base rather than sharpening your technical skills to stand out in a field of pins.
I.e. marketing, ID design attitudes, learning to paint.
He (sort of) defines Marketing as:
1. people understand what you're doing
2. people become interested in what you're doing
3. people get excited about what you're doing
I would say it was more about people understanding what your product can do for them, identifying it's value and thus parting with their money.You wouldn't start coding without at least a rudimentary spec to guide what it is you want to make, right? So why start designing your product without first identifying what and for whom it is you are designing it?
Marketing is the process of identifying the target market for your product. The "what it does" and "who it's for" part that a design needs if you're going to "build something people want".
I've run into a few companies who have painfully put an 'advertising guy' in charge of their marketing department and it's not worked well (in my limited sample). People are often great at advertising but couldn't put a decent product strategy together to save their life (or job!).
You wouldn't put your web developer or icon designer in charge of system administration or database scaling, right? Just like non-coders tend to lump everything technical together as 'computer stuff', technical folks can fall into the trap of lumping accounting, marketing, advertising, etc. into the same batch as 'business stuff'. That path leads to madness.
I don't think it is up to the ultimate consumer to become interested in what we (as developers) are doing. I think it is up to us to explain to them just what problem we are going to solve or just how we are going to save them time or money.
Thats marketing - identify the target market. Convince that market segment that they need your product and then make sure that you don't put obstacles in their way while they are trying to buy it.
If I'm not misunderstanding the Y-Combinator philosophy (for lack of a better term), this is premature optimization.
Focus on making something people want, and you will then be able to find a way to persuade people to part with their money. 1 - 3 above should, I think, be highly correlated with "make something people want."
(To pre-empt charges of "appeal to authority", consider this an argument with a proper citation. :)
A developer's product is themselves. It's about marketing yourself, To coworkers, bosses, interviewers, VC's, future partners, clients, etc.
It's not big M Marketing selling crap to people.
That is not marketing. And furthermore, Jeff ought to know better. I suggest he read this: http://www.codinghorror.com/blog/archives/000834.html.
Historically, consumption has been driven by brand appeal which is defined by form (brand), function (product), and message (definition)... you'd be surprised how many great products have bad brands and lost in translation.
For me, marketing is exactly like hacking code. Except that it's hacking for humans! Even though humans tend to appear inconsistent, there are patterns (just like in code!) that you can leverage.
The bottom line is this: my marketing allows me to do more of the programming I love.
"Identifying, anticipating and satisfying customer requirements profitably." Chartered Institute of Marketing’s definition of Marketing
that said:
if you're a resident in a company with a separate marketing team, it's key to speak their language -- after all, the people you're going to be marketing -to- is the marketing team. it's their job to get the message out, it's your job to be sure they know what the message is, and what it isn't. make sure you don't oversell, and let them know what would be overselling, and promote key features internally; they'll get external through the firm's marketing wing.
if you're a startup, marketing is doubly important. if you can't sell a friend on the idea of a product, you won't be able to sell the public. if your startup idea is complex, you're going to have to find a way to make it intelligible in ten seconds by picking the key features you want understood. and everyone in a startup is on the marketing team, whether they like it or not.
it's really worth it to read a book or two on marketing, if for no other reason than to get the lingo down. i've found my suggestions much better received when i could speak market-speak to the marketing team and sales team, and promote effectively to civilians. i recommend 'the culting of brands' by doug atkin as a good start.
Aim at the use, not the truth. Think about what it's supposed to do. This is helpful at all scales, from code snippet to a whole business. It's similar to finding the right question, before finding the right answer. Sometimes, it enables you to simplify dramatically.
It's ok to be bad in marketing and good in hacking as long as you are not alone.
I've never seen another area of business that didn't need to improve the way it communicated it's ideas to the software team.
Marketing isn't a dirty word. It isn't advertising. It's the art of persuasion.
So, it is true, and in actual fact software teams would be made up of developers who are highly effective communicators.
If smart engineers would just look at it as simply another problem to be solved -- people hacking -- we'd be set.