Intro
This is mainly a thought project I’ve had for a while now taking inspiration from Nand2Tetris, OS Development, Build your own react and various projects working on making an Operating Sytem from scratch.
I want to take the next step from writing an OS (bootloader, kernel, processes & memory management, drivers) to writing a full fledged Web Browser. This would involve a lot of additional work (including writing a windowing engine, html/css parser, JS engine), but it should be feasible to have a working system that can connect to the Web. Ideally this would be taught as a course in college to inform students of the wide variety of different topics in Computer Science and Computer Engineering.
Steps
(Modern) Computers from the ground up to a Web Browser to Machine Learning (along the way need to mention Math, Physics/Mechanics/Chemistry, optimization / businesses that allow people in the next layer to focus on making that better):
- Physics + Electrical circuits (voltage, amps, op amps / transistor circuits, nand gates / boolean logic)
- Hardware circuits - ALU, memory, CPU, assembly instructions for arbitrary computation
- Operating system / Kernel & User space / Process & memory management / Drivers / (Persistent Disk) / Networking (possibly w/ Telephony/Wireless) - C
- Terminal / Shell, font rendering, windowing system, shell utilities built in
- Operating System(s) revisited (apps / spreadsheets (data flow) / docs / presentations - “Office”), Photoshop, Aside: Intro to databases (Filemaker, Access, SQLite, MySQL, Postgres, etc.)
- Windowing system + HTTP / HTML / CSS + Javascript, Images / image utilities, videos & video compression
- Games and Graphics - v1 (could have been before windowing system, but more relevant here - still talk about nethack, ascii games, etc.) - for terminal a “large” project could be getting Tetris (custom code) / Nethack (compile existing code) working in environment
- Search google, view images on FB, browse the web, post data into forms, etc. (communicate)
- “Create” on the web - google docs, web based editors, etc.
- Create a search engine using the networking tools, parse data into structured formats, use databases, indices (writing a search engine) - beginning of “data science”
- Modern apps (desktop, mobile, web); services (Netflix, Youtube, Facebook); ad based revenue models, privacy
- Machine learning - the tools & how to think about it from a high level perspective - simple algorithms to neural networks and systematization of data science tools to support ML
- Optimizations in specific fields helping in other fields
- iOS, Android, KaiOS, mobile computing and the future of computation (trucks vs cars analogy kinda works but only goes so far)
Aside
This is mainly just a thought experiment at the moment, but if I have sufficient time, I’d want to work/collaborate on a project like this.