I would like to use this article as an opportunity to introduce two big concepts/communities.
Handmade Hero
I am very grateful for
HandMade Hero. I remember when it first started a couple years back.
The time when Casey Muratori was teaching how the Windows API worked and how everything came together. He taught me a lot in the how and why. Why is this function call in place? How does this function work? How does one create a window callback function?
He really helped unveil the inner workings of modern libraries and how they work with the OS. It has been 2-3 years now and I have to say the series and the community has grown tremendously. The community is deeply focused on game programming with understanding of why we have the system the way we have today.
In my current standing after graduating with a CS degree and now working on a masters, I do not think I will be going back to the series, even though I would say I still have a lot to learn. This is because I realized there is a lot we can continue to learn in CS. Whether that is in OS, computer graphics, ML, AI, deep learning, etc. But eventually we have to focus on one area to work on for our day to day work.
I deeply appreciate what Muratori has done but I think what is more important is getting the gist of computational thinking. I think his course provides that. There comes a time in a programmer's life where we can say with some degree of instinct on how a program or API works. After much exposure, we see larger, deeper patterns to the design that can be exploited.
D3js
Each API has a different flavor but has a general flow. For example, recently I was in a conversation about the D3js library. A Javascript library designed specifically for data science oriented graphs.
What I came to realize quickly was that the app was designed very similarly to other common gui libraries. Such as Android XML files or Python's Kiwi. There was some kind of scaffolding involved in the system. In D3js we have the SVG scaffolding.
What made D3js unique, I concluded, was its community and two key features it promoted. First was the ability to couple with data by allowing it to be set as a input and manipulated as an ouput to DOM elements. Second is the ability for D3js to have some basic libraries for visual manipulation such as interpolation or forces. These features cater to better data science applications.
Turns out after talking to my advisor, indeed! There are many forks of the D3js library that promote this type of community building. With various examples of data visualizations and what not.