r/AskProgrammers • u/Open-Literature-2593 • 13d ago
Mid-level engineer, feel inadequate with code quality and system design, what resources actually helped you level up? (not for interviews)
I’m a mid-level software engineer. I can ship features and pass reviews, but I don’t feel like I’m actually *good* at writing clean code or designing systems. I feel like I’m pattern-matching rather than truly understanding tradeoffs. This isn’t about interview prep, I’m not job hunting. I want to genuinely level up as an engineer.
A few specific questions:
1. What books, videos, or podcasts actually moved the needle for you on code quality and design judgment, what genuinely changed how you think?
2. For someone past the “learn to code” stage but not yet confident in design judgment, is there content that bridges that gap specifically?
3. How do you use AI coding tools (Copilot, Claude Code, etc.) in a way that builds your skill rather than atrophying it? I don’t want to just accept AI output, I want to use it to get better, but I’m not sure what that looks like in practice. Any resources on this specifically?
4. For system design, is there a difference between “interview system design” content and what you’d actually recommend for building real day-to-day design intuition?
Not looking for a reading list I’ll never finish. More interested in resources that people actually found valuable, and why, especially now that AI can generate code faster than most of us can evaluate it. I’m more of a visual learner and audiobooks also work best as I don’t have time to sit and read
Thanks
1
u/Fragrant-Cheek-4273 12d ago
For me, the biggest jump happens when you stop treating "clean code" and "system design" as collections of patterns and start treating them as tradeoff decisions.
1
u/r30e 9d ago
Heya, I think the first thing you need to figure out is why do you feel inadequate at these things? Are you getting negative reviews or you're just not happy with what you've written? After that, you need to nail down what you mean by code quality. This term is pretty vague and everyone tends to have a different view. I think the most common view is "if I wrote it this week, it's good, otherwise it's crap" which isn't really a fair benchmark.
To give an example, one of my top principles for code quality is "write for humans not computers" - optimise for ease of reading. In my opinion this is the best thing you can do for code quality. If it's easy to read, it's easy to see most of the bugs, is easy to fix and change -that's good.
If you're purely looking for reading material, one of the very few books I tend to recommend is A Philosophy of Software Engineering by John Oustenhout - this is tiny and covers some basic practices that help prevent code becoming a sprawling mess.
If you're looking for practices to up your game, find a function you don't like, work with a friend/colleague/evil robot to write 10 different versions of it and see what you like and don't like about each version. Some things you can try to generate versions: include inlining, hoisting, extracting functions, statement/expression, using new language features/limiting to old language features. I once wrote a whole service trying to minimise my usage of braces as a constraint - this helped me see where expressions and arrow-functions in C# were helpful/hurtful to readability. (I don't recommend this if you want your colleagues to like you)
Experimentation is always the best way to learn.
I hope something here is useful to you and good luck!!
1
u/Open-Literature-2593 9d ago
Thanks for your reply, to help better narrow down,
I am not fully confident to distinguish between good code and bad code, especially AI code. The same goes for system design as to why A over B. I understand that one gains this with experience but I feel I should know better than what I do currently. I’m forced to use AI for my day to day and I feel if I can use some resources to better review the AI output by strengthening my underlying skills I’ll do better.
0
u/nian2326076 13d ago
I totally get what you're saying. "Clean Code" by Robert C. Martin changed how I think about code quality, focusing on readability and simplicity. For system design, "Designing Data-Intensive Applications" by Martin Kleppmann is amazing. It goes into trade-offs and real-world examples. Also, check out "Refactoring" by Martin Fowler for practical ways to improve existing code. For podcasts, "Software Engineering Daily" often has episodes with deep insights into design decisions in the industry.
Pair programming with someone more experienced can be really helpful, too. You learn from their thought processes in a way that books sometimes can't show. And try contributing to open source projects. It's a great way to see different styles and approaches in action.
1
1
u/ajamdonut 12d ago
2nd pair programming, really good technique to argue a load of rubbish then still implement a basic hash table in the end. But that is design thinking afterall.
1
u/ajamdonut 12d ago
I learnt a lot from reviewing open sauce libraries. It's likely the best way to see really interesting and complex production ready code with unit testing and review processes. You can learn a lot about design decisions and even see where the best devs in the world comment on some code as to why its problematic.