pythonlang2/content/_index.md

2.7 KiB

+++ title = "Why Python is a 'bad' language" +++

{{ sec_header(name="Weird Syntax") }}

  • It is hard to read, because it is missing semicolons and braces.
  • Indentation-dependant scopes make multiple statements on one line look horrible.
  • Doc comments
    • They go under what they are documenting, which looks wrong and is very unusual.
  • The def keyword does not imply a function, so one may think it is declaring a variable, or something else.
  • Strange naming
    • Exception handling using raise and except instead of the usual throw and catch. There is literally no point to do this, and it confuses users.
    • Same goes for elif instead of else if. This is just pointless, and again looks like a lazy implementation.
  • Normal if and else statements are not expressions. If they were, the additional ternary operator syntax would be completely redundant, and the code would be cleaner.
  • The syntax for inheritance looks really confusing. class Foo(Bar) looks like Foo has a constructor that takes a Bar as an argument, and not like Foo extends Bar.
  • For some reason, the pass keyword exists. Why can't we just leave the block empty or omit the :? Yet another lazy implementation!
  • True and False are capitalized which is unconventional.

{{ sec_header(name="Dynamic Typing") }}

  • Passing an invalid type into a function may cause unpredictable behaviour. Manual type checks are annoying, and type hints are still just hints.
  • A function can return whatever type it wants, so it is hard to work with and unpredictable.
  • Variables don't need to be declared. This leads to many issues, such as accidentally overwriting other variables with the same name, or typos going undetected.
  • A variable's type may be changed after its assignment, making it harder to work with.

{{ sec_header(name="Poorly done Classes") }}

  • The self parameter being passed into functions explicitly is pointless boilerplate. Instead it should just be there implicitly, and static functions should be declared with a keyword such as static.
  • Fields do not need to be declared. This leads to issues mentioned before. It also makes the data a class stores undefined, making it harder to work with. It is recommended to declare fields, but unfortunately not enforced.

{{ sec_header(name="Other Issues") }}

  • Operator chaning often works in completely nonsensical ways. For example False == False in [False] is treated as False == False and False in [False] and not as something that makes sense such as (False == False) in [False] or False == (False in [False]).

{{ sec_header(name="Conclusion") }}

Python is a perfectly fine language for beginners and experienced devs alike. There is nothing wrong with using it directly, or programs made with it.