Without too much experience in writing compilers beyond this course, I'd say that the course focuses on grounding your conceptual/intuitive knowledge of how compilers work rather than any serious exposition into modern-day production-grade compilers.
You write the assembler for the course's own hardware architecture called Hack, then a compiler backend that converts a stack-based VM intermediate representation (IR) to assembly, and finally a compiler frontend that does syntax analysis and code generation to translate the book's high-level language Jack to the IR.
Just wanted to second this recommendation. I did the course a few months ago with near-zero baseline in graphics programming (though a few years' experience as a standard swe), and it gave me a pretty decent grasp of how 3d shapes get drawn on the screen. Afterwards I was able to pick up webgpu in a matter of days, which I don't think would've been possible without the understanding I gained from the course.
I just wanted to second this, I recently went through all of Karpathy's videos from almost zero baseline ML knowldege and am now fairly comfortable writing language models from scratch (simple bigram statistical models, MLPs, transformers, etc.).
Karpathy is quite good at helping you build an intuitive understanding of core concepts and linking/referencing literature where appropriate for the more curious learners. Thanks to his videos, I was able to read through several of the foundational papers on resnet, convnet, transformers, and some misc. normalisation techniques without _too_ much struggle.
At one point in time I also went through half of Andrew Ng's CS229 ML lectures from Stanford (https://www.youtube.com/watch?v=jGwO_UgTS7I&list=PLoROMvodv4...). Found them much more math/proof heavy, but definitely valuable for understanding the underlying statistical methods & theory that ML apply.
I'm curious what your current career is and why it's coming to an end. Is it because you don't enjoy it anymore, it's a dead end, programming is far more enticing to you, or something else?
If you enjoy programming a lot and have time on your hands, you might find Recurse Center (https://www.recurse.com/) interesting. It's a retreat for self-directed programmers and I'll be joining the upcoming winter cohort myself.
I had no credentials when I started programming for work, but after several years in industry and learning in my own time, I think it's really worth finding a community to be a part of. Not only do many great opportunities come through chance encounters/personal relationships, it's simply a lot more fun to learn & build alongside others.
I never went to college at all and have had (still have) similar feelings of unstable CS foundations. Some things that have helped me:
1. I historically treated programming purely as a means to an end (for income/work, for business ideas, etc.) and this really inhibited my joy for the craft. After a bit of a burnout, I decided to finally embrace it as a "passion" and have since begun learning things I'm intrinsically interested in–3d graphics, operating systems, webgpu, and others.
2. One part of being invigorated is being around others who are invigorated. I've recently applied to a hacker retreat at Recurse Center (https://www.recurse.com/), so that I can meet and be surrounded by other hackers who pursue programming out of love for the craft itself. Even if this doesn't go through, I plan on finding other communities related to my sub-interests and learning alongside them.
4. From my experience, in order to upskill in programming (and anything else) there is no substitute for putting in the raw hours. This is why I mentioned the importance of intrinsic motivation in the first point, since it's hard to put in long hours for something that doesn't excite you. I realise you have a family (I don't) so this might really be the biggest barrier for you. If you can afford it, I'd highly recommend taking 2-3 months off to invest full-time in upskilling. Otherwise it'll be much trickier, but maybe possible if you can find a great community who you can learn alongside on a regular basis.
Lastly, I'd be more than happy to connect and chat about programming & self-learning if you don't have anyone around you–email is in profile :)
First off, this is an amazing app as others here have already mentioned–congratulations for launching!
In terms of improvement ideas (not that you're short of additional suggestions), I've recently started going to the gym again to train for a specific sport (100m/200m sprints). I need do a lot of plyo & power work and this involves more advanced/specific movements such as cleans, snatches, box jumps, etc.
Would really be amazing to expand the workouts to involve different kinds of training (e.g. strength vs power vs speed vs stability ...). Will look into the project later and see if I can contribute somehow, and happy to discuss further if you're interested :)
This is interesting, do you ever think back on those years and have a desire to actively seek out such environments again? Or have you simply found peace with your current situation and are happy to give your attention to other things in life?
Can I ask what kind/fields of research you support? I left my big tech job some months ago to try start something of my own (in an attempt to find more joy in my day-to-day, hence the post), but if things don't work out for me what you describe sounds pretty appealing as well.
My field is mostly about data engineering and human computer interactions. But the projects are diverse, with healthcare, air traffic control, museums exhibitions, drones, factories… Nothing too crazy but it’s a lot of interesting things to think about.
So I've been searching for my "purpose" for about 10 years, and unlike some other commenters here my personal experience makes me believe it's possible to consciously discover/create your purpose. But I don't see purpose as anything particularly religious or dramatic–simply that you can reflect on the life you have in front of you and feel content/at peace with where you are.
Nowadays, I consider myself fairly happy. Here is an incomplete list of things I did to get closer to answering the ever elusive question:
- I retraced my childhood memories to resurface long forgotten hobbies and activities that brought me joy, focus, and interest. For instance, as a kid I used to spend hours and hours drawing my favourite FFVII characters, puzzling over difficult math problems, playing piano, and more. Not all of these turned out to still be interesting to the adult me, but if you're looking for ideas on what kind of activites might bring you fulfilment, your childhood interests (or their underlying motivations) are often a good place to start.
- I attempted a bunch of new things over the course of multiple years. A non-exhaustive list of things I tried: learning German, living in 3 different countries, running a marathon, doing a triathlon, going to law school, taking watercolor painting lessons, doing a sculpting course, learning jazz piano, spending time in a Buddhist temple, creating a mobile app, etc. etc. Most of these I invested 3+ months of regular commitment to give them a proper shot, but some only ~20 hours. And if you want to know how many actually stuck with me, optimistically I'd say about 20%–but going through the 80% to find this 20% was more than worth it for me. Point being, I spent a lot of time (and energy) trying out things I didn't really end up liking in order to find the few that I did.
- Lots and lots of introspection and self-inquiry regarding my emotions, motivations, and values. What do I stand for? What can I not live without? Why do I do the things I do? Why did I choose the paths I chose? What do I wish I could have chosen? What did I stop doing? Where are these emotions coming from? Nobody could answer these questions for me, and oftentimes neither could I. But I didn't stop turning them over and over in my head throughout all the years, and slowly over time I started to form half-answers and then eventually full answers to some of these questions.
- Sometimes I landed at major crossroads in my life, and I just couldn't decide. For a long time I remained in this limbo state, agonizing over which path to take, until I learned that just picking something and moving on is a much better approach. Biasing towards action helped me gain key information faster than just sitting around thinking, and I learned either that I do in fact enjoy the path I chose or that I would I rather be doing <x> activity instead–in which case I promptly changed to doing <x> instead. (Note that this kind of goes against the point above on introspecting a lot. I guess the key takeaway is to make sure you're doing both, but people tend to overthink and underact.)
- Whenever I wasn't sure about how much I valued something, I just cut it out of my life. The things that are truly important to me have a way of coming back to haunt me until the point I can't stand not pursuing them any longer. Example 1: I didn't play piano for a few years, and deeply missed it by the second year. Example 2: I didn't do any rigorous academic study for 5+ years, and one day realized how important intellectual rigor was to my own sense of identity. I don't know if I actually recommend this method though, as it's an expensive way to learn a lesson and some consequences are difficult to reverse (if at all). I often wonder if there are better ways of determining what's valuable to myself without going through this separation process.
I'm going to stop here before I end up rambling; I hope the above will help you in one way or another. All in all, I believe it's worth searching for a life of purpose, whatever that might mean to you. To strive for anything less feels like doing yourself a disservice, because what's the point of living if you're not enjoying life in all its glorious suffering and beauty?
You write the assembler for the course's own hardware architecture called Hack, then a compiler backend that converts a stack-based VM intermediate representation (IR) to assembly, and finally a compiler frontend that does syntax analysis and code generation to translate the book's high-level language Jack to the IR.