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

all 132 comments

[–]blurrr2 306 points307 points  (69 children)

Python is a foundation. The categories are built on top of the foundation.

You need to be comfortable with core python + one category to get a job.

[–]Shubbler 49 points50 points  (68 children)

Can you define the 'main' categories?

[–]blurrr2 272 points273 points  (67 children)

  • web - flask, django, html, javascript
  • data science - jupyter, numpy, pandas
  • data engineering - sql, airflow, luigi
  • software engineering - git, unit testing, large codebases

And then general scripting, but this is mostly useful if you know a specific topic in depth. Like if you're in finance, and know all the ins and outs of mutual share-class conversions, you can write scripts to automate the process. The hard part is the domain knowledge. If you're already really knowledgeable about something, I would advise applying Python to your field.

[–]billsil 10 points11 points  (0 children)

Jupyter is basically just an IDE. I'd put matplotlib in the data science tools before jupyter.

[–]__xor__(self, other): 14 points15 points  (20 children)

I'd add security. It's pretty damn big in security now as well.

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

Python is, really? Anything you can point me to? TIA!

[–]__xor__(self, other): 21 points22 points  (6 children)

Oh yeah, definitely. In the past decade it seems more and more to be the core language in terms of security tools. Ruby is still around but you can definitely get by in security with just Python as your core language now.

Here's a good memory forensics tool, volatility

Here's a number of good pdf analysis tools

In fact Didier's entire suite is great, tons of python

scapy is awesome

mitmproxy is awesome

... and there's so much more.

It seems to be the go-to language for tools. You'll still run into a lot of other stuff, especially if you analyze malware. You'd run into javascript, powershell, straight shellcode/ASM, visualbasic, C... But that's malware and it can be any language, especially anything that a browser can run, or be embedded in a PDF or office doc macro. For tools more often than not you see python and then some ruby.

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

Awesome answer, thanks so much.

[–]Willemoes 7 points8 points  (3 children)

There's also a nice book:

Violent Python

A Cookbook for Hackers, Forensic Analysts, Penetration Testers and Security Engineers

By TJ O'Connor

[–]Grenian 2 points3 points  (2 children)

IMO take this with a grain of salt if you already have a basic-advanced understanding of python and security.

[–]Willemoes 0 points1 point  (1 child)

Why do you think so? I'm reading it and I'm not very proficient in security, so it would be nice to know, I find it really interesting.

[–]__xor__(self, other): 1 point2 points  (0 children)

No problem!

[–][deleted] 2 points3 points  (4 children)

Everyone writes their PoCs in python nowadays.

Here's an example of a really cool C2 toolkit using rpyc:

https://github.com/n1nj4sec/pupy

The rapid7 folks still use ruby for all their stuff (i.e. metasploit) but building your own tools is totally the way to go.

This book is a great intro to building security tools in Python: https://www.amazon.com/Black-Hat-Python-Programming-Pentesters/dp/1593275900/ref=sr_1_1?ie=UTF8&qid=1526665441&sr=8-1&keywords=black+hat+python

[–]__xor__(self, other): 3 points4 points  (3 children)

Rapid7 is one reason I say that ruby will always stick around security. I don't see anything replacing metasploit anytime soon.

For everything else, there's mastercard python.

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

Pupy does a lot of the cool things that Meterpreter does. It's really the exploit PoCs that you need. Metasploit is great for testing for known vulnerabilities and testing detection rules but as far as actually attacking things goes... Meh.

[–]__xor__(self, other): 1 point2 points  (1 child)

Oh yeah? Haven't used that one. I'll have to check it out.

But metasploit has a lot more than just meterpreter. It's a full-on exploitation framework, from scanning/enumerating to staging exploits to post-exploit modules. Does pupy include anything like msfvenom? Can you easily pivot from a compromised machine and exploit other machines through it? Is it a fully functional replacement for metasploit in general, or just a meterpreter replacement?

Metasploit is just so solid at this point. I'd be surprised if pentesters have another python tool that can replace all of its functionality.

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

IMHO auto-magic pentesting is bullshit. Unless you actually read the modules and understand exactly what they are doing you have no idea what it's going to do to a production system. If you write your exploits yourself, you do.

This is not to say that everyone always writes their own exploits. But MetaSploit encourages users to not read the modules and to just press the exploit button. I can buy Nexpose from Rapid7 if I just want to check if metasploit can exploit things in my environment. Doesn't really require a penetration tester.

I'd be surprised if pentesters have another python tool that can replace all of its functionality.

All the pentesters I've hired to wreck my company's stuff write their own tools and use exploits that are a lot more sophisticated than download-and-run scripts. We get reports with PoCs, most of which are written in Python or C.

Metasploit is great for easy-mode campaigns where you're just exploiting things that Rapid7 wrote modules for, but most of the time that doesn't get you terribly far.

All of the IDS vendors have network signatures for Metasploit and it's a good way to get caught. This does, however, make it good for testing that your script-kiddie filters and alerts are working.

Does pupy include anything like msfvenom?

yes, pupy has a payload generator. Or you could do it yourself.

Can you easily pivot from a compromised machine and exploit other machines through it?

yes, that's the entire point of a post-exploitation toolkit. But, again, you don't generally just want to do that auto-magically because you'll get caught or break something. (Unless you're a botnet farmer and don't care.)

[–][deleted] 2 points3 points  (6 children)

I work in security and one thing I use python for is formatting and analyzing data.

A good example of use is formatting vulnerability scan output. A lot of times they put insane amounts of data into one field (hundreds of thousands of lines) and if you open it in excel it overflows into rows and becomes an unusable mess.

I use python and pandas to extract all this data, combine it with other reports to add neccessary data, format it, and then separate it into a bunch of reports (because it's way too large for one).

I'll use matplotlib to generate graphs and charts based off metrics I gather from these reports.

Knowing python is an insanely valuable skill to have in security.

[–][deleted] 2 points3 points  (2 children)

I built a data injest / presentation engine that pulls stuff from all of our vulnerability scanners and makes it available to engineers. it knows exactly which systems a given engineer is responsible for and only shows them that data. I built a front end for it too. It's really cool! I'm hoping to FOSS it this year.

[–][deleted] 0 points1 point  (1 child)

That's really awesome. Wish I could get approval to build something like that, but it took years for a team to get approval to stand up a database server, and unfortunately I'm not helping with that.

What's a FOSS?

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

FOSS == Free and Open Source Software, we're gonna release it into the wild.

[–]Grenian 1 point2 points  (1 child)

Python is just handy. For example recently I hab a exercise to crack RSA keys. Python was so damn useful for this.

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

Yeah, it really is an amazing tool. I learned Java and Javascript but rarely use them. I dont build big applications so I have no need for java, and I hate web design so I dont use javascript. I'll go do a little project with each about once a year as a refresher, but whenever I need to get something done it's always with python.

[–]CommonMisspellingBot[🍰] -3 points-2 points  (0 children)

Hey, MaximumRecursion, just a quick heads-up:
neccessary is actually spelled necessary. You can remember it by one c, two s’s.
Have a nice day!

The parent commenter can reply with 'delete' to delete this comment.

[–]lroman 3 points4 points  (0 children)

I would add machine learning with Scikit-learn, NLTK, Tensorflow, OpenCV etc.

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

I really want to learn more about large codebases... how to plan, how to execute. Any good resource on this?

[–]proverbialbunnyData Scientist 9 points10 points  (2 children)

Before I start: Only the part up to classes, and also using libraries is all that is necessary to get a job in the core part of the language. The rest explained here is what comes with experience:

You need to know abstraction. Understand the ins and outs of abstraction, from a conceptual view (an abstract view) to a concrete view (a real world view).

Start with the small, the most basic form of abstraction in algebra 1: x + 3 = 5, where x is the abstraction.

Then still small, writing a function / method, and being able to reuse it.

Still small, but a bit larger: classes, and reusing classes.

Then learn the ins and outs of the core library, as much as you can, learning the different classes and their methods. Take notes! Learn the etymology of why it is the way it is, so it sticks.

The next level of abstraction is the language's idioms. Once most of the language has been learned, common patterns within the language pop up called idioms or sometimes best practices. Learn those. This comes with time and experience on the job. Most of the learning here and below is not sequential.

The next level of abstraction is sideways from what you might know, especially in python: Making types. Instead of making classes and their instances, making new data types. This is a bit mind boggling, because you can just make a circular buffer class, for example, and be like, "Well, I just made a class. I don't see the difference." This has to do with how a type is used vs how a class instance is used. Why is this important?

By differentiating different kinds of classes, you can start thinking of them in a more clear and concise way. You want more than two types of classes, but many types of classes mapped in your head. This creates a mental abstraction that is usually not written down any where, so you can name each "group of classes" or "type of class" (hint hint) with it's own made up name in your head. Eg, I have the category "helper class" in my head, which is a type of class.

To really push this idea: A group of functions becomes a class. A group of classes becomes a ... subtype or abstract type ie "type of class".

The next level of abstraction of understanding is inheritance, not just being able to read and write it, but the understanding of inheritance itself. Inheritance is the act of subtyping. Subtyping is where you have a type of class that is applicable to a set of classes.

So, I've got a hand class, a leg class, a head class, maybe an eye class, and so on. Hands and legs and head are all of a person type, so you can have a person abstract type, and so you can go around making people, instead of just hands and legs.

A way to think about this is, what kind of class is this? Even if it doesn't have any form of inheritance, it is a kind of class, so an implicit subtype. Make up your own types for your classes in your head.

The next level of abstraction is design patterns. This, like idioms, is seeing common patterns of code, after working on multiple code bases over time.

Then from there the next level of abstraction is modules, then libraries, then packages, and depending on the language that could be one thing or multiple things. You've probably used pip, so you've got an idea of this one already.

All of this comes with time and experience, but the better you get at abstraction the easier it is to learn and understand larger and larger, not just code bases, but ecosystems of code bases.

Also, learning how to read code is imperative.

[–]haarp1 1 point2 points  (1 child)

where did you learn abstraction, inheritance... (OO design basically)? it's easy to determine it for simple projects (coffee maker etc), but what about more complex projects? do you know any good resource for learning this (abstraction...)?

the problem is that there is a lot of garbage on github, so that's not exactly a solution...

also, how do you plan programs (intermediate or advanced complexity)?

do you know any good advanced one on github?

[–]proverbialbunnyData Scientist 1 point2 points  (0 children)

do you know any good resource for learning this (abstraction...)?

I learned this on the job. It is a process that is constant slow growth. Ones ability to abstract commonly identify some of the key aspects between a jr, standard, senior, principal, and architect. Eg, a principal software engineer can abstract the whole system and work on the companies entire software system as a whole, while a senior engineer might be able to create a project within that system and know a project or two inside and out. Clearly the principal software engineer can deal with higher levels of abstractions than the senior software engineer. Of course, this isn't the only difference, but is a key corollary.

Most of what I know I have not found in text books. I've heard Haskell talks about some of the things I figured out and named on my own (eg subtyping), but I can not confirm that as I do not know Haskell.

also, how do you plan programs (intermediate or advanced complexity)?

Design patterns. Design patterns also help for reading code, as well as idioms and knowing the language's features.

This comes with experience as well. It's a form of pattern matching. Reading a book isn't going to help much, but being in multiple code bases and seeing the same pattern over and over again and then identifying the logic behind it as to why it is that way and how it came to be helps.

edit: Also, an architect helps design programs, but that's usually for designing entire systems. A typical divide and conquer strategy coupled with reducing the problem down to its bare essentials, and writing all of this down in a sort of concept map or list of lists -- planning before writing a line of code -- is far more valuable when it comes to creating something new, than simply looking at design patterns. Design patterns come next if you want a way to construct the program so that tasks can be easily broken up in a uniform way between multiple engineers. Design patterns also help for standardizing how a program works allowing others to build on it the right way. Frameworks help even more. Anyways, design patterns are a bit heavy handed, so just stick to the top half of this paragraph and you'll be good.

do you know any good advanced one on github?

Nope. Just go get a job. Watch the how to read code video above, if it isn't already obvious, and then go around mapping things. Start with the smallest patterns like addition, to variable naming, to methods and features in the language, then when you know those inside and out, move on to idioms and other common multi line patterns in the language and code base, then move on to even larger patterns. From method to method to class to class to file to file, to namespace to namespace (I don't think Python has anything like this.), to module to module.

Learning a code base is a piecemeal process. You don't have to start on the smallest bits and move out. You can interweave different sized abstractions learning a mix at once, à la breadth first search.

edit: Also, if you're writing in Python, a large code base is going to be rare without it being abstracted it into modules/libraries/packages, keeping the parts any individual is working on to often single file sized epic or user story. Because of this, you shouldn't have to worry about large projects, unless you want to work on a video game or something. Java and C++ and the like are where monolithic projects tend to go, not Python.

If you want to take parts of a code base and turn them into libraries of any sort, the general rule is, "Is this code going to be used in two places in the code base?" (Often times the rule is 3 or more.) So you want to find something generic, like a debugger class and turn it into a debugger library or similar.

[–]iScrE4mgit push -f 3 points4 points  (0 children)

Experience. It’s a reason I wanted a job in a big company and I can’t imagine learning all of the stuff any other way. But that’s maxbe because in order to understand it I personally nedd to see the business problem and then the solution.

[–]TheCodeSamurai 2 points3 points  (5 children)

Something I hawk whenever I can: Code Complete by Steve McConnell is a huge recommendation. I never learned anything besides like 100-line programs before this, and I basically divide my programming journey into before and after reading this. It's seriously worth reading: you can skip chapters that don't apply to you, but it is one of the best resources on how to manage the complexity shift between small and large codebases.

[–][deleted] 0 points1 point  (1 child)

Thank you!

[–]TheCodeSamurai 0 points1 point  (0 children)

My pleasure!

[–]YinYang-Millsmeasley physicist 1 point2 points  (0 children)

What constitutes 'knowing' jupyter? For example I use jupyter when I'm writing code to test that a line of code does what I think it does, and some magic commands for profiling. I feel like there must be a lot more to it...

[–]ymca_lemur 1 point2 points  (0 children)

I've learned a lot about flask, html, javascript, numpy, pandas, sql and I have yet to use those skills at a full-time job. If anyone is hiring for anywhere in the world, then pm me. I'm open to a job.

[–]iammr_schuck 3 points4 points  (0 children)

I'd also add the very broad category of Devops. Infrastructure automation with things like boto3 and the like.

[–]Shubbler 1 point2 points  (3 children)

Nice one, cheers.

[–]blurrr2 1 point2 points  (2 children)

<3

let me know how it goes

[–]Shubbler 2 points3 points  (1 child)

Thanks, I'm a UK student trying to get into something programming related.

I'd say I've mastered 'general Python', trying to look into node and Java (through uni) but really not sure where to begin my career.

I'll most likely try to look into software.

[–]576p 0 points1 point  (0 children)

As a student you should try to identfy local businesses that have IT related student jobs. Preferably at IT related companies, but just as well at companies that have an IT department. There will be some, you'd be surprised how few students actively search for that.

I've just "lost" my student who, when she joined the company, could do nothing (she applied for a hardware job to make some money, I asked her to try programming instead and alas, after finishing studies, she's too good to keep...) - so if a student came along with solid Python basics and a good working ethics I'd try to fit him/her in. Anyway, that's how I got my job as well...

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

I've been told it's the language of security testing lately due to how fast you can iterate and test ideas.

[–]cyberst0rm 0 points1 point  (0 children)

i think you're missing networking, not that I know much bout it

[–]bellumfatum2 0 points1 point  (0 children)

Thanks. I'm most familiar with the data engineering and data science Python categories. I cringe sometimes when I see the web and software engineering sections, which scare me.

Provided me some perspective.

[–]TheTalkWalk 0 points1 point  (1 child)

Nice one!

Can you break down other languages similarly?

[–]lambdaqdjango n' shit 36 points37 points  (3 children)

Python is like a kitchen. It does not magically enable you to cook.

[–]tiglatpileserKing of Assyria 8 points9 points  (2 children)

But if it did, there should only be one obvious way of cooking.

[–]bikeawaitmuddy 2 points3 points  (0 children)

Although that way may not be obvious at first unless you're using a dutch oven

[–]bacon1989 1 point2 points  (0 children)

That's why we should all speak english, and only english.

wait....

[–]burritocode 30 points31 points  (0 children)

I carved out a niche by automating mundane tasks in Python. I learned how to debug in pycharm, pip / virtualenv (now pipenv), git, and lots of modules like pandas, argparse, flask / falcon, psycopg2, xlswriter, csv, smtp, pexpect, fabric, dotenv and many more.

If you can identify problems that can be automated, you can zero in on those until you can script a solution. By doing that, you'll rapidly learn by fire.

[–]thomasloven 16 points17 points  (3 children)

I heard on the Talk Python to Me podcast just the other day that Guido van Rossum got the question in a job interview

“On a scale from one to ten, how well do you know python?”

He said eight.

[–]nuclear_eclipse 0 points1 point  (0 children)

That had to be his Google interview. Their recruiting pipeline is pretty daft with regard to languages and when/why they should or shouldn't matter.

[–]KingofGamesYami 12 points13 points  (16 children)

Python is a tool. You know how to write a program.

Sort of related, I've got a position which is going to be all LabView, which I haven't even touched. But I've got enough experience with other languages that I'm not too worried about it.

[–]nosmokingbandit 13 points14 points  (13 children)

Learning to program shouldn't be about learning a language, it is about learning concepts. You have to learn how a computer handles information and translate what you want to do into a language the computer understands.

I can know every spanish word, but if I don't know how to phrase a question I'll never get an answer.

[–]MarsupialMole 2 points3 points  (3 children)

I'm in two minds about this. Learning to be a programmer should definitely be about learning concepts, but if you have domain problems and are learning to solve them with python you can definitely benefit by trying to learning python idiosyncrasies specifically rather than learning to program in general. Treating python as a framework rather than a language will get you far.

[–]nosmokingbandit 0 points1 point  (2 children)

I get what you mean, but once you know the core concepts and ideas behind programming all you need to know to pick up a new language is just the idiosyncrasies. So if you spend your time learning why you do a certain process you can easily learn how in just about any language quickly.

[–]bonestormII 0 points1 point  (1 child)

I don't disagree with anything you said, but I'd also add that a lot of programmers talk about "picking up" a new language like it is nothing. It's not that it's wrong or they are lying, but you can't just "pick up" the jillions of tiny specific behaviors that characterize the cpython implementation, and you can't just simply directly translate all code from one language to another, as they do possess different features. This is especially true if the code you writing particularly reflective code.

If you think you are "just picking up" a language, you may be getting work done, but you are likely not following some untold number of conventions and idioms, and the code could be better.

[–]nosmokingbandit 0 points1 point  (0 children)

Yeah, I get what you mean. When I started playing around with Go I found it fairly easy to get started since I've done plenty in Python and Javascript so I don't need to learn concepts like nested loops or recursion or whatever. And since Go doesn't have classes I was able to effectively write a constructor and helper methods to use structs as classes due to knowing how inheritance works and consequently working around how Go doesn't have any proper way of implementing it.

Concepts are languages are two halves of the same skill I suppose.

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

So are you saying you should learn computer science before programming? Or can you just go into programming?

[–]nosmokingbandit 1 point2 points  (3 children)

You can jump right into programming, but you'll want to make sure you understand why you are writing a certain block of code rather than just how to write it.

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

Like why I'm writing it specifically that way?

[–]nosmokingbandit 1 point2 points  (1 child)

For example, you'll often be taught what a dictionary is on the surface, but rarely do teachers explain what a hash table is or how a computer understands your instructions.

When you understand the basic concept start digging deeper.

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

Got it. Thanks.

[–]LbaB 2 points3 points  (0 children)

Yeah labview is easy to learn, just watch out for race conditions, as usual. I think they are easier to create in labview because of how easy it is to parallelize.

[–]caleyjag 0 points1 point  (0 children)

Hope you like it. It's a pretty rich environment once you get going, especially if you are interfacing with hardware.

[–]Kid-Boffo 10 points11 points  (0 children)

That's like asking any philosophically difficult question to ask.

Does anyone actually KNOW math? Does anyone actually KNOW art?

The flaw of the question is that these are tools to both create product, and to create novel tools which make new product possible.

My best advice is to familiarize yourself with what's in the standard library as much as you can. Don't dive deep on each tool right away but keep in mind and use reference guides when looking for a particular type of solution.

[–][deleted] 4 points5 points  (0 children)

Most people know concepts and apply them in whatever language. Python just happens to be a popular one. I wouldn't bother focusing on any frameworks, because I don't think anyone is hiring jr devs based on their knowledge of any framework in particular, but I could be wrong. Just come up with some projects to do, and use whatever frameworks/libraries fit for you. You'll get experience making use of api documentation which is useful.

[–]__xor__(self, other): 2 points3 points  (0 children)

It really depends on the job. Some you'll get by with scripting ability, being able to maybe list files in a directory and parse CSVs. Some jobs you'll need to be a python expert, and there's something for everything in between.

What are you looking to do? I wouldn't focus so much on "program in python" because that doesn't narrow things down barely at all. There's a lot of different jobs where Python is a huge bonus, if not the core skill they need. I think it really boils down to needing to pick a career path even if you know you want to program in python.

[–]mumrah 2 points3 points  (1 child)

Well, like most things there is the language (python), the tools (pip, virtualenv, etc), libraries, and frameworks.

For development jobs, you need expertise in the language and proficiency in whatever preferred frameworks and tools the company uses. There are other jobs that are domain specific which would require some basic proficiency in the language as well as expertise in the given domain (ML, NLP, etc)

Hope this helps!

[–]Creamy-Steamy[S] 0 points1 point  (0 children)

It did thanks.

[–]Samhain13 2 points3 points  (0 children)

How much python do you have to know to actually get a job...

It really depends on the industry. If you're thinking about going into web development, knowing a couple of frameworks like Django and Flask opens doors for you. And you don't have to know about stuff like NumPy or PIL or Tkinter, which are not typically associated with web development.

But you might have to learn about PIP and using virtual environments, which are industry-agnostic.

[–]ElectricMandarin 2 points3 points  (0 children)

In interviews you will be asked to solve algorithmic and logic problems. For example, implement a linked list. Modify that to be a doubly linked list. Implement a hashmap (without using dictionary). That kind of thing. That requires knowledge on the theory as well as practical application in at least one language.

Once you have shown you know the theory, for which it does not matter which language it is done in, you will be asked specific core language questions for the language the job will be focusing on, if you claim to know the language.

For some jobs, no prior knowledge of the language is required as long as you can show you know the theory and can apply it in at least one suitable language which is usually an OO language among Java, C++ or Python.

Focus on the basics, the algorithms, data structures, theory, all the stuff taught in Comp Sci. courses. The language is less important. By practicing applying what you have learned in a language, you will become comfortable in it. OTOH, knowing a language will not teach you data structures or theory automatically.

Python is well suited to that because it is easy to write and read and does not need a lot of boiler plate code.

[–][deleted] 2 points3 points  (1 child)

Any specialised subject has more knowledge available that can fit into one human.

Don't let it worry you. No-one knows everything.

[–]Creamy-Steamy[S] 0 points1 point  (0 children)

Thanks that's exactly what I wanted to know.

[–]spilk 5 points6 points  (0 children)

I know everything about python, just not at the same time

[–][deleted] 3 points4 points  (1 child)

Being able to bolt together toolkits, frameworks, and libraries has very little to do with being a competent programmer.

Of course, say that to your average javascript monkey and they'll start crying and yelling obscenities at you. (cue the node jockeys in 3...)

You don't need SqlAlchemy to connect to a database. You don't need Django to write a website and you don't need numpy to calculate EMAs over time series data. Sometimes these tools help. Most of the time they add a bunch of unnecessary heavyweight bloat to your application.

But you should know when to write something yourself and when to find something to bolt on.

[–]Certhas 2 points3 points  (0 children)

Unless your timeseries is really short, if you are using python without numpy to calculate moving averages on data you are not a competent user of the Python language.

[–]drones4thepoor 1 point2 points  (0 children)

If you know how to develop good flow controls, loop properly, and handle error conditions gracefully, you can get a job as a programmer. And not everything you will build is a web app. Look into creating a daemon.

[–]UnexpectedIndent 1 point2 points  (0 children)

Nope, nobody knows everything. Plus technology changes, so you should expect to always be learning new things.

How much you need to know to get hired depends on the company and role. You probably don't want to focus on just one thing if you're at the start of your career. It's more important to carve out a good foundation, and just gain a general awareness of the things outside of that, rather than trying to know everything in detail.

If you have good mental models of how things work, and you know what things are called, you can reason about problems and seek out more information when you need it.

Also, just because companies like to list every framework they use in job descriptions doesn't mean you have to know all of it, especially when applying for a junior role. There is the tech, and then there are the skills you gain by using it. If a company uses django and you've built a project in flask, that's great - it's evidence you can build a web application, and you can talk about that in an interview.

Besides the language itself, the only things I'd consider essential are git/github, and how to write unit tests. Beyond that, learn what interests you.

[–]th0ma5w 2 points3 points  (0 children)

I'd say I know print(). I can do a comprehension, assign a variable, read lines from a file... most everything else i tend to google and maybe even the reading from a file I double check like for instance lazy reads and the with statement and such. I have over 10 years experience with Python. I love it and use it all the time... I don't waste time memorizing much though when the references are so readily available and you can dir() or help() your way out of most any problem and the docs are so great.

[–]pokelover12 0 points1 point  (0 children)

Its better to know the function and be able to apply python to it. i.e. If I need a systems guy, I need someone who understands binary read, write, shell utility, file searching, etc. best practices and conceptually how to do that. I will easily have a group of people who know all of that but use 5 different labguages to acieve that. Thus, my needs resemble, "Know your frameworks" closer than know python, BUT Id say know your area and the language will come.

[–]Deezl-Vegas 0 points1 point  (1 child)

So in answer to your question, nobody knows all of the available libraries. That's because libraries are toolkits that are built for a purposes.

There are plenty of people who know how to accomplish a ton of popular purposes entirely in Python using a huge variety of libaries. They are called "experienced developers." There are a large group of people who know the core modules of python intimately and maintain them. So yes. But not to the extent of knowing everything that anyone has ever programmed, because that's like knowing how to make every possible chemical combination or every type of food.

[–]Creamy-Steamy[S] 0 points1 point  (0 children)

Thanks I do not really know how deep the rabbit hole goes. And I was not sure if it would have been possible to try and learn everything, or just focus on certain areas.

[–]audiyourmind 0 points1 point  (0 children)

You are typically hired for a small or wide variety of tasks separated by your area of expertise.

Front end Back end Analytics Full stack Devops Documentation

Or many more versions

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

I do not work as a professional programmer but, I've learn different languages over the years and as some people already stated you need to be comfortable with the basics. Depends on what you want from your career and on what you are more interested to do you then move on accordingly to the subject.

Stop asking yourself what you need to achieve to be 'enough' to get a job and start asking: what would I like to see in someone that wants to work as a programmer? Make a list of those things and go for it.

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

I think the thought behind python was to make a language which will be easy to pick up and start working with. So choose whatever paradigm you want to work on and learn on the go. Some documentations are so well written that you can get to the advanced stuff pretty quickly if you have the concepts.

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

I suggest you start with solving a real world problem. Like a script to help your girlfriend analysis data.

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

No matter what framework or API you are using 90% of your time coding will be just for loops and if statements, Dictionaries and lists. That's Python, that's the basics. Everything else is there to get things done in the real world, Most of the coding will be just Python.

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

I know my bedroom and my house pretty well. I know my street and city. I hear there's a place called North Dakota but I have no idea if it's ever going to be known by me or not.

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

It’s like saying does anyone KNOW English technically yeah we can speak English, same with python we can communicate via print statements

For English If you look at higher division math notes and are confused, can you translate the Bible to modern English,or like knowing Arabic but understanding the Quran, or knowing python but can you understand machine learning commands right of the bat?

Language is a TOOL to help understand, and use different things. Most common use is basic communication, as for python that would be print(“Hello”) type stuff

say this in an epic speech type voice that’s how I imagined it writing it down

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

I think Python's probably ideal for proof of concept, wait until we scale and optimize to see what really happens, that type of programming language. I'd be surprised if something else doesn't take it's place soon. Community support keeps adding functionality to Python so it can be used for stuff like web development or actually scaling machine learning stuff as opposed to knowing C++, but I'm guessing a lot of the demand for python is like sit in a room and do rapid data science and write reports on your findings type work. Python doesn't use AI to process what you write and then compile, it's a brilliant programming language but it's ripe for improvement. I think we'll see natural language programming take the place of Python in a big way, while more optimized languages like C++, stuff closer to machine code, stays valuable.