In the ideal world, i would program purely at the level of a sugared lambda calculus, free of trivial things like runtime,memory use,network latencies,serialization,platform incompatibilities,dependency management,string encoding&#x2F;decoding issues &lt;so many others&gt;. Basically everything that makes programming different from math.<p>However, programming may be lambda calculus at a theoretical level, but execution is a turing machine. All these little real world things that can be abstracted away in abstractions(!!), have to be unabstracted to meet a bunch of very real NAND gates somewhere, limited memory, resources etc.<p>Thats one reason it &quot;sucks&quot;, but thats why its engineering and not math. Maybe one day computers will just be so powerful that we can afford to treat memory as infinite, runtime as infinitesimal, and build all the abstractions we want for free - then programming will be done :)<p>In this fun world, when i want to build something ill just draw a bunch of squiggly boxes and describe an alarmingly underspecified thingy i want done. Then the program will automatically figure out all possible inputs, quickly perform a &quot;32 questions&quot; kind of thing and resolve any ambiguity, then produce code. Managers will once again be confused why &quot;adding this textbox is so hard&quot;, but this time they will be right - i will just tell lambda to go make a textbox.