More like learning a funny accent

28 Aug 2023

I am a second or third year student of computer science at the University of Hawaii at Manoa, and so far I have completed five different courses pertaining to computer science. Only three of these courses involved writing code. I started learning how to code with Java in the courses ICS 111 and ICS 211, both of which were introductory computer science courses. The third class, ICS 212 Program Structure, had us learn to use C (primarily) and C++. I am going to admit: I don’t think I was fully confident about my skills or knowledge in Java before I went and did ICS 212. This isn’t to say that my professor did a bad job - no, I believe they did an excellent job of guiding me. But there’s so much, I personally felt, that I still had to learn.

And here I am today, taking three more computer science courses this semester. One course, ICS 314 Software Engineering, has me learning another new language JavaScript. But here’s the kicker, I had one week to grasp the basics this time.

Similarity in syntax

freeCodeCamp was the primary resource provided to help me start “walking” in class. I’ve actually used it before to learn CSS and HTML over a summer once so I was already familiar with how the site functioned. Essentially, the site breaks down major concepts in basic programming and packages them each into small exercises that the user then completes which should result in a better understanding of the concept. It’s not unlike the assignments I did for ICS 111, which were all exercises that helped me learn how to print statements, learn how to declare and initialize variables, utilize arrays, and create functions. Overall, it took a few hours within a couple of days to get through all the basic content, and now I’m capable of solving simple problems using JavaScript.

What really helped me to learn the material as quickly as I did was my prior knowledge of Java and C. After the first week of ICS 212, my professor asked the class about how we felt about learning C and had us compare it to Java. I appreciated that most of the logic behind the languages and the syntax of both were largely similar. Again today, I appreciate how Javascript is also similar to Java and C. We call each of these a programming language, but it’s very different from learning Japanese and English and Spanish - it’s more like learning how to speak English in different accents.

A new approach to learning

The short deadline to learn the basics of JavaScript would also lend itself to dictating the tone of the class. Previously I would be given an entire week to complete programming assignments; ICS 314 Software Engineering provides me with minutes to solve problems. There is a new expectation to code efficiently, which I am more than open to adhering to. My future career aspirations will eventually lead me to have to undergo coding interviews and improving my coding efficiency can improve my chances of being accepted to certain positions. My professor deems this style of learning “Athletic Software Engineering,” which takes from crossfit and other fitness and sports-related training regiments. We develop a “muscle-memory” that will make us quicker at developing algorithms to solve simple problems. To match the name of the style of learning, certain assignments are called “Workout of the Day” or “WOD,” which asks that we time ourselves as we solve programming problems.

The benefits of a weekly workout routine

I personally use the university fitness center every morning before classes and breakfast. I do have fitness goals: I want to be stronger, I want to be leaner, and I want to perform better in activities like running. Aside from proper nutrition, the other important key to success in achieving these goals is consistency. The same goes with programming - I can’t maintain good habits and efficient problem-solving skills if I don’t remain consistent with my training. The very first WOD I did for ICS 314 Software Engineering involved me having to find all integers between 1 and 1000 that were divisible by 3 or 5. For a lack of better words, I went in somewhat blind. I had just learned the basics of JavaScript, and it’s been a while since I coded anything. I attempted the WOD honestly, however, and timed myself as I tried to solve the problem.

First I figured out what I knew could help me. The remainder operator “%” could help me find integers that were divisible. I also knew I had to iterate through some list of numbers between 1 and 1000, so a loop might be helpful. But I encountered a problem with transcribing all this into code. And before I knew it, over 10 minutes had passed (which is considered a failing time by class standards). I was so used to taking my time solving problems and referring to old code that it was probably expected that I would go over time.

Assuming my mind can behave similarly to muscle, I can train my mind to linking specific data structures and algorithms to types of problems. This is what I believe one of the intended outcomes of this course is. And it’s something I look forward to observing as I go through this class.