this post was submitted on 08 May 2024
26 points (100.0% liked)

Ask Experienced Devs

1232 readers
5 users here now

Icon base by Delapouite under CC BY 3.0 with modifications to add a gradient

founded 1 year ago
MODERATORS
26
submitted 6 months ago* (last edited 6 months ago) by aidan to c/ask_experienced_devs
 

I'm really enthusiastic about anything involved with Unix/Unix-like operating systems and their ecosystems (Mostly Linux and a bit of BSD variations). I also know a couple of programming languages including C, C++23 and OCaml. But other than doing a couple of tiny projects mainly to practice my programming skills in the languages mentioned above, most of my experience is theoretical and it comes from reading books, blogs and watching conferences.

I'm interested in gaining "actual" experience by doing systems programming related projects but I'm not sure how to get started. How do I decide on which topic to choose? A topic which would not be too overwhelming and actually achievable? And how do I gain the background knowledge needed to implement a project without ending up copying and pasting everything from existing implementations?

Thank you!

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 5 points 6 months ago (1 children)

Personal opinion is all of them.

Yes, there's some skills which you will only encounter, if you're actively building up a larger project. But you can't just stumble into a larger project and learn all of those, you do need to actually (help to) build it from the start. And that takes a lot of time.

Having a larger project going on, on which you're motivated to continue building every so often, that's really good. But you'll need to do some smaller projects every so often, too, to keep up motivation and give yourself a chance to start fresh and maybe do things differently.

In particular, small projects also allow you to spend a completely unreasonable amount of time on some specific topic, because the scale of it won't be as big of a multiplier. And adding those topics together, you will have a lot of the knowledge for a larger project.

Particular topics, which you should spend a completely unreasonable amount of time on:

  • unit tests, integration tests
  • error handling, logging, monitoring
  • a build system, CI/CD
  • refactoring, structuring a larger code base, multi-project builds
  • TLS, authentication/authorization

(Do not try to do these all at once. Pick out one or two new ones per project.)

[โ€“] aidan 2 points 6 months ago

Thank you for the valuable tips!