2019 Python Developer Survey
pyfound.blogspot.com
pyfound.blogspot.com
As an embedded stick-in-the-mud Python2 developer, I'm mildly frustrated. It seems that the python community has been taken over by people trying to compete with NodeJS. Other use cases exist!
The fact of the matter is simply that Py3 has established itself as the main version of the language, and that datascience and web are two sectors where Python usage is currently ballooning. It may or may not stay that way in the future, but that’s how it is at the moment.
Probably the biggest reason to use Python back in early 2000's.
> embedded stick-in-the-mud Python2 developer
Python (CPython) is also getting crowded out on the low-end thanks to native languages getting easier: Rust, Go, even modern C++.
I'm also not fond of the nodejs style "download another copy of these 300 microlibraries and compile them all".
Should Python2 be consigned to history? Should C have been? I'm not so sure now. Python3 has a lot more to know, but not necessarily a lot more that's useful for what I do.
Python 3 is pretty similar, but nonetheless is very different, thinking of it as the same language will cause you grief. Modern advice is to use the 'python2' and 'python3' commands--never just 'python'.
I'm still surprised that python survived it, the update was so incompetently done. Just the huge amount of wasted developer resources on this mostly unnecessary update is staggering.
And even then there is stuff like implicit conversions or the ?: operator, whose semantics differ between C and C++.
I still occasionally see people trying to compile or link C++ with 'gcc'. Does that work? Maybe or even most of the time, but doing that is a sin.
I’ve been using python for 15+ years, writing production tools, yet I’m not a developer and this is not the focus of my job. I expect there are vast numbers of Python coders out there who develop meaningful tools using Python and know the language well, but whose main activity is not software dev.
Clearly, the survey reflects the audience targeted by JetBrains i.e. web and data scientists - whatever the latter really means.
Nice concise, adaptive survey.
* the syntax is obtuse and limited on a completely arbitrary restriction of not wanting to extend the parser. (The idea of decoupling type annotations from the type checking implementation is completely insane)
* in most situations you will not know if mypy actually does anything on any given line of code or silently ignores it. There are some options to enable more strict checking but that is almost completely useless because...
* most/all libraries (even standard library) packages have none or very few type annotations (stubs) available and this will likely never actually get better due to its aforementioned incompetent design.
* there is a huge amount of tiny little annoyances and mistakes in the design of the type system you will stumble on when working with it on any large scale
* the mypy type inference (or lack thereof) is terrible, compare it with type inference in C++ (auto) or Rust to see the difference to a competently done type system.
* the mypy software itself has a history of a huge amount of bugs and regressions speaking to its immaturity (1,130 open issues in github at the moment)
I feel most people who will defend mypy no matter what, have probably not had the "pleasure" of using it in a significantly large codebase.
But... I still use it, people should still use it, shitty static code analysis is still better than nothing.
I’ve been thinking quite a bit about how it seems that despite how fun Python is to write the dynamic types are really just a determinant with upsides that are essentially anecdotal. Why would one take a performance hit and give up a type system without hard evidence that there would be significant improvements to other metrics?
You are asking for hard data on a badly defined question. What kind of benefits are you talking about? Does learning curve count? Does speed of development and prototyping count? Does lack of build/compile cycle count?
If I want to run analysis on some data or play around with a machine learning model or actually do any other "I just wanna see what happens" type of experiment, python provides a lot of advantages over a lot of other languages.
If I want to create a simple set of REST style fetch-from-db-and-return-JSON APIs, python is great. There are other options, like Go and Node, but Python is pretty good.
There are other scenarios like this, but these two are the first ones that come to my mind.
I am currently working on a medium sized python project (about 25K LOC or so) and I am starting to think of rewriting some of the key pieces in a compiled, statically typed language for better performance and maintainability. But I feel that at this size and smaller I still have the benefits of quick development cycle.
Different strokes for different folks, my friend.