“Be good. Be very good.” (comment)
recommended by 3 users | 2010 | coffeemug on: Ask HN: Current college student with big goals. | learning to code | original thread |
coffeemug on Oct 1, 2010 | on: Ask HN: Current college student with big goals. | view on HN

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.

3 users recommended this comment. What they said:
r11t Jan 15, 2011 | on: ASK HN: Becoming a hacker in one year | context

This comment by coffeemug is the most relevant advice I have every found for anyone wanting to become a competent programmer/hacker : http://news.ycombinator.com/item?id=1747713

Also from http://www.catb.org/~esr/faqs/hacker-howto.html :

"So, if you want to be a hacker, repeat the following things until you believe them:"

To follow the path:

    look to the master,

    follow the master,

    walk with the master,

    see through the master,

    become the master.
SkyMarshal Oct 7, 2010 | on: MIT female learning to code | context

I disagree with starting with Java. Rather I second coffeemug's advice in the following comment, focus on C, Lisp, and Haskell:

http://news.ycombinator.com/item?id=1747713

My first manager taught me something college had failed to (or that I failed to learn there), which is that programming languages come and go in trends, but they are all based on recurring fundamental concepts, which endure beyond any single language.

Most new programming languages are a remix or mashup of some or all of these concepts, so if you master those concepts you'll be able to easily pick up any other language.

It's like learning Latin as your first foreign language, and being able to quickly pick up any Latin-based language after that. C, Lisp, and Haskell are the Latin of the CS world.

Since you're at MIT, take the famous Structure & Interpretation of Computer Programs (used to be 6.001, not sure if it still is). http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussma.... That'll get you started with Lisp (specifically the Scheme dialect).

For C, start with K&R (http://en.wikipedia.org/wiki/The_C_Programming_Language_(boo...).

For Haskell, Real World Haskell is good, and the e-version is free. (http://book.realworldhaskell.org/)

Joel Spolsky has an article worth reading on why not Java:

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchool...

And of course PG's essays on Lisp are a must read:

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

Since it sounds like you're running a business you may feel pressured to learn Java or whatever your coders are currently using to get your business off the ground. But I heartily recommend resisting that pressure, doing it right, and mastering the enduring fundamentals first. It may cost you something in immediacy and expedience, but that's what school is for, especially one such as MIT. You should carefully weigh how you spend your time there, and unless you think you've got the next Facebook, focus on mastering the enduring concepts, not the trends. You'll be glad you did the rest of your life and career.

PS - there's little to nothing that Clojure (a Lisp dialect on the JVM) and Haskell can't do in the web space, so the cost in immediacy and expedience is slim to none anyway.

PPS - it didn't register till just now that you're an Econ Major not going into CS or Software Engineering as a career. If you just want a tried-and-true, versatile, easy-to-get-started-with language with tons of libraries and frameworks (reusable code) to hack in, huge and helpful community go with Python. Java is too bureaucratic a language for this purpose.

Start with Zed Shaw's excellent introduction, Learn Python the Hard Way (hard way = by doing lots of follow-along examples until it gets into your brain muscle memory), then go from there.

http://learnpythonthehardway.org/index

mglukhovsky Nov 1, 2010 | on: Ask HN: Who Is Hiring? (November 2010 Edition) | context

Mountain View, CA. RethinkDB (http://www.rethinkdb.com/jobs). Hard systems problems. Fun people. Good pay. Internships year round. Join us, together we will rule the [database] universe.

This is everything we stand for: http://news.ycombinator.com/item?id=1747713