this post was submitted on 06 Feb 2024
110 points (94.4% liked)

Programming

17576 readers
128 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 35 points 10 months ago (6 children)

This one's a hot take, but: That Python is easy.

I've had to work with it in three projects in the past five years and I consider it one of the hardest programming languages, for anything but very short scripts.

You don't get proper compiler assistance, unless you have 100% test coverage. You don't get a helpful text editor. You don't usually get helpful type hints in libraries you use, so you have to genuinely just study the documentation and/or code. You get tons of quirky behavior in the stdlib, build tools, async stack, imports. You get breaking changes in minor versions of the language.

I find writing code in Python extremely mentally taxing, because you just get so little assistance, that you have to think of everything yourself.

[–] [email protected] 21 points 10 months ago (1 children)

Dynamically typed languages all suffer that fate. There's a reason Typescript literally has that feature in its name.

What does help though is type hinting. You "just" have to enforce it and its fallout in your entire codebase.

[–] [email protected] 12 points 10 months ago (1 children)

Yeah, we invested a lot of time into type hinting and checking, but mypy would never exit without warnings and errors, because many libraries we were using had no type hints.
It was also just exhausting/cumbersome, having to write type hints everywhere, as there's no type inference.

But yeah, we always joked that someone should create TypeScript for Python – Typhon.

[–] [email protected] 3 points 10 months ago* (last edited 10 months ago)

Part of the investment has to be only using libraries that have type hints.

But yeah - I definitely prefer strongly typed languages. Or at least languages like Swift where you have to jump through a few hoops to have a dynamic type (in Swift there is an "Any" type but you have to write a bunch of code checking what the variable contains before you can actually worth with it). Basically you have to convert it to a static typed variable before it can be touched. Thankfully there's pretty good syntax for that. Including an arbitrary way to convert almost anything to a string (essential for debugging).

[–] [email protected] 12 points 10 months ago (1 children)

I think Python is easy to learn but difficult to get past the basics. I'm also not convinced that getting past the basics is even worth it in three long run. I say this as a person who has used all Python at work for roughly 70 percent of the last 15 years. My current position is moving to Rust and my last 2 positions were moving to Go. Everybody was happier.

[–] [email protected] 1 points 10 months ago

Yeah, when I was at Google there was a big push among the SREs to switch from Python to Go.

[–] [email protected] 8 points 10 months ago* (last edited 10 months ago) (1 children)

Try the PyCharm IDE. It's really smart and helpful. The free 'community edition' is fine.

[–] [email protected] 15 points 10 months ago* (last edited 10 months ago)

I'm sorry to say this, but PyCharm is precisely what we were using. I do consider it the best Python editor, but it's several classes below IntelliJ for Java/Scala/Kotlin or even the extremely new RustRover for, well, Rust. And I'd say roughly at the level of KATE (a non-smart text editor) with just the rust-analyzer language server hooked up.

It is extremely impressive what PyCharm manages to analyze in Python, but other languages offer similarly good tooling out of the box, or make such analysis much easier by having static types.

[–] [email protected] 7 points 10 months ago (3 children)

I don't know if i qualify as a full programmer, I'm an actuarie but 90% of my work is in python, 5% SQL and 5% excel. I love python because is flexible as fuck, I can connect to the SQL server, send the queries to a pd.DataFrame, process the information, scrap some webpage for adicional information needed, and finally export to an excel file that the accounting team can use. I don't write fully functional programs, but small specific scripts for different tasks. R is another popular programming language between actuaries and statisticians, but I haven't find anything that R can do, that I can't in python.

[–] [email protected] 7 points 10 months ago* (last edited 10 months ago) (2 children)

I don’t write fully functional programs, but small specific scripts for different tasks.

This is exactly why your experience is different and you like Python better than many others. You are using Python as it was meant to be used and where it excels; for small scripts.

When people say they don't like Python they mean that Python does a really, really bad job when it comes to larger systems. Static analysis becomes exponentially more important in larger systems and Python has basically 0 of that.

But as long as you stick to relatively small stuff (less than a few thousand lines), Python is pretty nice and fast to develop in.

[–] [email protected] 3 points 10 months ago

So you are saying using python to write the server for a federated multimedia messenger is a bad idea.

Let me tell you, I'm shocked😲

[–] [email protected] 2 points 10 months ago

also just plain readability. Indentation-based scoping is horrible for larger codebases. Maybe if it was a purely-functional language like Haskell where this sort of scoping works better and all effects are tightly contained. But most larger codebases tend to use python in OO way and that can get messy pretty quickly. Damn, if python had a piping operator like elixir that'd be of a lot of help, actually. Plus there is so much legacy code in a language that had e.g. ternaries long before adding something seemingly so fundamental as switch-case.

[–] [email protected] 2 points 10 months ago

I'd say if you program then you're a programmer. What you're thinking of is more of a software engineer, ie. someone who architects and creates software.

[–] [email protected] 1 points 10 months ago (1 children)

Might just be my inexperience with the library, but every time I end up with a pandas dataframe, I spend the next 4 hours trying to figure out the right sequence of index statements and function calls to get the data in the order I want. It always ends up feeling like I'm doing something wrong, and the only way to really tell is to run the code as far as I can tell. I don't use dataframes very often though, and I'm sure it gets easier with experience.

[–] [email protected] 2 points 10 months ago

My general dev experience is limited mostly to python but with pandas one thing you can do is set up a jupyter notebook so you can run just the parts you want until it's working as expected, then you can move it over to your python script when you're ready.

But working with pandas does get easier with practice. If you're wanting to dive in a bit more, the "getting started" page has a tutorials section which features a 10 minute high level overview, a cheatsheet, and link to some community tutorials.

[–] [email protected] 6 points 10 months ago

Agree, also just in general I find many things Python very odd and syntactically isolated to some extent. Constructors, lamba, dictionaries in particular are extremly whack.

[–] [email protected] 2 points 10 months ago (2 children)

I'm a scientist that has been coding almost exclusively in Python for the past decade and I strongly disagree.

Python is great at being the glue that holds everything together, and everything crunchy part of the program is being handled by a library anyways.

I code with two terminals, one for iPython and one for vim. And you don't need anything else. The beauty of Python is that it's not a language that is so full of boilerplate that you need an IDE to type it for you to be remotely productive.

Overall, Python is a language made to be used by people that need to make something that just works and don't need to spend years learning programming paradigms and industry practices. Fortran and C are so unwieldy in comparison and everything more modern lacks the expansive and diverse libraries of Python.

[–] [email protected] 5 points 10 months ago

I’m a scientist

And this is exactly why you like Python. You haven't had to use it at a truly large scale. See also my comment here: https://feddit.dk/comment/5769585

[–] [email protected] 5 points 10 months ago* (last edited 10 months ago)

Overall, Python is a language made to be used by people that need to make something that just works

This is why you find it easy, and why the person you replied to finds it a big pain. The friction other languages would give you exists to provide structure on a larger scale that makes that guy's work easier. Like you implied, different languages for different jobs.