Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Low-Level Academy, an explorable systems programming course (lowlvl.org)
419 points by nbaksalyar on Oct 13, 2020 | hide | past | favorite | 37 comments

Hey HN,

For the last couple of months, I have been working on a new interactive course to teach systems programming. Basically, it can be described as "Khan Academy for low-level coding". It is built with Rust and it uses WebAssembly and JavaScript to visualize what happens when you run your code. This idea was inspired by Bret Victor's "Learnable Programming", and you can read more about it in the blog [0]. The code is also publicly available [1].

Any feedback is welcome.

Thank you!

[0]: https://lowlvl.org/blog/explorable-programming

[1]: https://github.com/lowlevelacademy

Just want to thank you for making this.

I'm a JavaScript developer (just made a career change from law...) but I'm interested in dipping my toes in the water with "low level" languages. It's intimidating for someone like myself who is self taught with no CS degree or formal training.

A resource like this is just what I need to try it out.

Thank you!

> It's intimidating for someone like myself who is self taught with no CS degree or formal training.

I know what you mean. I don't have a formal training or CS degree either. :)

And I know how scary and complex it can look, but in the end it's not that much harder compared to JavaScript or Web development. It's just different, but just as fun, and my goal here is to show that it doesn't have to be intimidating!

A tear just dropped. My fears have been quelled, And the nightmares have stopped.

The road to the top seems quite far. Low level is where you want to be, To raise the bar.

Thanks for making this!

We need more people with low level understanding of how everything works and how to do it from scratch (so that we can ultimately make things simpler to do basic tasks for future programmers and reduce overall complexity).

Keep up the good work!

I totally agree. Even non-developers can benefit from a better understanding of how the internet works.

Here's some feedback: This is absolutely wonderful!

Looks amazing, thanks for making it. Can anyone contribute courses/material to it given its open source?

Thanks! I haven't thought about it, but yeah, since the content is also published under the Creative Commons license, any derivative works would be very welcome. The only catch is that it takes a lot of time to create new lessons. :)

Great. One other thing I think you could add if not already is not cover all the topics yourself but also create a kind of roadmap of high quality resources with some order of steps to take the resources in.

As there exists lots of material already for TCP/UDP, Rust etc.

Good job on picking Rust.

   "I have always been passionate and curious about systems programming. At a first glance, this 
   area of knowledge might seem very complicated and even impenetrable for a lot of people. 
   Thankfully, with Rust, the tide has started to turn: the Rust community has demonstrated that 
   sometimes the perceived complexity is rooted in the lack of support, tools, and educational 
I have a question for the Rust community, especially those doing low level development now. As someone who does embedded and systems programming in C for about twenty years (technically i'm not 40 yet ;-)), were the cited problems (lack of documentation, support and tools) really problems that kept from doing low level work? If not, what was it then?

I'm genuinely curious, because when I started it was more things like hardware bugs (yes they do exist) or the general theory of things (like writing a performant scheduler or file system) that seemed hard to me.

This reminds me of Programming from the Ground Up[1]. Although this seems to focus much more on networking.

I wonder if someone could write a Programming from the Ground Up style book and use WASM instead of x86 Assembly.

[1]: https://news.ycombinator.com/item?id=11702025

> this seems to focus much more on networking.

That's a first module, and I will keep adding more lessons, at least for UNIX process control (fork(2) and friends) and memory allocation.

> Programming from the Ground Up

This looks like a great resource, thanks!

> and I will keep adding more lessons

As someone that doesn't know anything about low level, I am hestitant to jump into any of these lessons because I have this idea in my mind that there is a proper order that one should learn the concepts in. Is that true? If so, will you have learning "paths"?

Yes, but these paths are likely to be loosely connected, i.e. these lessons are designed to be self-contained.

There are some common basic topics, or “prerequisites”, but these will also have their own self-contained “path” / module to explain things like binary numbers or how memory works. It’s also very likely that I’ll do a separate module for Rust as a programming language.

This looks fantastic, I would be willing to pay money for this honestly. Might sponsor development.

I would definitely pay at least the cost of a good eBook or two for this

As someone who’s interested in low-level programming, I’d really like to say thank you for creating this.

Are there ways that others can support this work?

Thank you!

> Are there ways that others can support this work?

There's one important thing I'd very much like to add: accessibility. I've yet to find a good way to make this work in more environments (e.g., with screen readers).

Other than that, any help would be very much appreciated: translations, code fixes, sponsorship, and, of course, your feedback. :)

I second this - I come from a self-taught background and have been moving down the stack since and am 80% through the Rust Programming Language book. I am very excited with this and am happy to help where I can :)

This is neat.

I really want to make some sort of sre/distsys/ops training ground to go through a mixture of systems design and operational skills (troubleshooting, observability, firedrills) but the interfaces and integrations of the moocs I've tried are so ill-fitting for the task and the good options (which I can't think of right now, there's one that'll integrate into aws/gcp and give you "playgrounds") are too expensive for a lone dev- they're full on corporate training grounds (are they any good? never used one).

There are "k8s/cluster playgrounds" and what not but they're so not operationally-forward in most cases, just extremely basic and not really relative to a day in the life of a cluster/systems operator at all.

I like how you've set this up, I actually want to go through the lessons, great work.

This is great! I'm not much of a programmer yet, but I can feel the underlying urge grow stronger by the day. Getting my copy of Unix Network Programming today in the mail, will definitely be checking this course out.

Thanks for making this.

It looks like your code is dual-licensed between MIT and Apache. How do you indicate which code is under which license? Also, just a heads up, it looks like you need to update the Apache template with current dates and your name.[0]

I appreciate you making this material open-source. Do you plan to add a CONTRIBUTING.md to instruct those who want to help to understand how to start?

[0] https://github.com/LowLevelAcademy/LowLevelAcademy/blob/mast...

> How do you indicate which code is under which license?

You can apply either of these licenses at your choice, that's how it usually works with MIT/Apache. This is to maximize compatibility with other open source licenses. And thanks for the heads-up, I will fix this too.

> Do you plan to add a CONTRIBUTING.md to instruct those who want to help to understand how to start?

Since there's some interest in this, I'm definitely going to add it!

Hi Nikita, this is a fantastic idea. I've have been working with low level programming for a long time and would love to contribute new lessons. How can I do that?

Thank you!

> How can I do that?

You can drop me an email (it's in my profile), I would be happy to help you with this.

I am a bit late to the party, but as it happens some top universities have made some of their systems programming courses publicly available, and if you want to get into systems programming, these free options are much deeper, comprehensive, and come with extensive coding assignments that include tests and have been crafted by talented TAs over many years, to help keep you on the straight and narrow:

[1] Operating Systems Engineering: MIT 6.828 (in C and a bit of x86 assembly, 2011 has videos for all lectures, bad image but outstanding content)

[2] Distributed Systems Engineering: MIT 6.824 (2020, in golang)

[3, 4, 5] Database Engineering: MIT 6.830 from OCW (2010, Java), complement with Pavlo's youtube videos and Stonebraker TA notes.

[6] Security Engineering: MIT 6.858 (2020, web, python, C, assembly, etc)

[7, 8] Computer Networks: Stanford cs144, get videos from youtube, assignments from their website (in C/ C++)

[9] Compilers: Stanford, the website has all videos and assignments (in Java or C++, RISC target)

[10] Software Performance Engineering: MIT 6.172 (2018 in OCW, in C/C++ and a bit of x86 assembly)

[1] https://pdos.csail.mit.edu/6.828/2011/schedule.html

[2] https://pdos.csail.mit.edu/6.824/schedule.html

[3] https://ocw.mit.edu/courses/electrical-engineering-and-compu...

[4] http://marcua.net/notes/6.830/

[5] https://m.youtube.com/playlist?list=PLSE8ODhjZXja3hgmuwhf89q...

[6] https://css.csail.mit.edu/6.858/2020/

[7] https://cs144.github.io/

[8] https://m.youtube.com/playlist?list=PLvFG2xYBrYAQCyz4Wx3NPoY...

[9] http://openclassroom.stanford.edu/MainFolder/CoursePage.php?...

[10] https://ocw.mit.edu/courses/electrical-engineering-and-compu...

No hip new languages or platforms, but if you are new to this I think it's better to focus first on battle tested concepts and approaches, from a curriculum that was fine tuned by top universities and professors (many of which made significant contributions to the field) over the years, then the bleeding edge stuff will be a walk in the park, because you will have learned what the tradeoffs are and where innovations are coming from.

As for prereqs, if you are a confident programmer, you can dive right in (6.004 is good but not essential, 6.033 is a bit of a slog on your own with all that paper reading and that brick of a book, and no programming, it is good but I found it just too hard to stay interested, skipped that part, but the videos in youtube are an excellent intro to systems design and concepts, I recommend you watch them first). But better if you know your algorithms first (do the excellent MIT 6.006), specially for 6.172 (the mantra here is to get your algos right before attempting any other kind of optimization), and maybe the database (hashes, trees and dynamic programming come in handy) and compiler courses (graph coloring for register allocation, for instance).

But, whatever you do, start with 6.828 operating systems, this is considered the MIT intro course to systems programming, and they explicitly avoid all but the most basic algorithms, in order not to distract from the core system concepts. More sophisticated approaches are introduced in the second half, once you've got the basics under your belt.

Thanks for this great list of resources, I might add these links in a section like "Further reading / More resources"!

> these free options are much deeper, comprehensive, and come with extensive coding assignments

There's no doubt that university courses are more deep and comprehensive, but my goal is not to compete with them or replace them, but rather complement them with practical exercises and visual explanations -- just like Khan Academy complements the school maths curriculum, even though thousands of comprehensive and deep books existed for centuries.

You are right, I should have been aware of this and should have phrased it differently, apologies. Thanks for sharing, and keep up the good work!

I am delighted that you liked the list.

If you are trying to find future customers, I might me one. I'm immensely interested in moving lower and lower down the abstraction layer for education purposes. I'd definitely be interested in taking these courses.

Somewhat related but not exactly related to Low-Level Academy, you might be interested in "Nand2Tetris" if you're interested in studying low level concepts for education purposes.

Anything that makes the opaque accessible is a worthy undertaking. Kudos!

My company's firewall blocks lowlvl.org as a malicious site! Go figure!


This is really cool, I look forward to future lessons!

This is so awesome. Thank you!

Any ex-FAANG startup hiring for systems (low level) programmers, remote?

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact