Project ideas to appreciate the art of programming
182 points
5 hours ago
| 17 comments
| codecrafters.io
| HN
WD-42
2 hours ago
[-]
This 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.

reply
578_Observer
4 hours ago
[-]
I 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.

reply
byte_0
1 hour ago
[-]
Thank you for sharing. I have always found Japanese focus into the smallest detail as something worth of the greatest admiration. And I am always trying to learn from those ways to apply it into my life.
reply
kace91
4 hours 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).

reply
578_Observer
2 hours ago
[-]
Great question. If you simply copy-paste the code 20 times, that is meaningless.

"Shugyo" is about internalization. The 1st time you build Redis, you learn the Syntax. The 10th time, you understand the Structure. By the 20th time, *the tool disappears.* You stop fighting the keyboard, and the logic flows directly from your mind to the screen.

In Kendo (Japanese fencing), we swing the bamboo sword thousands of times. Not to build muscle, but to remove the "lag" between thought and action. Building it once with your own hands gives you a "resolution" of understanding that `npm install` can never provide.

reply
lioeters
36 minutes ago
[-]
I enjoyed this explanation of how the philosophy of Shugyo-style training applies to software engineering. There are some choice phrases that describe the process of mastering an art.

> understand the nature of the steel .. the tool disappears .. to remove the "lag" between thought and action

Brilliantly said. Same with a musician practicing thousands of notes, scales, famous compositions - the repetition, accumulation of physical effort, trying things from all angles, thinking about it deeply, getting to know all the detail and nuance of sound, instrument, materials and conditions. As one trains there are breakthroughs in understanding and skill, building a kind of embodied knowledge and intuition beyond words.

reply
CuriouslyC
2 hours ago
[-]
I've always been fascinated by Japanese craftsmanship and aesthetic spirit. It's lovely in so many ways. At the same time, there's an opportunity cost to doing stuff like in "Jiro Dreams of Sushi" where you drill very simple things to absolute perfection, and I wonder under which circumstances this practice is the right approach versus those where it's sub-optimal given modern tradeoffs.
reply
578_Observer
28 minutes ago
[-]
That is a sharp question. You are right about the opportunity cost. As a banker, I look at the "Depreciation Period" (Lifespan) of the project.

If you are building a "Pop-up Store" (a prototype or script), use libraries. Don't waste time on craft. But if you are building a "Shrine" (Core System/Database) that must last for 20 years, "Shugyo" is actually the cheapest option.

Efficiency is cheap now, but expensive later (Technical Debt). Craftsmanship is expensive now, but cheap later (Stability).

We don't need a Jiro to run a fast-food franchise. But we need him to build the Kernel.

reply
dripdry45
20 minutes ago
[-]
Define "optimal"

once you’ve done this 10,000 times perhaps you will find your answer.

reply
pcmaffey
2 hours ago
[-]
I’m legit curious what you think about (Origins of Agile in Japanese Stone Masonry) [https://pcmaffey.com/origins-of-agile/]
reply
578_Observer
19 minutes ago
[-]
I read your article. The rule of "Moving the stone only once" is profound. It is the ultimate "Commitment," and it explains why Japanese walls survive earthquakes.

Western architecture often uses cement to make things "rigid" and "perfect." But in Japan (an earthquake nation), rigid things snap and break.

Japanese stone walls (Ishigaki) have no cement. They are held together by balance and friction alone. Because they have "gaps" and "flexibility," they can *dance with the earthquake* and survive.

We call this *"Asobi" (Play/Slack).* Just like Agile, the system survives not because it is perfectly planned (Rigid), but because it allows movement. Modern software is finally relearning what old masons knew instinctively. Great read.

reply
anonzzzies
3 hours ago
[-]
Not 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.
reply
johnnyanmac
2 hours ago
[-]
yes, but it's not necessarily the same kind of repetitiveness in every industry.

In the tech space, Leetcode is repetitive by design, because after a while you realize the core problems are focusing on a half dozen different concepts. After getting good at throwing in a table, or whipping up a dynamic programming approach, you pull them out like you would a multiplication table that you memorized back in elementary and build from there.

There's questions on if this is a valuable skill in practice, where you'll be thrown into the weeds of many unfamiliar problems constantly. But it sure will make you look competent when at the interview stage. And maybe feel confident as a craftsman when you don't need to refer to documentation every 5 minutes.

reply
jebarker
3 hours ago
[-]
Mike 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.
reply
mi_lk
4 hours ago
[-]
You really can't help mentioning you write your comment from Japan in most of your comments for some reason.

Not that it's my business that whether you were actually born and raised in Japan or an immigrant/expat. Just a random observation and that I don't think you have any less point without mentioning it

Considering your account age, it's a bit of bot smell if you ask me

reply
578_Observer
2 hours ago
[-]
Fair point. That is my bad habit.

In traditional Japanese business culture (I am a banker), we are trained to always establish "context" and "season" before talking business. It feels rude to start abruptly.

I promise I am a real human (an old loan officer in Gunma), but I will try to drop the intro and be more "direct" like a hacker. Thanks for the feedback.

reply
shagie
1 hour ago
[-]
It's not a bad habit ... it's a bit of a culture marker.

https://en.wikipedia.org/wiki/High-context_and_low-context_c... and https://www.ebsco.com/research-starters/communication-and-ma...

Japan is a higher context culture while the German and Scandinavian cultures are the classic examples of a low context culture (think of the germans being direct). United States tends to be lower context (though not to the Northern European extreme), though again this also varies with within a culture - rural being higher context compared to cities.

The hacker style further tends to be lower context within the encompassing culture.

reply
DrewADesign
2 hours ago
[-]
As a lifelong US (New England) resident and English speaker who’s socialized in tech spaces for nearly 30 years, your approach seemed completely normal and natural. I find it interesting to know a bit about who’s commenting. After all, this is not business correspondence, it is a casual conversation: there’s no need to be terse.

I see no need to modify your approach.

reply
ertian
2 hours ago
[-]
I appreciated the texture of your message. It's really unfortunate that the bot plague is making us all suspicious of any well-written or idiosyncratic posts.
reply
johnnyanmac
2 hours ago
[-]
bots know little about culture, especially Eastern culture. So I was immediately more trusting when the comment correctly (based on readings I've done on Japan for some years) talks about a concept that wouldn't pop up as much in western society.

On the other hand, hallucinating term you look up and contradict in seconds is peak bot behavior.

reply
Forgeties79
1 hour ago
[-]
The best cinematographers I’ve ever worked with were previously gaffers (lighting team). Same principal IMO!
reply
azhenley
4 hours ago
[-]
I’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

reply
fxwin
4 hours ago
[-]
I've seen your list before and find it much easier to appreciate than the OP tbh. It is very concise, the descriptions actually describe what one might learn or struggle with and each project comes with resources to get started with (One day i might even get around to doing one of these ;)

The OP very much comes off to me as a "here are 100 books you need to read before you die" recommendation porn type of post where the author has done none of the things listed.

reply
johnnyanmac
2 hours ago
[-]
The OP link feels like a list you scroll until you see something that interests you, and you jump on that. An ideaboard.

The link in this chain feels like a mini-curriculum. AKA "you do all these 7 things and you'll probably become very good at any job". a decent university will probably have you do 4-5 out of these projects (making a spreadsheet program is truly a huge feat, though).

They both have some use, but different use cases in my eyes.

reply
johnnyfived
2 hours ago
[-]
Agreed this is more appealing to read and visually look through even.
reply
matthewfcarlson
4 hours ago
[-]
As 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.
reply
ChrisMarshallNY
2 hours ago
[-]
One 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.

reply
thfuran
3 hours 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?

reply
dandeto
1 hour ago
[-]
The 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.
reply
Lerc
1 hour ago
[-]
I like this list more.

I'm not sure if list is objectively better or whether I have had a good go at every one of these except for the spreadsheet. Implementing spreadsheets may be a challenge but not enough for me to want a spreadsheet.

reply
ctxc
2 hours ago
[-]
I recall bookmarking this before (guilty!), thanks!
reply
sanufar
4 hours ago
[-]
Highly 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!
reply
yakattak
3 hours ago
[-]
In 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.
reply
xthe
2 hours ago
[-]
Build 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.
reply
Jtsummers
4 hours ago
[-]
This 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.

reply
keyle
4 hours ago
[-]
My rAI-dar says this list and blurbs are very likely produced by AI. It really reads like in near the middle.
reply
zhainya
4 hours ago
[-]
Is this what the kids call "astroturfing"?
reply
samsin
2 hours ago
[-]
It wouldn't be a first for CodeCrafters

https://news.ycombinator.com/item?id=38236285

reply
TrackerFF
2 hours ago
[-]
Some 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.

reply
irishloop
1 hour ago
[-]
Looking through this list makes me feel as if I am not a terribly good programmer, as these all feel well beyond my capabilities.
reply
scuff3d
1 hour ago
[-]
I think most projects do until you start breaking them into small easier to handle pieces.
reply
SamDc73
3 hours ago
[-]
This reads a bit similar to the build-your-own-x series

https://github.com/codecrafters-io/build-your-own-x

Feel like one of these things a lot of talk about but very tiny do ...

reply
johnnyanmac
2 hours ago
[-]
That'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.

reply
abustamam
2 hours ago
[-]
I mean, they're both by code crafters (whoever they are) so the similarity makes sense.
reply
sointeresting
1 hour ago
[-]
I'm currently working through the second Ray Tracing in One Weekend book. Fun stuff.
reply
fredisbusy
2 hours ago
[-]
I 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.

reply
OGEnthusiast
1 hour ago
[-]
This list seems almost certainly AI-generated.
reply
wg0
4 hours ago
[-]
AI usage verboten? Or erlaubt?
reply
lifthrasiir
1 hour ago
[-]
I 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)
reply
deadbabe
1 hour ago
[-]
This list is ridiculous, I was expecting something like A* pathfinding, or even kernel extensions.
reply
rramadass
3 hours ago
[-]
This 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/ 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.

reply
johnnyanmac
2 hours ago
[-]
My 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.

reply