Elegant Code
Attempting to raise coding skills from high-intermediate to high
When I migrated my Introduction to Programming classes from Perl to Node.js, I had a slightly moderate learning curve.
I also moved my AP CompSci classes away from Java to Modern Web Development. I had dabbled in web development back in the 90’s and stopped about the time frames were a thing. But now….. HOLY COW! Modern web dev is HUGE. A few things were immediately apparent about the current state of affairs:
- Functional programming is difficult to grok, so people keep making frameworks & such to abstract away the hard, tedious job of coding.
- Half the people lament the fact that there are so many frameworks and the other half say ‘you must not write enterprise-class software
or you’d understand the need for all of this flux!’ - Heck, there are even small divisions on whether JavaScript should still be used by the browsers as the defacto language!
I don’t have an opinion on the hot-mess state of affairs, but I did need to distill out what I felt was important to learn.
This is the list I came up with:
- IDE - IntelliJ Ultimate & Notepad++ with plugins
- Git/Github
- HTML5 with all the meta tag goodness for responsiveness
- Markdown
- CSS3 (media queries, fluid text & images, responsiveness) mobile 1st…
- SCSS
- CSS FrameWork (Foundation, Pure, Bootstrap, & Skeleton are great examples)
- ES6 JavaScript (ESPECIALLY event listening/handling)
- Regular expressions
- Node.js (this is just JavaScript but modules, NPM, & libraries are essential knowledge)
Everything on the above list is what I would consider foundational, imperative knowledge. But wait, there’s more. Everything on the next list is important too, but it starts to become more difficult and opinionated:
- A solid understanding of http requests, responses, request types, mime types, and valid response codes
- A solid understanding of functional programming (first class functions, pure functions, IIFEs, closures, function expressions vs. function declarations)
- A solid understanding of Ajax & JSON with stringify & parse
- Writing a pure Node.js web server with no frameworks, including routing & mime type handling
- A templating engine. I chose EJS for it’s simplicity
- File I/O with Ajax, CSV, & databses (I chose NeDB for Mongo-like syntax at a millionith of the overhead)
- Progressive web app methodology (https, manifest.json, service worker, & favicons)
- Firebase
- Heroku
As I began my learning journey, I had many obstacles. The main one was my OCD personality. When I code, I prefer to do it using industry best-practice standards. Learning modern web development using the web is not very conducive to this because of all the bad or outdated material out there. Just filtering the web content is a major chore and it was one that I tried my best to sheild my students from by curating the best of the best and linking what I found on our LMS (learning management system).
If I were to rank skill with a particular subject, I would probably do it like this:
- Unskilled
- Low
- Intermediate-low
- Upper-low
- Lower-intermediate
- Intermediate
- Upper-intermediate
- Lower-high
- Intermediate-high
- High
- Expert
I feel that after two years of working my way through the learning process, I am at the high-intermediate plateau. I can read & understand most standard code. I can extemporaneously write a progressive web app & have it hosted on Heroku. I can easily help my students with their coding projects. Where I feel like I’m lacking: Understanding how to implement Oauth2, refined design patterns to optimize my applications, ES6 symbols & promises, and finally, a good eye for UX design.
As I tackle the things I need to work on, I will go back and write these web logs to present the material I’ve curated for my students in an effort to help the next people that need to dive in from the top.
⬅️ Go back comments powered by Disqus