Hacker News new | ask | show | jobs
by davelnewton 3448 days ago
You've kind of answered your own question.

Programming chops aren't much different than music chops. Guitar? You understand your instrument. Using it is intuitive, right? You have programming tools (editor/IDE, language, libraries). You started off by learning scales--learn your dev tools until you don't have to think about what you're doing--it just happens. Find rough edges? Fix them (extend your environment, make keyboard macros, whatver it is you notice as a "hitch" in your process).

Music theory: how things (e.g., notes, chord progressions, etc.) relate to each other. Same thing with code: languages, libraries/frameworks, persistence mechanisms, messaging systems have similar relationships. Each solves a particular problem, often in very different ways (e.g., graph DBs vs key/value store vs RDBMS). Understand those relationships and how to take advantage of them--and just like improv, how the "rules" can be bent to solve a particular problem (HTF do I resolve this progression I've backed myself into).

I personally don't spend a lot of time anymore dealing with algorithms, but that's largely because the programming I do these days doesn't really require much deep thought at that low of a level (for better or worse). Data structures are always key, but for me, deep knowledge of them isn't necessary--only enough to understand what's more or less the "best" for a task is sufficient.

Understand different paradigms of programming languages, persistence, messaging, etc. just like you should have at least some understanding of alternate tunings, different musical structures (the best musicians I know have exposure to at least some level of a wide variety of musical traditions; have a go at some Indonesian gamelan, some Ghanian drumming, kotos or zhengs). Understanding the differences between things is often more important than having a deep understanding of those things.

Oh there's more. I could go on for hours.