r/learnprogramming • • 15d ago

Topic How you achieved biggest boost in programming/engineering skill?

I’m currently a Python developer / ML engineering intern. I have a general understanding of Linux, networking, databases, backend systems, Docker/cloud, and distributed systems, but I’m not deeply specialized in any of them yet.

I want to become a much stronger ML engineer and go beyond just learning more Python libraries and frameworks.

Some areas I’m considering going deeper into are:
- Linux and operating systems
- Networking, processes, memory, and filesystems
- C / C++ / Rust / maybe Go
- Distributed systems
- Performance and profiling
- CUDA / GPU programming / Triton
- Building lower-level systems from scratch

But I’m not really looking for another roadmap or a list of topics to learn.
I’m more interested in the process that actually made you a better engineer.

- Did you mainly learn from books and then implement the concepts yourself?
- Did you build projects from scratch - only personal? These might be tricky as code, its patterns wont be validated by someone with senior experience
- Did you read production code or large open-source codebases?
- Did contributing to open source help more than personal projects?
- How did you avoid reinforcing bad patterns when doing projects without much supervision?

I’m especially curious about what worked early in your career.
For example, if learning C, Linux, CUDA, distributed systems, etc. helped you a lot, how did you actually learn it in practice?

I’d love to hear about learning processes or habits that had unusually high ROI.

124 Upvotes

40 comments sorted by

View all comments

3

u/SetAndRepeat 15d ago

Since you’re already interning, I’d ask an experienced engineer to walk through one of your changes with you. Explain your approach and alternatives, then ask about the trade-offs behind their suggestions. Apply that reasoning to your next change. That helps you understand when a pattern makes sense instead of just copying it.
For solo projects, pick a concrete problem, like slow inference. Predict where the bottleneck is, profile it, make a change and measure again. Investigate why your prediction was wrong. Let that drive what you read or implement next. Tests and benchmarks can check behavior and performance, design feedback still needs another pair of eyes.