Learning a new programming language is much like learning a new, well, language, language. I’ve recently started learning Typescript, which in many ways reminds me of Python, particularly when it is statically-typed. In the same way, when I was learning Japanese, many things reminded me of Chinese, such as the numbers (both in the way they’re written and the way they’re pronounced) and the Kanji. There are definitely historical reasons for this, just like there are probably historical reasons for Python and Typescript sharing similarities. In both Python and Typescript, types can be specified using this “variable: type” syntax, with support for unionizing the types. Additionally, both languages allow for object-oriented programming. As for their differences, Python uses whitespace to determine code blocks whereas Typescript uses curly braces. Typescript uses the less specific type “number” in contrast to Python’s “float” or “int”.
From a software engineering perspective, I believe that Typescript is a good programming language as it encourages static typing which is important for ensuring type safety. Although it may take a little bit more effort to learn and use than just plain Javascript, I think the benefits pay off. Specifically how Typescript warns you of type errors before runtime, allows for useful autocompletions, and improves code readability.
In high school I was a member of the varsity tennis team. As a player on the team, I was expected to consistently show up to practices, despite the fact that they took place late in the afternoon and miles away from my home. Although I would have preferred hanging out with my friends or getting home right after class and finishing my schoolwork early, I was determined to attend every practice to improve my tennis skills. I believe this dedication paid off, not only because I subsequently had reasonably successful seasons, but also (and primarily) because I was able to develop a lifelong skill that can be used to stay fit, have fun, and even function as a networking medium.
Similarly, software engineering is also a skill; one that requires consistent practice and significant dedication to become proficient in. A powerful tool for improving competency in software engineering is, as I’m learning in my current University of Hawaii at Manoa ICS course (ICS 314), a pedagogical technique called athletic software engineering (ASE). The premise of ASE is that software engineering is an athletic endeavor, and that putting learned skills under timed and stressful conditions promotes competency. Its implementation in this course takes the form of workouts of the day (WODs), which are timed, pass-or-fail coding problems that assess students’ ability to complete tasks using the skills learned from the course. Each WOD is accompanied by a video of the instructor solving the same problem, with the ultimate goal of encouraging the student to repeatedly practice completing the task and improving their time to be on-par with the instructor’s.
From my experience with it so far, I have found ASE to be effective for learning how to be self-sufficient when it comes to solving problems, particularly under time pressure. Although the WODs can be stress-inducing, they mimic—and provide valuable practice for—what many of us will inevitably face when we graduate: independent learning and problem solving, coding interviews, and high-pressure working environments.