Ask HN:
"Things They Don't Teach You In Computer Science"
For me: 1) broadening my horizon in terms of nontechnical skills. I used to just read technical books and dive deep into technology whilst ignoring most other skills such as business, marketing, finance, social etc which is very detrimental. 2) networking and forming new relationships. When you are in school and have a job, your social network tend to be your classmates and your coworkers. I think that if that's all the people you hang out with, you develop this narrow vision of the world and miss a lot of opportunities that may be just around the corner if I had just bothered to venture out of my corner of the world.
(Replying to PARENT post)
"The knowledge that we have can be analogous to a circle. Inside the circle is what we know and what we call knowledge; outside the circle is what we don't know and need to explore. As our circle of knowledge expands, so does the circumference of darkness surrounding it. So the more we know, the more we feel that we don't know."
(Replying to PARENT post)
It was all about getting the best grades to kick butt at the interview. Because that was my circle thats all i knew at the time. Now after doing the grades and doing the 9-5 i know NOW what i would have told my younger self. I would have told my younger self that there is a better way.
The funny thing is ! i know that my younger self would just tell my current self to buzz off cuz a stable job is the way to go, its tried and tested.
I guess the lesson learnt is there are alot of things the computer science/engineering degrees dont teach because its not possible to teach these things unless someone has gone through the motions and their own experiences click in.
Comp Sci/Eng degrees can give ideas and direction but sometimes at the time you dont see them as ideas, you just see them as a waste of time cause you want to go to the next programming, algorithms or electronics class, not this stupid, project management or business for engineers class ...
(Replying to PARENT post)
#1 - is that you need to develop a filter for the advice you'll get. You need to learn when to ignore advice, how to make it so that you don't piss people off when you ignore their advice, and how to handle it when you do ignore their advice yet they were actually right. You also need to develop self confidence in your own independent decision making ability
#2 - is that, just because someone has "been there, done that, been successful" doesn't mean that their advice/approach will work for you. Many startups hire on big, powerful people who have had exits/successes yet they don't work out. There can be any myriad of reasons but just remember: "past success != future success".
(Replying to PARENT post)
(Replying to PARENT post)
(Replying to PARENT post)
On the technical front, CS will not teach you anything relevant to the practice of software development. You will not learn things like how to correctly factor code for automated testing, or good strategies for source code control branching and build pipelining.
(Replying to PARENT post)
(Replying to PARENT post)
If you want just to be an ordinary guy, just take a job. Most luckily, you won't need to know much about finance, business... you'll just do what they want you to do.
However if you want to build your startup yourself or start a company and be the leader, then you need knowledge. You don't really need deep knowledge on Marketing, but just small ideas to get you started.
(Replying to PARENT post)
(Replying to PARENT post)
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.
(Replying to PARENT post)
(Replying to PARENT post)
(Replying to PARENT post)
2. You can take school courses that would help you later in your career, like several business courses. I would take the more concrete ones, like business law or introductory accounting, otherwise the value can be questionable. With business law, those contracts you sign suddenly make ALOT more sense. (And what implied statues would be put in your business activities). With accounting, you know how all the financial statements work. I've found 1st level marketing classes tend to be a bit stupid although. Too abstracted from real applications.
(Replying to PARENT post)
(Replying to PARENT post)
(Replying to PARENT post)
The marketing, business, and work/life balance problems are important, too, but they don't really belong in a CS course, and CS professors are not experts on these topics anyway.
(Replying to PARENT post)