Skip to content

Instantly share code, notes, and snippets.

@Alex4386
Last active January 1, 2021 14:21
Show Gist options
  • Save Alex4386/a4a0d907e5d163551f5d41563201604f to your computer and use it in GitHub Desktop.
Save Alex4386/a4a0d907e5d163551f5d41563201604f to your computer and use it in GitHub Desktop.
Reasons I hate PYTHON. (Includes Jokes)

Why I FURIOUSLY hate Python

This is my version of hate-typescript.md.

Warning: I have only used python for only an year and This definately includes several humors,
So DON'T TAKE THIS THAT SERIOUSLY. I don't want to make a freak'in programming language war or something

Abstract

Python is powerful doesn't scale and fast slow without extensions and precompiling;
plays well bad during collaborative programming with others;
runs everywhere everywhere except your dependency modules;
is friendly & easy to learn friendly for ground-up learners & removing your previous experiences in programming field;
is Open (Well I can't at least argue that)

Stupid syntaxes

Non-C-Like Syntaxes

When you first use python, You can find out that your regular old C-like syntaxes you use pretty-much-everywhere when you start learning programming language is NO LONGER WORKING!

At least VB.NET uses Block scope that wraps around. But in Python? nonono~ there's no even wrappings! and your beloved syntaxes from C is all-gone! Poof!
You need to relearn all of the syntaxes from ground-up! That's no good!

-> Update: Yes, I acknowledge that write less is something you'd say good. but as a non-python user, this is gives a steep learning curve for absolute beginners.

Whitespaces, Tabs, all of the craziness

This is all because of stupid block scope declaration in Python. that uses INDENTATION to define the block scope.
I guess you need a whole project scale linter setup just to make a toy-script you want to use it for short period of time!

Which makes you to do this:

git add pyproject.toml
git add .gitignore
git commit -m "chore: add pyproject.toml for fixing god damn whitespace errors"
git push
black .

I would rather write a bash script rather than hassling with Python's stupid indentation style.

Version Incompatible Syntax

Almost Any programming languages has something called "Legacy Support". But python? NO.
Syntax has been changed! (python2 ("Legacy, EOL", but everyone is still using it) and python3) and you need to rewrite EVERYTHING!

UPDATE: Actually, Python does have solution for this. Instead of implementing legacy compatibility, They backport the future syntax instead! so, developer can "prepare" for this future changes. (facepalm)

But this doesn't solve the issue. due to there are 2 different major versions of python out there, some systems only have python2 installed. and that case everything becomes hot mess due to supporting legacy and latest version and oh my gosh.

???: But you can define which version to be ran in the first place, like python2 command and python3 command~

That... doesn't solve the issue. Why does python makes the end-user to care about the interpreter runtime at the first place?

Stupid Linting Standards

All of the communities has whack-ton-of-differnet linting styles,
Black wants you to use double quotes, while PEP8 wants you to use single quotes.

And enforcing them (especially quotes) is actual HELL.
I actually acknowledge that ECMAScript Linting standards are living hell, but there is one de facto standard, Not heck ton of standards that gives me commit collision everywhere.

Language Specifics

Stupid OOPs

Totally Different Syntax than other class-based language

Who in the world thinks this is the inheritance of specific class in the first glance

class ChildClass(ParentClass):

while almost all the other programming language behaves like this

public class ChildClass extends ParentClass {

I have another thing to say here though.

Class Implementation, Wrongly done.

Actually, Python's implementation of OOP is more like to shown as class-lookalike wrapper on top of struct-and-trait model.
Then please implement in that way. I don't consider this def __init__(self, ...) as proper class method declaration.

No Interface, Only Class.

What in the world I can't declare interfaces for my dict. At least I should no what is inside of dict! (declaring class just for this? seriously?)
You guys at least need to add some typing support for dict or arrays!

-> interface "modules" are NOT considered here, this should be a language's native feature.

Linting (ex. intelliSense) Support Sucks.

This one is especially for pyTorch or tensorflow. that generates modules' internal during the RUNTIME. which literally make me go into Google, EVERY SINGLE TIME. What I just need is just to call a single function from a module.

At least add something like JavaDoc or Stupid ".d.ts" stuff like TypeScript
(This is the one of the two reasons I hate Typescript sometimes, But I personally think TypeScript is way better than Python)

Typing, Done Wrong.

I don't consider the TypeScript's type implementation as a good way.
but Python's one is far-more-worse. It is just dangling around at doesn't play with the language. at all.

Yes, I know, Typescript does this too. but usually IDE and Transpiler prevents me from doing it... so...
There is no Dict that follows any concept of "Template" in this language!
and "typing" on python is just an JavaDoc or ".d.ts" file (which does not support runtime-generated-stuff)

???: But Python uses duck typing~

Yes, I know, I have previously used duck typings (on interfaces) on TypeScript. but IF I AM USING STRONG TYPES, It should give me what is wrong with it when I am working with it. at least I don't get a AttributeError. TypeScript compiler DOES give me an insight when I done ducktypings wrong. (ex. this does not contain this attribute blah blah)

Will update later on if I got burned-out cause of my Python projects (especially due to Deep Learning Projects, Duh)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment