Terror of the Blank Canvas
“Keep it small. 5 points, 2 or 3 sentences on each point. Perfect is the enemy of done.” With this clear direction from Avi I set out to write my first blog post and, naturally, instantly discovered an enormity of perfectionism and writers’ block that I never new existed.
I first wrote a draft about Bloom’s Taxonomy of Learning Phases and learning to code. I wrote a second draft about my experiences teaching myself Chinese immersively, and the similarities between that process and my nascent steps into programming.
These posts may still make it to the web, but in the process of banging around on them I became fascinated with the source of my own hesitation: why should I have any amount of ego or insecurity at all about entering the world of coders, or in speaking about code? I am an complete beginner after all. Absolute metrics of capability and success should mean little at this point; a more valid measure ought to be the amount and direction of progress.
I’m just starting out as a developer and have far more questions then pith and witticisms at so far. I do know that my curiosity seems to play a key role in driving my internal engagement and momentum, so as a first step I’m taking a sedimentary sample of my current knowledge, interests, and skill with coding. This will hopefully provide a useful baseline for measuring progress.
Sailing off the Edge of the World
What follows are a few things that I find absolutely fascinating right now, simply intriguing, perplexing, know nothing about, or want to know some things about. These are questions I’m looking forward to seeking answers to, and questions whose pursuit will bring ancillary fascination and skills. If things go well, as I progress in programming the burning question of the moment will only get more interesting.
- What is threading?
- Given the format of objects and classes, how much of a full complete concept of program should you have before Actually beginning to work on it?
- How the hell can git make some sort of tiny file that exactly references every single tiny bit of data of all of your original files, plus tracking data and history etc, and yet can be transmitted at some tiny size and incredibly fast rate?How can you make make something that is an exact Copy of something else, without it being the thing itself, or at least the same size as the thing? It’s practically metaphysical. (When I was really young and started getting into maps, an old geoscientist at Swarthmore College told me that there is no such thing as an accurate map, because to build a completely accurate map or model is to rebuild the thing itself. It must be the same scale and size, have the same dynamism and interactivity between the parts. Git be magic?
- What the heck are deltas?
- At this point I’ve written tiny (super tiny) programs and scripts that flow from an initial conception quickly and fluidly. Many of the best practices in developing that we’re learning reading about seem to ensure good, working code that matches the goal via processes that slow down or structure the code creation.
- Moving forward, how can I best maximize and instill habits and practices now that will help me quickly build fast and powerful models?
- How can I quickly and effectively build good tests that help me help guide the course of my development projects, without interrupting the fund of creativity and inventing, and finally altering the process of my workflow?
- I have a northface shirt and a backpack that I bought when I was first getting into climbing and mountaineering. Almost 15 years later the bag and shirt are both still kickin’, and I’m wearingly the shirt today in an urban environment. I dragged that bag up and down rock faces, often literally, and then have carried it filled with too-many books and laptops for more than a decade since. It’s lost the padding in the arm pads and looks a bit faded, but it is still an awesomely functional bag; it’s still tougher and more function than 90% of what’s made today, even by the same company, and has none of the extra bling and straps that climbers tend to cut off their bags anyway. How do I make code like this? Should I? Code that will hold up for years, that can be refactored and trimmed, whose essence is speed and functionality? That people love to use? That carries it’s first load and then adapts to different usage years from now?
- There’s so many overlapping technologies and programming languages! How do you choose what to use for what kinds of projects and what parts of projects?
- What does it mean to really ‘get’ http and tcp/ip? Is that a language to learn or simply a convention of interactions between other kinds of software and hardware?
- How can I easily build inobtrusiveness add “bullet-proof” security measures into every app that I write?
- What should I have for lunch?
Make yourself useful.