Coming from the engineering and hardware side of programming where each line of code is compiled into assembly instructions for hardware to interpret directly and having so much control over the hardware of the computer, I scream heresy at languages like JavaScript. While I understand the need for such languages to exist since they are primarily used in a space (such as the web) where they are dealing with many different platforms and the need to be able to run on any one of them without the need to write a lengthy and effective compiler is great. It pains me when I am forced to make variables, and the way I see it that have a sort of in a superposition where the type of the variable is not strictly defined. I can however appreciate that these languages are probably one of the better languages for complete beginners to learn and to study algorithms since there is no need t fiddle around with syntax errors, making sure that the pointers are pointing to where they need to be, or freeing up memory that was dynamically allocated after that memory block has served its purpose. Especially as someone who is the TA for the C++ lab and having students that have very little or no programming skills at all jump straight into a language that has a significant amount of nuance to design and a ton of tools avaliable that can come crashing down if you do not know what you are doing. For me however, I can say it is a cute little heretic language that does not like committing to a paradigm.
The weekly WODs to me are great as it is proven that to get better at a language you must continuously use it in different tasks it was designed to overcome. I do this with all the languages I learn, which is why I know so few, and my overall goal at the end of the semester is to become a decent JavaScript programmer. You know someone that can pass a simple programming screening interview with the language. And no, this language will not convert me over to the interpreted camp, and I doubt that JavaScript will convince me that functional programming has practical use cases outside of hard mathematics and science operations (Haskell might be that langauge that might be the one though).
Technically any language has its ups and downs when desinging a program. Being a non-commitment language helps it very much as one only really needs to know the basic pillars of OOP and functional programming to fully utilize it in JavaScript. However, when it comes down to actual runtime, organization, and optimization that is where I feel that the language falls behind the more committed languages. The AGILE style of development is pretty interesting to say the least. I got a taste of it when Austin Tasato when my TA for Object Oriented Programming. As someone who has trouble making desicions, AGILE does help converge all the possibilities as the time-crunch of AGILE requires desicions to be made fast and effectivly. Though, for projects that are “mission critical” to an important system I say to let developers take their time and thouroughly check everything before a single line of code is written.
Overall, this class has opened my mind to the other side of the various fences that I stand on programming and sometimes it actually feels nice to be on that side. Then I slap myself awake knowing that the true way is with compiled languages and prioritizing speed and memory optimization over trivial things like readability and having comments in the code. I see myself really enjoying the rest of the class.