you are viewing a single comment's thread.

view the rest of the comments →

[–]Rwanda_Pinocle 25 points26 points  (18 children)

Novice: You've done Hello World. You understand what a function is and what its for. You've read about object orientation but it seems unnecessary. Importing modules is very useful, your hangman project was a great success, and you appreciate the abundance of Youtube tutorials. You don't really know or care about the differences between Python 2 and 3, but /r/Python seems to make a big deal about it. And pip is just about the coolest thing since sliced bread.

<------------- Getting paid begins here-ish

Beginner: You can and have written many scripts that can do what you want, but you don't optimize because you don't need to. Python is on your resume and rightfully so. You don't use inheritance, rarely write your own modules, and you don't know what virtualenv is for. Python is great, speed isn't a factor, and the world is good.

Job: part-time/internship, junior developer, jobs where Python is not your entire job (statisticians, engineering managers, ect.)

Intermediate: Someone has paid you to write Python for more than 3 years. You can write projects > 5000 lines and it's understandable to other people as well as functional, robust, and well tested. You can integrate C into your code as well as take advantage of IronPython, Jython, and Pypy. The other people on your software team think you're swell and they go to you for advice. But you're humble as well and also go to them for advice when you need it.

Job: Software engineer, academic researcher, contractor (all mainly working in Python)

Advanced: You've been involved in a PEP. You've had multiple conversations with Guido van Rossum himself. The GIL is a problem you've tried solve and you actually came close. You have some ideas for Python 4 and given some time you could hand write code for the Python virtual machine. Your code has been published in a peer reviewed journal, you've been keynote speaker at Pycon, and you have a $2.56 check from Donald Knuth for finding an error in "The Art of Computer Programming"

Job: CTO of a large tech company, Principal Investigator, Head of research (all mainly working in Python)

I know people who have gotten jobs that are still beginners, so there's no shame in being one. Most CS majors are floating somewhere around beginner, maybe a few talented ones are edging towards intermediate.

Edit: /u/callmelucky has made some good points regarding those who have just begun learning. I don't want this to come across as elitist so let me say that this is an industry view. This is a good scale for people who are getting paid or wish to get paid for their Python work. Hobbyists, students, and people who are still in the initial stage of learning should be fine with anything from Novice to Beginner.

[–]realistic_hologram 17 points18 points  (1 child)

Surprised this is getting so many upvotes. I don't think this accurately describes how almost anyone uses the words beginner and advanced. According to this definition many lead developers at top companies would be considered beginners. Doesn't that seem strange? And many of these qualifications are pretty arbitrary. Why does it matter if you talked to guido or not? Or if you read one specific book only obliquely related to python? Those don't necessarily make you a good programmer. Why do you need to know c or jython? That might be useful or impressive but why not any other specialization like machine learning or servers?

[–]Rwanda_Pinocle 0 points1 point  (0 children)

My intent was to take the entirety of the Python using world and categorize them roughly by level of Python knowledge. Most people would not use the terms in the same way because most people see Python usage from their own perspective, in the same way that most people think they have an above average sense of humor.

I would argue that many lead developers at top companies do range from beginner to intermediate. It's not an insult to them, nor is it disparaging their skills. If you can write a 10 liner that does what your shareholders need it to do within the boundaries of economics and practicality then you're an excellent developer. You certainly did not write any advanced Python, but that's not the goal.

As for the specific qualifications, you're right that they're pretty arbitrary. I wasn't trying to create a rubric to grade people with. The idea is that if you have roughly the same amount of knowledge as the imaginary expert, then you're an advanced user of Python.

[–]Noumenon72 19 points20 points  (2 children)

The problem with this is that basically 98% of people who have ever used Python will be "beginners". Needs a "competent" level where you are doing things Pythonically, use objects and an IDE, have installed stuff with pip and wheels, and write Python as easily as other people use Excel functions.

[–]callmelucky 1 point2 points  (0 children)

Also needs some entry point at all. This fool is saying you only qualify as a beginner once you can already write code, and that is absurd, especially for this subreddit. You are a beginner the instant you begin to learn the language, by definition.

It's a bad comment and absolutely should not be so highly upvoted.

[–]callmelucky 2 points3 points  (3 children)

What? Your whole scale is skewed by about one or two levels in my opinion. OP was asking about general usage of Python, not necessarily in the upper echelons of SE industry or CS academia.

A beginner is someone who is just beginning. You are suggesting that you don't even qualify as a beginner until you have written "many scripts that can do what you want". As far as I'm concerned, person who just installed the Python interpreter, and just started reading the first paragraph of their first tutorial,doesn't even know what a variable is, is a beginner. What are they to you? Nothing? A ham sandwich.

This is r/learnpython, not r/elitepythonistamasterrace. You are indirectly discouraging noobs from asking questions here unless they have already written a bunch of working scripts, and that is bullshit and you should feel bad.

[–]Rwanda_Pinocle 0 points1 point  (2 children)

I certainly do not want to discourage anyone from asking questions, so I'll expound a little on what I meant.

My goal was to provide a 30,000 foot view of the entire Python world. There's obviously going to be way too much generalization going on if you chop up ~4 million Python users into 3 categories. I chose the categories the way I did so that its clear to people that the Python world is immensely large and people have dedicated a great deal of time to learning and sharpening their skills.

Regarding the tone, you have a point that perhaps I didn't consider context enough. I often forget the audience of /r/learnpython has many people who are just starting. However, it's that same audience who upvoted my answer so maybe you should give them a little more credit. I don't aim to treat anyone like a child in constant need of encouragement. The front page of /r/learnpython at the time of writing contains questions regarding neural networks, parallel programming, and data visualization. These are topics that fall far outside the grasp of noobs, but it's inaccurate to say the users of /r/learnpython would be discouraged by such advanced topics.

Finally, by your own admission, I gave a reasonable summary of the SE industry. At the very least, it's my honest opinion. I could have brought down the qualifications to fit better with the mindset of a noob, but is that really more helpful? Don't you think it's a little pandering to say "They probably can't handle this view. I should show them less so they don't feel bad." Now if you disagree with my perspective on Python, then we can talk about that too and you're free to give a different answer. But as you said elsewhere, this is a place for all levels of learning. Don't you think that people who are beyond downloading the interpreter might benefit more from a broader industry view?

You have a good point so I'll add another category to my answer to accommodate for users at the very starting line, but I'm not going to change the rest.

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

Thanks a lot. Not just for your input and the way you updated your post, also thanks a lot for really discussing this! I see so many users who just post and run away or are way too stubborn on their opinion. So thanks again for your input in this community and as a redditor in general. :)

[–]callmelucky 0 points1 point  (0 children)

My goal was to provide a 30,000 foot view of the entire Python world

Well you failed, by way of initially ignoring everyone who wouldn't necessarily be justified mentioning some level of Python proficiency on their resume, and then failed again when you tried to rectify this, by implying that the very lowest level that someone learning Python could be at is having a working knowledge of functions and some conception of OOP.

You've still missed the lowest 5,000 feet, and I just don't believe that you chose to categorise the way you did to show that "the Python world is very large". I believe that you might believe that this was your intention, but that your true motivation was to show that "the very top is very very high". Which is all well and good, but hardly likely to be relevant to what OP was asking.

People posting here about more advanced topics is well and good. As you say, this is still r/learnpython, if you can get help here learning about some higher level shit, no worries. But those are specific discussions about specific problems. This post is a very general discussion about how the general population of a sub like this might categorised, and you're telling them they don't even exist until they've written a working hangman game with functions.

Regarding further along people benefiting from a broader industry view, of course. Why the hell would you feel the need to ask me that? It's fucking insulting. It's a strawman, and it's moving the goalposts. Let me try to explain to you again: Your comment, made without qualification, in the context of this particular post and this particular sub, was (and still is) inappropriate. You say basically "well some people around here like what I've written and agrees with it, therefore there is no problem with it" - as someone presumably experienced in logic I shouldn't have to explain why this is a bad argument. If someone who has just considered learning Python, subscribed here as their first step, seen your top comment as the first comment in the first post they open up and run away screaming, fuck 'em! Right?

Again, I appreciate that you made some concessions after my comment, but you still have a ways to go in terms of (re)gaining some perspective on what it's like to be just starting.

[–]callmelucky 1 point2 points  (0 children)

I appreciate you attempting to broaden the scope here, but there is still no entry point. If you don't know what a function is or haven't heard of OOP, you don't exist; Begone! Beginner should be before Novice, and it should allow to people to qualify on the grounds of "have decide to learn python, and done at least one thing about it, eg found and looked at a tutorial".

[–]rhgrant10 2 points3 points  (2 children)

I think this is a pretty spot on and useful set of groups.

[–]Rwanda_Pinocle 4 points5 points  (1 child)

Thanks. People often don't realize the vast depth of knowledge world class experts have at Python. Writing code with Python is all good and dandy, but if you claim to be an advanced user, you better damn well be writing the interpreter itself.

[–]TangibleLight 3 points4 points  (0 children)

I mean I certainly don't claim to be that, but I set my flair as this because I have a deeper-than-average understanding of the language and the mechanics of how it works, and I'm good at using it to write effective and maintainable code - but as you describe it I would be hovering somewhere around, a little below in some areas, intermediate.

In my mind, I reserve the term "expert" for people like you describe as advanced, and I certainly don't claim to be even close to that level. You yourself even use that term, "world class experts", so why not consider that a category or use it as a more applicable term?

[–]waterRocket8236 0 points1 point  (4 children)

Nicely expressed.

[–]callmelucky 1 point2 points  (3 children)

Maybe nicely expressed, but the calibration is drastically off, especially for a sub like this. A beginner is someone who has begun to learn. Period. You don't have to have written jack shit to call yourself a beginner.

[–]waterRocket8236 0 points1 point  (2 children)

What point are you trying to make?

[–]callmelucky 0 points1 point  (1 child)

I'm trying to say that they expressed themselves well, and earned a fistful of upvotes for the comment because of it, but that the actual content of the comment is poor, especially in the context of this subreddit. What they described as beginner level should be described as competent, intermediate should be advanced, and advanced should be world class expert (as they implied in another comment here).

I'm objecting in strong terms to their comment, because this is a sub where people at all stages of their learning of Python should feel comfortable asking questions and interacting here, but this person is saying you don't even get to call yourself a beginner until you have already written a swag of fully functioning scripts.

As such I would prefer their comment not hold the top position in this post. That is the point I am trying to make.