Hacker News new | ask | show | jobs
by eatonphil 1938 days ago
Take a look at https://web.eecs.utk.edu/~azh/blog/challengingprojects.html and https://web.eecs.utk.edu/~azh/blog/morechallengingprojects.h... for some good summaries.

For me, I started building programming languages (and standard libraries) years ago as personal challenge and to learn more about how various languages work. Later on that branched into emulation (x86/amd64, armv8/aarch64) and more recently databases. (You can find these kinds of projects on my github).

Before that when I was more focused on web tech, I'd build clones of React or Bootstrap or Flask to increase my understanding there.

It helped being surrounded by people with a lot more experience than I so I'd keep being in a situation where I knew nothing about some field and wanted to not be embarrassingly naïve :D so I'd try to build something from scratch to learn it.

It doesn't always work out! An example of a topic I haven't yet been able to get into is the TCP/IP stack. I got somewhere into the IP layer on top of userland raw sockets but TCP complexity and may poor C skills failed me as the algorithms needed for tracking state came up.

1 comments

I think your reply reinforces a conclusion I drew from the OP's reply - that the common thread here is to work on _building_ things that exist at lower levels of abstraction, rather than just knowing how to use them as a black box. And in building things, I guess you learn the ins and outs of how they work, which makes you better at using them?

Thanks for the examples. I'd never even think of being able to build my own programming language, or clone of Flask - which I guess is the point, I shouldn't treat these things like black boxes :)

Yeah by building stuff you come to understand that all abstractions are arbitrary but you also come to understand why previous projects picked the abstractions they did. So it helps even just as a user, you don't have to be building frameworks, languages, databases professionally to benefit here.