When you open vim and look at the blinking cursor, you stand on the precipice of greatness in the shoes of every programmer who has ever lived, all of you united across space and time by that peculiar feeling you get when you peer into the infinite possibilities of your empty text file.
I've only recently learned this word/concept, but your quote fits. You see a blank text file, you see an interesting challenge, something you're sure will lead you somewhere nice. I'm gonna admit - I'm the opposite. A blank text file scares me. I don't know what to do. I spend a lot of time agonizing over what I want to write, trying to desperately narrow the space of possibilities until I have the design[1] sharp in my head, and only then I'm able to actually write anything in that empty file.
I guess I'm the "low self-effiacy" kind of person.
--
[0] - https://en.wikipedia.org/wiki/Self-efficacy
[1] - Or at least the first iteration of it.
In learning the craftsman style of TDD (i.e., the fluffy altruistic style) helped me to grok breaking down tasks, not because I wasn't able to have a detailed view of the big picture in my head, but because I simply didn't need to. It's also ok to change what you've already done. The guidelines for code modularity and separation are there to make this process of change and evolution easier, not just to make the system arch and code pretty, but because it should be expected to change and evolve your code as you develop the system - in both the short and long term.
I'm actually using a TDD-ish approach in my work, but I never felt comfortable letting it actually drive design decisions. I don't believe it works that way - I can explore the design space up front and pick good solutions faster than it would take me to organically arrive at them through applying orthodox TDD.
I'd like to do more TDD-ish approach, because the design process feels way too slow to me. The problem is, refactoring involved in test-driven design discovery is even slower. I constantly feel bottlenecked by the speed of tooling we use - and not on the surface level (I have my Emacs configured well, thank you), but at a fundamental one. Programming languages are not expressive enough. The whole approach of writing code as plaintext document is not ergonomic enough.
When I'm sitting in front of an empty text file, staring at the sea of infinite possibilities, all I feel is dread - the fear of how much effort I'm going to spend fighting tools to conceptualize my design, how much time I'm going to waste dealing with infrastructure, build systems, dependency management, constructing intermediary layers, writing and rewriting tests...
I guess I usually have a plan before I even sit at the editor of what I'm going to accomplish with the project. You don't have to know all the classes and data structures you'll need at the start, you will discover it along the way when you find you have data you need to group together or code you need to call in multiple places.
I think of writing code like writing a list of instructions to tell the computer how to do something. The natural place to start is step 1. Then of course you can start roughing out the major steps in order and filling in the details once you have something you can run and start testing parts with (either manually or automatically).
I hope to one day remember and shamelessly cite it around.
Quoting a relevant excerpt from my own blog post[1] that I wrote sometime back:
> FD 100
> That is the "hello, world" of turtle graphics in Logo. That simple line of code changed my world. I could make stuff happen in an otherwise mostly blank monochrome CRT display. Until then I had seen CRTs in televisions where I had very little control on what I see on the screen. But now, I had control! The turtle became my toy and I could make it draw anything on a 320 × 250 canvas.
10 MODE 7
20 PRINT CHR$141”A text adventure”
30 PRINT CHR$141”A text adventure”
May as well have been the opening bars of Beethoven’s 5th, for the infinite and incredible possibilities which followed. Anything. I could make anything. It was the most incredible sensation and realisation - and still is. SCREEN 13
is the start of endless possibilities!I think this kind of experience is missing for kids now – but I'd guess it's more about how ubiquitous computers are, and how there's a lot more between the kid and the computer. When a CLI is your interface, making even rudimentary graphics feels like achieving magic. When your interface is a cell phone or GUI, there's a much larger leap from zero to "feels like magic" – OK, so I made a circle bounce around the screen... there's already an app that does that.
Now… Great UIs are everywhere. You can just use them. You don’t need to poke under the hood, or learn the mechanics of CRTs, or compile a kernel and a zillion libraries to get them working - you just flip open your phone, or hit up the uri.
I think there’s something quite specific about having learned the trade through that cusp, that changing of worlds - if you started with punch cards and ended with dumb terminals, your world changed only somewhat, and always had a utilitarian edge to it - we went through that Bildungsroman of growth and explosive expansion as a natural function of our environment.
I feel somewhat blessed to have been born in possibly the most interesting time since Gutenberg wrote “hallo, welt”.
The poor little TensorBoard is crying right now because you didn't love it.
10 PRINT "John is Awesome";
20 GOTO 10
This little gem is the beginning of it all. Little me is understanding, okay, so if I'm willing to put in the time and thought, the machine will obey and I I have the literal power of infinity at my fingertips.I tried to reach her programming but she schooled me in AI-hype.
20 GOTO 10
* Edited for formatting
In college my first class was a class about C, the instructor read from the book (that appeared to be written about C for people who already knew C...) and then you worked on the assignment.
I didn't have the patience at that age to work that way and dropped the class / decided programming wasn't for me.
I did some other tech things and decades later ended up working with a bunch of engineers at a company and realized that we understood each other / how we worked really well. Company was bought out and I had time to think about what to do next.
By this time the world of web development and web apps had taken off and there was so much information available / folks sharing the land of programming seemed entirely different to me. Attended a boot camp and everything just clicked, the immediacy of producing something in a web app (even if it broke) really drove home what I was doing and so on. I've been happily coding since then.
As far as programming itself and designing software, I think I have learned as much as I would have retained in an undergraduate degree in CS. I have a minor in math and I took some basic circuits courses, and Ben Eater's YouTube channel has been hugely illuminating in areas of CS.
Really, if I could find places that are something like "solve this useful problem, here are the requirements, you'll need to know these 10 keywords to search stuff on the internet, here's how it'll be useful later" and then have someone or something evaluate my work, I'd love to see it.
...although I also got a kick out of "remixing" Windows 95. And "remixing" video games (Civ and Colonization were particularly great because they were SO EASY to edit both assets and configuration). So many custom mouse cursors, shutdown screens, start-up sounds, etc etc.
In fact, the all-night coding binges happen because in an intense period of learning, you are producing a ton of adrenaline, and that annihilates sleep. (Sorry, working, don't care to look for the study right now). But it checks out.
But then I went professional and that felt a little like how the Old Testament God must have felt: overwhelmed and irritable.
PRINT "Ach leck mich doch am Buerzel"
And hit Run → Start...I broke out in laughter, realizing I can make real grey-on-black DOS programs just like that. It blew my mind and started my programming career.
Understanding driving motivations is so incredibly important, as it now gives me quite a lot more perspective in which direction I want to take my career and hobbies.
>I found that building websites was similarly satisfying. For example, click the "Reveal Image" button to watch an image fade in to the blank canvas!
I think a lot about why I went into computer science and this is the same conclusion I came to. There's something really cool about starting with a blank page and coding in elements that appear one by one and adapting the code to be what you want. Maybe there's other ways to do it but programming seemed to be the most powerful.
Just to be clear, it was video games, not photography that kinda nudged me into programming, but same idea with a blank canvas and having control of it.