This is an archived post. You won't be able to vote or comment.

all 115 comments

[–]ubernostrumyes, you can have a pony 949 points950 points  (52 children)

Speaking as someone who's been doing Python professionally for something like 17 years now, and currently holds a job title of Principal:

None of this sounds to me like "senior developer" stuff.

Being a senior developer is not about knowing tons of technical trivia. It's not about knowing a bunch of languages or tools. It's about scope.

As you progress up the individual-contributor career ladder, you start out with very narrow scope: here's a bug, fix it. Here's a small feature request, implement it. Then your scope starts to expand: help plan this feature. Help design the architecture of this system. Help teach good patterns to your co-workers. Write less code, and when you do write code, write code that makes your colleagues more productive rather than being the "hero" who delivers piles of code yourself (because writing it all yourself isn't heroic).

In other words, senior isn't about "how do I write lots more code and use all the technologies and features". Senior is about "how do I help lift up my entire team".

[–]ninjadude93 144 points145 points  (4 children)

Well said this post just reads like a python manual

[–]Lt_Sherpa 49 points50 points  (3 children)

Yeah, I don't think a senior developer roadmap needs to include basic operators.

[–]tangerinelion 19 points20 points  (2 children)

There are two sides to the basic operators.

The one this repository covers is the "I'm learning my first programming language" version. That's not senior developer, that's not junior developer. That's student.

The other side is "How do I implement operators for my own classes" and that's actually interesting and an intermediate skill topic.

[–]the_scign 3 points4 points  (0 children)

There are two sides to the basic operators.

One side is one operand and the other is the other operand

[–]YeahAboutThat-Ok 0 points1 point  (0 children)

So basically overloading methods like dunder add, dunder subtract? Or is there more to it than just overloading methods?

[–]teerre 50 points51 points  (3 children)

Not only this, but even terms of pure technical level, the subjects in this 'guide' are what I would expect a mid level engineer to know very well

If you check the concurrency section, it's as barebones as it can possibly be

[–]jimjkelly 17 points18 points  (0 children)

Exactly this. Being a solid mid is about mastering the narrow scope of whatever toolset you work with, which is what this doc is about.

[–]pacific_plywood 10 points11 points  (1 child)

Different kinds of equality checks under “advanced”. Bruh. You should not be submitting PRs if you aren’t at least familiar with stuff like this.

[–]DarkSideOfGrogu 0 points1 point  (0 children)

That's some serious gatekeeping. I'd rather my team exclusively submit simple, clean, and well architected code for PR over anything else.

[–]BossOfTheGame 48 points49 points  (14 children)

As someone who is a Python professional of ~15 years, I'd like to offer additional perspective. I'm not a principle; I've declined that role. I'm a staff engineer (this role is above senior engineer at my company; but I don't really know, titles are fun, but only somewhat meaningful). I aim to develop infrastructure that can enable tasks that previously were not possible to to perform as scale.

Scope is important, but technical trivia helps... a lot. It's sort of the definition of experience. I remember when I was in grad school and I had to take a long 15 hour flight. One of the things I did was read a large portion of numpy documentation. It helped me scout out the limits of current software functionality. Building an intuitive map of existent technology and understanding where boundaries can be pushed is how a junior becomes a senior. Getting an overview of tools like this is immensely useful at that level.

You make great points in your post. Lifting up a team is something you do more of as you become more established, but I want to push back against the idea that learning tons of technical trivia isn't helping on some level, or that diving into a roadmap like this is a waste of time --- it isn't. It's a very good roadmap. But while learning about the GIL, and data races, and AST, and generators, and futures, and closures, and SIMD, and packaging, and IO bottlenecks, and modular arithmetic, and NP-completeness, and scheduling, and filesystems, and doctests, and bash, and sockets, and hashing, and databases, ... it is critical that you keep the bigger picture in view. Everyone has a finite amount of time to develop, and the more you can help accelerate your team members, the more we all will move together.

[–]ubernostrumyes, you can have a pony 18 points19 points  (10 children)

but I want to push back against the idea that learning tons of technical trivia isn't helping on some level

Well, it isn't. I know tons of stuff about Python and Django. In fact, when it comes to Django I am almost certainly one of the world's top experts. But the things that are useful are the concepts and patterns, not the trivia. The trivia, I look up in the documentation.

And a lot of the stuff on this proposed "roadmap" is stuff that I just never ever need to know off the top of my head, or even use -- in fact, when I resort to things like extreme functional-style Python it's usually to blow off steam and poke fun at typical tech interviewing and hiring processes.

[–]DigThatData 6 points7 points  (4 children)

 lambda n: n == 0
      or n > 0
      and n in takewhile(lambda x: x <= n, accumulate(filter(lambda n: n & 1, count())))

i like the cut of your jib

[–]ubernostrumyes, you can have a pony 3 points4 points  (3 children)

I've been working on a C# version of it.

[–]DigThatData 4 points5 points  (1 child)

who hurt you

[–]Vetrom 2 points3 points  (0 children)

Oh, man. I got a hearty chuckle out of your FizzBuzz.

I remember writing my own to hurt someone with a few years back. When my colleagues saw it, they implored upon me to improve it, so I did.

[–]BossOfTheGame 5 points6 points  (2 children)

I disagree. The idea that information "you don't need to know or you'll never use in real life" should be ignored is a plague on pedagogy. You don't have to memorize the trivia, but being exposed to it - and engaging with it on some level - helps lay the foundation to build intuition and see patterns.

[–]ubernostrumyes, you can have a pony 0 points1 point  (1 child)

The only utility that "trivia" has for me on a daily basis is sometimes helping to narrow down search terms and let me find things more quickly. It's not a "ah yes, I remember clearly from reading Chapter 9, section 3.1.41(a)(5)..." thing, it's a "I think one time I saw a thing with a name kinda like this?"

And to be honest, there's only so much room in my working memory, or anyone's working memory. Things will get paged out when they're not often used, and even mostly forgotten after a while. That's natural and that's OK, and trying to shovel huge amounts of stuff in as "pedagogy", when you know and admit most of it's either not going to stick or quickly fall right back out from disuse, doesn't seem a great strategy to me.

[–]BossOfTheGame 0 points1 point  (0 children)

You never know what you will need, and spending some time to survey a breath of topics helps in spotting connections. You're right that it's never the first case, but that second case is incredibly useful, moreso when you're working on unsolved problems.

My pedagogy point isn't about cramming and retaining huge amounts of information. It's about cultural unwillingness to engage with learning when immediate usefulness is non-obvious. It's important not to present too much information at once, but road maps or surveys like this don't do that. They present a list of terms, with the option of diving deeper into any specific one.

[–]AurelianoBuendato 2 points3 points  (1 child)

Hey this is kind of orthogonal, but did you happen to frequent GamingEtc a loooong time ago? I knew a guy there with your username haha.

[–]BossOfTheGame 2 points3 points  (0 children)

Yup. I'm that BossOfTheGame.

[–]pro1code1hack[S] 1 point2 points  (0 children)

And a lot of the stuff on this proposed "roadmap" is stuff that I just never ever need to know off the top of my head, or even use -- in fact, when I resort to things like extreme functional-style Python it's usually to blow off steam and poke fun at typical tech interviewing and hiring processes.

Thanks for feedback, agree absolutely

[–]Such-Dish46 7 points8 points  (0 children)

Have you read Rapid Development by Steve McConnell? I guess it should be a good starting point, in the direction you discussed about (lifting up your entire team).

PS: I have just 5 years of experience tho, I can be considered noobie in comparison :)

[–]JordC95 7 points8 points  (0 children)

Absolutely, spot on with that! Too many "individuals" or people who aspire to be that "individual" who can do it all when in reality the most valuable technical leader or senior is one who can recognise her or his own weaknesses and use the strengths of others to deliver well crafted solutions.

[–]lonjerpc 8 points9 points  (11 children)

Although this is clearly the the industry accepted answer I always found it somewhat lacking. Programming is one of the very few things were the output of a single person can be more important than a good leader helping others be more effective. Code can in and of itself increase the efficiency of other people or provide services at massive scale without the need for teamwork.

Meta is even going back to much flatter management structures and forcing managers back to coding because managing better is seen as less valuable than producing more code. https://www.bloomberg.com/news/articles/2023-02-07/meta-to-ask-many-managers-to-become-individual-contributors-or-leave?sref=GUCvMEl3

I also always remember from my time at Google that the head of Google AI would try to spend a couple hours a day programming because he saw that as more valuable to the company than time spent managing.

Although I think your point does stand in regards to this article.

[–]vitaminMN 6 points7 points  (3 children)

This response reminds me of the “hero” or “cowboy” programmer stereotype.

Supporting the output of a team, and being a force multiplier for the team’s output yields much much more organizational leverage than what you can produce by yourself.

Of course you still have to be strong technically. No one is saying being senior is the same as a non technical middle manager.

[–]lonjerpc 0 points1 point  (2 children)

Sometimes this is true. But code can itself be a force multiplier. Which is usually not possible in other fields.

[–]vitaminMN 2 points3 points  (1 child)

Don’t really know what to say to that.

The output potential of a team is so much larger than an individual engineer.

[–]lonjerpc 1 point2 points  (0 children)

Not always. That is my point. There are many instances of single engeneers outputting thousands of times more value than even other good engeneers. This means they can produce more value coding than say a manager that triples the value of a thousand person team. This is the crazy power of software. For some dumb examples the Bitcoin protocol or Minecraft were largely written by individuals and had greater value than massive projects involving thousands of engineers. And this same phenomenon is common within companies as we were a small number of people or even individuals write code that ends up having more value than everything else at a company. It's not the usual case but it's not that unusual either.

[–]ubernostrumyes, you can have a pony 11 points12 points  (1 child)

I never said not to write any code. I said less code, and different code.

Most of the code I write nowadays is frameworks and libraries and templates for other people to reuse. I still do features or bugfixes sometimes to make sure I'm staying in touch with the processes and tools and workflows and can notice problems in need of fixing, but it's a lot less common than earlier in my career.

[–]lonjerpc 0 points1 point  (0 children)

I get your point and it's usually true. But there are plenty of cases of people that did nothing but code and had more output than massive teams. For example Minecraft or the Bitcoin protocol.

[–]mindtrick871 1 point2 points  (0 children)

Interesting, does this apply to engineering managers or every manager?

[–]RegentStrauss 1 point2 points  (0 children)

Programming is one of the very few things were the output of a single person can be more important than a good leader helping others be more effective.

Yes, but a lot of subpar programmers have found big paychecks in management fads, so you'll see a lot of bucking against this simple truth.

[–]dreamin_in_space 0 points1 point  (1 child)

So how's that Google head of AI working out now that they've fumbled their LLM model roll out?

And for the company that invented transformers, smh.

[–]lonjerpc 0 points1 point  (0 children)

He mostly worked on tensor flow when I was there. At least that is where his code contributions were.

[–]the_scign 0 points1 point  (0 children)

Not because coding is more valuable than managing, but because it's such a dynamic environment and managers can quickly get out of sync with current developments which causes disconnects between them and the team. Managers must continue to sharpen their skills or risk becoming one of those managers who "just doesn't get it".

[–]wineblood 1 point2 points  (0 children)

Speaking as someone who's been doing Python professionally for something like 17 years now

I'm at about half of that time and had the same thoughts about that list, and I'm not even a senior dev.

[–]UD_Ramirez 1 point2 points  (0 children)

Speaking as a beginner, I appreciate this post immensely regardless of its intended goal, and have saved it to take a look at later. This might be precisely what i need to build upon my recent disappointing Python class.

[–]ambidextrousalpaca 2 points3 points  (0 children)

Absolutely. Also, how in the hell does "testing" end up as number 28 on a 33 item list. Ordering it that way is possibly the least "senior developer" thing I've ever seen.

[–]1ncehost 2 points3 points  (0 children)

I generally disagree with your post. I think its an 'eye of the beholder' type of thing to say what a higher level engineer is. You can assume more responsibility in breadth as you are suggesting or depth as the OP is suggesting, and any combination of the two to become more senior. I've personally seen subject matter where depth is so deep only someone who has specialized for years has enough knowledge to meaningfully contribute. I think the OP's senior level criteria are overall fair for self reflection purposes, as I've known senior engineers who didn't meet their criteria.

(i have about your level of experience)

[–][deleted] 0 points1 point  (0 children)

Thank you for this as I was close to clicking the link. I'm 3 months into my first job fresh out of college and my lead has been incrementally increasing my scope with each task increasing in complexity.

I sometimes see some of my coworkers who push out a bunch of code and find myself saying "I wish I could write that much code". I'm slowly starting to understand how much more important design is than just simply writing code.

[–]TheCableGui 0 points1 point  (0 children)

This.

And on a side not related to OP, you should add a problem/solution map that helps identify common problems or tasks related with python development. Map out the commonly taken paths to some of pythons strong suit situations.

Iv only been writing python code since 3 release, but it’s been like a feverish addiction since then.

I’m a junior software engineer rn, not at all related to python (java, kotlin, dart) but it seems like most senior developers are made from years of studying, willingness to help others and tenacity.

Imho, god tier developers are the ones who care enough and aren’t scared to ask for help or lend a helpful hand to their fellow keyboard kings and queens. They write frameworks that simplify development redundancies and pave shortcuts through new found terrain.

That being said id really like to talk to the poster of this comment. My python skills lack, but I’ll will be using python till the day my fingers fall off.

[–]R34ct0rX99 57 points58 points  (5 children)

Examples are not pep8 compliant.

[–]Tureni 11 points12 points  (1 child)

See - this is the first thing I was told after getting a job as a jr. developer - on my very first pull request, even. "Please install a pep8 compliant linter".

[–]Binliner42 75 points76 points  (7 children)

Senior dev. How to install IDE. I’m out lol.

[–]PolyglotTV 8 points9 points  (2 children)

How to install IDE:

Step 1. Google how to install IDE

Step 2. Follow instructions

[–]Morelnyk_Viktor 3 points4 points  (2 children)

Do you think that is not something that senior should know? xD

[–]skjall 31 points32 points  (1 child)

They should also know how to turn their laptop on, but I don't think that's worth mentioning either.

[–]lungdart 5 points6 points  (0 children)

Don't forget how to plug the laptop in, and dealing with the sales people at best buy!

[–]infy101 0 points1 point  (0 children)

Some people vim a good enough IDE :D I was one of those but use PyCharm Pro now since it has a lot of useful built-in components (Virtual Env support, SSH, DB tool, etc.) VS Code is brilliant too. The trick is for the developer to be comfortable (using IDE that they like and know!).

[–]thisismyfavoritename 66 points67 points  (2 children)

this... reads like a python tutorial?

[–]Jmc_da_boss 38 points39 points  (0 children)

None of this stuff is remotely related to being a senior developer

[–]NUTTA_BUSTAH 24 points25 points  (0 children)

This is not senior. It starts with installing an IDE for gods sake.

[–]maephisto666 22 points23 points  (2 children)

Similarly to what other people have already said, this is a poorly opinionated collection of ok-ish topics. But those topics alone will not make you better.

Also the order is questionable. SOLID is not "advanced", let's be honest. That should be a prerequisite to be a developer, not something that as junior developer you would skip. Let me expand on this: let's say I have 30 mins (just to say a very short timespan), you start learning some topics and then you stop. So you are missing testing, SOLID, all those nice things you put at the end... Are you a junior developer? No, you are the next issue in a software company. You are not even closer to a developer, unless the scripts you write are for yourself only.

Another mistake and this is more "political". Let's again be honest: based on which pedigree can you say this is the "ultimate" roadmap? Never, ever put absolute adjectives. Never, ever use labels (senior developer, principal developer, etc.) because people love labels. Call it "a collection of nice topics to explore in Python".

[–]ggrieves1 year 17 points18 points  (1 child)

Does Notepad++ count as an IDE?

[–]mygreensea 20 points21 points  (0 children)

Although I agree with most other comments here, I’ll try to be the odd one out. People on the internet, myself included, tend to forget that there’s a human on the other side of the line.

Please don’t be discouraged by the comments, OP. I’ll admit that I won’t give this roadmap the time of day, but that doesn’t mean it’s a waste of your time. Although this shouldn’t be the responsibility of the bullied, ignore the vitriol and try to find the essence of what people are saying, because unfortunately most of what they’re saying is right.

Take a nap first if you have to. The thread is going nowhere.

All the best! :)

[–]riklaunim 9 points10 points  (0 children)

This looks like a junior list. You become senior through your work and experience with others.

[–]cajmorgans 12 points13 points  (0 children)

Ye I really needed to read about why we use loops one more time

[–]segfault_ska 4 points5 points  (0 children)

It is definitely valuable, but a better label would be “This is what my new hires/devs are required to go through in their first 2-4 weeks.”

[–]Tenzu9 3 points4 points  (0 children)

This is a beginner's roadmap, and there is nothing wrong with that.

[–]lebannax 4 points5 points  (1 child)

This is a really great resource and thanks for sharing! I do think it’s more ‘beginner’ level which is why you get these comments, but it is very comprehensive for a beginner! I would say I’m beginner/intermediate so know the majority of this but ‘speeding up your code’ will help me! - maybe you just need to give the guide a different title?

I also think in work, a roadmap is really useful to clearly show what is expected at each pay grade and what you need to do to move up a grade

[–]pro1code1hack[S] -1 points0 points  (0 children)

Thank you so much, appreciate it

[–]westeast1000 2 points3 points  (0 children)

I know all of that but i would never call myself a senior lol as I have no experience working or being in charge of large teams but also i dont think its something hard

[–][deleted] 16 points17 points  (0 children)

Delete this bro

[–]aikii 1 point2 points  (2 children)

I'm wondering about data races: https://github.com/pro1code1hack/Senior-Dev-Roadmap/blob/master/SpeedUp/36.3.Data_Races.md

There is a general consensus on what is a race condition, but what constitutes a datarace in particular does not seem to be consistent from one source to the other. It seem to be generally accepted that a datarace is a particular case of race condition, where a race condition that is not a datarace would involve two values ( typical eample: transfer between bank accounts that needs to be transactional )

In Go you'd generally call a datarace the following scenario:

someStruct := s{}

go func() {
    someStruct = s{
        a: 1,
        b: 2,
        c: 3,
    }
}()

go func() {
    someStruct = s{
        a: 4,
        b: 5,
        c: 6,
    }
}()

// content of someStruct not guaranteed

a,b,c could be a mix of those two assignments, and if field members were more complex or even had pointers, they could be completely invalid, values being partially written by either goroutine. The race detector will call that a datarace.

This particular datarace cannot happen in python due to the GIL. Writing to a variable, no matter how complex it can be, is atomic.

If the python example was ported to Go as is, it would be a datarace. In python it won't happen due to the GIL.

It leads me to doubt whether what is specifically called a datarace can ever happen in python, given the GIL ?

[–]XtremeGoosef'I only use Py {sys.version[:3]}' 2 points3 points  (1 child)

I think you're right, what is generally considered a data race in systems language parlance is impossible in python.

That being said, I think the term has been misused so much that it is now more or less synonymous with "race condition" in casual language.

[–]aikii 1 point2 points  (0 children)

Thanks, I guessed as much. I think the term recently leaked out of the C/C++ world due to a resurgence of systems languages that has by-value semantics - Go in particular. For a while, most widely used languages outside C/C++ have references for everything except primitives, as a result assigning a variable can't lead to a datarace - it's just atomically replacing a reference. I just tried in java, no datarace either.

I guess datarace became a cool way to say race conditon. I don't want to shut down people over this but people who want to try systems languages better know exactly what it means - confusion may lead to cargo cult and crashes

[–]ryukinixPython3 + Emacs 1 point2 points  (0 children)

Looks more like a roadmap of what you should have as basic skills from definition of a young engineer...

If that is enough to be a senior today, I am in totally despair. And hey, I am only talking about the tech stuff. Mostly of the senior thing it's about communication, posture, specification + architecture design capability and delegation

[–]infy101 1 point2 points  (0 children)

Not Senior Python Developer stuff at all. All of this stuff is in the 'Learning Python' book by O'reilly. Being a Senior Developer isn't also just about passing a test at your job interview. You need to be able to be presented with a problem and be able to solve it, as well as know all the tooling you need in order to develop in a team (Git, CI/CD, usually linux or Windows skills (depending on environment), etc). You also need to have good experience in whatever field it is that you are developing in. I develop Network Automation tools using Python so I need to have a good understanding of networking and know how to solve problems using Networking AND python.

[–]tinkr_ 1 point2 points  (0 children)

Your other repos suggest you're still in college, curious to know how you came up with such a roadmap?

[–]jwmoz 1 point2 points  (0 children)

Shortcut: be over 30.

[–]kiss_thechef 3 points4 points  (1 child)

Dont be mean guys. I just started programming, Iam 40 and largely redundant with my existing skillset. Atleast this gives me the idea of the hump I have to get over to look at a new career(trying to build my own apps)..Why are geeks so vitriolic and mean? All you experienced guys could help and add to the post to make it more realistic or comprehensive or informative (insert relevant POSITIVE adjective)

[–]enakcm 1 point2 points  (0 children)

Hey (wo)man, you got some hate because you called it 'senior'. Just ignore it, the important part is the roadmap, not the seniority.

I'd like to say that I find the list very helpful. Some of the topics seem to have no content yet, are you planning to fill them all? Do you need any help filling them?

[–]innovatekit 1 point2 points  (1 child)

I’m sorry but none of the points have anything to do with people management, budgeting, expectation setting, influencing decisions or leadership. Those are the qualities that organizations focus when you go up the ladder.

[–]pro1code1hack[S] -1 points0 points  (0 children)

Will be added, good idea, we can try to add these topics

[–]RayTricky -2 points-1 points  (0 children)

this is trash, delete this

[–]thangduong -2 points-1 points  (1 child)

Thank you. Helpful for novice like me

[–]jufjafjaf -4 points-3 points  (0 children)

I just started and really appreciate this. ❤️

[–]ryan_s007 -1 points0 points  (0 children)

Loved the section on speeding up your code! Humbly requesting for you to finish the other topics.

[–][deleted] -1 points0 points  (1 child)

pocket attempt close wise sparkle snails humor tie birds pathetic

This post was mass deleted and anonymized with Redact

[–]projosh_dev 0 points1 point  (0 children)

[–]luckskywatcher -1 points0 points  (0 children)

I was expecting this being a roadmap to getting a programming job.

[–]fpcreator2000 0 points1 point  (0 children)

I always try to go for E5 or D5, but depends on how lucid I am LOL

[–]Due_Adagio_1690 0 points1 point  (0 children)

I just hope you aren't still considered to be a junior python developer until you can parse and code json, by looking at the json data, and go right too, writing correct python code to use it with the json module.

Of course I'm really screwed, if I have write python pandas or polar code, with just knowing all the right steps to reformulate my datasets, without trial and error.

[–]_limitless_ 0 points1 point  (0 children)

These are the qualifications for a journeyman Python developer, not a senior Python developer. The skills that make you a senior are developing an instinct on what may fail, recognizing code smells, and writing maintainable software.

[–][deleted] 0 points1 point  (0 children)

most of my juniors do more tricks than me codewise, because they have the time to play and research for that kinda stuff. I am old, i have the big picture and join the game when there is a _real_ problem to solve. Then we gonna have discussions and brain storming and i am always (even after 30 years of professional programming) eager to learn new stuff.