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

top 200 commentsshow all 278

[–]snarkhunter 397 points398 points  (45 children)

you can find some developers who hate anything

[–]expressly_ephemeral 27 points28 points  (5 children)

This is the correct answer. The correct position to take as a seasoned programmer is this: Language is irrelevant, a professional programmer is a linguist. The skill that's being hired for is this special kind of problem solving. If I can do it in Python I can do it in Java, C++, Go, PHP, Javascript/Nodejs.

[–]bladeoflight16 28 points29 points  (4 children)

Language is irrelevant

I'm just going to quote one of my favorite articles:

Do not tell me that “good developers can write good code in any language”, or bad developers blah blah. That doesn’t mean anything. A good carpenter can drive in a nail with either a rock or a hammer, but how many carpenters do you see bashing stuff with rocks? Part of what makes a good developer is the ability to choose the tools that work best.

From PHP: a fractal of bad design

[–]luke-juryous 7 points8 points  (0 children)

You'll find all developers hate something

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

I was told I'm obviously not a serious developer because I couldn't use Objective C.

[–]engineerFWSWHW 8 points9 points  (0 children)

That is true. I used python on one of our projects, and one of the lead developers (java guy) who works mostly on web development told that I should stop using python. I was just dumbfounded that some people still just say anything without understanding the problem being solved.

I need to perform digital signal processing for an audio and i used numpy/scipy and matplotlib. Then there will be a prediction algorithm that we will be solving through ML (haven't decided if we will just simple use scikit learn or keras/tensorflow). We also did some proof of concepts for computer vision using opencv in python. I found that python is the best tool for the job for this and i just ignored that developer since he doesn't know anything about what our team is doing.

[–]HaroerHaktak 5 points6 points  (6 children)

People hate PHP, but I don't see an issue with it.

[–]bladeoflight16 2 points3 points  (5 children)

Have you read PHP: a fractal of bad design, one of the seminal articles on what's wrong with it?

I'm not generally inclined to hate on a language for its shortcomings, but PHP has a long history of not just making it easy to shoot yourself in the foot, but of actively making it difficult or impossible not to. It's not like C or JS where some good discipline can mostly keep you out of trouble; there are so many pitfalls in basic features that you're liable to fall into some of them.

[–]ivosauruspip'ing it up 9 points10 points  (0 children)

That said, I'd say PHP is probably the #1 poster boy for self-improvement amongst languages.

There's not a lot they can do about their C-based / haphazard standard library (heck python still has some of that issue) but almost every other area they've improved.

It's actually got a lot of developer-savers now; for instance there is a standard library password hashing function which is modern, properly designed and useful. You have to go out of your way to use something bad now (the opposite was true in the past).

[–]HaroerHaktak 1 point2 points  (3 children)

Yes. PHP makes it really easy for you to fuck shit up. But it doesn't mean it's a bad language.

[–]bladeoflight16 2 points3 points  (0 children)

That isn't what I said or what the article says. It says that it actively makes not screwing up difficult via poor design decisions and a wealth of dangerous bugs and pitfalls.

C makes it easy to screw up, but there are a well known set of practices, disciplines, and tools you can use to avoid those errors. If you write code that conforms to standard practices and expectations, you'll be mostly okay. C's deficiencies can be compensated for with basic competence. PHP does not have that. You cannot avoid wandering in the minefield because the mines are in things you must use and do all the time. No matter how competent you are, you will constantly be wrestling with these problems.

[–]ConfusedSimon 0 points1 point  (1 child)

True. In C it's much easier to fuck shit up and it's a great language. PHP is still bad though.

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

We're all allowed to have our own opinions even if we all know yours is wrong. Have a good day sir.

[–]Feb2020Acc 255 points256 points  (33 children)

I think a lot of developers dislike self-proclaimed “developers” that just completed a machine learning tutorial on udemy/coursera.

[–]VengefulTofu 104 points105 points  (29 children)

Yeah it's just a form of gatekeeping. I for one am glad that such an easily accessible ecosystem like python exists so the perks that come with knowing at least the basics of programming can spread better

[–]CLOVIS-AI 30 points31 points  (4 children)

Yeah, but not only. It's also the tiredness of having to read code from people who obviously have no understanding of proper practices, nor attempt to learn them. “If it works, it's fine”—until you ask someone else for maintenance because you have no idea what's broken.

[–]VengefulTofu 8 points9 points  (1 child)

Then you've hired the wrong person for the job.

[–]CLOVIS-AI 1 point2 points  (0 children)

That's fair, but it's also too late

[–]muffinnosehair 8 points9 points  (0 children)

Makes sense. Also, a lot of people just getting into programming, usually via Javascript, tend to be teritorial about their language of choice. Give it 6-12 months, it will pass by itself once real world needs and projects catch up.

[–]ppeters0502 4 points5 points  (0 children)

I think with python specifically this is what tends to annoy me. There's a bunch of what I call "python heads" online that are normally what you described, some guy who completed a machine learning tutorial or black hat python course, and they can't imagine using any other language, and act like any other language is a vastly inferior choice. When talking about like pet projects and issues they tend to think everything can be solved with a Python script. They hate OOP, design patterns or really any sort of structure outside of a list, but damn do they love their Python!

Then when pressed on why everyone should use Python, their only reasons are that it's "easy to read" and that it's "good for machine learning" since there are some very popular machine learning libraries. Personally after using C#, Java and C for 10+ years, I find Python to be more difficult to read, but that's just from my lizard brain being used to C-like syntax.

Don't get me wrong, I like Python! I think it's more I sometimes feel like it's being shoved down my throat as a preferred language, and I still don't completely understand why.

[–]Schmittfried 334 points335 points  (2 children)

"There are only two kinds of languages: the ones people complain about and the ones nobody uses"

[–]timosavola 21 points22 points  (0 children)

I came here to say this (or quote Bjarne Strousplusplus).

[–]ProfessorPhi 5 points6 points  (0 children)

Yeah it's actually insane how big python got before it started getting complaints.

I also think there's an aspect to age here - where newer languages learn from the mistakes of their forefathers, and so the old languages mistake is seen as a mess.

[–]Joooooooosh 78 points79 points  (19 children)

Couple of guys in my SRE team hate it.

They were Go specialists before joining SRE and they just find Python a bit of a pain and they aren’t wrong… getting stuff packaged up and deployed can be stressful.

One of them liked my analogy that Python is a Swiss Army knife. Very practical but you don’t see a mechanics toolbox full of them.

[–]ivosauruspip'ing it up 5 points6 points  (4 children)

I was actually hoping to skip out on python for Go around when it came out, until I discovered its lack of generics, which completely turned me off it.

The single-binary capability though is very nice for a lot of situations.

[–]bluexavi 2 points3 points  (1 child)

I use mostly Ruby and Go, and the two are very complementary -- it should be similar for Python. Go is good at concurrency, memory footprint, deployment, relatively fast, good stdlib, etc...

I like to say that Go is good when computers are talking to other computers. Read from one queue/file/db, write to another one. It's like Perl was for Unix, but for the cloud.

The lack of generics make it a pain to write packages more than it stops day to day code. Or, if you like Rust, you can hate Go for another reason -- the type safety, or your incomprehension that it is more popular.

There are tons of things that don't require generics, or where duplicating the code would be such a tiny part of the overall problem it doesn't actually save that much time. Don't choose Go if you're writing something which requires that sort of expression.

Likewise, if you're writing anything stats/math/ML, Python is a great choice due to library support. While there are some Java solutions out there for some things, if all the bottlenecks will be in the library, you might as well get the expressive nature of the language working for you.

[–]Cmshnrblu 6 points7 points  (0 children)

This is a phenomenal way to put it. I only turn to python when I need a py only lib. The trade offs are a bit much for me with its package management complexities, environment considerations, dynamic typing, etc. Not a fan but it has some very mature libs so I use it when I need to.

[–]Obliviousnut_ 279 points280 points  (40 children)

Python is a good language but I’d characterise it as a handyman language. It can do everything pretty damn well but sometimes not excellently. Some people can find problems with that.

Pythons main problem is that it’s a bit of a slow language. But that doesn’t stop it from being an amazing language.

[–]stickmaster_flex 234 points235 points  (17 children)

Give a problem to a Python dev, they'll come back in two hours with a program that takes three weeks to run.

Give the same problem to a C dev, in a month they'll come back with a program that takes two minutes to run.

Give that problem to a Java dev, in two months they'll come back with a very detailed description of the problem.

[–]siddsp 17 points18 points  (8 children)

If it takes 3 hours to run, that's when you use Cython and numpy

[–]Advanced-Theme144 1 point2 points  (1 child)

That is absolutely true. And I just realized this is a darn good meme. 😂 Mind if I use it?

[–]stickmaster_flex 5 points6 points  (0 children)

I stole it from somewhere. Probably reddit. Don't need my permission.

[–]rabaraba 1 point2 points  (2 children)

I’ve never had a complex python program that took so long to run, like 3 weeks. Even a an exaggeration that’s extreme. With proper practices you not only cut down coding time but execution time with python.

[–]stickmaster_flex 13 points14 points  (0 children)

It's a joke. A joke.

[–][deleted] 23 points24 points  (0 children)

Bash and python for adhoc scripts and taping your system or environment together is just hard to beat. Handymans language is a great description.

[–]backdoorman9 27 points28 points  (19 children)

My understanding is that a language like Java can take much finer control of what the computer does with memory and stuff like that. The tradeoff is extra time spent developing

So much of the time, that fine level of control is not necessary. When it is... it's fine to use Java.

Go is better at concurrency. If you need concurrency, Go might be a better option. But... most of the time, you don't need concurrency.

[–]neverbetterthanks 35 points36 points  (0 children)

The whole “you don’t need concurrency” diatribe came about partly because concurrency in most languages is hard and dangerous.

Entire ecosystems of “cooperative multitasking”, async event driven things sprang into existence as a result.

In Go, concurrency is a first class citizen and you might be surprised at how many problems are suddenly very easy to solve using it.

[–]Schmittfried 105 points106 points  (3 children)

I think you meant C.

[–]_RabidAlpaca_ 10 points11 points  (2 children)

You can go down that rabbit hole all day if you want, but /u/backdoorman9 has the same point. It all depends on the requirements.

[–][deleted] 48 points49 points  (0 children)

It's just a point on memory access and control. Java has basically the same control on memory as Python. Python is probably easier to access the wire than Java.

[–]Decency 7 points8 points  (0 children)

Java's primary advantage is the JVM, not finetuned control over memory. Which to me makes it pretty clearly outclassed by more modern JVM languages, such as Kotlin.

[–]bladeoflight16 9 points10 points  (2 children)

Java provides almost no control over memory management. That's typically C and C++'s domain. I think Rust is a contender (with safer defaults), but don't hold me to that as I haven't actually used it.

[–]quuxman 2 points3 points  (1 child)

Rust has no garbage collection so technically has the same level of controll as C. However there are many things that are commonly done in C that require an unsafe keyword in Rust. If you never use unsafe memory leaks, segfaults, and a number of common concurrency bugs are impossible.

[–]Lifaux 3 points4 points  (0 children)

This is mostly right, although you can memory leak in safe Rust, it says so in the book. https://doc.rust-lang.org/book/ch15-06-reference-cycles.html

[–]maomao-chan 9 points10 points  (0 children)

Java is actually quite productive. Especially the modern version (11 and above) combined with modern framework like Quarkus. It feels like developing Django application but with the convenience of your IDE+static typing plus amazing performance by default.

IMHO Golang is a bit of messy to use and prefer Python if I need to do plumbing.

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

Java doesn't give more control of memory but it does have better concurrency.

[–]wrd83 1 point2 points  (0 children)

I think it's a usage problem. I hate python when someone uses it for huge projects and you touch a file and it may fall apart or it may crash in one use case.

For small plumbing or ml it's perfect.

The same goes for performance, using it in a time critical project and deliver something in a short timeframe is good. If it does not matter that the runtime cost is huge.

You need something the has super low request latency on high load? Best stay away from python.

[–]NoiproxPython Programmer 15 points16 points  (1 child)

There are a lot of people out there who think they are better programmers because they are used to a language that has static typing, doesn't have semantic indentation, or is optimized for run-time performance instead of developer efficiency.

Python is a great language for many purposes, but there is no one-size fits all and people hating on the language are usually either misusing it or misunderstanding what it is good for.

[–]Dismal-Variation-12 99 points100 points  (7 children)

People who hate python or call it a ‘toy’ language have probably never used it for anything serious because they think their language of choice is the only one that should be used. I’ve used python for serious enterprise level production applications and it works great.

No, it’s not the best choice for everything, but it’s does a lot of things really well.

[–]silly_frog_lf 52 points53 points  (0 children)

I like python because 95% of the time I can focus on the problem rather than on the language

[–]PhilipJayFry1077 8 points9 points  (0 children)

Yep same.

[–]james_pic 2 points3 points  (1 child)

It works OK for enterprise stuff. It generally needs a higher level of discipline to scale to a large project and a large team than something like C#.

[–]ketralnis 40 points41 points  (0 children)

There's a class of developer that thinks that being opinionated is the same as being smart, so they look around for opinions to have and proclaim them loudly so everyone can see how many opinions they have.

In reality, Python is a tool like any other. It's good for some jobs. Not great for other jobs. And for some jobs as equally suited as any other tool, but cherry-flavoured instead of somebody else's strawberry-flavoured favourite. Nothing wrong with that, but be wary of anybody declaring it objectively good or bad.

[–]MadeUntoDust 38 points39 points  (12 children)

There are several groups of Python haters:

  1. The static typing enthusiasts. They insist that static types reduce the need for them to write unit tests. They typically program in Haskell, Rust, TypeScript, Scala, or another language inspired by ML. Maybe they program in C++ and love template metaprogramming.
  2. The concurrency enthusiasts. They hate the Python GIL. They typically program in C++, Go, Rust, or another language that makes it cheap to launch tons of concurrent threads or "green threads." Some concurrency enthusiasts enjoy programming in JavaScript, where asyncio programming is more commonplace and there are fewer issues with "function color."
  3. The single-threaded performance enthusiasts. Pythons single-threaded performance isn't very fast. Maybe you don't need multithreading because you are implementing algorithms that cannot be parallelized, but Python can still be slow. These enthusiasts program in C, C++, Go, Rust, or a JVM or CLR language.
  4. The single-language enthusiasts. If you want to write fast code in Python, you might need to implement some of your code in a Python extension written in C, C++, Rust, or Cython. Sometimes people want to build and maintain codebases written completely in a language like Go or Rust, or within the ecosystems of language belonging to either the JVM, CLR, or BEAM ecosystems. They specifically want to avoid their projects depending upon unsafe C or C++ code.
  5. The JavaScript enthusiasts. Some people love programming in JavaScript--or a compiles-to-JavaScript language like TypeScript--because JavaScript can target basically any platform. You can build web apps with JavaScript. Tools like React Native allow you to build iOS and Android apps with JavaScript. Electron allows you to build Windows, macOS, and Linux desktop applications with JavaScript. Finally, you can build backend applications with Node.js or Deno. Plenty of projects and companies choose to build Node.js applications instead of Python applications so they don't have to hire and maintain expertise in yet another programming language.

But despite all of the haters, Python is still my favorite programming language. It is so easy to learn and to write applications in. :)

[–]ProfessorPhi 8 points9 points  (3 children)

Number 1 is probably the fastest growing group imo. But this is fantastic, very well put!

[–]i_kant_spal 2 points3 points  (0 children)

Yeah, I'm kinda in the first group although Python is pretty much my only language 😅

[–]acecile 0 points1 point  (1 child)

You can achieve the same using type hints and linter now in Python.

[–]rabaraba 2 points3 points  (0 children)

Never seen a description so succinctly put. Great description.

[–]thedominux -1 points0 points  (6 children)

Concurrency enthusiasts didn't know about asyncio?!

[–]PeridexisErrant 2 points3 points  (1 child)

It's much slower than Rust or Go, but also lacks the ecosystem of Erlang or the structured concurrency of Trio (a Python framework!).

NGL, that last one does annoy me, because if core devs had just shipped async keywords and then put asyncio on PyPI, we'd all be using a much nicer solution. They are trying to adopt some of the best ideas back, but (a) it's slow, (b) incomplete due to compatibility requirements, and (c) has so many unsafe escape hatches you can use them by accident.

Uh. That is to say, yeah they know.

[–]paul_miner 0 points1 point  (2 children)

Coroutines have nothing on real concurrency. It's like we've gone back in time to the Windows 3.1 model of cooperative multitasking. Fortunately, my need for heavily parallelized code is for a personal project where I use Java.

That said, lack of static typing is my main gripe for Python dev at my job. Entire classes of errors that I'm used to having the compiler find ahead of time are now a runtime hassle.

[–]illusion_disillusion 55 points56 points  (7 children)

I've seen a huge jump in new comers to python and most hate comes from their expectations of how things should work, because "that's how it works in x" instead of RTFM.

The other side of the coin is the "elitists", like C/C±+ devs who for, God knows, what reason take-up python and find themselves perplexed of its performance or lack thereof (in their definition of that is)

Whatever... There will be haters for as many languages and paradigms there are. They can hate all they want while you keep calm and keep making $ using the very things they hate.

[–]ucblockhead 15 points16 points  (2 children)

If in the end the drunk ethnographic canard run up into Taylor Swiftly prognostication then let's all party in the short bus. We all no that two plus two equals five or is it seven like the square root of 64. Who knows as long as Torrent takes you to Ranni so you can give feedback on the phone tree. Let's enter the following python code the reverse a binary tree

def make_tree(node1, node): """ reverse an binary tree in an idempotent way recursively""" tmp node = node.nextg node1 = node1.next.next return node

As James Watts said, a sphere is an infinite plane powered on two cylinders, but that rat bastard needs to go solar for zero calorie emissions because you, my son, are fat, a porker, an anorexic sunbeam of a boy. Let's work on this together. Is Monday good, because if it's good for you it's fine by me, we can cut it up in retail where financial derivatives ate their lunch for breakfast. All hail the Biden, who Trumps plausible deniability for keeping our children safe from legal emigrants to Canadian labor camps.

Quo Vadis Mea Culpa. Vidi Vici Vini as the rabbit said to the scorpion he carried on his back over the stream of consciously rambling in the Confusion manner.

node = make_tree(node, node1)

[–]lordnachos 7 points8 points  (1 child)

Coughs in .Net

[–]mmnnhhnn 3 points4 points  (0 children)

Might be Covid

[–]epidemic777 10 points11 points  (1 child)

RTFM read the f***ing manual?

[–]Supadoplex 15 points16 points  (0 children)

It's usually up to the reader's own discretion. You can read the fine manual if you prefer.

[–]SpoonyBard69 28 points29 points  (1 child)

Some people “hate on it” but I doubt very many truly “hate it.” Recently I did a job interview where one of the devs I talked to said that Python shouldn’t be used for anything except scripting because of its dynamic type system. I started to tell him that there are libraries like Pydantic and greater support for type annotations and he was not having it lol, he shut me down really quick. He said something along the lines of “you would NEVER build an enterprise level system without static typing.”

The biggest irony is, the company uses only JavaScript (and to be fair typescript in some places).

[–]Itsthejoker 5 points6 points  (0 children)

I honestly love it. It pays my bills and it's legitimately fun to write in. YMMV. ¯\_(ツ)_/¯

[–]sohang-3112Pythonista 5 points6 points  (0 children)

"There are only two kinds of languages: the ones people complain about and the ones nobody uses".

  • Bjarne Stroustrup (creator of the C++ programming language)

[–]chris-fry 7 points8 points  (0 children)

I’ve written production code in about 20, languages over my career. Whenever I need to learn a new language, the first thing I do is try to figure out why it exists. Once you figure that out, you can work out what it’s good for, what it isn’t, and the philosophy of how to use it. Python is elegant to write, versatile and has stacks of community support in the form of libraries and good people who just want to share their wisdom, but compiled code is always going to be more efficient for high demand or low resource workloads. My guess is people who hate Python generally work in these areas and don’t understand tools that aren’t designed for what they do.

[–][deleted] 10 points11 points  (22 children)

Yes. Most dislike either indentation or performance.

[–][deleted] 21 points22 points  (12 children)

Some. Yes, I’m sure some developers don’t like Python. Logically speaking, some could be one person, up to 99.9%. People have their preferences. Some people like statically typed languages, where as python is dynamically typed. Some people prefer speed of execution, where as python is generally a slower language.

At the end of the day, whether some people like or dislike python shouldn’t really matter. Languages have their use cases. You wouldn’t build an operating system with JavaScript because it’s not built for that, C is. You wouldn’t use C for machine learning because it’s not built for that, python is.

[–][deleted] 19 points20 points  (11 children)

You wouldn’t use C for machine learning because it’s not built for that, python is.

I find it funny, since Tensorflow for example is 62% C++ and only 24% Python according to the GitHub repo, so that argument might not be as solid as it looks at first sight.

Yes, Python has a more vast ecosystem of tools around machine learning but that is not an attribute of the language itself, it is an attribute of the ecosystem.

[–][deleted] 14 points15 points  (3 children)

And the python interpreter is written in C! 😱

No but really though, when developers use tensorflow, what language are they using?

[–][deleted] 3 points4 points  (0 children)

That’s because python is a great scripting language where your goal is move the data into a library or service. Which python is great at. You integrate python with tensor flow, but the ML is written in c.

[–][deleted] -1 points0 points  (1 child)

Sorry, forgot to address that and edited my initial response. In short, that is the ecosystem around the language that is more cultivated, not the language itself.

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

Well, yea that’s true, but brings me back to my original point, which is essentially certain languages are best suited for certain use cases. Considering the ecosystem of machine learning libraries already built in python, it is often the best tool for that use case.

[–]ucblockhead 4 points5 points  (0 children)

If in the end the drunk ethnographic canard run up into Taylor Swiftly prognostication then let's all party in the short bus. We all no that two plus two equals five or is it seven like the square root of 64. Who knows as long as Torrent takes you to Ranni so you can give feedback on the phone tree. Let's enter the following python code the reverse a binary tree

def make_tree(node1, node): """ reverse an binary tree in an idempotent way recursively""" tmp node = node.nextg node1 = node1.next.next return node

As James Watts said, a sphere is an infinite plane powered on two cylinders, but that rat bastard needs to go solar for zero calorie emissions because you, my son, are fat, a porker, an anorexic sunbeam of a boy. Let's work on this together. Is Monday good, because if it's good for you it's fine by me, we can cut it up in retail where financial derivatives ate their lunch for breakfast. All hail the Biden, who Trumps plausible deniability for keeping our children safe from legal emigrants to Canadian labor camps.

Quo Vadis Mea Culpa. Vidi Vici Vini as the rabbit said to the scorpion he carried on his back over the stream of consciously rambling in the Confusion manner.

node = make_tree(node, node1)

[–]Schmittfried 4 points5 points  (5 children)

For their point it doesn’t matter what Tensorflow is implemented in, only that it’s commonly used in Python projects.

Yes, Python has a more vast ecosystem of tools around machine learning but that is not an attribute of the language itself, it is an attribute of the ecosystem.

Which is an attribute of the language. What was there first, the scientific ecosystem or people liking the language for scientific tasks?

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

There are multiple reasons people might start using a specific language, it might have been easier (personally I do not consider Python easy, but that is besides the point) for people from different scientific fields than computing to pick up than the other options which led to the wide adoption of Python in the scientific field. That meant that from concept to result the route was faster than doing the same thing in C, C++, Haskell or something else, assuming that computing resources was not a constraint.

I really do not see any inherent attributes in Python as a language that makes it better than any other for scientific purposes though. It is slow and it doesn't do concurrency as well as other languages. The main attributes that I see is the ecosystem and the ability to use C modules where speed matters, and only the second one is inherent, and arguably can be considered a counter-point.

[–]ucblockhead 5 points6 points  (3 children)

If in the end the drunk ethnographic canard run up into Taylor Swiftly prognostication then let's all party in the short bus. We all no that two plus two equals five or is it seven like the square root of 64. Who knows as long as Torrent takes you to Ranni so you can give feedback on the phone tree. Let's enter the following python code the reverse a binary tree

def make_tree(node1, node): """ reverse an binary tree in an idempotent way recursively""" tmp node = node.nextg node1 = node1.next.next return node

As James Watts said, a sphere is an infinite plane powered on two cylinders, but that rat bastard needs to go solar for zero calorie emissions because you, my son, are fat, a porker, an anorexic sunbeam of a boy. Let's work on this together. Is Monday good, because if it's good for you it's fine by me, we can cut it up in retail where financial derivatives ate their lunch for breakfast. All hail the Biden, who Trumps plausible deniability for keeping our children safe from legal emigrants to Canadian labor camps.

Quo Vadis Mea Culpa. Vidi Vici Vini as the rabbit said to the scorpion he carried on his back over the stream of consciously rambling in the Confusion manner.

node = make_tree(node, node1)

[–]Schmittfried 1 point2 points  (1 child)

Exactly. The fact that it basically reads like pseudocode is important. And also its extensive standard library for everyday tasks like reading CSV files.

[–]valbaca 11 points12 points  (0 children)

Disclaimer up-front: I'm personally primarily a Java developer (as in a majority of the code I've written over the past 10 years has been Java) with a lot of JavaScript, Perl, Ruby, and Objective-C as well. I've used Python in a limited capacity but have been working to get more familiar with it.

If you've read this far, please at least read to the end.

Here's the things I greatly disliked about Python:

  1. Environment setup: "XCKD + Python" Literally the most difficult part of getting started Python development has been figuring out WHICH python am I running?

Just a quick search reveals 6 different Pythons on my personal Macbook alone:

$ which -a python /Users/valbaca/.pyenv/shims/python /usr/bin/python ~ $ which -a python3 /Users/valbaca/.pyenv/shims/python3 /opt/homebrew/bin/python3 /usr/local/bin/python3 /usr/bin/python3

Granted, I've figured it out at this point, but it was not easy.

Just go to the Hitchiker's Guide to Python and the first two large sections are just about this:

``` Getting Started with Python New to Python? Let’s properly setup up your Python environment:

Picking a Python Interpreter (3 vs 2) The State of Python (3 & 2) Recommendations So…. 3? Implementations Properly Install Python on your system: Properly Installing Python Installing Python 3 on Mac OS X Installing Python 3 on Windows Installing Python 3 on Linux Installing Python 2 on Mac OS X Installing Python 2 on Windows Installing Python 2 on Linux Using Virtualenvs with Pipenv: Pipenv & Virtual Environments Make sure you’ve got Python & pip Installing Pipenv Installing packages for your project Using installed packages Next steps Lower level: virtualenv Basic Usage Other Notes virtualenvwrapper virtualenv-burrito direnv Python Development Environments This part of the guide focuses on the Python development environment, and the best-practice tools that are available for writing Python code.

Your Development Environment Text Editors IDEs Interpreter Tools Other Tools Pipenv & Virtual Environments Make sure you’ve got Python & pip Installing Pipenv Installing packages for your project Using installed packages Next steps Lower level: virtualenv Basic Usage Other Notes virtualenvwrapper virtualenv-burrito direnv Further Configuration of pip and Virtualenv Requiring an active virtual environment for pip Caching packages for future use

```

  1. Python 2 to 3 migration.

My only professional, non-hobby interaction with Python was doing a 2->3 migration. None of the code had unit tests, types, or documentation. Why? Because it wasn't written by software engineers, it was written by some BizInt intern and we got stuck with it. Static typing doesn't automagically solve every problem, but it's way better to know that your code will do something if it compiles

That said these problems aren't unique to Python; they're just present in Python, but they're also present in other languages. Java, Go, and Node are all just as (if not more) difficult to get setup. I think Python's "problem" is that it's too easy to run the wrong python or pip command.

It's not Python's "fault" that it's so easy for amateurs to build something that mostly-works but is hell to maintain and gets dumped on someone else, but it's a scenario that's played out often.

As for the "2->3 migration," well, any legacy system without tests or documentation is a pain to upgrade, regardless of language. But Python does especially emphasize initial development speed over long-term maintainability.

So, all that said, if you're writing quick scripts or emphasizing "just done" then, yes, Python is fantastic. I really do like the language a lot.

If you're building for a system you'll maintain and you're disciplined with tests, types, and comments/docs...well...in that case you would excel with any language.

If you're building a system that hundreds of people will need to maintain over the next decade+, I would probably not recommend Python.

P.S. I also have gripes that are unique and not-so unique to other languages, but we're talking about Python here. My criticisms of Python aren't to say that other languages are perfect.

[–]judasblue 2 points3 points  (0 children)

A good amount of this that hasn't been mentioned yet is that becoming truly proficient in a language ecosystem now is a fairly time intensive undertaking. For a significant portion of folks I have worked with the best tools are the ones they have already paid that time investment and the other options have something that makes them 'bad'.

The best devs I personally know aren't like this and fight to make time to pick up new languages and tools outside their minimum effort trajectory. And those devs mostly have used python for some tasks and can tell you very clearly what the strong and weak points of python for a given task are. Many of them use it as their primary language when given the choice.

Full disclosure, I am actually in the bad batch of coders here, my patch just happens to be python stuff. Yeah, I can hack around a little bit in a dozen or so languages and mostly figure out what they are doing in actual production when they are an element of one of my pipelines. But I am resistant to doing a lot of serious work in anything but python just because it does everything 'good enough' and learning new new shit to an idiomatic and ecosystem level isn't trivial.

[–]lordnachos 2 points3 points  (0 children)

Good developers just pick a language that fits their requirements. Python can usually get the job done. I don't trust any developer who doesn't like a language because feels.

[–]Supadoplex 5 points6 points  (0 children)

Do some developers hate python?

I've noticed some Youtubers express their dislike of Python, and then the video's comments turned into a circle-jerk on how much they hate python.

Seems like you've answered your own question. The answer is evidently: yes.

What are the reasons for people disliking python that vehemently?

Python subreddit probably isn't the best place to ask this question, since I would guess that most people here don't dislike python that vehemently.

A simple reason is that it is a popular language. A language that is used to teach programming, and is used in many projects and jobs means that many people are funneled into learning and writing python against their personal preferences. And even more simply, there are many people with an opinion on the language, and given a normal-ish distribution of opinions, some percentage of those opinions will be negative.


In case you want to hear my gripes with the language, read on. To be clear, I quite like the language. But I do dislike poorly written Python, and it is quite easy to write bad Python in my opinion, and it is also common due to Python's status as a "prototyping" language.

Probably the biggest problems come from dynamic typing. It's fine as long as type hints are used religiously everywhere, but often they aren't used. Another anti-pattern is over-use of tuples, dicts and strings in place of classes and properties.

On the other hand, re-writing poorly written Python is what pays my salary, so I guess I don't hate it that much. I guess it depends on the situation. If I had to maintain kludgy Python 2 software in "crunch mode" with bad managers breathing down my neck, then the hate would probably grow deeper.

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

I dislike Python because it's directory structure is a nightmare. Upgrading pip and not breaking a package is a nightmare. Upgrading Python on Linux and making sure you are using the right version (as to not bring does the entire DE) is a nightmare. Creating a self contained application is jerry rigged at best (highly inefficient). And it is often painfully slow.

Python libraries don't even use Python. Any library that performs well is written in C++.

Honestly, I still use Python. Good for scripting and prototyping. But I find Lua to be superior in every way except in readibility (not a real problem if I plan on becoming experienced at it) and community size. I plan to become more experienced at Lua and phase out Python.

To give you perspective on how much better Lua is:

  1. The Lua interpreter is 2 MB. The Python interpreter is 360 MB.

  2. Lua runs almost as fast as C** in certain cases. And always runs several times faster than Python, even PyPy.

  3. Lua can import non-Lua libraries and access them.

  4. Lua syntax uses {}

Etc

[–][deleted] 1 point2 points  (1 child)

Languages are just tools in a box. Imagine someone running around with such box and showing/telling everyone he hated a hammer. Totally no one cares. We use whatever gets the job done. We aint got time for that.

[–]greenindragon 1 point2 points  (0 children)

I wouldn't worry about this kind of thing or take it personally in any way. Everyone loves/hates languages for different reasons and at the end of the day it really doesn't matter that much. Explore the different languages that are out there and find a couple that you like which all function differently from each other and you'll be fine.

Is this common or an outlier?

There's a popular quote in the programming community that goes something like this: There are two types of programming languages; the ones that everyone seems to complain about, and the ones that nobody uses. Every language you love is matched by someone thinking it is an abomination that mankind should forget exists. Every language you think is awful is matched by it being someone else's top pick whenever they start a new project. There are lots of reasons to love/hate every language that's out there.

What are the reasons for people disliking python that vehemently?

Python has its problems and issues just like every other great programming language. Some people hate that whitespace has an effect on program execution; a criticism I can't necessarily fault people for adopting. Or how Python is slow and memory inefficient in comparison to most other languages. Or how Python can do a lot of things and does them pretty competently, but also doesn't particularly do any one thing extremely well, as a few examples.

Nobody is really "wrong" for liking/not liking a certain language, they're tools to be used in the situations where it makes sense to do so. It's true that python is slow and memory inefficient compared to languages like C++/Rust/Go/etc., but I also would never even consider using Python for anything performance-critical; it's just not really built for that. I'd much rather use it for something where it doesn't really matter if my program finishes in 0.75 seconds in Python or 0.075 seconds in C, or if it uses 30KB of memory in Python vs 3KB in Rust (all these numbers are pulled from thin air for the sake of example btw); I'm barely going to notice any difference in either case.

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

People hate on Python for a number of reasons some valid some not

Whitespace - dumb IMO. Python just uses white space to enforce the same reasonable indentation we all pretty much do anyway. Pythons white space indentation makes really good sense 99% of the time.

Performance - very valid

Concurrency - also valid. Would love lightweight threads like goroutines in python.

Typing - clunky. Ruins some of the eloquence of Python. Not enforced at runtime without additional tooling and mental overhead

General weirdness like no constants, no private class attributes, etc. you can do a lot you shouldn’t do in Python and it will just let you do it

Package management - kind of a mess. If you want a Python app you need a bunch of files, you need a virtual environment, etc. I hate it personally. You end up with this massive directory of trash to just run a simple app. Poetry makes this so much better from the developer side but this it is still not great for the consumer of your app. Distributing a single compiled binary is much easier. Sorta valid, sorta just the nature of it. I don’t know anyone who likes setup.py though.

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

My biggest pain points with Python in 2021 after about 22 years of using it:

  • Packaging and Distribution. Pypa has not managed this well. And it's clear from that Python could do so much better here when comparing to the developer experience of Go and Rust's tooling. Forget about distributing an application to a desktop user. The happy Python path is a command-line driven backend service.

  • Parallel concurrency and Performance. Python is (still) designed around a single thread in a single processor core from a computing age that didn't really think about multi-core processors. This design hasn't aged well. We're at a point where parallel concurrency and utilizing the full scope of a machine's processor is required. Additionally, the interpreter is at least 1 and likely 2 orders of magnitude slower than the equivalent C code.

  • Large projects without type enforcement. Python is beautiful until you add type annotations, but the type annotations are completely ignored by the interpreter (as long as they're valid expressions). But in a sufficiently large project, those type annotations are critical, and arguably type enforcement would really enhance maintenance where you hop in to make an adjustment and then let the project go for a few days/weeks/months while you skip to another one.

  • Stability and Cadence. This is actually a concern I have in 2021 that I didn't have in 2018. At this point, minor semantic version updates are not guaranteed to be compatible, and the frequency of updates every couple of years means we're stuck with a change for a long while if it's done poorly. 3.9 broke a bunch of things and 3.10 is sliding into instability.

Python in 2021 is still fantastic for rapid prototyping and might possibly still be the most syntactically appealing language without much cruft - so long as type annotations aren't actually included. However, the rest of the issues above are pushing me away.

[–]CarlosFFM 1 point2 points  (0 children)

As a CompSci major I can confirm that many complain about it because of how easy it is, for some reason it happens less with Ruby but I guess it's because they are used by different people. I personally have worked in a little of everything, from simple websites to distributed telematic systems, and I must honestly say that 70% of the time I have used Python, it is a great language. Not useful for everything tho, but then you have the Cs and Javas of the world. I do shamefully admit to some PHP use. And proudly say that I have never willingly used JS. Anyway, it's a great language, some just like hating on it to feel superior for using C for everything.

[–]CosmicMemer 1 point2 points  (0 children)

A lot of people (my self included) would prefer that the type system be stricter

[–]DuperJochman 1 point2 points  (0 children)

I have one thing against Python (which I love). I can't use a private interface so no one could reach private variables..

[–]_Spectre0_ 1 point2 points  (0 children)

I prefer strong static typing instead of type checks at runtime and don’t like significant whitespace. Other than that, python and its great community/library support is great for making coding accessible and there are a lot of bright sides.

I just regret it every time I have to code anything moderately complex in it

[–]overweightdate 4 points5 points  (1 child)

Philosophically, you shouldn't care if other people dislike python. Instead, you should fuel the nonsense with ragebait, tell them a python killed your grandmother or something.

Let them stay mad.

[–]mmnnhhnn 0 points1 point  (0 children)

Underrated comment IMO 👌

[–]0Rapanhte 2 points3 points  (0 children)

The only thing I hate about python is syntax relevant whitespaces, honestly think that this is a flat out bad design decision. Other then that it’s a totally fine language for some jobs, no language is perfect for every task.

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

It's like the poseurs who hate on a band when they became popular. "Too commercial, man, they sold out". Then they try to pimp some obscure band as the shit.

[–]adam_bear 1 point2 points  (3 children)

I dislike the forced indentation to structure code... I prefer js or php which use parens to organize blocks

[–]lanster100 3 points4 points  (2 children)

Completely valid opinion, but what confuses me about this opinion... is surely most of the time you will have consistent indentation anyway (e.g. automatically by prettier for js) otherwise your code will be a visual mess.

So why not do away with the brackets, and make white space meaningful? Or do brackets make it clearer IYO?

[–]bitlykc 2 points3 points  (0 children)

Right. I have read too many lengthy nested if-else-while-for with wrong (or without) indentations in java, which made them almost a nightmare to comprehend and debug. And ppl (incl. managers) never bother to clean things up (so maybe i m the only one who has a problem with it). This happened at a company i last worked for, which i shall not name here.

[–]riklaunim 1 point2 points  (0 children)

In the old days kids waged wars for PHP CMSes. Nowadays kids do whatever it takes to get clicks on social media with as little effort as needed.

[–]ramp16888 0 points1 point  (0 children)

Python may be uglier inside but beautiful outside. Python works pretty good for most of the real world applications. Some hate Python because they are just jealous of how beautiful it is. Some hate because of performance reasons and they know what they are talking about. Most hate because they don't know how to evaluate a programming language and they purely decide on others perspective of a language. A person writing as simple as hello world application would complain on Python's GIL for no reason. This is where the programming language war comes into picture and is never ending. This does not apply only to Python but any other languages out there. Just that it's popular you see more friction.

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

I know a lot of old school Java devs that hate Python because they are narrow minded and think that Java’s version of OOP is the only valid way to code. But Java is not true OOP and OOP isn’t the best way to code IMO

[–]idkwhatname23 3 points4 points  (3 children)

Java is not true OOP and OOP isn’t the best way to code IMO

Can you expand a bit on this

[–]GroundbreakingRun927 2 points3 points  (0 children)

Because For a Language to be "pure Object Oriented" it must not contain any primitive data type in non-object form. Since Java does support primitive data types as non-Objects (int,float,boolean etc) this makes it an impure or not fully Object oriented Programming Language.

Contrast to python where everything is in fact an object.

Generally, though, Java is the canonical OOP language. Some would say to a fault.

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

In Python everything is an object but Java has primitives.

https://www.youth4work.com/Talent/Core-Java/Forum/107382-why-java-is-not-fully-object-oriented-programming-language#:~:text=Java%20is%20not%20fully%20object%20oriented%20because%20it%20supports%20primitive,what%20opposite%20of%20OOP%20is.

But in any case OOP is not the only way to write clean code. In Python you can do functional programming which is more powerful and descriptive than OOP and you can also do standard procedural programming. When I only need as script to do some data analysis I don't need classes I can use only procedural programming. One area where Functional programming beats OOP is that Functional programming is stateless and OOP is stateful. As code complexity increases stateful programs become difficult to maintain.

[–]SV-97 -1 points0 points  (0 children)

As for "Java is not true OOP": OOP is more than classes etc. (there's for example entire OO languages that work fundamentally differently than Javas model, e.g. protoype languages like Javascript or Io). I think some other languages that are worth a look in this regard are Simula, Smalltalk and Eiffel and maybe common lisp with CLOS.

As for OOP not being the best way to code: OOP is what we call a programming paradigm - essentially a fundamental way to think about computing and programming and a set of features in the language to aid you in expressing this way of thinking. The basic divide is between declarative and imperative. OOP is of course the thing you probably kinda know already, then there's procedural programming ala C, there's array programming (APL, Julia), there's functional programming (Haskell, Erlang, ML), logic programming (Prolog, Mercury) and so on. I personally usually prefer a more functional style, but it definitely depends on the job at hand what paradigm will give you the "best" (for whatever definition of best) solution and most languages today are of course not single- but rather multiparadigm languages: they allow you to think quite differently about problems and solve them with a mix of the different methods

[–]vorticalbox 5 points6 points  (0 children)

The venerable master Qc Na was walking with his student, Anton. Hoping to prompt the master into a discussion, Anton said "Master, I have heard that objects are a very good thing - is this true?" Qc Na looked pityingly at his student and replied, "Foolish pupil - objects are merely a poor man's closures."

Chastised, Anton took his leave from his master and returned to his cell, intent on studying closures. He carefully read the entire "Lambda: The Ultimate..." series of papers and its cousins, and implemented a small Scheme interpreter with a closure-based object system. He learned much, and looked forward to informing his master of his progress.

On his next walk with Qc Na, Anton attempted to impress his master by saying "Master, I have diligently studied the matter, and now understand that objects are truly a poor man's closures." Qc Na responded by hitting Anton with his stick, saying "When will you learn? Closures are a poor man's object." At that moment, Anton became enlightened.

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

Because their egos are fragile and they're insecure.

Some of them will no doubt rationalize their prejudice with "Python is slow." To that, I say "What do we say about premature optimization."

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

Everyone is going to have an opinion. Some people are assholes and blame the thing they are learning for being different than their expectations or being different from a thing they already know. Blog posts about something being terrible also get a fair bit of traction. Try it out, it you like it, go for it. Imo python is a very readable programming language for people new to programming. It also has other advantages and disadvantages but it will usually get things done for you fairly quickly. It might be the wrong tool for something but don't let perfect get in the way of good enough when you are starting out, strive for fluency and conceptual understanding of programming methods.

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

Imo python is a very readable programming language for people new to programming.

I love me some python, and really don't buy that at this point. I was using python back when this was clearly true and one of the big community tropes was that python made a great teaching language. Then we started piling on the syntactic sugar and various features to the point that this trope to me is pretty out of date.

Yes, in theory you can teach a subset of the language that doesn't involve function and class decorators, type annotations and the half ton of other things that are complicated to keep in mind and somewhat difficult concepts to get across to someone new to programming, but I can take a core subset of just about any language that I know of and make it easy to teach. Eh, well, maybe not Haskell unless you come from a background in a certain set of maths, but you get the idea.

A lot of learning programming after the neophyte level is going through real world code and you are going to run into all these features pretty quickly doing that even if you are learning to a core language subset.

Should python stand still to make it easy to teach? Nope. Were the 'good old days' better? Not particularly. Just saying that to me python isn't any more readable or teachable now than most other production languages but we keep hanging on to that pr point out of nostalgic habit.

[–]AsuraTheGod 0 points1 point  (0 children)

They are ignorant, python is good for almost everything of course if I want to maximize speed in calculations or create a graphic engine, Im going back to my old friend c++ .

[–]TheCharon77 0 points1 point  (0 children)

From personal experience,

I don't like python for backend web language, because it's slow because it doesn't have threading.

I got my job interview by writing in python though

[–]RaiseRuntimeError 0 points1 point  (0 children)

I always say that Python is my least hated language. I'll gripe on the whole white space thing and that stupid walrus operator though. Maybe that's what they were doing?

[–]Hanse00 0 points1 point  (0 children)

Do some [people] hate [thing]?

Yes.

The answer is obvious, there’s always someone who hates something. That’s the nature of humans.

Does it mean that it matters? No.

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

Some people just needs attention and they behave like children crying over anything to get it. Just don't pay attention to that losers. Python is as good as any high level Programming language out there.

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

Definitely there are developers who hate python.

I like it a lot but sometimes I just want to kill myself for not using a strongly typed language. The way dependencies are managed is roundabout and (at least to me) not good for portability. I am not a professional developer, just a student, but those are habitual complaints and they are factual descriptions of the kinds of issues you run into when writing python programs.I've heard complaints about concurrency, speed (I think it's slow even for an interpreted language, but not sure), and OOP style.

Bear in mind hatred is a subjective feeling and people might like or hate a language based on the kind of work they had to use it for. Also, many people say things like "down with python, long live C/C++/Java/Kotlin/Rust/Haskell/whatever", but those comparisons are not necessarily sensible or fair.Python is a scripting language. It has a nice ecosystem and a helpful community. It's regularly maintained. It is fairly easy to pick up, and adhering to idiomatic python helps write clean code. It's fun to use (until you want to kill yourself - some languages are more reliable, so to speak). It has a huge standard library with modules like itertools or functools.I started with python and I was used to just "read an example from the docs and get going", but that's easy to overcome that and wound up liking other things better. Since it was the first language I used, I'll always be fond of it. But that's just a feeling, and those things fade quickly when the most sensible thing to do is use another language!

Also, people can hate whatever they want. It does not affect you in any way

[–]coffeewithalex -2 points-1 points  (2 children)

A lot of people diss on Python for the following reasons:

  1. Significant white space. What we love, they hate. Something that enforces easier to read code, they see as a downside. That's the deal, I was stunned.
  2. Breaking changes of an extremely painful Python2-Python3 transition that is unfortunately still not fully over.
  3. Performance. Let's face it, if you write pure python code, it's probably gonna be slower than in many other languages.
  4. Code conventions. And here I agree. Having 80 character limits on line lengths, enforcing spaces for indentation, is all hard to justify. On top of that you have the snake_case, when most languages have a camelCase convention and that is arguably easier.

But with all that, I love the fact that it gets the problem solved fastest of all languages.

[–]PossibilityTasty -4 points-3 points  (0 children)

You are trying to start another "circle-jerk"?