Things They Don't Teach You In Computer Science 
10ren: The main thing is to be aware that there is a whole reality out there that you don't know and nobody else does either. If you can crack it, you can have great success.Cracking it takes alertness and endurance more than raw intelligence, because inspiration comes from new data - not from solving a pedagogically designed problem. New data is, by definition, not known beforehand. You get new data (that no one else has) by looking, by being there and doing the work, and noticing interesting opportunities.In a way, marketing is more aware of this unknown that science, because it changes more quickly for marketing (and no one believes a marketing success represents the fundamental underlying truth of reality). That is, marketing says "what do people want?" I think it's this, you think it's that. Let's ask some people - but they don't know either until they see it. OK, so let's invent the future, and see if anyone likes it once they see it. But underlying is the conviction that we don't know. For a Science, computer science is full of dogma and religion (it even has "religious" wars). Oh well, paradigms are inevitable I guess.I like paul graham's definition of business, "build something people want" = new product development + marketing.A tech degree teaches you some theory about "build something" (and not the practice of source control, testing, deployment, usability etc); but it teaches nothing about "people want", which is basically looking from the user's point of view.I don't think there's any silver bullet that would help my younger self overcome the vampires (to maintain the metaphor). I believe that marketing is the key skill, which I define as making something that is potentially useful to people, and then bringing about the state of affairs where it is actually being useful to many people each day.There are all kinds of entrepreneurial ventures; mainstream ones are popular at the moment, which Y-Com advocates (or appears to); but there are also highly technical ventures in the general category. For me, a deeper grasp of discrete mathematics might have been useful (but it's never been intuitive for me, and I note that the people for whom it is intuitive seem to lose their connection with what is usable for ordinary people - I welcome counter-examples to this point). I'd also like a deeper grasp of parsing theory (but much of parsing theory seems inappropriate for the way I want to use it - so maybe it's best to appreciate the state-of-the-art, without drinking its koolaid).For me (very personally), it's crucial to (a) be able to build something; (b) to notice that a problem can be solved fundamentally better (and see how to solve it); (c) to be able to communicate the solution in terms of what some people need.Disclaimer: As you'll have sensed, this is a personal philosophy rather than ordinary business practice. Many, many successful businesses have no need of this focus on the unknown. But this is the basis of many huge, cool, revolutionary, "disruptive" businesses.The one thing I wish I'd learnt (it's more an attitude than a skill):
avoid premature optimization including usability. Usability is extremely important; it's second only to understanding what you are doing. Keep things simple, even at the expense of usability. Don't add special cases that make it easier to use (not yet). If you let it get complex, you might still just understand it in isolation, but as it combines with other complexities, sooner or later you won't. This goes for a business as a whole, as well as for a computer system.