How I think when I think about programming
What makes programming unique is that(Assuming you are a basic &quot;code monkey&quot; level web dev or entry level embedded like me), you don&#x27;t usually &quot;learn&quot; to code.<p>You get vaugely familar with it, memorize some patterns, and VS Code&#x27;s autocomplete does most of the details.<p>Variables, objects, classes, take days or weeks to learn, but beyond that the &quot;learning&quot; isn&#x27;t like anything else.<p>When you play guitar, you control every note with your hands in real time. Every mistake is immediately audible.  There is no algorithm for playing the right notes. You either memorize them and can get your hand to do them accurately or you don&#x27;t.<p>And you can&#x27;t unplay a note.<p>Which makes it 1000x harder than programming.<p>Because of debuggers, unit tests, and the fact nobody expects it to work first try, it&#x27;s iterative, interactive, and mutable.<p>There&#x27;s no idea&gt;implementation pipeline, every level including the idea is something you can debug iteratively with computer help.<p>Programming isn&#x27;t <i>just</i> being an &quot;IDE Operator&quot;, there&#x27;s <i>some</i> actual skill involved, but &quot;IDE Operator&quot; is pretty much how it feels when compared to anything else.<p>If I find a library, and tell you about it, you will be able to use it in minutes.  Your capabilities have greatly increased, yet all you learned was that FooLib exists, and two or three function names.<p>Design patterns and language features work roughly the same way.<p>Technology is the art of so arranging the world so that we don&#x27;t have to experience it, says the quote.  But that includes tech itself.<p>Learning a new tech is usually like learning to use a washing machine. There&#x27;s often nothing you couldn&#x27;t learn from a page or two long article.<p>The small percentage of things that do require actual learning are where most of the challenge comes from.<p>The level to which programming is more like being a machine operator is so extreme that a lot of people take years to UNlearn the habit of actually doing things by themselves.<p>Beginners reinvent the standard library all the time, and sometimes feel like they didn&#x27;t really do anything if they just put 3 libs they don&#x27;t understand together.<p>In any other activity, the more professional you get, the more unique things are, the more you do from scratch, the more deep understanding is needed.<p>In industry, the farther you get from hobby level the more standardized everything gets.<p>If someone really does deeply understand what they&#x27;re doing, I&#x27;d call that computer science more than programming.<p>Programming is not craftsmanship. It is not martial arts or cooking or war.  It&#x27;s not philosophy or math or literature.<p>I don&#x27;t do code katas, ever.  Because unless you do Haskell or real CS level algorithms, there&#x27;s... not that much to know about the fundamentals, and IDEs largely do away with a need to memorize specifics<p>All the actual skill is in structuring ultra complex projects, and in domain issues.<p>If your program involves math, the programming is probably trivial, an the reason it&#x27;s hard is because of the math.