
During this past summer, I interned at the Daniel K. Inouye Solar Telescope where I developed a prototype GUI for the Science Operations Specialist team. I remember receiving my internship offer email and ecstatically clicking the link titled “Project Details.” As I read over the project description, everything sounded perfect until I hit one word that made my stomach drop. JavaScript.
Uh oh. What a way to ruin my mood.
Only a few things can extinguish the thrill of landing an internship– like the sudden realization that you’re about to dive headfirst into a language you’ve never touched. Up until that point, the only programming languages I had experience with were Java, C, C++, and Python. So, just like any stressed college student, I frantically Googled the quickest way for me to learn an entirely new programming language before the start of my internship. Easy, right? To freeCodeCamp we go!
Little did I know, this was just the beginning of my journey as I soon enrolled in ICS 314: Software Engineering I, where I would encounter TypeScript. Prior to taking the class, I never heard of Typescript and certainly wasn’t aware of its capabilities. As one of our first assignments, we were tasked with completing an “Introduction to Javascript” and “Introduction to Typescript” course. It was nice to get a refresher on Javascript concepts, especially since I only spent a week or two cramming all the information about Javascript that I could. I was able to finish the first part of the Javascript course with relative ease, but my confidence slowly dwindled as I approached the ES6 curriculum, which included various syntactical differences such as the arrow function, spread operator, template literals, and much more. While some of these newer syntax changes can be more intuitive, they took a while to get used to.
Despite the initial rough patch, I continued moving on to the Typescript course. I noticed that Typescript functioned very similarly to Javascript, but included new features and syntax enhancements. From the get-go, I appreciated how the presence of static typing allows you to check your code during development and compilation. In terms of using Typescript from a software engineering perspective, this feature is great since it minimizes room for basic type-related errors (a problem you could face in Javascript due to its dynamic nature) and eases the debugging process. The strict type declarations for variables also enable you to write cleaner and less error-prone code, which is an important skill to develop as a software engineer.
Overall, I believe that Typescript is a powerful programming language that enhances JavaScript by adding much-needed structure and safety measurements to promote better coding practices. What initially seemed like just another hurdle turned out to be a valuable learning experience that sharpened my coding skills and deepened my understanding of the Typescript language.
As the saying goes, “practice makes perfect,” and this phrase is extremely applicable to programming. In ICS 314, we practice athletic software engineering, which is where we consistently test our programming skills by solving coding problems under a certain time limit. These WODs (workouts of the day) are challenging and highly stress-inducing, adding another layer of complexity to an already intense learning process. Yet, despite the stress, I find myself enjoying this learning style because it forces me to recall concepts quickly and apply them under practical questions. With each WOD, I am able to simulate the high-pressure situations typical in technical interviews, just with slightly less pressure. This trial-and-error method of learning has not only helped me learn from my mistakes, but also practice with a multitude of problems to gain familiarity with different approaches toward a solution.
Although I’ve only completed a few WODs so far, I’ve noticed a significant improvement in my coding efficiency. For our very first WOD (Project Euler Problem 1), it took me five attempts to consistently solve the problem under the time limit. On our second WOD (Cracking the Coding Interview, Problem 1), it took me three attempts. On our third WOD (Temperature Converter), it took me two attempts. While I’m still far from perfect, it’s gratifying to know that I’m steadily improving, all thanks to my WOD-erful friend called practice.