I would suggest a refinement to this sentence:
if I could teach my fellow software engineers one thing, it would be how to market themselves, their code, and their project.
How about:
if I could teach my fellow software engineers one thing, it would be how to identify their market and and its needs before they write their software or blogs.
Marketing fails because it is done last not first. If you do your marketing first, it is hard(er) for your product to fail. This is a very basic tenant of marketing. Identify the market, identify the need, build it/blog it. You and Joel did this with stackoverflow.
Microsoft often fail because technical teams have the power. Marketing is an stuck on afterthought. As the phrase goes you canāt put lipstick on a software pig. Technical people are often the cause of marketing failure, because they will not participate up-front. We just want to write some cool code. The reason we see marketers as a pain, is because we rendered them useless.