Fatal error: shebang not defined.
(And if there’s such a thing as a shebang, what’s a hebang?)
I remember landing in Paris on the first days of my exchange semester more than a decade ago. I was excited and daunted. Unbeknownst to me, I’d arrived two weeks earlier than the semester would actually start…this was the beginning of many many misunderstandings. The joys of navigating French administration in French began. I might have been majoring in French, but any skills I did have were tossed out the window in this new environment. Some words on paper made sense but, in the practice of everyday conversation, were completely nonsensical to me.
I floundered around, catching every 10th word (on a good day) and trying to make sense of the bits in between. Asking a lot of questions. Finding a good phrase and then just using it everywhere! Realising I had been pronouncing words incorrectly for a very long time or using them in a strange way that a local would never ever do.
Seeking counsel from anyone who would listen.
Dreaming very strange dreams in a mix of languages like this one my roomate told me about where I was searching frantically for a fork and getting very agitated. And then..after a while I yelled “forchette” and then could finally relax back into my (much quieter) slumber.
And I also remember the joy when, after a few months, my French improved…I could function day-to-day in French. I was mistaken for a local a few times. I dreamt completely in French. I understood what was going on! It was an awesome feeling.
And I remember taking note of loads of small things that seemed so foreign to me and telling people all about them along the way. Which is exactly what I’m doing here…now.
The parallels to my newfound #codinglyfe are uncanny. Excited and daunted at the thought of diving into learning python (a coding language) during this semester of the Master of Applied Cybernetics. No early arrivals to this skill (in contrast, a common self-narrative is “Primary school children of today would know how to do this! — concentrate!!”). Certainly a lot of misunderstandings between me and the ‘administrators’ ie the coding tools — Mu, Thonny, pycharm, Visual Studio Code…I’ve taste-tested quite a few and none of them are speaking my language!
Although the words in python and the relevant terminals and tools are generally English or based on English words, a language that I am ordinarily skilled at, all sense of understanding the syntax of these words has been thrown out the window, as has a lot of their meanings. For example, what does “fatal error” really mean in this context? Sounded very dangerous to be happening sooo often… Interestingly, a few rather deathly expressions — fatal errors, killall functions — are commonplace it seems. Feels a lot like one of those violent video games… Whose idea was that I wonder?
Same issue with previous knowledge of mathematical operators: “=” is no longer really about being equal to in the mathematical sense… you’ll need two of them for that “==”. “%” takes on a whole new meaning. Everything is shortened. ‘Regular’ punctuation is a no-no, but a misplaced or missing colon can seriously make your life a living hell. I can now see how a professional coder would forget to use an apostrophe or capital letter in an appropriate place in this other universe of regular English language I’ve been inhabiting to date…
Floundering around is usual and familiar at this stage. I’m incredibly happy to understand even every 10th word in someone else’s code. Definitely ripping off expressions that have worked for others. Github has become my equivalent of the French/English part of wordreference.com. Except in the latter, it’s incredibly clear which languages you’re searching in or translating to/from. Can’t say the same in the coding world. Finding out that my supposedly fail-proof ripped off code wasn’t working because it was actually in C++ and not python… there’s 2 hours of my life I’m never getting back. Perhaps that should be called a fatal error!?
Reminiscent of my studies in French/English translation, going down rabbitholes is the norm. Finding out from google that what I needed was ‘crontab’ to make my code execute at a particular time of the day, I was intrigued. Who woke up one day and thought yes, this thing must be called ‘crontab’. Turns out it’s named after chronus — the Greek word for time + the word table. A bit of programming-style shortening and a table of times returns ‘crontab’. OK, now I might remember!
One rabbithole that could warrant its own article is the ‘shebang’. Now, for context, I was reading this in my head as ‘she’ and ‘bang’. Rather than ‘the whole shebang’. So my instant reaction was: “And what on earth is a shebang!?”. And my next thought was “There better be a hebang or I’m going to totally lose it!”. Wikipedia keeps digging the rabbit warren. “Hashbang redirects here…. also called a sha-bang, hashbang, poundbang or hash-pling”. It got worse… “the shebang line is usually ignored by the interpreter” (thinking: I bet a hebang line wouldn’t be ignored!). Anyways, long story short…this whole palava is referencing #! at the beginning of a script — read more here. Another hour gone…
And the dreams are certainly happening just like in my dorm room in Paris. From being trapped in a dungeon with two others from the 3AI cohort where only correct code before a timer beep would save the world from coronavirus, to programming myself to wake up at exactly 3am (and me opening my eyes with a gasp in real life at 2.59am), coding is living and breathing in my subconscious like other language learning would (albeit perhaps a little more dramatically!). And I must be talking about it a lot as one of my friend’s dreamed of me coding too!
Like other language learning, it can be fascinating to find out funny expressions. I always chuckle at my German friend’s interpretation of the expression “it’s all downhill from here”. For me, it means that things will be easier from here, whereas for her it isn’t positive at all; the German equivalent would be to go uphill to higher ground. Go figure! Readings from the Data and Sensors fortnight take on new meaning. For example Fraden’s (2010) definition of a sensor receiving and responding to a signal or stimulus comes to mind. Same stimulus for me and my German friend, going through a different processor and yielding a very different meaning.
That’s where I’m at with coding at the moment — same stimulus as anyone that knows how to code is being received but it’s going through a very different processor and leading to very different (error-filled) actions. It’s like being given an awesome tool like a map for the first time, but without an understanding of what north, south, east and west really do and mean! You could also say that in some ways I’m currently going through a reinforcement learning regime. Trying things, receiving errors, trying again, loop, loop, loop (n=unknown times) until something works. Small victory dance. Cycle repeats. I can actually see how full-time coders get very deep into their craft late into the night. Waiting for that dopamine hit when something finally works!!! Luckily for me (I think?), the dopamine injections are few and far between for me to get too addicted anytime soon.
When I was living in Paris, the day-to-day struggle was real and at the same time the mind-opening it brought of new ways of thinking about the world was really valuable. I consider it a life-changing experience. Similarly, having this real-life mind-boggle with coding has been really important to understanding some of the practical implications involved with this fortnight — focused on algorithms and machine learning.
Think of an algorithm as a set of instructions (e.g. telling someone how to make a cup of tea — literally this was an exercise to start the fortnight off!). In order for me to write these instructions, there’s a world of tea-making out there that is going through the sensor system of me (my ears, eyes, taste, smell etc) and then being processed by the frameworks, languages, structures, worldviews I have inbuilt in me to then filter again into a set of instructions that I believe is ‘executable’ by someone else. It becomes very clear very quickly that with any set of instructions a bunch of assumptions are made. Do you assume the reader knows what tea is? What a kettle is? Has electricity? Has drinkable water? And what is tea for that person anyway? Is it something with milk and sugar? Is it hot or cold? Is it a solo or group activity?
For the instruction-maker, so many questions arise and decisions are made based on a range of conscious and subconscious factors. Receiving the instructions can tell you a lot about the instruction-maker. But it may not be helpful for the person (or computer) receiving the instructions if they’re not coming from a similar contextual knowledge. Every set of instructions has decisions. And once there are decisions, then there are also assumptions, biases, context built-in. This holds true also for algorithms.
In learning by doing, we’ve been further understanding the types of decisions that are made, the types of simplifications that are necessary when trying to create a set of instructions in code. For us, this fortnight, this has been best manifested in creating an Agent that can play tic-tac-toe. Being explicit about the strategy chosen, how it then shows up in code and the results it gives is an interesting dance and one that we’ll continue to explore as continue to surface issues of what trust in these systems really means.
I’m certainly far far away from being recognised for a local coder at this point, but like my exchange experience, I have had the glimmers of excitement when something clicked or a new code creation worked! And I have no doubt that it’s a worthwhile endeavour on this path of understanding other disciplines, their decisions and impacts as we journey forward as practitioners of a new branch of engineering to bring AI-enabled cyberphysical systems to scale responsibly, safely and sustainably.
If you’re keen to hear more about the Master of Applied Cybernetics experience, take a look at 3A Institute Medium Page and this article: A taste of life as a 3Ai Masters student: Homework #4
For context: I am an aspiring tri-sector collaborator, born in Sydney, Australia and citizen of the globe. A strategy consultant by trade, I have worked across many industries and seek to combine technology of the future, business acumen, social impact and human compassion. An alumnus of Singularity University, I have a particular interest in the intersection of AI, technology, humans, leadership and systems change. In 2016, I became an Acumen Global Fellow and spent a year building a marketing / innovation /customer insight capability at a fast-growing solar energy social enterprise in Uganda. I have most recently been a Director focused on systems change, social business innovation, Indigenous Affairs and cross-sector collaboration with PwC’s Indigenous Consulting.
I am currently on a sabbatical as part of the Australian National University’s 3A Institute 2nd-ever Master of Applied Cybernetics cohort.
I like to reflect on my experiences as a way of making sense of them and with a hope that my sharing may spark something in others too. Thank you for reading!