It’s funny how whether you are a techy (geek/nerd/expert) is a matter of perspective between you, your audience, and those who know more than you along the particular subject at hand. To me, for example, a car is effectively a black box with a wheel on each corner. I have no interest is demystifying anything about it even though I have, without doubt, an engineers approach to many things that I do. I simply choose to remain ignorant. Along this journey of discovery I am documenting here, I am constantly reminded of my ignorance. On my Coursera Creative Programming course, where I am learning the Processing java-based programming language, I am up against the limitations of my own coding versus my desired achievements but I am humbled even more, when I see what soem of my cohort are able to do with it. I have to remind myself that some of these folks are hardened coders in other languages. We are not starting from the same point, and we probably all have different ambitions.
However in my previous and current jobs, my knowledge and experience put me much further ahead along the trajectory of knowledge in soem fields. So, while I am a novice on many of the paths in the University of Dave, I am credible, even a passable expert in others. What I am also discovering is that many of the new concepts I am learning are underpinned by knowledge I had but didn’t think it would still be relevant, or that I simply forgot, or which perhaps are unexpectedly relevant in the world of software. I have programmed in C before but got a bit stumped with the strictness of types and peculiarities of classes. But everything I once knew, and forgot, has provided a reasonable foundation for learning typing and object oriented coding now. Anther example is that much of the infrastructure underneath web applications is based on linux and apache, for which my forgotten adventures with Unix provides a leg-up.
Aside from these specific examples, I am finding that my career has given me the advantage of a good, if partly sketchy, view across the whole technology stack. I know quite a bit about how hardware works, from basic boolean logic, what everything inside the box does, and the principles of how to do it better, operating systems and virtualisation, quite a bit about TCP/IP networking – the tarmac of the internet, which the web speeds along on – and all sorts of other stuff.
Alongside my other MOOC courses on Coursera, I am taking a self-paced run through the open-source course to teach you absolutely how to build a computer from the ground-up , in order to better understand how to develop good software, and why it matters. I am fortunate enough that my early studies at college, on a vocational BTEC course, have overlapped with some of this content. That is not to say that 25 years later it is not a struggle to grasp the concepts. But what it is doing is building a connection between the stuff I know (or knew) to the stuff i don’t (yet) – ie. software.
The Nand2Tetris program gets its name from the basic logic gate from which you can build any and all the building blocks in hardware of basic (but in fact all modern) computers, that is the NAND gate, and takes you through successive layers of complexity and abstraction until you have built a (simulated) hardware computer, written a compiler for it, and written the game of Tetris in that compiler’s language. It’s fantastic project and a fantastic course. I am enjoying it immensely. For others without my advantage, should get a great deal out of understanding what a computer really is: an unbeliveably dumb piece of hardware, with many layers of complexity and abstraction built on top of it so that you don’t forget your creative idea, by the time you get it to type “Hello World” on the screen. The funny thing is that there will be expert developers taking this course whose knowledge fully complements mine (non-existent at the hardware level, weel developed around software).
I should mention now that I am also the proud owner of a Raspberry Pi, in fact two of them. And this provides yet another angles where I can build bridges from what I know at least a bit about – the hardware and OS – and work my way into software. I’ll talk more about the Pi elsewhere, but it is an important facilitator for people like me, and more importantly for young people a quarter or third my age, to engage with the nuts and bolts of computers, rather than just being consumers of apps and content.