
Ask HN: Things They Don't Teach You In Computer Science  - wushupork
Like many of you, I have a Computer Science/Engineering degree. Over the years I've become somewhat entrepreneurial and have tried venturing into startups. (I'm still chipping away at it). As I became more and more involved in the startup world, I've come to realize that my education gave me the technical skills I needed but did not adequately prepare me for the real world. What are some of the things you've learned over the years if you could teach or tell your old self that would save you lots of time and agony. I think the HN community here has a wealth of knowledge and experience that could be really helpful to anyone looking to start their own thing.<p>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.
======
spitfire
1\. Girls are just as horny as you are. 2\. Those business guys are even
dumber than you think they are. (doubly so for the current crop of dotcom
guys) 3\. What's new is not necessarily better. Do not ignore the lessons (and
successes) of the past.

~~~
wushupork
#1 - I keep hearing that over and over. As for lessons of the past, I try to
read up on that lately.

~~~
spitfire
It really isn't something you can study. You have to be constantly absorbing
new knowledge. Have a huge amount of past knowledge at your fingertips so when
you see something that is isomorphic with something else in the past you can
use that knowledge.

To put it more plainly a lot of supposedly "old" business practices turn out
to be the best. I keep on seeing people reinventing things that were common in
the 1800-1900's and think to myself "Why bother? That's _just_ a $FOO
problem.". Stand on the shoulders of those before you and you have a better
chance of success.

------
ziadbc
I think that we all experience this to one degree or another. Albert Einstein
described the phenomenon as this:

"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."

------
sid
what you have said is true. I mean im from oz and when we were all at uni
there wasnt really much talk of startups and starting our own businesses, not
in my circle anyway.

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 ...

~~~
Palaver
Also being from Oz yet perhaps closer to the 'younger self' you described, I
feel compelled to reply. Although it is fun to romanticise about alternate
paths you are quite correct: had you not taken the path you did, you would not
have come to the realisation you now have.

I graduated from my CS degree with strong results in 2007 and bucked the trend
of my peers to live the entrepreneurial dream while freelancing on the side to
sustain me. I was rather naive. While freelancing I had no idea how to quote,
bill, manage scope, protect myself from being taken advantage of, etc. You
pick these things up along the way, but the experience can be painful. My
entrepreneurship endeavour fared even worse as I quickly fell into the trap of
trying to produce perfection in a vacuum. The saving grace of this period
results from my dabbling in the share market which has proven to be rather
profitable.

I made the stark decision to give the 9 to 5 a shot and quickly landed a job
in one of the large IT consulting firms. It has been the best decision I've
made so far, if only to give me exposure to the significant problems that
exist in enterprise software. If there's one industry that deserves to be
innovated to the hilt, this is it. I feel invigorated and more motivated than
I ever have been to break out on my own. I also am the most capable I've ever
been, having stripped away some of my nativity (although hopefully some
remains - I suspect it can be valuable).

~~~
sid
I guess we are in a mirror image at the moment :) i worked at a big
consultancy company then worked overseas for 3 years then came back here
again. When i was overseas i worked in asia and it was there that i really met
with some great business people. I then decided to do business myself and at
the moment its working out ok. But i was only able to come to this realisation
after the work i did in the various companies be it crappy work unfulfilling
work or not.

When i look back at it, i feel that it is unfulfilling but i cant deny the
great skills that i learnt from the various companies. Anyway, best of luck
with your endevours :)

------
ScottWhigham
Two things that hasn't been mentioned here yet:

#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".

------
haseman
Your QA guy (if you're lucky enough to have one) is you best friend in whole
wide world. When he/she finds bugs in your code...hug them and buy them beer,
because your users/clients could have found them instead.

------
carterschonwald
More generally what they don't teach enough about in university is knowing
when to make time for certain people and knowing when to stop making time for
certain people. This is a skill that I think is really key, and no program of
intense academic learning will naturally lead to you knowing such.

------
jimfl
The more people in middle management (i.e. people who are not officers and
people who are not leaf nodes) the more difficult it will be for the
organization to make rational decisions, and the more compromises will be made
to the quality of the product in lieu of other considerations (schedule,
metrics based on invalid assumptions, etc.) In general, these people will find
that they have no actual way to contribute to the product, so they will
attempt to contribute to the organization instead, which bogs everyone else
down.

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.

------
trapper
Write something that solves a pain. Then drown yourself in that pain and see
if your solution really solves it. Few people take step 2.

------
csomar
In school or universities, generally they teach only the thoerical part. The
real world scenario is another important part, that everyone discover it
himself. It's later called "Experience" and "Career".

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.

~~~
tlrobinson
Yes CS programs teach more theoretical stuff, but it's the fundamentals you're
less likely to learn (correctly) on the job, but which will make you much
better at your job.

------
critke
Build something. Then listen really hard to what people say. Don't take it
personally - just make it so it works for people. And Iterate!

------
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.

~~~
Beanblabber
Of course there is no silver bullet to help you overcome such things; they
have no effect on vampires.

~~~
10ren
You're right; I meant werewolves. I'd edit but the edit period has expired.

------
sown
One thing I wish I could have more experience or training with is office
politics, at the very least to defend myself with. There are a ton of dirty
tricks that unscrupulous co-workers can and have tried, to pull on me and I
wish I had more of an idea of what goes on.

------
cruise02
Here's a list from a few months back.
[http://stackoverflow.com/questions/258548/what-is-the-
most-i...](http://stackoverflow.com/questions/258548/what-is-the-most-
important-thing-you-werent-taught-in-school/258559)

~~~
wushupork
I missed that list. thnx

------
elai
1\. Business school people are more entrepeureally minded and tend to have
more of a personality (no duh...)

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.

------
slackerIII
Just use a hash table.

------
tsally
How to program well.

------
banned_man
How to read code, use version control, write code in a professional
environment, find libraries that can help you, and keep abreast of current
technology. I think that CS grads should be expected to be contributing to
open source projects by senior year.

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.

