Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Current college student with big goals.
58 points by Nemisis7654 on Oct 1, 2010 | hide | past | favorite | 44 comments
Hi everyone,

I have been lurking around here for some time and am in love with this site. I figured now would be as good a time as any to ask my question.

I am a current college student majoring in Computer Science. I know that, after I am done with school, I want to start a startup at some point (not necessarily right out of school). I know it's going to involve a lot of hard work, but this is something I have been thinking about for a while now. So, my question is this: what sort of advice can you guys give me that will prepare me for such an undertaking. Thank you.

~Aaron




1. Be good. Be very good. Don't be the "front-end guy" or the "back-end guy", or some other "guy". Once you know what you want to build, building software is about five things: algorithms that solve your problem, programming languages that express your algorithms, computer architecture that makes your algorithms run efficiently on real hardware, the practical toolchain, and the management of complexity of real software. So study algorithms, and then graduate algorithms, and then advanced graduate algorithms. Do every challenge problem online. Study programming languages to express those algorithms. You can get away with three: C, Lisp, Haskell. Everything else is crud. Study computer architecture and compilers to see how your programs run efficiently. Learn great tools (Emacs/Vim/Visual Studio/bash/Linux/OS X/Windows whatever - just great ones that you're damn good at). Learn how complexity is managed. Look at lare open source projects, study how they're organized, and contribute patches to understand how small changes can effect a large system.

2. Learn what to build. Once you get really good, your time starts to be more valuable than gold. There will be very few people in the world who are as good (the internet will bias you to think that the world is full of great people - this ain't so, there isn't enough of 'em). You owe it to people and to yourself not to bother with improving something by 1% or 10% because you're wasting time in opportunity cost and could be improving something by 1000%. Make sure what you're building is worth building, and make sure every line of code you write is worth writing, otherwise you will fail. Break the NIH syndrome in yourselves now (all good people have it, phenomenal people that build successful companies broke it in themselves). Learn to infer what people want.

3. If you're that good, you will easily get a $100k job after graduation (probably more by then), and grow to $180k in a few years. That's very, very comfortable. It's not worth busting your ass 16 hours a day to build another CRM tool when you can have a $180k job. So don't start a business to start a business. Start a business to bring a meaningful change in the world. A huge change. A 1000% change. There are lots of hugely successful companies out there that do what's not meaningful to you - ignore them. But do make sure that what's meaningful to you is also meaningful to millions (hopefully billions) of others. You won't get rich writing Lisp compilers.

This is what matters. Most everything else is fluff.


I challenge anyone to name 5 successful entrepreneurs who followed this formula. It sounds to me like a recipe for becoming comfortable with $180K and unwilling to take risks, and it seems very narrowly focused on a small class of highly algorithm-oriented problems.


I don't know if he followed the formula exactly, but it roughly sounds like what Jeff Bezos did: http://en.wikipedia.org/wiki/Jeff_Bezos

There. One down, four to go :)


Another way to look at it is that most successful entrepreneurs follow something similar to this formula. 'Being very good' == professionalism and high standards == domain specific binary search == solving problems in logarithmic time == orders of magnitude more productivity == orders of magnitude more value == ??? profit.


(as someone who hasn't yet started a startup)

I agree with advice 1 ("Be good. Be very good."). But do you really believe you have to be -that- good to start an online business?

Also, I believe breadth of knowledge is also good (not only depth) - I've studied and worked in networking and most of the parts of the software platform, so when something fails I have a decent idea of where to start looking (I guess you cover that base with "Don't be the "front-end guy" or the "back-end guy"").

And you very likely won't get that knowledge from college - you have to learn it in the "real world" I agree with the other advice here about working in a challenging environment like another startup.

Also, point 2 - "the internet will bias you to think that the world is full of great people - this ain't so", I suspect that it's true as well.

Which brings me to point 3 - I'd do what's more comfortable for you and the way you want to live your life.

What I don't entirely agree is with not being worthwhile to start your own business unless your change is that dramatic.

I believe that wanting to be your own boss is a good enough reason (bringing a 1000% change TO YOU) - see the guy who quit Goldman Sachs for example: http://news.ycombinator.com/item?id=1690001 .

Or doing something that eases a pain point to 10 users (say, bingo cards for teachers :) ).

Not everyone has to change the entire world :) (though it's good to try!)

Just my opinion, 4 years after college (and 8 years of corporate jobs).


Wanting to be your own boss is 100% enough to start a business. But not to start a Successful Business.

If you don't know what you are going to do and you just start because you want to start. Chances are more that you will fail.

Some people give an excuse, failure is necessary for success. Total BS. Crap.

Those people misinterpret the saying.

If you want to start a business of Restaurant, you should know what is the job of a Dish Washer.


Be Good != Be Good Technically.

You should be good at what your business is going to be.


I know this is a fluff comment, but I would upvote point #3 many more times. I see a big movement with everyone jumping onto the entrepreneurial bandwagon similar to the dot com era of yore. Many ideas are pretty solid, but don't start a business to "get in on a good thing" if you don't have a passion for what you're doing. You might hit a very THIN margin of luck, but chances are more likely that you'll fail. I believe passion drives innovation above all else.


I would definitely add practicing design/UX/etc. to #1.

A big part of creating a high-quality product is about good presentation & interaction - even if you have a designer in your future team it helps to speak their language.

Previous HN threads on design: http://news.ycombinator.com/item?id=1604915 http://news.ycombinator.com/item?id=1103578 http://news.ycombinator.com/item?id=1474315


> Start a business to bring a meaningful change in the world. A huge change. A 1000% change.

I know it might be heretical to say this on HN, but establishing and growing the kind of organization that can create this kind of change in the world will require a lot more than just technical and/or academic chops. Ultimately, what you'll need to make a difference in the world is a lot more intangible than that: vision, leadership, ambition, tenacity, etc. My advice would be to focus on society and find a way to "hack" it in a novel way that is mutually beneficial to both your organization and to society as a whole--this is how you can really make a huge change in the world.


I agree with most you said except a small detail: how is C good at expressing algorithms? There are far more expressive languages in the C family. The point of learning C I would argue is to have at least one low level language in your toolbox.


how is C good at expressing algorithms

Fundamental algorithms can't be expressed sanely in anything other than C. How the heck do you implement a hash table in perl, for example?

Sure, higher-level languages provide some data structures; but they're not always going to have the internal tradeoffs required to make them a good fit for your problem space. A few weeks ago I had to rewrite malloc (well, technically I added a caching layer in front of it) in order to get a 4x speedup to my code -- you're never going to do that in a language which doesn't even admit that malloc exists.


Learning C is also a very important step to understanding operating systems.


Which is actually not vital for doing a successful startup.


The parent said _understanding_, not writing your own[1].

To take an example of a web startup (just because the are the most common), here are some question that require understanding the basics of operating systems:

1) "why is my database cache constantly being swapped out to disk when there's enough memory in my machine"

2) "why are the pages taking so slow to load, even though I'm only serving a few hundred hits a second"

3) "what is my webapp doing that's making python/ruby take up 100% of the cpu" (to find this out, you'd likely be using gdb, ltrace and strace which very explicitly require at least a passing familiarity with C and POSIX)

4) "why is there a process showing up in ps/top that I can't kill even with kill -9"

Finally, you certainly have to be a good programmer to start a startup: not the best one, not a "10x programmer", but a good one (irrespective of what sort of applications you write). You can't be a good one without understanding how your programs work.

[1] That said, I had my hands dirty in Linux source code when debugging an issue while working in (of all places) an email security company.


I'd argue that it teaches you how to express the algorithms in an imperative manner, which most of the world will use. That way, you'll be able to more easily read the code the rest of the world writes.

Or perhaps it's to teach you how poorly some languages express algorithms.


Impressed. 100% agree with you.


Start now. Even if you don't have the time or resources to do something huge, make projects that can be of real use and benefit to people. Some you may charge for; others you may offer for free. Your users might be people at your college, in your community, or all over the world. No matter how small or large the userbase, whatever experience you can get will be helpful, and one of these projects may grow into a significant business.


Can't agree more with this comment. Depending on your degree, the amount of work required will be significantly less than the amount of time you have in the week. Not to mention that interest rates on student loans are dropping again, meaning living off student loans while you start your business and do school is a potentially much more successful way to go than any other.

The problem with starting "some time after" you graduate is how easy it is to burden yourself with life responsibilities (wife/kids, new car loan, mortgage etc) when you have real income and stability from a job. When you are halfway into getting your startup off the ground and ramen profitable and you graduate, you can maintain your poor college kid lifestyle much easier than a previously well off wage earner can go back to a poor college kid lifestyle.

This worked well for me, but I also didn't care for any of the other "college experiences". I got my partying (drinking, smoking, minimal sleep etc) out when I was in high school and my early 20's, so found most of my younger college peers boring when I eventually finished my CS degree.


Start right now.

That's what I tell everyone that says he wants to do something after they graduate. This goes for anything, not just startups/programming. The best time is now.


I agree, there will always be barriers in the way to diving in at the deep end with your own startup. The quicker you tear down the artificial barriers the better.


I'd say: focus. Get as much as you can out of being in school right now-- you're unlikely to get a chance again to spend 4 years dedicated solely to expanding your knowledge. Learn everything you can. Find out who the best professors are (ask around, you'll find out quick) and take whatever classes they are offering. (A good professor can make even the dullest subject come to life; a bad professor can kill even the most fascinating topic.) Learn what you can from your friends; don't pass up any opportunity to learn. And, finally, try to pick up as many good habits and disciplines as you can-- you'll find years from now, you still have some of them.


Get to know all of your classmates as best you can. They are a big part of your future network, and potential startup collaborators.


Great point. Build a good reputation (both online and in person), hopefully while trying to help genuinely :) .

It really pays off much better than just being very good.


Work for someone else's startup. That's the best way to learn how it works on the inside.


I cannot agree with this advice enough. Working for a startup, even as a summer intern, will give you a much clearer idea of what it actually means to run a company than reading HN every day.

You may even realize it's not what you want to do after college.


1. The first rule to actually be able to build stuff is to learn real life programming: know a couple of languages, their libraries and ecosystems. Tip: use open source tools

2. Know algorithms to make smart software. If you make a board game, A* comes in hadndy for the AI. If you make a service like dropbox Minimum bounding box algorithms lower your costs.

Now you can build some stuff. Time to sell.

3. Learn the basics of finance and legal stuff of your country to be able to solve paperwork related stuff.

4. Learn some marketing to attract users

Profit!

Tip: A lot more in Ask HN Archive - http://www.gabrielweinberg.com/startupswiki/Ask_YC_Archive


Have some idea what you're going to do.

"I want to have a startup" is not a plan. It is a path to failure. If you haven't got any idea what you want that startup to do, you're just setting yourself up for disaster.

Real, productive startups happen when someone wants to do or create a specific thing, and then creates a startup as a vehicle for that thing.

A startup is not an end. It's a means.


It depends a lot on what you want to do. Some business problems are not all that technical, some are highly technical.

Some startups are easy to bootstrap, others aren't.

The main advice I'd give you is this: Figure out what you really, really want to do... the thing that makes you most excited and passionate. And demand of yourself that you do it.

There's nothing worse than working very hard at something and realizing that you've put blood, sweat and tears into something you don't really give a damn about.


1. Read code written by master programmers (e.g., http://golang.org/src/, http://plan9.bell-labs.com/sources/plan9/sys/src/) to learn how it's done and to keep you humble. ;) But beware the opposite danger of becoming disillusioned when you realize that most of the code you will encounter in the real world is not written by master programmers.

2. Understand that much of what you learn to do as an undergraduate CS student are "historical reenactments" (http://research.swtch.com/2008/03/rotating-hashes.html). The core algorithms and data structures you need are almost always provided by the language or libraries.


1. Plan to start your company in 10 years.

2. Between now and then, work at a small company, a just-funded startup, a raw startup and a big company (maybe in that order, maybe in any order). Watch the management closely and LEARN.

3. No matter how frustrating it is to work for someone else, stick to your plan.

4. Keep your technical skills current.

5. Learn management skills.

6. Save your money - live frugally now so you can self-fund your startup and keep control of it.

7. Become an expert or become good friends with an expert in some domain - gaming, architecture, finance, whatever.

8. Do your startup in that domain.

9. Develop a healthy lifestyle. You'll need your all your health and stamina to make the startup succeed.

10. Regularly sell things on eBay and/or Craigslist to get used to selling to people.

11. Watch how your non-technical friends use computers. They compose most of your customer base.


Having followed such a detailed long term plan from almost 14 years ago to realize my dream of starting a business, when I thought I didn't have the resources, the personality, the network, the background, the support or the backup, having worked in a a government R&D lab , a small company, a fortune 500 company, having completed 2 degrees, 1 Advanced Diploma, a Six Sigma Black belt certification...., with all dew respect to mhewett for the good intentions behind his advise..... please don't follow this advise.

(edit: Actually all that mhewett says, is right, observe as much as you can (surprisingly not many really do), try to learn whatever you think can be useful in the future, except for one very deadly thing(the fatal flaw) - the 'plan to start in 10 years'.)


+1


Forget the technical things. While in college, get a job in marketing. Get a second job in technology if you want, but chances are if you are a CS student that can actually program, then the technical side is the least of your worries.

Running a business is extremely hard for some people. Expose yourself to it. It would be even better if you worked for a smaller company to get a more holistic view of it.

When I was in college my first job was managing the entire ecommerce side of our business from building to maintaining to figuring up innovations. There were 4 of us. I got significant experience in accounting, marketing, cash flow, customer service... everything. Having that exposure has helped me immeasurably thus far.


Start now.

Start a start up or go execute an idea or help somebody else execute an idea and use that as a tool for learning relevant stuff that is required to successfully execute an idea. Whatever reason you are not able to execute it, thats an indication of where you have to plug holes in your skill set, either by learning yourself or developing relationships with somebody who is strong in that area.

If you keep executing and keep plugging the holes in your skill set, you will have the fastest learning curve that no college education can provide by itself.

Do complete your college education, it does teach a lot of good basics on different useful stuff and its a great backup in case things don't work out with the business end by the time you complete education. But thats what it gives - basics, useful basics, basics that are not enough for anything but an entry level job.

College education + loads of experience by the time you complete education = killer resume.

This is from a guy who has done his fair share of education and waited too long to go after his dream ( of course, not too long to let the dream die or go after it now :))

Good luck.

(edit: If you start the action part now, you will also attract a network of friends and teachers who appreciate a person like you and can probably help you. That network you start building now can be a deal maker or breaker for succes later. )


I'm in similar shoes. I've recommended this essay on HN before, but I found it to be really insightful.

http://www.paulgraham.com/college.html

I've basically come to the conclusion my time here in school is gain enough knowledge an experience in my field that when startup time comes I'll not just be quicker than competitors, but I'll know of better methods and techniques for doing so.


All of the stuff said here re: building a product and working for a startup is awesome advice. There's one major thing missing: Learn how to acquire customers and retain them. You can build a great product, but if you don't know how to acquire customers, it's a disservice to the great product you built. CREAM- Customers Rule Everything Around Me.


Strongly agree with this. Also, it's worth noting that many people consider "startup"=creating a consumer-focused company with millions of users (i.e. Twitter; Yelp.) Often the most successful businesses focus on selling a lot to a little. There is a ton of opportunity on the enterprise side of the world.

My company was most successful after we stopped offering small accounts and focused on the customers paying us hundreds or thousands of dollars a month. We got pretty quickly to 7 figures after that.


Focus on two things:

1. Connecting and networking with others in the field. A blog is a great way to do this and get started.

2. Build something said network will appreciate. It doesn't have to be the next twitter, maybe it's some dumb little app that a 5 year old kid will spend 10 minutes playing with and get bored. Remember we are all 5 year olds on the inside, except pg, he's 7.


Look for potential cofounders. Make friends with people who have similar interests as you (hacking, startups) and whom you get along with really well. Building trust and learning what people are really like takes time and being friends for a longer time gives you the chance to do that.


(1) Learn what people will pay for and how to convince them to do so.

(2) Make friends with and keep track of your talented classmates, especially those whose talents are in other areas.

(3) Learn how to evaluate folks in those other areas.


One thing that hasn't been mentioned much yet is marketing. Read the big popular marketing books such as "Positioning" by Reis and Trout, because marketing is tough. There is little technical risk involved with most web companies. The biggest risk is not finding enough people to give you money.


As someone who just passed out from college and is working on a startup, I would say do as much projects as you can during your college. Hence learn the art of starting and finishing.


I just wanted to say thanks to everyone who commented. Really great advice. It is much appreciated.




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

Search: