public static void main(String[] args) {
System.out.println(“Hello world!”);
}
When I encountered Programming for the first time in my life, I would never forget the torrent of confusion that flooded my brain upon confronting those English words. As someone who had previously dedicated herself to learning the English language, I could not, for the life of me, understand what all of these letters put together in this context meant! I remember being amazed that there was a difference between public and private in programming.
When I was first learning object-oriented programming, I found it near impossible to understand the meaning of “class,” and why it was necessary to have a new “object.” When I came across data architecture, I truly thought that whoever invented the binary search tree must have been from another dimension. Dynamic programming and backtracking were languages that practically seemed like Greek to me at the time. Looking back at how wet behind the ears I was at the time, the whole experience felt like another lifetime ago.
Putting aside the never-ending tears and shaking off the late-night enticement of sleep, I worked tirelessly to overcome the barriers that came with pivoting a profession in humanities to one in software engineering. Gone were the days of rote learning that I had become so accustomed to in my previous years, and here to stay was an endless realm of ones and zeros I suddenly found myself thrust into.
“Not only can there be no mistakes, but there can also be no“standardized answers” either - all one can do is constantly hone one’s skill, pursue the desired outcomes, and hope for the best.
Everyone is learning to code because it is teaching us how to think
“Everybody in this country should learn to program a computer, because it teaches you how to think”
— Steve Jobs, Co-Founder, Apple
The main lesson that programming taught me is to reframe my way of thinking: it was less about meticulously analysing every word/sentence of the problem when in search of the right answer. It is more about accepting the reality that no one knows everything - the best way to confront problems is to embrace the unknown - the best way to confront problems, instead, is to embrace the unknown.
Without the safety of one correct answer, I found myself truly starting to think critically: what is this question really asking and how do I design an adequate solution. I was so accustomed to the “one exam, 50 questions, 60 minutes” testing format that never allowed for the motion of critical thinking, let alone the luxury of “designing an answer.” Similarly, current students studying under the conventional system are being tested on their abilities to recall and regurgitate instead of applying their knowledge. In reality, no matter what type of question one faces, the capacity of “thinking” and “designing” is imperative, as there is no standard answer for everything. As long as the answer addresses the problem, it holds its own value.
Another matter when encountering problems is the ability to find answers. The incredible thing about programming and its languages is its similarity to collective intelligence; when you run into a programming issue, it is extremely unlikely that you are the first person that has ever encountered this problem. Furthermore, the likelihood of subsequently finding an answer that perfectly fits your needs is even more infinitesimal. Programming requires the writer to not simply just “find” answers, but to ultimately “verify” and “assimilate” them.
I think the learning curve for programming languages is essentially a vertical axis on a coordinate graph. At first glance, it appears to be a cold, menacing cliff that is nearly impossible to climb. I’ve beaten myself up about it, and have nearly quit more times than I can recall- yet oddly, despite facing feelings of defeat time and time again, I never gave up. Now, having conquered the steep ascent and finally reaching the top, I have gained a sense of accomplishment like never before in my life.
A journey of learning outside the box
“Learning to write programs stretches your mind, and helps you think better, creates a way of thinking about things that I think is helpful in all domains.”
—Bill Gates, Co-Chairman, Bill & Melinda Gates Foundation, Co-Founder, Microsoft
The most important thing for me while learning to code these past two years has not been mastering the programming languages themselves, but rather, accepting a life-changing attitude towards learning as a whole. I firmly believe that my new perspective towards learning is a precious asset that will take me far in any professional field, which I hope to leave with you here:
Getting started is the hardest part, but perseverance is key: At a time when it seemed like there was a national movement where everyone was learning to code and waves upon waves of people were joining the fray, I noticed that only a few could actually endure the journey from beginning to end. I cannot even count how many courses I registered for that I never completed, how many “Coding for Newbies” books I bought, or how many heavy stacks of reference books kept piling up - only to still continue hitting the proverbial wall of programming illiteracy. Through it all, I discovered that it was much better to broach the subject with genuine interest and curiosity, rather than greedily rushing through all the classes.
Don’t seek overnight success: Learning to program is like martial arts - you cannot reach the summit overnight. The very foundation of coding in itself is complex. Unlike before, when last-minute cramming allowed you to scrape by for an exam, the trick to learning how to code and doing it well is taking in all of the little details and repeated inferences. Moreover, it is vital to learn how to achieve balance during moments of exhaustion or getting stuck. Learning programming is by no means a smooth and linear ascending curve; rather, it is a roller coaster of elusive problems that requires patience and resilience. Instead of blindly tackling each problem head-on all the time, one should learn when it is necessary to take a time-out, and set the issue aside. You would be surprised at just how obvious the answer is after some time apart, as if it had been staring at you right in the face during the whole time.
Find your inextinguishable passion in the field: Software engineers must set out to never stop learning. How does one accomplish such a daunting task? For me, it’s an innate sense of curiosity to keep learning- a penchant from within that doesn’t require anyone’s stamp of approval that gives me a sense of satisfaction unable to be taken away from me.
Writing, writing, and writing
Some people say that programming language is like a mirror: even when the operation results are the same, they still reflect and reveal the most genuine intentions of the writer - whether it is perfunctory or scrupulous, anxious or suspicious - all of these are laid bare in the various modalities of programming.
Yet there are others who like to say that the programming language is the most honest language in the world: there is no space for dumb luck or nebulosity, no sugarcoating, and no stonewalling, just line after line of operations. And there are some who also say that the programming language is the only language that can only be interpreted in writing (as opposed to orally)...
Perhaps it is these aforementioned reasons that contribute to the aloofness of programming. It exists in its own little world, where only fellow travelers cross paths by engaging in silent, spirited conversations.
As someone who first majored in the social sciences, programming has become a new type of language, with its own set of rules and methods for communication. I cannot help but revel at its complex beauty, created by the writer’s frenzied passion, dedication, and zeal as if he/she were Picasso - combining his demand for attention to detail with Da Vinci’s perfection for technique - all for a few lines of text.
Right now, the beauty of it all is still tinged with a bit of confusion, but I’ve learned to embrace those uncertainties and move forward, eager to leave behind a little part of me in writing, be it in programming or in Chinese.
“Write once, build everywhere,simple, yet beautiful. “