Hacker News new | ask | show | jobs
by kstenerud 5347 days ago
Finish college.

You NEED that theory stuff. If you don't get it now, it will stunt your growth and will limit how good you'll get at your craft (mainly because you'll keep making rookie mistakes for the rest of your life because you won't understand the theory behind what you're doing).

Quitting something just because it's hard is a very bad habit to get into. All it does is keep you on the bottom rung for the rest of your life. The good things are hard to get. That never changes no matter your age or station in life.

If you really want to do well in life, start researching companies now, while you're still in school. Find out what they're doing. Find out who they're looking for. Get contacts within those companies and talk to them. Build up a contact network. It's WHO you know that gets you in the door, and WHAT you know that keeps you going.

1 comments

How would I need that theory stuff if it contains hardware and other similar stuff and I am not planing to do anything with that kind of things in my career (I just want to be a software programmer, because I love it)? I am just feeling that I am studying lots of useless things...

Thank you very much for researching companies advice, it's a very good advice, I will start doing that.

Start researching the technology it takes to run a site like Facebook. There's a reason companies of their size are looking for Masters/PHDs.
Most definitely, some of the stuff you're studying you'll never use. But a career in software engineering takes a LOT of twists and turns, ups and downs. Technologies and techniques come in and out of vogue. But one thing remains solid throughout: Algorithms. Without a solid understanding of algorithms, you'll never be able to write efficient software. And what's worse, you'll never even know why. You'll lack the tools to even be able to question why, until you study the algorithms written by the giants of computer science. They've done the hard work for you. All you need to do is learn the how and why.

But it doesn't stop there. You also need to have a solid understanding of at least one level below where you're working at (and preferably many levels). I'll relate a small example:

When I was working at a bank, all of our software was written in high level languages (mostly COBOL, Java, Python, and PERL). You'd figure that there's no need to understand CPU architecture, right? WRONG.

We started getting reports that our web app (for funds transfers) was crashing (not the regular Java crash, where the app keeps going; the hard crash where the entire web app goes down and has to be restarted).

Needless to say this was costing us a lot of money in lost business. All we had was a Java crash report with a stack trace that went into a JNI call. At this point, it's outside of Java, so the trail ran cold. Or did it?

One nice thing about Java crash reports is that they include a memory dump of the stack area, as well as a dump of the CPU registers. I know software and hardware top-to-bottom, from transistors to logic gates, to CPUs & machine language, through the BIOS, kernel, OS, libraries, all the way to the application level. It wasn't that difficult to trace back through the stack in the memory dump, disassemble the shared library that JNI was calling (a library for secure thumbprint recognition), and use the stack offsets to track execution right up to the memcpy() call that was being passed a NULL pointer (the thumbprint recognizer code returned NULL if the scan was incomplete, and the the library wasn't sanity checking the result before making a copy of the scan buffer). I was able to turn the library vendor's story around from "It's a problem on your side" to "We'll have a fix out for you in a couple of days".

I was the ONLY person in the company capable of doing this, simply because I paid attention in college. The knowledge I leveraged to fix the problem was seen as pure magic by other engineers because they didn't understand the theory and lacked even a way to ask the right questions, let alone answer them. Finding the answer is easy; It's finding the question that's hard.

So yeah, you can skip college and live a life of mediocrity. It pays pretty good, too. But you'll always be on the bottom rung. You'll be the guy who gets work in good times, and then gets laid off in bad times. When the market's hot (like it is now), companies tend to get driven to desperation, taking any programmer with a pulse. And then the bubble bursts, leaving all these now-jobless mediocre programmers asking "Why me?" when it's really their own fault.

If you're serious about programming, you'll take the time to learn. The best programmers never stop learning new things, and never stop reading new books. College is merely the beginning of learning & knowledge.

Wow, what a post. Thank you very much.