|
|
|
|
|
by eatonphil
1462 days ago
|
|
Here are a few project ideas: get into compilers/interpreters (write a lisp AST interpreter, then a bytecode VM, then a compiler to C, then a compiler to LLVM, then write a JavaScript implementation, etc.), GUI programming (try out Electron, then Swift and Kotlin), hack on databases (build an in-memory key-value store, then one on disk, then one backed by a Raft implementation, then an in-memory SQL database), write an operating system, write a web browser, write a software renderer (i.e. skip the GPU and draw triangles directly), build a game, implement Docker in bash, write a code editor component for JavaScript with syntax highlighting and autocomplete and CJK support, get into networking (implement an HTTP server from sockets, implement TCP/IP), write a native text editor, write a standard library for some language (including common containers, networking libraries, etc.), emulate x86 then original game boy or some other simple game hardware, build your own computer with nand2tetris or the digital design and computer architecture book with whatever the modern version of Logisim is. In every one of these projects as soon as you want decent performance for reasonable input sizes you'll either need to switch languages and/or get much better at data structures & algorithms. All of these have references you can follow easily online (except for software rendering and implementing TCP/IP, at least from my searches). Outside of these topics you can do on your own, joining a large company with data and compute scaling challenges is always a great way to grow personally. |
|