
Ask HN: what are the essential courses to became good programmer? - bad_programmer
Hello HN,<p>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&#x27;t understand memory management, garbage collection and all sort of computer theory oriented concepts, I don&#x27;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&#x27;t know Ruby language more than me.<p>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&#x27;s way. I followed Michael Hartl book, Codeschool, Railscast. Now, it&#x27;s about 1 year and i decent debugging and development knowledge.Sometimes I answer StackOverflow question and I&#x27;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.<p>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.<p>Thanks a lot.
======
afarrell
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](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/](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.

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

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

~~~
krapp
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?

------
a3voices
The only way to be a good programmer is to work on lots of projects.

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

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

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

[http://jenniferdewalt.com/](http://jenniferdewalt.com/)

~~~
kozlk
Why is everyone so up in arms about what this girl did? How exactly are you
going to learn algorithm analysis by building websites?

~~~
afarrell
The phrase "up in arms" means angry, perhaps angry enough to reach for a
weapon. I've never seen anyone angry about what she did.

Building websites won't work, but implementing algorithms in a book like CLRS
[http://mitpress.mit.edu/books/introduction-
algorithms](http://mitpress.mit.edu/books/introduction-algorithms) will.

