Javascript is a programming language that is necessary for the state of the internet as it is today, even if I’m not the biggest fan of it. I understand its importance, and I even concede that many of my problems with it make it an easy language to pick up and implement, but there are just some annoying things about the language that don’t sit right with me. Learning it via the athletic software engineering method seemed to be alright, though, at least for the first week of it.
Some of the more forgiving aspects of Javascript contribute to my issues with it. I may be biased, but I learned the basics of programming on Java and C/C++. These compiled languages are sticklers for correctness and will refuse to compile and run if something is even slightly incorrect. I find there’s safety in that since bugs have a chance of emerging earlier as opposed to possibly hiding until a typing error or reused variable gets changed. Javascript’s allowance of variables to be re-typed and makes thorough debugging slightly more of a pain than it could be with some more strict rules. I’m sure there is some IDE out there or Notepad++ plugin that lets you constrain that, but this is a review of the raw language. Furthermore, Javascript having only 1 number variable type means everything is a double, which means every number allocates a huge space. As a consequence of this, performing integer math requires extra steps that aren’t needed in other languages.
From a software engineering perspective, I have to say that Javascript is great for what it does. Being the only real supported client-side scripting language means it fills a necessary role in the world of computer science. From a practical perspective, it is a forgiving language to start learning programming with and can introduce future software engineers to programming. However, my aforementioned issues with it means that those learning with this languages will probably have to get used to the constraints of compiled languages which means possibly having to lose some bad habits from learning Javascript.
Athletic software engineering seems like it utilizes, what is in my opinion, the best way to learn. Small, numerous practical exercises allow students to learn, apply, and retain concepts. Furthermore, the size of the exercises still feel like they are accomplishing things rather than sitting for hours trying to find the one bug that is wrong with their code, so it keeps motivation up when learning new things. The assignments don’t feel stressful yet, but it would be nice if there was some cushion, because if you miss the submission, there’s no incentive to complete the exercise. Point drop-off would be a better solution in my opinion, but then there would be less of an incentive to get it in on time so there is that. I think that getting the time of completion below a certain point is a good way of increasing language fluency and confidence. However, having more than one exercise per practice WOD would help to let students become fluent in a concept rather than performing that specific exercise. For example: from a list of three exercises, choose 1. Other than that, the athletic software engineering learning approach seems alright for now.