Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

My criticism is mostly aimed at the language (and its standard library) itself. The major projects I worked on, I architected from the beginning. It is when designing and architecting reliable systems that Python's terrible nature hits you in the face, especially if you're used to better languages.

Take the nonsensical but alluring Python motto "There should be one -- and preferably only one -- obvious way to do it." Assuming this was even true, which it isn't as a series of Python debacles - by its designers no less - over the years has proven, I don't want a language that shoehorns my thinking into "one"-ness. One-ness doesn't solve hard problems. I want modeling flexibility, the ability to examine a problem from multiple perspectives and explore the solution space in-parallel from multiple angles of attack. C and C++, bad as they are, let you do this. Perl lets you do that. Common Lisp is the best language I know on that front, it is _designed_ to let you do this.

I'm not going to say that Python is outright hostile to that mode of working, but it's not designed to bend / be stretched or mold with your mind in the same way that great languages are. Sooner (if you're solving fuzzy problems) or later , you'll run into its limitations and then you can't help but think that you're wasting your time.



Don't get me wrong, it is obviously your right to dislike a language.

I've designed plenty of reliable systems in Python without much issues whatsoever with making them reliable.

I have had some problems with code organization over the years (Python certainly lets you "do your own thing" which can lead to issues with organization over time) however I haven't had reliability, stability, or speed issues for 95% of the problems I've worked on.

Only times I've ever personally needed a faster language - when submitting problems in Python to online courses (algo). Then I used C#. Whatever, not a big deal :)

Python says the goal is to have "one right way" to do things, but certainly there are many, many ways to do any of those things.

> I want modeling flexibility, the ability to examine a problem from multiple perspectives and explore the solution space in-parallel from multiple angles of attack.

Can you give an example of where Python doesn't allow you to do this? I've never had this issue. Actually the opposite: mocking solutions are extremely easy with Python IMO and the tooling available (even the uber-free stuff) is awesome and easy to debug with (much easier than using Visual Studio for example - not saying VS is a bad app, it is great).


How about all of the following:

Python GIL takes away lots of viable solutions.

Lack of metaprogramming / code generation at runtime.

Lack of performance forcing me to severely compromise or implement things in C.

Type system is probably among the worst in the dynamic language space (compare to Common Lisp and Erlang).

Python is not an interactive programming language and can not be used to implement rapid feedback loops as is possible in Common Lisp, Smalltalk and Erlang.

The object system is very basic and error-prone compared to CLOS.

The error handling system is very limited.

I've found that all of these points translate into loss of flexibility and severely constrain the solution space. Having worked extensively in all of the alternative languages that I mentioned, there is not a single day that goes by where I'm programming in Python that I don't curse the language for being so limited / badly designed.


> Python GIL takes away lots of viable solutions.

Agreed the GIL is annoying, but I've had no issues with creating large distributed job engines with Python. Actually the tooling made it very easy. If you're trying to do this without using existing frameworks I guess it may be difficult.

> Lack of metaprogramming / code generation at runtime.

IMO Python is the definition of metaprogramming. Actually, usually you use something that is literally called a "metaclass" to do so. Also everything is an object that you can override as you like, so not sure what you mean here. Maybe you were not aware of these features and functionality?

> Python is not an interactive programming language

That just isn't true...

Are you using libraries at all or are you avoiding them?

I've met a lot of developers who do not like to use libraries, but that is a major strength of the Python ecosystem.


I get the feeling that you are easily dismissing my points without having personally experienced the languages and ways of working I'm referring to. If that's true, then we can only agree to disagree as the only way for you to really see my point of view would be through familiarizing yourself with the paradigms and tools I mentioned.

I'll give you one example, for the last point, Python not being an interactive language. If you work in an actual interactive language (Smalltalk, Common Lisp, Erlang) you will realize what the term can mean when properly pursued and made the focus of a language, and see exactly how Python fails to live up to that.


Unfortunately I can only speak with regard to Python, but I don't mean to dismiss your views.

The language isn't perfect, but I'm sure the languages you love have flaws as well.

Regarding interactive language, can you give an example? I've tried to search and while I can find a lot of examples of what I mean in the context of Python I can't see anything that gives me good info regarding Common Lisp, Erlang, or Smalltalk.

Also, can you answer my question whether you were leveraging libraries when you used Python or trying to create all your own solutions to issues?


> I don't want a language that shoehorns my thinking into "one"-ness.

Reworrded for you:

> I don't like Python because I don't like Python




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: