The State of Developer Ecosystem in 2018(jetbrains.com) |
The State of Developer Ecosystem in 2018(jetbrains.com) |
Great to see Java is still #1 Hah!
It's installed on virtually everything already. It's one of the easiest languages to learn (the basics), and is used as a teaching language. Even outside of CS everyone knows it.
Used in web programming (Django, Flask, etc.), numerical computing (Jupyter, numpy, scipy, pandas), AI/ML (TensorFlow, scikit-learn), bioinformatics, easy bindings to EVERYTHING (openCV, bullet physics, kafka, zookeeper, protobuf, json, xml).
It's usually concise enough, mostly straightforward to read, reasonably structured (though big codebases can become a pain). In most companies you see python used in tooling ALL THE TIME. It's fantastic for ducktape programming; often 'promoting' a largeish bash script to python. It ate perl's place there before.
I've even seen ipython work well as a login shell. Jeezz.
Sure the 2.7 -> 3 thing was a ton of drama, the package manager situation changes ever few years, but hey: a lesser language and ecosystem would have fallen apart under it.
Disclaimer: I'm a Java+Python fan boy in all their incarnations.
Yet not mention of jython :)
For data science and machine learning, it makes sense because the most popular packages are all in Python at this moment (strictly speaking, they have interfaces in Python but the underlying native code is in C++).
For academics who do data analysis and scientific computing, the last few years have seen an explosion of scientific packages available in Python. The major packages, NumPy/SciPy/matplotlib/pandas, also become more feature-complete to the point that one can do everything that is used to be done in MATLAB now in this set of packages. That's free MATLAB with better performance and more potential for optimization. No wonder people are switching to the Python ecosystem.
And Python is becoming the first choice for the Machine Learning and even Data Science.
Is that really the case? I mean I adopted Python and Flask for web work quite awhile ago, but I still see a lot more Ruby web devs around here than anything else.
Data analysis 52% Web development 45%
And most popular libraries :
NumPy / matplotlib / SciPy / Pandas and similar 47% Django 45%
It's a virtuous/vicious circle, depending on what you think of Python. But I think "Python is for ML" is the unofficial motivation behind a lot of it, because if you're starting to build your career and Python is an option then for sure you're going to mess around with scikit-learn and put that on your CV.
[edit]: Oh and boto3 probably accounts for a fair amount of Python use these days. I actually prefer the AWS support in golang but boto3 usually "just works" despite some very weird quirks.
* The outstanding documentation site.
* Execution speed for an interpreted language.
* Highly transparent language evolution, managed by the nonprofit Python Foundation.
* Semantic versioning.
* Core developer communication is in English.
* Excellent module definition and import system.
* Culture of explicitness, not implicitness.
The ecosystem has a few huge weaknesses (e.g. packaging and dependency management) which put me off for the most part. But the strengths seem to be overwhelming enough to put Python on a success trajectory.
Just curious, is there any popular programming language whose core developers communicate in a language other than English?
The amount of crazy stuff he teaches with python is amazing. No other language can promise that calibre of idea expressing power coupled with ease of development.
I'm personally not a big fan of Python at all (actually I hate it), but one can't deny its overwhelming dominance in those spaces.
I feel that it's only just starting to grow, and will continue to get bigger.
If you can get really really good interop you can throw away half of Spring, Guice, dependency injection, etc.
You can use python code as your configuration format. Have it set everything up. Glue all of your Java pieces together for your service. Runtime is and critical paths are all Java.
That's the dream anyhow.
The MAIN things that bother me: * Slowness * Enforced rules on whitespace * Incompatibility between 2.7 and 3.x * The fact that many tools still use 2.7, making something virtualenv necessary at all * Needing both pip and conda (i.e. to try Caffe) * Extreme dynamic typing means code completions are often poor or of little help * Windows support often lacking
There's actually a _lot_ more, but for the sake of not hijacking this thread, I'm going to stop my list there.
Anyways, those are just my personal preferences; I don't expect those to be reasons for other people to not like Python.
The book is written for Python 1.5, but win32 hasn't changed much and neither has the core Python syntax, so it's still very much applicable. (The one major difference is that the book had to concern ifself with converting Unicode strings everywhere, whereas in Python 3 with current pywin32 it just works.)
[1] https://www.amazon.com/Python-Programming-Win32-Windows-Prog...
If anyone complains about Python performance and don't use PyPy....they are poking themselves in the eye.
That’s another thing on the list - I don’t like needing multiple versions of the interpreter installed.
Now you know one :)
But I believe I was wrong on this one. A quick search on a page I googled for "best coding bootcamps" led me to this page[0] where a quick ctrl-f showed the results: Ruby = 34 results, Node = 18, Python = 12.
Lambdas are best replaced with `def` in Python - you can define a function anywhere and naming it has advantages. It's a tiny bit more verbose, but in any situation the "crippled" lambda isn't enough, it would probably be less clear in a single expression anyway. I get the arguments that it's less expressive this way, but honestly, it's one of those cases where I think it generally increases code quality.
There is absolutely a ternary operator, it just uses a different order and keywords rather than symbols - `x ? y : z` is `y if x else z` - I think this is much better - it reads much more obviously, uses the keywords from the `if` construct it has the same basic functionality as, and isn't symbol-based, which is always a huge pain point for people working out what the ternary operator is for the first time in other languages. I'd argue this is a place where Python is more expressive than other languages.
Self everywhere is debatable - I get why it's a pain point, but it also does decrease magic and I find new programmers actually pick the object system up quicker thanks to it. I think I wouldn't do it if I was designing a language, but it's not the worst thing ever.
The rest have pros/cons but I'm generally more aligned with, but no language is perfect. I think Python is one of the best, particularly as a first language - a lot of the problems people complain about (including your list) stem from familiarity with other languages that do things another way. Python is more opinionated than most languages in terms of having right ways to do things.
It's interesting, because I like languages on both ends of that spectrum - Scala is so not-opinionated there are a lot of ways to do anything, and Elm is so highly opinionated there is almost never another way to do something.
I think in general though, a language should be opinionated, because consistency and readability are generally more important than writing it. I think Python is exceptionally good at that.
... Because I hate Python, haha. Anyways, for the most part, I have to suck it up and just use Python.