Ask HN: what are the essential courses to became good programmer?

13 points by bad_programmer ↗ HN
Hello HN,

Finally, today i realize that I am a bad programmer. I do coding in ruby. Since Ruby is a high-level language, I never have to worry about things which are going inside. I don't understand memory management, garbage collection and all sort of computer theory oriented concepts, I don't even understand why does BigO or SmallO (or whatever) matters (atleast in RoR apps). But I see some people are crazy towards it. And, they are brilliant although they don't know Ruby language more than me.

I am solo founder and developed my SASS application. I learned ruby and RoR, it took me 2 months to understand and write a web application in rail's way. I followed Michael Hartl book, Codeschool, Railscast. Now, it's about 1 year and i decent debugging and development knowledge.Sometimes I answer StackOverflow question and I'm earning a good reputation. But inside my heart I know I am a bad programmer. I searched almost all things in google and copy its answer. Writing code is the last thing I do. I know that is not good thing, but I am okay because of code quality. Moreover reinventing wheel is not a good thing. Not to forget, deadlines and pressure.

Now, I am ashamed. I need your help, please. Please tell me some roadmap or course which will enlighten me to all those things which computer programmer should know, it may be like encryption or statistics or operating system or whatever. I want to entrepreneur and developer, just like Marco Arment.

Thanks a lot.

14 comments

[ 2.4 ms ] story [ 48.4 ms ] thread
The only way to be a good programmer is to work on lots of projects.
Not to disparage the value of experience, but I know a metric ton of programmers with years of experience and dozens of projects under their belt who write, day in and day out, shit code. I think there's more to being good than just cranking it out.
I don't disagree with you, but I also think cranking it out is a very, very fundamental part of the process.

You can't be a great coder without writing anything.

Writing code is not about remembering algorithms. Its about finding the most efficient way to perform a task. If someone on SO has a good solution, use it. Good doctors and engineers consult reference material to come up with the best course of action in any situation.

Like a3voices said... Build real world projects. Familiarize yourself with the concepts of business such as inventory, transaction and event management. So you will better understand how to help your clients.

In the end there are a lot of roads to Rome... but if you don't understand why your client needs to get to Rome you'll be of no use to anyone.

> Writing code is not about remembering algorithms.

Being good at algorithms and data structures isn't about memorizing them.

Part of understanding what the most efficient way to perform a task is, comes from understanding the optimizations which have already become commonplace.

What you say is true, but it's not either/or. Knowing how to implement something besides quicksort is important as well - the algorithms matter because they represent paths to efficiency. How can you judge what a good solution on SO even is unless you understand what you're looking at at more than a superficial level?

Not a course, but what what Jennifer Dewalt did (180 websites in 180 days [0]) might help you..

http://jenniferdewalt.com/

Why is everyone so up in arms about what this girl did? How are you going to learn Algorithm analysis by building websites?
Why is everyone so up in arms about what this girl did? How exactly are you going to learn algorithm analysis by building websites?
This is definitely not the best approach. But when I am way out of my depth, the first place I look is at degree requirements for that area of expertise (from looking at a couple university websites) and then I find the textbooks used in those courses or searching online under those subject areas to get closer to the information I am actually looking for.

One of the biggest problems in learning something radically different is knowing what it is you don't know. A solid background will give you plenty of hints, and just looking at tables of contents can help you quickly get to the good stuff if you aren't looking for a solid background.

I've felt a bit similar to yourself in my evaluation of my skills in the past. I think we are often our own harshest critic. Here are three books I'm reading that many here and in other nerdy online hangouts have recommended to become a better programmer.

Programming Pearls by John Bently

Design Patterns by "the gang of 4" Erich Gamma, Richard Helm , Ralph Johnson and John Vlissides

Beautiful Code edited by Andy Oram and Greg Wilson

The Structure and Interperetation of Computer Programs will teach you to think more clearly about the fundamentals of computation and programming. A free PDF is here: http://web.mit.edu/alexmv/6.S184/sicp.pdf It is foundational though: you won't likely write lisp in real life.

Good books to read about practical software engineering are sold here: https://pragprog.com/ I'd start with The Pragmatic Programmer.

By copy-pasting things, you've gotten yourself into a habit of just banging things until they work. Now, you should approach things from a scientific prospective: try to understand why they work, then write something to test that understanding. Build coherent and clear mental models.