r/ProgrammerHumor May 27 '22

Meme Welcome to hassle free coding

Post image
2.2k Upvotes

305 comments sorted by

View all comments

372

u/[deleted] May 27 '22

Python doesn't feel like a programming language if your first language is C++.

165

u/oddmerlin373 May 27 '22

Honestly I prefer to call it a scripting language because that’s what it’s good at

99

u/ashum048 May 27 '22

Yes, yes, yes.

Automating stuff with python and creating small apps is a blessing.

Debugging large scale applications in python is pain.

54

u/prescod May 28 '22

Debugging large scale applications is a pain...period.

44

u/[deleted] May 28 '22

Strictly typed languages are much easier to debug though IMO. Python and JS will let you do extremely weird stuff that’s hard to pick out in debugging, where in a C-based language it would just give you a compiler error

4

u/HgnX May 28 '22

Man needs a bit of PyLance in his life

8

u/juhotuho10 May 28 '22

Python can be turned to strictly typed with type hints and mypy

12

u/prescod May 28 '22

And C will let you do bad things with memory where Python would just give you a runtime error.

If you want tons of compile time errors, Python's type system is vastly more powerful and precise than C's:

https://mypy.readthedocs.io/en/latest/

5

u/ShelZuuz May 28 '22 edited May 28 '22

That’s the old “chainsaws are dangerous so let’s use a nail file to chop off the tree” argument.

Also the common set of libraries you use in python are almost never statically types so the linter doesn’t really help.

2

u/prescod May 28 '22 edited May 28 '22

That’s the old “chainsaws are dangerous so let’s use a nail file to chop off the tree” argument.

Not at all. It's "axes (C) and chainsaws (Python) are both dangerous and let's not BS ourselves about that."

If you have a high standard for static correctness then you use Rust or Haskell, not C or Python. C is MUCH more dangerous than Python, as the thousands of "use after free" and "buffer overflow" security vulnerabilities show.

https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=buffer+overflow

https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=use+after+free

https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=null+pointer

It's ridiculous to point to C as an example of a "safer" language in the face of enormous real-world evidence that it is not.

Also the common set of libraries you use in python are almost never statically types so the linter doesn’t really help.

What's your favorite Python library that is not typed?

Django: https://github.com/typeddjango/django-stubs

LXML: https://github.com/lxml/lxml-stubs

Numpy: https://numpy.org/devdocs/reference/typing.html

SQL Alchemy: https://github.com/dropbox/sqlalchemy-stubs

The whole Python Standard Library: https://github.com/python/typeshed/tree/master/stdlib

Tons and tons of other third party libraries: https://github.com/python/typeshed/tree/master/stubs

And if you find something missing, you can add a type stub to your own project or contribute it to typeshed or make a new project for it.

0

u/unknowntillnow23 May 28 '22

Are you building large systems in python alone. Someone doing some voodoo shit in python would be picked up by the commit hooks or in a code review at the very least.

6

u/AltAccountMfer May 28 '22

I always hear this response and my rebuttal is that it shouldn’t have to get that far.

3

u/LEGOL2 May 28 '22

That's... my job. My work is debugging drivers 24/7 <pain>

13

u/[deleted] May 27 '22

I heard it's pretty good at data

13

u/0430ke May 28 '22

Yeah I primarily use it for data and database shit. It's much faster to write and run something quick that manipulates a lot of data quickly.

It's also incredibly nice due the fact that almost EVERYTHING has an API for Python. So you can gather data from many sources all in one place, easy to write, quick to run.

Edit: To add on to this, it's also easy to manipulate data types since it's easy to cast data to other types. JSON is super easy to use, etc. Using other languages you have to really mess around with getting the data type you want. Python just makes it easier.

4

u/ashum048 May 28 '22

Agree. Data is another place where python really shines.

Create a simple data pipe or a NN in python is fun.

5

u/Thathitmann May 27 '22

It's got some nice built in functions to quickly save and load to/from JSON files, and with addons it can handle about any file types.

It takes about 2 lines of very easy to read code to import/export data.

9

u/prescod May 28 '22

Yes and it is also very good at doing gigantic matrix multiplies spread over multiple computers in a cluster. I think that's actually what's meant by "good at data."

3

u/[deleted] May 28 '22

I'm studying python in school but not real world applications

From what I've seen and from what I've heard from better programmers it's good for data analysis

1

u/Hot_Slice May 29 '22

That code is all written in C. Literally all the fast and powerful bits of Python are C.

Write a gigantic networked matrix multiply in pure Python and it would be dog slow

1

u/prescod May 29 '22

People always bring this up as if it is relevant. I don't see how it is relevant to the people trying to do the matrix multiply whether it is implemented in C or Python. A (sane) C programmer would call out to BLAS/LAPACK just as a Python programmer calls out to Numpy.

3

u/ddtfrog May 28 '22

I like it for front end automation and web scraping, too.

2

u/ashum048 May 28 '22

true. Any automation in python becomes so much clearer than a bunch of shell scripts all over the place. Not against shell scripts. Don't want to start a war)

1

u/ddtfrog May 28 '22

But as someone who learned C++ / C first, it’s a scripting language to me lol.

-1

u/jswitzer May 28 '22

Refactoring is fun; random indents and spaces/tabs can determine if it compiles, fails during execution, or does weird things.

1

u/Yokhen May 28 '22

So much pain