8 ms·
Project ideas to appreciate the art of programming
- sanufar 10mo agoHighly recommend writing a BitTorrent client. The spec is easy to grok, it has a bunch of fun subproblems that you can go as deep or as shallow as you want into, and it's super rewarding being able to download something like the Debian kernel after all of your hard work. Magnet links and seeding are two fun things to tackle post basic implementation. It also got me really interested in peer to peer systems and DHTs like Chord!
- yakattak 10mo agoIn college one of our end of semester projects was to make a “peer to peer” client. Not specifically BitTorrent. It was so much fun! Coming up with the ways of handshaking, chunk sizes, etc. It was so cool to see it actually work as a new student.
- Jtsummers 10mo agoThis is a strange list. #58 is make your own malloc, ok. That's a moderately difficult project for a new developer (made harder if they don't know anything about what malloc actually does under the hood, you may need to study up a bit on operating systems and some other things before you even start). Followed by #59 where they suggest you build your own streaming protocol from scratch... There are some good projects in there, but the levels of difficulty are all over the place.
- deleted 10mo ago[deleted]
- azhenley 10mo agoI’ll plug my series of project ideas that have also been discussed here on HN over the years: Challenging programming projects every programmer should try https://austinhenley.com/blog/challengingprojects.html https://austinhenley.com/blog/challengingprojects.html
- matthewfcarlson 10mo agoAs part of undergrad we had to implement space invaders on a Zync FPGA so you got to choose which bits you did in hardware and what was in software. It was a blast seeing what people came up with as you could do “extras” that gave you bonus points. Someone built a simple microphone frequency analysis block so you could go left, right, and fire by playing notes on a recorder.
- thfuran 10mo ago>on a Zync FPGA so you got to choose which bits you did in hardware and what was in software. You mean verilog vs block diagram, or did those boards have like a microcontroller too for more normal software?
- dandeto 10mo agoThe Zync platforms I'm familiar with have an Arm processor, so you can write baremetal programs or have it boot Linux from an SD card. You can integrate hardware (FPGA) and software by reading/writing to shared memory over AXI or similar protocol.
- deleted 10mo ago[deleted]
- ChrisMarshallNY 10mo agoOne of my first programs was a Space Invaders-style game, in Machine Code, on a VIC20. Not particularly impressive, but it did teach me stuff.
- fxwin 10mo ago
- littleprince 10mo ago[dead]
- deleted 10mo ago[deleted]
- zhainya 10mo agoIs this what the kids call "astroturfing"?
- samsin 10mo agoIt wouldn't be a first for CodeCrafters https://news.ycombinator.com/item?id=38236285 https://news.ycombinator.com/item?id=38236285
- deleted 10mo ago[deleted]
- wg0 10mo agoAI usage verboten? Or erlaubt?
- deleted 10mo ago[deleted]
- blitzpoet 10mo ago[flagged]
- Jtsummers 10mo agoStop posting this crap. You've submitted and deleted the same thing at least a dozen times now. Another one you did under a different account: https://news.ycombinator.com/item?id=46439576 https://news.ycombinator.com/item?id=46439576
- blitzpoet 10mo agoYou can see for yourself if what I'm offering is crap. Here's a sample chapter: https://www.dropbox.com/scl/fi/i9oj0ywsoxpyen3x1kxpu/ValidPolish-ch1.pdf?rlkey=1r31pbe6mqjvbcuuqb6y4trlf&st=12im72yt&dl=0 https://www.dropbox.com/scl/fi/i9oj0ywsoxpyen3x1kxpu/ValidPo...
- 578_Observer 10mo agoI see comments suspecting this list is AI-generated. That might be true. But ironically, the practice of "building from scratch" is the best antidote to AI dependency. Writing from Japan, we call this process "Shugyo" (austere training). A master carpenter spends years learning to sharpen tools, not because it's efficient, but to understand the nature of the steel. Building your own Redis or Git isn't about the result (which AI can give you instantly). It is about the friction. That friction builds a mental model that no LLM can simulate. Whether this post is marketing or not, the "Shugyo" itself is valid.
- torben-friis 10mo ago>Writing from Japan, we call this process "Shugyo" (austere training). A master carpenter spends years learning to sharpen tools, not because it's efficient, but to understand the nature of the steel. Is there repetition implied? Would you build your own redis 20 times? (Just curious).
- jebarker 10mo agoMike Acton talks about deliberate practice in programming exactly this way. Every day start with a blank sheet and try to build something for an hour (his example is Astroids). Next day, start again and get a little further. Eventually you'll be able to build the whole thing in an hour.
- 578_Observer 10mo agoI am not a programmer, so I did not know the name. But I just looked him up, and I can see why he is a legend. His philosophy—stripping away the unnecessary to focus on the reality (data/hardware)—resonates deeply with me. The practice you described (building from scratch daily) is exactly the "Tea Ceremony" of the digital age. It is not about the tea (the result), but about the procedure (the internalization). Thank you for introducing me to such a Master.
- anonzzzies 10mo agoNot OP but I would and do write things 20x, for the simple reason that the 2nd is better than the 1st, even after refactoring the first, the 3rd better than the 2nd etc. We have a durable workflow thing from when it wasn't a thing yet (it was called enterprise workflow engine or something back then) which I started in PHP in the mid 90s, it has been rewritten by me over 30x and now its as optimal as it can be. It is finally finished. I have 20 year old clients who upgraded to it and are happier with the performance and stability. We do this with many parts of our software stack; not big refactoring but rewrite from scratch. One thing with this: in my opinion you can only rewrite if you are NOT adding any features; it should be a 1 to 1 rebuild.
- xthe 10mo agoBuild something intentionally small and complete a tiny tool or protocol you can understand end-to-end. The satisfaction comes from clarity, constraints, and finishing the whole arc, not scale.
- rramadass 10mo agoThis is just AI generated slop with things being all over the map with no details/notes etc. A far better way is to go through the book series The Architecture of Open Source Applications and pick one which catches your fancy - https://aosabook.org/en/ https://aosabook.org/en/ There are enough details/notes here from experts to show one how to think about an application so that you have something concrete to start from.
- johnnyanmac 10mo agoMy only critique is that it would help to group projects by difficulty. But AI genned or not, it does have decent ideas and the follow ups I clicked on for "getting started" all at least seem non-AI genned. As some examples of what I have done myself previously, Linking to Shirley's "Ray Tracing in a Weekend" for a Ray tracer seems pretty solid, but throwing the GBATek manual at you for making an emulator is very "the rest of the owl" sorts of advice. If it at least inspires some people to actually get their hands dirty (instead of outsourcing their intelligence to a black box), I don't mind Ai being used as a brainstorming tool.
- rramadass 10mo agoIt is not that i am against AI genned articles, it is that this is just a very low-effort one. They could have easily categorized, noted difficulty levels, background needed, added more details/pointers etc. to really make this useful. For example, to mention implementing TCP/IP stack but not point to Adam Dunkels works is a unforgivable crime ;-) See list of his projects at https://en.wikipedia.org/wiki/Adam_Dunkels#Networked_embedded_software https://en.wikipedia.org/wiki/Adam_Dunkels#Networked_embedde... which are all relevant here. He is another Fabrice Bellard like super programmer! I think people should try to implement one or more of these projects with AI tools but using it solely for drudgery work i.e. keep design/architecture in your head (this is where the AOSA books come in) and only get AI to generate code for well specified (formally if possible) functions. This will also make them highly relevant to today's job market. Programmers now need to educate themselves and move more into meta-level i.e. use Formal Methods (Specification/Verification) to get AI to generate code with correctness proof along with it.
- SamDc73 10mo agoThis reads a bit similar to the build-your-own-x series https://github.com/codecrafters-io/build-your-own-x https://github.com/codecrafters-io/build-your-own-x Feel like one of these things a lot of talk about but very tiny do ...
- johnnyanmac 10mo agoThat's everything at some point, no? Easier to talk about something, harder to start something, and much harder to actually see it through. Personally, I am making a ray tracer project right now in Rust, so I hope I can become the latter. It being something I did before (albeit, long ago in c++) helps.
- abustamam 10mo agoI mean, they're both by code crafters (whoever they are) so the similarity makes sense.
- TrackerFF 10mo agoSome of these could take a day, like random tree / forest. Others are easily within the scope / size of a undergrad final project. Or even a masters degree thesis.
- WD-42 10mo agoThis is from codecrafters.io which is a platform that facilitates working on projects like these while essentially providing integration tests to keep you honest, as well some community. You work through well defined requirements to reach the full implementation. I’m currently working on their build your own redis project. It’s quite fun. I don’t think this is AI generated. They ask the community for new project ideas, this list is probably made up of those they’ve received while plugging the challenges they already have implemented.
- fredisbusy 10mo agoI think the most reliable way to understand a system is to directly implement the internals of a library. In particular, hands-on experience with networks and file systems is incredibly helpful when writing high-level code.
- OGEnthusiast 10mo agoThis list seems almost certainly AI-generated.
- deadbabe 10mo agoThis list is ridiculous, I was expecting something like A* pathfinding, or even kernel extensions.
- sointeresting 10mo agoI'm currently working through the second Ray Tracing in One Weekend book. Fun stuff.
- irishloop 10mo agoLooking through this list makes me feel as if I am not a terribly good programmer, as these all feel well beyond my capabilities.
- scuff3d 10mo agoI think most projects do until you start breaking them into small easier to handle pieces.
- rramadass 10mo agoMost of them are, even for experienced programmers, we just don't admit it ;-) They are the results from the hard work over time of one or more programmers. However, do not let it stop you from starting something you might be interested in knowing/doing i.e. do not let self-doubt lead to paralysis. Start at your own pace and focus only on learning and not competing with others. A good way to get started is to begin with studying prior work in the domain of your choice. For example i link to the works of Adam Dunkels in my comment here https://news.ycombinator.com/item?id=46441772 https://news.ycombinator.com/item?id=46441772 which you can study for your own implementation. They are all small being made for embedded systems and hence relatively easier to comprehend. Use AI tools as necessary to both understand and generate code.
- lifthrasiir 10mo agoI asked Gemini 3 Pro about the relative difficulty of each project in the list and got the following (parenthesized notes are also by Gemini). Gemini noted that the time estimate is based on the assumption that you already understand the theory (which time estimate would extremely vary anyway) and only accounts for pure PoC implementation and debugging. The numbers look reasonable at my sketchy glance but of course YMMV. [Difficulty: Low] 42. Twitter Trends 5--10h (If you understand the probabilistic math) 2. Wordle Solver 5--10h (Pure logic/algorithm) 17. BMP Codec 5--10h 23. Auth Server (JWT) 5--10h 24. Autocomplete System 5--10h 66. Browser Extension 5--15h 15. Diff Tool 8--15h (Algorithms heavy) 9. Six Degrees of Kevin Bacon 10--20h (Classic graph problem) 7. Googlebot (Crawler) 10--20h 65. Make 10--20h [Difficulty: Moderate] 32. Web Server 10--20h 41. Time Sync Daemon (NTP) 10--20h 53. Malware 10--20h 58. Malloc 10--20h 63. Shell 10--20h 19. Quantum Computer Simulation 15--25h (Assuming you know the linear algebra already) 26. Background Noise Remover 15--25h (Math/Signal Processing heavy) 11. Procedural Crosswords 15--25h 39. CDN Caching 15--25h 47. Ray Tracer 15--25h 57. Load Balancer 15--25h 61. CI System 15--25h 62. Random Forest 15--25h 67. Stock Trading Bot 15--25h 56. Lock-Free Data Structures 15--30h (But debugging is painful) 16. Visualize Object-Oriented Code 15--30h (Language parsing is the bottleneck) 5. Container (No Docker) 15--30h (Requires deep Linux systems knowledge) 8. DNS Server 15--30h (Strict RFC compliance required) 70. OpenGL 15--30h 12. Bitcask (KV Store) 20--30h 38. Wikipedia Search 20--30h 50. Amazon Delivery (Vehicle Routing) 20--30h 46. Zip 20--35h (Algorithms heavy) 1. Bittorrent Client 20--40h (Binary parsing and managing async network states) 18. Filesystem (FUSE) 20--40h (Debugging kernel interfaces can be slow) 60. Smart Home 20--40h (Hardware integration eats time) 40. TikTok (Feed) 20--40h (Mostly frontend/UI state complexity) 21. Redis Clone 20--40h 29. Road Network 20--40h 31. Evolutionary Design 20--40h 34. Git 20--40h 59. Netflix (Streaming) 20--40h 69. Automated Journal 20--40h 13. Audio Fingerprinting 25--40h (DSP is sensitive to parameters) 52. Knowledge Graph 25--45h 64. Bitcoin Node 25--45h 14. Dangerous Dave (Game) 30--50h 48. Programming Language 30--50h [Difficulty: High] 33. Depth Estimation 25--50h (Computer Vision math) 35. GDB (Debugger) 30--50h (Low-level systems programming) 72. Audio Multicast 30--50h (Syncing audio clocks over network is hard) 43. SQL Optimizer 30--50h 36. Neural Networks 30--60h (Debugging gradient calculations is tough) 71. Laser Tag 30--60h (Hardware debugging) 3. Deepfake (Optimal Transport) 30--60h (Math-heavy; debugging matrix operations is difficult) 51. Kafka Broker 30--60h 20. VLC (Video Player) 40--60h (A/V sync drift is very difficult to get right) 28. Google Maps 40--60h 30. Collaborative Editor 40--70h (CRDTs are conceptually dense) 37. Chess 40--70h (Performance optimization is a rabbit hole) 45. VPN 40--70h 27. Dropbox Clone 40--80h (Conflict resolution and sync logic are extremely error-prone) 4. Spreadsheet 40--80h (Cycle detection and UI state management are tricky) 10. RAFT 40--80h (Distributed systems are notoriously hard to debug due to race conditions) 68. Browser Engine 40--80h 73. Decentralized Internet 40--80h 49. Messenger 50--100h 22. Video Editor (Client-side) 50--80h (Browser constraints + heavy compute) [Difficulty: Very High] 44. Anonymous Voting 40--80h (Cryptography is unforgiving) 6. Geometric Theorem Proving 50--100h+ (Essentially building a symbolic AI engine) 55. TCP/IP Stack 60--100h (TCP state machines are massive) 25. SQLite Clone 60--120h (A database engine combines almost every discipline of CS) 54. Game Boy Advance Emulator 80--150h (Requires extremely precise bit-twiddling and timing)
- medbar 10mo agoI'm curious of HN's opinions on 4chan's /g/ programming challenges. IMO, the difficulties feel a bit arbitrary - for example, claiming that a basic bootloader is more difficult than a C compiler. https://camo.githubusercontent.com/a4ce28d9d68f8d5443aef312301b50b51407a53b2e3ee7b5b63277785e55325a/68747470733a2f2f692e696d6775722e636f6d2f4f5136423669722e6a706567 https://camo.githubusercontent.com/a4ce28d9d68f8d5443aef3123...
- dualogy 10mo agoGives "Non-Image content-type returned", I guess GH doesn't like hot-linking its hosted user assets. Might want to link the `.md` that embeds it instead, if any