Hej,
na HN[1] pojawił się wpis z bloga[2], w którym autor opisuje, że najwięcej o programowaniu (w C++) dowiedział się pisząc własną, minimalistyczną VM. Komentujący dorzucili parę własnych pomysłów na "power projects" czyli projekty, które nie tylko uczą nas podstaw języka czy technologii, ale mocniej rozwijają nasze programistyczne skille. Coś dla osób, które już coś umieją, pracują, ale chciałyby oderwać od klepania formatek czy CRUDów. Przykłady:
Tracks I've done and suggested to friends and colleagues as learning experiences:
- Compression (lossless, lossy, image, audio, texture, video)
- Languages (bytecode interpreter, AST interpreter, parser/lexer for a simple language, simple JIT, understanding instruction scheduling)
- DSP programming (writing programs for fast, branchless math)
- Comfort with binary and binary formats (start with packfiles .zip/.tar, move onto reverse engineering simple formats for e.g. games)
- Understanding the difference between RAM and address spaces (e.g. understanding virtual memory, mmap, memory-mapped IO, dynamic linking, the VDSO, page faulting, shared memory)
- Device drivers (easier on Linux, understanding userspace/kernel interaction, ioctls, how hardware and registers work, how to read spec sheets and hardware manuals)
- Graphics (modern software rasterizer that's not scanline-based, understanding 3D and projective transforms, GPU programming and shaders, basic lighting (reflection and illumination) models, what "GPU memory" is, what scanout is, how full scenes are accumulated all along the stack)
- A database (transaction, lock managers, buffer/IO management, etc).
- An MVC web framework.
- A GUI validation library.
- A JavaScript UI library.
- An iteratee implementation.
- An Erlang-style actors library in another language.
- Implementing for-yield, async-await, etc on top of delimited continuations.
- Interpreters, typecheckers, code generators.
- Some of an ECMAScript implementation.
- Concurrent data structures: futures/promises, queues, etc.
- A simple roguelike game.
Robiliście coś w tym stylu, co? Jak na was wpłynęło? Inne pomysły? Otwieram dyskusję.