When I first found out that I would have to learn TypeScript for my Intro to Software Engineering class at the University of Hawaii at Mānoa, I was hit instantly with a wave of stress. Prior to my professor’s mention of the language, I had never even heard of TypeScript, and now I was being tasked with learning it in the first week of school. Not to mention, this language was going to be the building block for all the course work to follow, and in an ever-larger scope, it is going to be a necessary skill to have when I enter the workforce. Needless to say, I was apprehensive about embarking on this journey to teach myself TypeScript in a week using a FreeCodeCamp link my professor provided. However, I knew that worrying about whether I would be able to pick it up or not would do me no good, so I started chugging along at the 150 problems and their corresponding readings assigned to us.
As I started to work my way through what at first seemed like a daunting task, I was quickly faced with a feeling of comfort while working through the modules. I soon realized that a lot of the concepts being covered in these modules were ideas I was already familiar with from other classes. Inheritance, logical operators, if-else statements, objects, iterations, recursion, they were all concepts I had become familiar with due to my prior coding experience. What first presented itself as an overwhelming task soon became manageable as I realized successful completion was well within my reach. I breezed through the first 113 problems, but my pacing and confidence soon slowed down as I began learning ES6, a major update to the JavaScript language, thus also being an update to the basics of TypeScript. A lot of the concepts and syntax being introduced felt extremely foreign to me and I began to feel intimidated again. I specifically recall getting tripped up on arrow functions and destructuring, because while I felt the concepts were easy to understand, the syntax in this new update became difficult for me to follow and remember. A completely new concept I was exposed to was the idea of promises. Through practice, I began to become a bit more familiar with the concept and its syntax, but I think what I look forward to most with new ideas is finding a way to implement them into real practical projects.
Through my introduction to TypeScript, it becomes easy to realize why many people enjoy using the language when it comes to software development. Seeing as TypeScript is a superset of JavaScript, it maintains the functions that you can utilize in JavaScript, while also allowing for an expansion that improves the overall experience of the language. Just a few examples I learned about is that TypeScript is easier to debug since errors can be found at compilation time instead of run time, TypeScript is more expressive when it comes to syntax, and TypeScript is more readable and manageable than JavaScript. All of these features and others not listed here are just a few reasons why I have come to understand the likability of TypeScript. A language that is more flexible and does not limit a software engineers’ ideas while also providing a convenient experience is one that is bound to be well-liked.
I was given about a week to become proficient in Typescript, a language I had never been introduced to and therefore invoked a feeling of stress and urgency around completing the task. This is an example of a practice called Athletic Software Engineering which according to Philip Johnson who developed the pedagogy, can be described as “…involve[ing] a high intensity, time-constrained, and often stress-inducing approach to acquiring competency with software engineering skills”. While I am still relatively new to this learning format, it is easy for me to see the value in a class structure like this. As a software engineer, when you enter the workforce you are constantly surrounded by time sensitive tasks in which you must demonstrate your skills. Whether it’s completing a technical interview to acquire a job, completing a sprint on your team’s project, or writing a report for your boss to look at, you will have something that must be completed within a short frame of time. To me, part of becoming a good software engineer is not just being able to code well, but also being able to handle the pressure that can come along with the job. Thus, when we were introduced to WODs (Workout of the Day), which are timed coding exercises where you either get 100% credit or no credit depending on if you can finish within the time limit and get your code to properly function, it made perfect sense as to why we were given such tasks. In the real world, if you are working on a project for your company, it either fully works or it doesn’t work, unfortunately partial credit does not exist if you are developing an app for a client. That is why I found the practice WODs to be a very helpful tool when it comes to developing this skill. The more practice I can get when it comes to coding and delivering in a timed and pressured environment, the better I will get at the skill, and the better programmer I will become. I have even begun to witness the betterment of this skill firsthand as I reattempt WOD problems. I am able to cut down my completion times in half whenever I reattempt a problem, after all they say practice makes perfect. There’s no doubt that it is a stressful experience, but ultimately, I know it’s for my own benefit to improve on it now rather than struggle when it counts in the technical interviews.
Overall, the pressure put on me while having to teach myself and complete tasks in relatively short periods of time is one that feels uncomfortable, but I realize the value of gaining experiences like this. Computer science is a constantly growing and changing field which means as a computer scientist, you must be willing to grow and change with the field. To be a computer scientist is to commit yourself to being a lifelong learner where you may be the one teaching yourself these changes the longer you stay in the industry. You also must be able to handle pressure and know how to complete tasks in a timely manner. I believe my experience of learning TypeScript, practicing WODs, and being a learner under the athletic software engineering pedagogy are all key parts of improving myself as a software engineer to take on whatever challenges lie in my future.