Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Things They Don't Teach You In Computer Science
25 points by wushupork on April 19, 2009 | hide | past | favorite | 27 comments
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.

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.




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.


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


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.


1-2 have no relevance to CS. 3 is important.


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


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


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


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 :)


This is very true. If your mindset is not ready for it, it will just be noise much like your parents' advice when you were a teenager. I think entrepreneurial classes should be part of university curriculum as well as personal finance. I know way too many college acquaintances lured by credit card offers on college campus who now are oblivious maintaining credit card debt thinking it's normal.


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


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.


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.


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.


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.


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.


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.


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!


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.


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


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


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.



I missed that list. thnx


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.


Just use a hash table.


How to program well.


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: