S Haskell, Rust
A Python, C, Go, Julia
B Prolog, Assembly
C C#, Java, C++, Scala, ML
D Ruby, Groovy, R
F LISP, XML, Bash, VBWhere do you put JavaScript? For me it’s an F.
Python I think needs a distinction. It’s an A for small projects that can be owned by a single person. But a C for projects large enough to warrant multiple developers. Dynamic languages don’t scale without a huge amount of extra tooling.
The Python ecosystem gets a B. But the environment gets a D. https://xkcd.com/1987/
Deploying a Python application can be a headache, but it's a good replacement for Bash and in DevOpsy scenarios where you're packaging Python along with an entire containerized OS and interacting with the web, Python works well. I find it pretty easy to prototype a webservice with Python, or to build tools for networking engineers. The fact that it's relatively easy to learn, yet readable, also makes it a good language to connect to people with. I can't always sell people on a strongly type functional programming paradigm, but it seems every reasonably young person knows Python these days.
But you're right, Python is a bit annoying at times, even though I like it's terseness and intuitiveness.
And environment... It is complicated. It is not that it is that bad, however it sure lacks some polish. The solution is not easy either since even if you solved the problem today (like using poetry), there is still the whole backwards compatibility problem.
There is various hacks to make things easier, however in the end the problem is still more complicated than it should.
When I need blinding speed I can use nuitka to compile python scripts.
On the rare occasions needing speed and cross platform coupled with my lessons to avoid wasted effort I turn to Lazarus/fpc because code is simple and Lazarus takes care of the target platform stuff so I don't have to.
For IOT bare-metal stuff you can't go past C. It just works and after learning it's quirks you will see how other IOT tools are largely hacks or compromises to avoid learning C.
I was looking into building this for something my company needs, but then a Taiwanese company approached me about a low cost industrial modular linux device with hotswappable i/o they're developing. At this point I just shrugged and figured that seemed a lot easier than building a better wheel.
The thing is, I can use a $400 modular linux device because my market can bear it, but I was looking at developing the other set of features for inexpensive micros. Virtually every market can bear the cost of a $4 chip. </rant>
I apologize for the rant, it just physically pains me that this doesn't exist, and that embedded development is so primitive.
That's a bold statement. Also I feel like he's missing a few cons for Python:
* The 2/3 mess (yes it is still a thing)
* The insane packaging situation. Packaging a Python app is a nightmare.
* Dynamically typed
And some extra cons for Javascript:
* The insane prototype system
* Basic things are broken and have never been fixed: ===, type coercion, still no 64-bit integers as far as I know.
* Dynamically typed
> Assembly: Too low-level. V verbose. Kinda confusing. I choose Python.
Lol when would your two options ever be assembly or Python??
Not a bad list though.
It's still a thing for the (loud) few who couldn't manage to move to 3 after 10 years. The rest just went on. The ecosystem is on 3 [0] and it has been for years now.
> The insane packaging situation. Packaging a Python app is a nightmare.
The packaging story in Python is in the middle of a big transformation from legacy tools to modern npm/yarn/cargo-like tools. pipenv [1] and poetry [2] are the most popular contenders. It will take a while until the community settles on this, but both tools work already.
[1]: https://github.com/pypa/pipenv
[2]: https://github.com/sdispater/poetry
> Dynamically typed
Python 3.5 introduced type annotations. It is now possible to write statically typed code in Python via mypy [3], which from my experience works similar well as TypeScript works for JavaScript.
I haven't met a programming language that I hated, and find them all pretty similar. My ranking criteria is different as a result. Top metric is "keeping the lights on", then my second metric is what it enables me to (easily) do. My main technical requirement is that it has good tooling, well-supported (no breaking versions), and is fast, because software always gets extended and ends up longer lived than first intending.
I'm originally from a small city, and may one day return. C#/Java let me keep the lights on for decades going forward in any locale. I also don't have any complaints with those languages and their chosen abstraction layer, which I think Java nailed for most business applications in the 90s and the target hasn't been better hit since.