Hacker News new | past | comments | ask | show | jobs | submit login
ASK HN: What should a Python developer learn next?
13 points by everydaybro on Jan 8, 2022 | hide | past | favorite | 25 comments
Hi everyone, I'm a freelancer in python, and I want to learn other things. currently, I only know python, js. what other technologies that will help me move forward?

P.S. I'm not a professional in python, and I probably need to learn it more. but I just want a new useful thing.

I've started my career with Python and after doing some Typescript for a while I've really fallen in love with Scala. The syntax in Scala 3 is very readable (after dealing with the initial discomfort of a new language) and the language feels, in same ways, like a natural evolution of Python.

Having the possibility of using the whole Java ecosystem is also a huge plus. It's definitely not a perfect language but it shares some strengths with Python and it's a great language for "larger" projects.

Scala is one of the only languages that I've missed after using Python for the past few years. (When I look for jobs, I mostly look for Python and Scala jobs rather than other languages I've worked in.)

Other comments point out that you should try to dig deeper into python. That's fair. But if you've only worked in a couple languages, learning a new language will give you more perspective on the languages you already know.

Learning any other language will probably be helpful, but Scala is an easy recommendation to make. It'll force you to learn new things, and it's a pleasant language to work in once you get used to it.

Do you really know deep python? Things like async.io? Frameworks for parallel processing such as Dask? How about even how to do deep learning with Python (Pytorch, Tensorflow). How about NumPy, Pandas, Scikit-learn? How about interop between Python and native code? I have a feeling that you can get more depth rather than breadth. I'm a breadth kind of person and wish I focused on depth early in my career.

A lot of what you listed is frameworks and libraries. I think a person can comfortably say that they know a lot of Python even if they've never touched most of them. Knowing a language well is different from covering all the possible libraries, frameworks and use cases.

If someone wants to get a bit past beginner in Python, the two general directions are to learn more about how the language works internally (Fluent Python is a great book for it), or to learn more about how to write Python well (Effective Python is a great resource for best practices in Python).

I do have to respectfully disagree but would say it is a gray area in some cases. Knowing a language well is more than just understanding the basic abstractions given to you by the standard language. In the case of Python, ideas in the async libraries eventually went into the standard. If someone does not understand asynchronous programming, would you consider them an expert Python developer?

Here is another argument. Is someone really a fluent C++ programmer if they have no idea what Boost is? Or STL? You are right that this set of libraries has a grey area. For example, I'd consider someone an expert C++ developer even if they did not know CUDA.

So what is the gray area for Python? Does an expert Python developer need to know a specific web frameworks like Django? To your point, no. But IMHO they should understand at least one example well, and understand some concepts such as WSGI.

You're singling out the async example while I was referring to the 3rd party libraries you listed. Of course you're always understanding the language through some use case (web programming, data science, ML, whatever) and that will require to learn the relevant libraries but adding another use case or a different solution for the same use case doesn't necessarily teach you more about the language.

My point is that OP can stick to the use case they're already working on and still get better at Python (that's what the resources I pointed to help with).

You will see a lot of anecdotal opinions, obviously, as each persons advice will come from their own history but I'd like to echo the comments that there's no real linear path of what you "should" do next after learning Python. You have endless opportunities.

My own 2 cents would be that I would recommend sticking around before moving on. Learning one language until you're fully proficient as you said you're not yet "professional in python", find problems that you can solve so you get used to solving the actual problems not working on learning the language syntax. Python is incredibly versatile and you have endless projects available to you. Once you have done that, you can start to consider what languages would've made sense to use for the project, what would the advantages/disadvantages be and try to pick the most appropriate language for each project.

Great answer.

Whatever you want. Really.

There isn't a "I've done language x so now I'll move on to y" progression chart anywhere.

It's more about what languages you like to use, what you would like to work on, what you're curious about, whether you want to be using that language at work some day etc.

I'd say docker and sql. If you have some base that you want to build upon, extend the stack so that you are more versital and can handle issues around the stuff you are working on.

Second this, especially if you're doing web development right now. SQL is great (start with analytic-type query), or even dig deeper into the SQLAlchemy/Django/whatever ORM you're using.

You could learn about basic anomaly detection systems or simple recommendation engines.

At a simple level this is language agnostic although at a higher level you should use Python for machine learning.

As for specific technologies possibly Rust which is like an OCaml and C hybrid.

If you wish to think differently I recommend Haskell and Coq but these are not 'useful'.

Any recommendation of how to get started with recommendation engine and anomaly detection ? Should one grok all the math pre-reqs before starting with them, or can pick the math as we go along ? Appreciate your inputs.

I am not an expert or industry practitioner of either recommendation engines or anomaly detection, just I meant simple and useful things to add to a website.

Suppose your website has posts and you want to flag posts when they have abnormally high likes because they might be great reading or complimenting your new release. You could collect a dataset of likes after a day, X, of each post. Then calculate mean and variance, fit a normal distribution[1]. Then calculate z such that P(X >= z) = 0.01 (1%). z represents the cut off point at which typically only 1% of posts are above. Then when a post is above z say 1000 likes then you see what all the fuss is about.

I am just talking about applying 16-18 school maths in a simple way, to point out unlikely events. Of course the distribution of likes may not look like a normal curve if you plot (number of posts with x likes against x) so a different distribution may make more sense. It may not be a perfect model but just a quick and dirty thing to try, :).

Personally I enjoyed completing the free Andrew Ng Machine Learning course[2] on Coursera which covers this and quickly training a simple recommendation engine for movies. It also covers multi-variate Gaussian distributions if you want to flag based on more than one criteria. For this course, the maths is relatively accessible and they go over what you may have forgotten so you can pick up maths as you go along.

Of course you can go far more complex if you like but I don't know much about that.

[1] Normal distribution https://en.wikipedia.org/wiki/Normal_distribution

[2] https://www.coursera.org/learn/machine-learning

I would not focus too much on “technology” but more on its applications. Maybe you want to have a look into electronics, machine learning, cryptography, network protocols or something like that.

With some literacy in Python you are well equipped to proceed to a more problem-solving focus.

Read the [Hissp][1] tutorials (find the docs). It shouldn't take a Python dev too long. It will deepen your Python knowledge and give you a gentler introduction to the world of Lisp because it uses the familiar Python vocabulary with Lispy syntax and then introduces macros. After that intro, and given your JS experience, you should be able to pick up ClojureScript without too much trouble.

[1]: https://github.com/gilch/hissp

With already knowing python and js it might be interesting to learn databases and web servers next. I would reccomend postgres and nginx. They'll connect up nicely with python and JavaScript and you'll be working with a whole stack top to bottom.

Another fun place to explore might be libraries for either language. Both have rich ecosystems of thousands of libraries that connect up to various things in the physical and digital world.


You could try Rust, it’s a bit more verbose and complex than Python but it’s a very loved programming language. The most loved one according to the latest stackoverflow.com survey.

Note: not a phyton, but PHP programmer here I also recommend Rust, learning Rust just for little bit may change how you think and tend you to make better decisions when coding with language you are familiar with.

I second the answers saying to bother on what to build, the how will follow, and that there is not hierarchy of languages. Js/Ts, rust, C++ are perfect choices. But maybe Go can be easy to take on after python. It all depends on what you want to build.

Check out Common Lisp. Many of the concepts they designed in 80s and 90s have made their way to python in some form. Also, much more efficient runtimes and a more useful type system.

Peter Norvig's book seems like a good introduction.

Learn something that's also useful for your career. Win-win.

I mainly work with python but I’m currently learning C#. Lots of love for both languages and plenty of resources.

Just build interesting stuff, you will learn all necessary tech in meantime. I suggest fast.ai course


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact