Hacker News new | ask | show | jobs
by tannerc 3312 days ago
Most of the engineers I know learned to program via "top-down", as did I (though I'm a designer).

Whenever anyone asks me how to get started in programming, I tell them to forget about buying any of those "Dummies Guide" books and instead just pick a problem they're really passionate about and Google anything they need to learn to make the idea happen.

Such an approach certainly doesn't teach you a lot of the most important thing about programming (garbage collection, what types of objects to use and when to use them, etc.) but it does get the job done.

And that's the thing I think matters most for those just starting out: if you try to learn bottom-up and get all the fundamentals, you're going to burn out.

Of course such advice goes right out the window if your goal is to actually become a real, breathing, programmer. Because you can't afford to make mistakes and the foundational stuff ensures you're less likely to do so.

Whereas just Googling how to put together a project will likely leave you with a functional project, yes, but also less-than-ideal code.

3 comments

I started with a weird mix, but mostly top-down: jumping through a QBasic programming book, picking up basic concepts as necessary to build things that sounded cool (a music player, an Asteroids clone, etc). Programming ended up feeling like a cool toy.

My serious education took a fairly strict bottom-up approach, and it explained roadblocks I'd been running into before, improved my mental model of the machine (and variations between machines), and provided a solid foundation to build on.

My opinion is that top-down is good for passion, bottom-up is good for correctness, and a mix of both is useful. You need passion to put in the necessary practice time. You need a solid foundation to let you build non-trivial software.

This is why I say that JavaScript is a great first language. Not because it teaches you how to write good code, or be a good developer, but because the barrier to entry is so low to get started; with a text editor and a web browser that everyone has on their system, you can start making something that has a tangible (visible) result. That's powerful.

Once a person has a handle on things like how code is structured and interpreted, syntax, objects, etc. then you can introduce them to the terminal and start teaching them Python if you want. But nothing comes close to driving interest like making a button on a screen that moves stuff around.

Ditto. I suggest JS => python => *

And I very much dislike JS for actual professional use.

I learned to program with Ruby on Rails, which is a probably a terrible way to learn how to program, but I think there is a lot of value to having a working, useful application up and running in a few minutes and then tweaking it to see how it changes.

I'd never have made it through any of the bottom up approaches, because I'd have gotten frustrated with how much there was to learn before I could do anything useful.