Recommendations for getting to senior level with algorithms and system design
Posted by gnome_of_the_damned@reddit | ExperiencedDevs | View on Reddit | 17 comments
Hey all, I've got 10+ years experience as a web developer but took a bit of a non-traditional path. Based on my experience and some interviews I did recently I think that I have some gaps I would like to work on filling more formally to become a more fully fledged senior dev. If it helps I have a specialty in ruby on rails. Areas I'd like to work on are:
* Design patterns
* Algorithms
* System design particularly with scaling in mind
Any books or courses to get a structured approach to deep diving into these topics?
Basically I have a job I like, real world experience and practical skills, but I feel like I could be stronger in some of these areas that most people have a full computer science degree for. I would like to be better at knowing the official names for some of the concepts that I use on a day to day basis. And I want to take my time to get a deeper understanding and not just a quick overview - this is more of a long term self improvement plan. Thanks!
commonsearchterm@reddit
MIT puts their courses online for free. Algorithms and DS is pretty good. Lectures, TA sessions, homeworks, tests all on there
bishopExportMine@reddit
Into to algorithms combined with design and analysis of algorithms basically go through CLRS along with some really fucking hard homeworks
mauriciocap@reddit
If I had to recommend ONE book Andrew Tanenbaum Operating Systems (The MINIX book) may be a good one.
You can also enjoy the awesome "architecture of open source applications" online free with comments of the authors of projects of different sizes from a very simple wiki to the Glaswog Haskell Compiler.
its-me-reek@reddit
Operating systems to become a senior? Yah doesn't makensense
AstopingAlperto@reddit
They mostly just force you into thinking only AWS solved your cloud problems. Even tho gcp and azure have identical Stuff.
sammymammy2@reddit
Certifications matter to SWEs?
mauriciocap@reddit
ignorant
sammymammy2@reddit
I think that OSTEP is a good book, and it's free: https://pages.cs.wisc.edu/~remzi/OSTEP/
mauriciocap@reddit
Just skimmed, seems to be an ok-ish description of unix like OSes but lacks the in depth architectural discussion that made me recommend Tanenbaum's.
gnome_of_the_damned@reddit (OP)
Sounds interesting, thanks!
float34@reddit
Start easy with cs50
MegaComrade53@reddit
Becoming a senior is not about your ability to do data structures and algorithms. I'd expect an experienced/good intermediate to be able to do those when necessary. Not memorized, but know how to use them with docs when the time is right.
Becoming senior is both about technical depth and also the scale/reach of your impact. You shouldn't just be getting assigned bugs and features to fix by your team, you should be finding and solving problems before asked. And you should be working on things that impact your whole team and potentially others.
opideron@reddit
Ignore design patterns. In practice, I find that they create a lot of extra code that turns into tech debt. It is occasionally useful to know what the design patters look like, along with the names of those patterns, so you can figure out what the heck that previous coder was trying to do five years ago.
Ignore algorithms. It is very, very rare when you'll be called upon to write an algorithm. Most algorithms you might need are already in your language library(ies). Outside of those cases, there are commonly-needed algorithm that isn't common in language libraries. Stackoverflow or AI will provide the algorithm you need. For example, calculating distance from latitude and longitude.
Systems design is useful, sort of. The problem here is that the tech changes much faster than you can learn it. The standard architecture of the 2000s is vastly different from that of the 2010s, is vastly different from the 2020s. About the only constants are SQL for database and JavaScript for browsers. In particular, security concerns frequently arise that change the landscape. Don't expect to learn recipes. Learn principles.
That said, I find myself recommending these two books frequently in the past week or so:
These books work more like "proverbs" than design patterns. They aren't recipes, they're advice on how to think about how you write code. If writing a script is base-level coding, and using objects is a level of abstraction, and using abstract classes and interfaces is yet another level of abstraction, and using design patterns is yet another level of abstraction on top of that, then these "proverbs" are meta-meta-meta-abstractions.
David_AnkiDroid@reddit
Don't worry too much, very early 2010s
Freeman, E., Robson, E., Freeman, E., Sierra, K., Bates, B. (2004). Head First Design Patterns. Germany: O'Reilly Media.
More than you need to know for interviews CLRS
If you actually care: TAOCP
Special_Rice9539@reddit
Do you have any formal computer science training? Teachyourselfcs.com will get you to the beginner level in those areas.
gnome_of_the_damned@reddit (OP)
Yes, it's just pretty specialized to music software, and I am familiar with a lot of the design pattern concepts etc, just looking for a deeper dive to improve over time. Thanks for the recommendations.
PushHaunting9916@reddit
Be prepared for a long road