My learning experience with JavaScript reminded me of the first day of my internship. This past summer, I was a software engineer intern at a local standup company, RVCM. On the first day, I was given a single link similar to freeCodeCamp to learn a new programming language, GoLang. Although I was not given a specific date to complete the training, I quickly hopped on the website to get acquainted with the new language. Given how long it took for me to learn Python, C, and C++ in my previous classes, I assumed it would take a while to absorb the new information. To my surprise, however, learning GoLang did not take too long and I was able to quickly jump to my tasks in the next few days.
Getting started on learning JavaScript made me a bit worried that I would not be as motivated to learn the language. However, I only had a few days to complete over a hundred exercises on freeCodeCamp. To avoid cramming, I planned ahead to carve out some time every day to finish the exercises in sections. As I went through the exercises, I started to notice some similarities with the programming languages I was familiar with. This was an advantage in the learning process as it sped up my learning.
So far, I like the simplicity of JavaScript. The syntax is very straightforward and similar to C and C++. After learning several programming languages, I noticed that all languages have some commonality, specifically in terms of how for-loops, if-else statements, and functions are structured. The variable declarations are so simple to the point I feel like I am missing something, however. During my internship, my mentor told me he thinks JavaScript is “a chaotic language” because it is a loosely typed language. I did not understand what he meant at that time, but now that I finished the JavaScript exercises, I see what he meant. For now, I think JavaScript is incredibly easy to learn and adapt to, but I could see why it can seem chaotic, especially if I want to organize my code by being specific in terms of variable types.
One difference I noticed with JavaScript is that it utilizes first-class functions. This means that functions are treated like variables, in a way that functions can return functions and be passed as a parameter. I have never experienced working with first-class functions so the concept is a bit confusing and overwhelming for me. However, I could see how powerful and advantageous it could become, and I am excited to implement it in my code in the next few weeks.
I have been passionate about fitness for a very long time and am currently in the process of achieving my fitness goals. In the fitness world, many beginners make the mistake of wanting to see results instantly and choose to embark on a short-term, intense diet. Although calorie restriction and intense exercise will result in drastic weight loss, I learned the hard way that this is very detrimental to long-term health. Moreover, the results of such an intense diet are not long-term as it could lead to gaining back the weight and development of unwanted habits such as eating disorders. I look at software engineering in general from the same perspective.
Although I am studying computer engineering and have been programming consistently for the past few years, I cannot confidently say that I am a skilled programmer. Programming competence is important for me, especially since most tech companies will give problems to solve during technical interviews. Fortunately, there are resources such as LeetCode that provide practice coding problems. However, similar to how one cannot sustainably lose weight overnight, one cannot develop “good” programming skills by cramming practice problems in one night, or worse, showing up with little to no practice.
To sustainably develop skills to be a successful programmer, I find doing the practice problems to be the most advantageous. Admittedly, the practice WODs are stressful, and I imagine the in-class WODs to be more stressful. Although I am relatively calm under pressure, I become very insecure and lose confidence in my skills when something is timed. I prefer to take my time to code, and when I get “stuck” on an implementation, I find walking away from the computer to be helpful for me to generate new solutions. However, I cannot do that for the WODs, and I understand that practicing them would train me to eventually develop skills that would help me with WODs and even technical interviews.
Although the practice WODs are stressful, I find joy in completing them if I can solve them before the DNF time. The benefit of doing practice WODs is that even if I do not understand or get the code to run properly on the first attempt, I am able to gauge my skills and understand what my weaknesses and strengths are. “Athletic software engineering” is exactly what it sounds like—sectional practice over time results in sustainable success that is long-lasting.