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