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

Maybe I'm the only one that finds Python simultaneously verbose and lacking? Either you need 500 dependencies to do something in a simple way, or you need dozens (if not hundreds) of lines to do trivial things. I avoid writing Python because there's so much bullshit to add. Much prefer Perl, I can actually get things done quickly. Python feels like programming for the sake of programming.


I have a bunch of zero dependency projects. You can get a lot done with the standard library and single file projects which you can run on most systems without needing to do anything except curl it down and run it since Python is available.

For example here's a ~2k line Python project which is a command line finance income and expense tracker: https://github.com/nickjj/plutus/blob/main/src/plutus

It uses about a dozen stdlib modules.

About 25% of the code is using argparse to parse commands and flags. With that said, I tend to prefer code that yields more lines for the sake of clarity. For example this could technically be 1 or 2 lines but I like each parameter being on its own line.

    parser_edit.add_argument(
        "-s",
        "--sort",
        default=False,
        action="store_true",
        help="Sort your profile and show a diff if anything changed",
    )


Argparse is part of my problem with Python! I can never remember the weird ways it wants to collect all these attributes and features, so I'm always leafing through manual pages or googling for examples. Same for if I'm modifying existing Argparse code, I have no idea how to make it do what I want. It can do a lot for you, but it's a pain in the ass to use.

It's so much easier to write a simple usage() function that has all help text in one big block, and Getopt with a case block. Anyone can just look at it and edit it without ever looking up documentation.


Arguments can get pretty complicated.

One nice thing about argparse is it comes with a helper function for mutually exclusive groups that can be optional or required. For example you can have --hello OR --world but not both together.


> Much prefer Perl, I can actually get things done quickly

Python lets you just nest data structures without having to twist your brain. You want a tuple in a list in a dictionary value: you just write it down and can access it with a unified notation. Bam. No reference madness and thinking about contexts. It's a big part of what I typically need to get things done quickly and understand how I did it 5 years later. That has to count for something. Python is boring in that sense, Perl is fun. But that's exactly my problem with it. It's too clever for it's own good and writing it does things to your brain (well at least mine).


That's what got me off Perl. I loved it and was skeptical about Python, but one time after trying it for a week or so, I wondered what it would look like to pass a dict of lists of dicts into a function, then reference items inside it. My first try worked: I made a dict, with a list inside it, and a dict inside that list, and passed it as an argument without any sigils or reference decorators or anything.

That was about the time I stopped using Perl for any new projects. I never wanted to go back.


That is a surprisingly succinct take. That may actually have affected the demise of perl, apart from perl's breaking changes.

Powershell is also horribly offended by trying to nest arrays. As is bash.


Perl also lets you nest data structures, no brain twisting involved. Perl doesn't have Tuples natively but you can add them with a module. You can also nest objects in complex data structures.

  perl <<'EOF'
  my $object = bless sub { my ($s) = @_; if ($s eq "thingy") { return("hello world!") } else { return("goodbye world!") } };
  my %hash1  = ( baz => "here we go", foo => $object );
  my @array1 = ( undef, undef, undef, \%hash1 );
  my %hash2  = ( bar => \@array1 );
  my $reference = \%hash2;

  print( $reference->{bar}->[3]->{baz}, "\n" );
  print( $reference->{bar}->[3]->{foo}->('thingy') , "\n" );
  print( $reference->{bar}->[3]->{foo}->('something') , "\n" );
  EOF
  here we go
  hello world!
  goodbye world!
Perl being Perl, TMTOWTDI, but you can enforce your own style using linters and formatters.


Major downside to dictionaries being so useful in python... Everyone uses dictionaries everywhere. I'm so happy for dataclasses and attr, because having to check that str keys are right without ugly ass constants is miserable.


dang the backend is leaking old comments from 2007


YMMV, but in my experience, Python's top use cases tend to require fewer dependencies, not more. Many trivial tasks are already built into the language. Not saying Python is perfect, but it's definitely well-oriented in that regard. I'm curious in what kinds of use cases have you found the opposite to be true?

I think the classic Python vs. Perl question ultimately comes down to using what you feel most comfortable with. People are different, and that's totally fine.


Could you share an example, where Perl is quicker to use and more powerful?


Using it as a replacement for Bash. No environment required, Perl is already installed on every computer on earth. Perl is generally quicker to write for string-oriented workflows - which is what Bash is. Regex is quick and easy.

Perl falls apart when you need structure and even small projects. For short scripts meant to do what you would use Bash for, it's a godsend. Safer, more portable, less friction.


Perl does not fall apart when you need structure, it's OO. In fact it's better structured than Python (hello, PyPI? It's CPAN calling, we wanted to let you know hierarchical packages are a thing). If you mean "forcing people to program in an opinionated manner", it doesn't do that by default, but that's what linters and formatters are for (like the ones Python programmers use)


Perl has OO but I don't like it much.



Python is a language that the standard lib is big enough that you don't need dependencies


Technically, C or assembly also fulfill this "requirement".

There seems to very few smart people who agree with this in practice, however.


Am I missing an obvious joke? C and assembly have no batteries included.


"Here's a chunk of lithium, build your own battery"


I need JSON with comments and trailing commas


When you say "I actually can get things done quickly", does that include reading that same source a year from now?


The best part about python is that there's a library for everything.


Have you met Java?


"Only in my web browser."

Those were the days…




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

Search: