(no title)
AriseAndPass | 5 years ago
Most of the suggestions I see for potential side projects are for some kind of consumer-facing (web/mobile/desktop) app - probably because most people in this context are prioritising the potential of generating side income, but this sounds more like what the author calls "plumbing" style backend/API work rather than something that would develop fundamental CS skills.
So, any ideas? I've seen https://github.com/danistefanovic/build-your-own-x which is a great collection of ideas all based on piercing an abstraction by building your own version of lower-level tools. Are there any other categories of side project that someone who wants to move technically deeper than a full-stack web app would do well to consider?
richieartoul|5 years ago
Nand2tetris is pretty awesome if you don’t already have strong CS fundamentals and feel like you “know how computers work”. If you had a good C.S education though you may not get much out of it.
Here is a cool one I worked on awhile ago when I wanted to learn more about foundationDB: https://github.com/richardartoul/tsdb-layer
A long time ago I wanted to learn about regular expression engines so I wrote a tiny one: https://github.com/richardartoul/regex-engine
I built this with some friends a few years ago: https://hyperdash.io/ (building the backend for this was a good learning experience and I learned a lot about writing multi threaded software making the python SDK).
Those are just some examples to give you an idea, but to be honest it’s hard to give a good answer because side projects are deeply personal.
It takes serious discipline and motivation to spend your nights and weekends writing code when that’s how you spend your working hours as well, so it’s really gonna be about what motivates you and will keep you engaged while also gaining “high leverage” skills (anything fundamental in the realm of networking, compilers, databases, data structures, etc. basically anything that’s not just another language or framework)
AriseAndPass|5 years ago
Thanks for sharing those examples. I guess 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. I guess most project ideas that satisfy that criteria would teach some fundamental skills too.
AlchemistCamp|5 years ago
eatonphil|5 years ago
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.
AriseAndPass|5 years ago
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 :)