Learning new programming languages has always been intriguing to me, despite my lack of experience with it, primarily due to the sheer volume of existing languages out there, with the most popular ones being near necessities to know recently, such as C/C++, Java, Javascript, Python, etc. Up until now, my only encounters with programming languages have been strictly with Java and a little bit of C++, and even then my experience and depth of knowledge of both is lacking, to say the least. It has also been around 2 years since I took my last ICS class, and obviously as a result of that I’ve sort of lost my flow with programming and the computer science mindset in general, so I am still trying to get back into the swing of things, this time taking off straight into Javascript, and more interestingly, Typescript.
Starting off with Javascript, I was somewhat expecting to be greeted with something familiar, considering its similar name to Java. However, I found it to have its fair share of differences to say the least, which is reasonable considering both serve very different purposes, and both do their job seemingly well considering their prevalence now. I found that the lack of variable type initiation to be something completely new and mind boggling to me after experiencing the inference capabilities of Javascript, which also simultaneously makes me uncomfortable. I definitely have a strong tendency and bias toward initializing variables with a type, mainly due to my only experience being with Java and C++, and also because it acts as reassurance to me that the proper data types are being processed and used, and also remain consistent. As of now I still have trouble relying on the variable inference, however this sentiment sort of becomes obsolete due to Typescript. Writing functions in Javascript also happened to be one of the more familiar aspects, as it did not seem too different from Java. The ES6 module, on the other hand, introduced many foreign concepts to me such as the object destructuring, array spreading, arrow functions, etc. that I would really like to explore more and put more into practical use so that it becomes more natural for me to use. Using the string templates is also a habit I would like to integrate more into my programming, as it is a very common occurrence to have variables and other values in strings, in which case it seems to be a more efficient and time-conserving option.
Typescript seems to undo some of the anxiety caused by Javascript, including type declaration and also introducing some tools that seem to be very useful in scaling up and streamlining programs, such as introducing concepts such as interfaces, enums, types to classes, and also introducing different data structure such as tuples, all of which can make certain tasks less of a pain to deal with or create solutions to. I couldnt really give you one off the top of my head, but I’m sure sometime later once I become more acquainted with these features I will find most of these features and options appreciable, since currently most of it seems outlandish to use for my current level. For now though, I’m still trying to start up again and attempt to understand more of these concepts and put them into action, hoping to learn more as I go along. Regardless of the sheer amount of new features and topics introduced this week, I believe I understand the power these tools might lend to us, so I guess I would consider Typescript a good language by default in regards to software development. Honestly though, I think I will only really appreciate it when I become more familiar with it and run into problems that might have been more of a pain to deal with in just Javascript. More of a trial by fire thing, where I need to experience it first.
On the topic of WOD’s (Workout of the Day) and athletic software engineering, I believe they definitely serve a unique purpose in the classroom and act as a refreshing approach towards software engineering and programming in general, as people can derive what they want from it, especially with emphasis on skill and implementation. The concept of solving and applying learned concepts to a presented problem in class through WOD’s is a first time thing for me. I originally, especially for today’s WOD (first of the semester), went in with the mindset of simply completing it as fast as possible, not really paying much mind to the efficiency or fluidity of my code. The timer for the WOD gives a feel of impending doom, at least to me, but I don’t know if that is due to my lack of preparation or just anxiety, or a mix of both (who knows). The practice WOD’s on the other hand, especially when permitted to with others/groups, seems to be more laid back and also places more emphasis on team communication and problem solving. Its encouraging to not feel alone when you have a problem and can discuss certain approaches or solutions with your group members. However, it is also necessary to be able to solve and apply concepts to problems yourself, in which I acknowledge the in-class WOD’s as a pretty decent method of ingraining that. As a whole, I can appreciate what the athletic software engineering and WOD approach brings to the table, regardless of how uneasy I feel sometimes about the timing pressure and nerves, as I think almost everyone can get atleast one good lesson and experience out of it.