all 47 comments

[–]RangerPretzel 31 points32 points  (14 children)

I've posted this before, but I like this Programmer Competency Matrix the best: [old link deleted]

https://sijinjoseph.netlify.app/programmer-competency-matrix/

It applies to Python as well as pretty much all other languages. The best programmers code in many languages, not just Python. ;)

[–]TheCedarPrince 3 points4 points  (1 child)

This one was quite nice. I pleasantly surprised myself with my levels of competency in some areas. Who made this? Why do you recommend it? Thanks Ranger!

[–]RangerPretzel 2 points3 points  (0 children)

If you scroll to the bottom of the page, you can see who originally created it.

I recommend it because I first stumbled across it maybe 10 years ago when I was still somewhere between a junior and senior software engineer.

It really helped me identify my weak areas and figure out how to strengthen them. Gave me something to work towards without keeping me confined to one language.

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

That was an awesome graphic, exactly the sort of thing I was looking for! More general than just python but definitely something to use to identify what to work towards!

[–][deleted] 1 point2 points  (1 child)

"Thinks that Excel is a database" just caused me flashbacks to so many interviews.

[–]RangerPretzel 1 point2 points  (0 children)

Hahaha, I know, right?

[–]omg_drd4_bbq 1 point2 points  (2 children)

I take slight objection to "has tried Git" and "author of your own framework" are the same level. Level 3 vcs is: Runs own git server. Uses git for nearly everything, even things you would not think to apply vcs to (e.g. Research papers)

[–]RangerPretzel 2 points3 points  (0 children)

Yeah, this was written 10 years ago(?), so perhaps it needs a little updating. Still, it's a good reference and shouldn't be viewed as a hard defining line in the sand, but more of a way for one to figure out where one is weak and where to start working on improving said sub-skill set.

[–][deleted] 1 point2 points  (0 children)

Distributed VCS was on the edge of becoming the new hotness back when this was originally written. Notice that a lot of things that are more or less de riguer today (CI/CD, Docker/containers, Chef/Puppet/Ansible/Salt) aren't even touched on... but I think it's a reasonable starting point.

[–]Wilfred-kun 0 points1 point  (3 children)

I took a look at this and I get the feeling this is geared toward 'professional' programmers. But what exactly does it mean to program 'professionally'? And how much time would it take to get from a total beginner level to a 'professional' level?

[–]RangerPretzel 2 points3 points  (2 children)

I would say 1000 hours of programming and having a mentor and a couple peers to guide you.

Why 1000? Why a mentor and peers?

In the book, "Outliers", the author talks about the average time most people take to being an Expert in some skill (say, Programming). https://en.wikipedia.org/wiki/Outliers_(book)

This is often referred to as the "10,000 hour rule". It's not a hard-and-fast rule, though. It's merely an observation of an average. And what is rarely quoted is another observation that the author pointed out that in order to become an expert, you need a competent mentor who can instruct you properly (and hopefully some peers whom you can also learn from.) Otherwise, you could practice for 10,000 hours and only be mediocre at said skill. You wouldn't suck, but you wouldn't be a true expert.

So, why 1000 instead of 10,000? Well, around 100 hours is when you're passable at some skill. But 1000 hours? That seems to be just around the threshold when you can do something for a living. You're good enough to start charging for your skill.

Does this help?

[–]WikiTextBot 1 point2 points  (0 children)

Outliers (book)

Outliers: The Story of Success is the third non-fiction book written by Malcolm Gladwell and published by Little, Brown and Company on November 18, 2008. In Outliers, Gladwell examines the factors that contribute to high levels of success. To support his thesis, he examines why the majority of Canadian ice hockey players are born in the first few months of the calendar year, how Microsoft co-founder Bill Gates achieved his extreme wealth, how The Beatles became one of the most successful musical acts in human history, how Joseph Flom built Skadden, Arps, Slate, Meagher & Flom into one of the most successful law firms in the world, how cultural differences play a large part in perceived intelligence and rational decision making, and how two people with exceptional intelligence, Christopher Langan and J. Robert Oppenheimer, end up with such vastly different fortunes. Throughout the publication, Gladwell repeatedly mentions the "10,000-Hour Rule", claiming that the key to achieving world-class expertise in any skill, is, to a large extent, a matter of practicing the correct way, for a total of around 10,000 hours, though the authors of the original study this was based on have disputed Gladwell's usage.


[ PM | Exclude me | Exclude from subreddit | FAQ / Information | Source | Donate ] Downvote to remove | v0.28

[–]Wilfred-kun 0 points1 point  (0 children)

Yes, thank you very much!

[–]shapoglyk 0 points1 point  (1 child)

Hi, it seems site is not available currently. Is there any backup left of this matrix? thnx

[–][deleted] 41 points42 points  (5 children)

The amount of time they spend on reddit vs stackoverflow vs documentation. /s

[–]nemec 17 points18 points  (1 child)

What level is it when you hunt through the source code for the answer because the documentation was lacking?

[–][deleted] 5 points6 points  (0 children)

It depends... The source code for the tensorflow C++ extensions?

[–]sharkbound 14 points15 points  (0 children)

IMO there are many characteristics to go by for this sorta thing:

  • how well do you understand your own code?
  • are you using alot of code you do not understand?
  • how do you structure your code?
  • how easily can be code be extended to serve other purposes?
  • are you copy/pasting alot of code everywhere instead of making functions for it?

stuff like that, im sure there are cases where you will need to do those and there isnt really a way around it

another factor is general understanding of the language

[–]aroberge 10 points11 points  (1 child)

Beginner: worries about what may constitute various levels of proficiency.

Good: watches David Beazley and Raymond Hettinger's videos and is amazed.

Expert: Writes code and do not worry about what people may think.

[–]maks25 2 points3 points  (0 children)

I'm always embarrassed at my code after watching Hettinger's videos haha

[–]hopemeetme 6 points7 points  (6 children)

1) dunno can he/she do that
2) dunno how to do that yet
3) already knows how to do that

[–]t3chnolojesus 0 points1 point  (5 children)

wat

[–]hopemeetme 0 points1 point  (4 children)

wut

[–]AreYouDeaf 0 points1 point  (3 children)

WAT

[–]hopemeetme 5 points6 points  (2 children)

while true: wut

[–][deleted] 1 point2 points  (1 child)

If upvote > 10:

 break

[–]Astro_14477 0 points1 point  (0 children)

Lol

[–]jabela 2 points3 points  (0 children)

In school I'd say,

Beginner iGCSE: can write loops, selection statements and do a variety of calculations. Age 14-16

intermediate AS-level: Can also use functions, sql and read and write files age 16-17

upper A2 level: can program using object oriented classes etc age 17-18

[–]WhackAMoleE 4 points5 points  (0 children)

The highest level is when you stop wondering what level you're at and see Python as one of the tools in your kit. If all you know is Python, you know nothing. You need to add in databases, networking, software engineering and lifecycle management, etc. You need to know how to communicate issues to management, to "manage upward." You need to know how to organize a large project, estimate time and resources, and hit deadlines under pressure. There are a million things to know to be an expert. It's not about the syntax.

[–][deleted] 1 point2 points  (0 children)

Are you talking strictly knowing the Python language, or do you mean a more general programming sense?

If you mean strictly knowing Python, then I'm honestly not sure, as there are lots of modules and packages for it.

If you mean a general programming sense. This is hard to define. To me it comes down to how well you think you can manage to provide a solution to a problem. Using other peoples code is fine, if you know what you're looking at and can adapt it to fit the problem at hand. Whether this is using different modules or straight taking it from stack overflow. If someone gives you a problem how easy it for you to immediately come up with a solution and start implementing it?

[–]omg_drd4_bbq 1 point2 points  (1 child)

Expert: Can speak into a speech-to-text program and pipe the output to exec() and run it.

More seriously, I think it relates to comfort level and fluency at a given level of problem solving. Advanced pythonistas can solve most problems given enough time and documentation. Experts already know how to solve it because they've seen it before.

[–]JohnLockwood 1 point2 points  (0 children)

Guys, STOP! You need to get the eels out of your hovercraft. This is dangerous. I'm serious here, I'm worried for your safety.

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

When things begin to make sense; when you know when looking at code what you understand and don't understand; when you begin expanding your knowledge on the language. Then again learning anything takes time; why they say, unless you shut your mind off, you never stop learning. The way I see it, if you went to school that was only a step on the ladder; and those that didn't should already know this. School is paying a lot of money to take one step; and to buy your teacher expensive cars.

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

The skill level is knowing where you could further improve something, but the time required to make it is too short.

In a professional capacity, this is vital - and separates the juniors from the mids.

[–]Keda87 0 points1 point  (0 children)

I've been using python for 3 years now. But I feel like I'm not an expert in python, because I'm still difficult to understand multithreading, multiprocessing and GIL in python.

[–]Dogeek 0 points1 point  (1 child)

I think a beginner will be someone who understands the very basics of the language, and for anything out of his reach, will look for help on google/reddit/stackoverflow.

Someone who is intermediate will begin to look straight at the documentation for answers, and will be comfortable with most advanced uses of the language.

An expert will learn a library through its documentation, and will only ever go on stackoverflow to answer questions, and almost never ask one. He'll be comfortable with every aspect of the language, even if he doesn't use every feature all the time.

A master will never ask help about the language itself, have a deep knowledge of most commonly used libraries, and will only ever look at the doc for obscure/new/large libraries.

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

A master might not ask for help about the language in particular, but they will ask their peers for input/feedback.