Hacker News new | ask | show | jobs
by _fx6v 2563 days ago
I can comment on this on my own:

1. Java - did not want to adopt the entire ecosystem. This is very much wanted a banana and got the whole jungle with a gorilla type of story.

2. Python - dynamic. Don't want that. Go's minimal typing is perfect. It's easy to deploy (binaries). It's fast. It can scale well. It's opinionated (love this).

Python and Java both encourage and allow developers to flex creative solutions that are hard to maintain long-term. Sure, seniority helps with that, and being part of a good team; however using Go, you just run into that less due to the conciseness of the language and strong idioms.

2 comments

Python with type annotations and use of the mypy typechecker is really darn great.

I work on Golang stuff at work where we made the switch after the troubles associated with refactoring Python. Recently though, I 'typed' a personal project of mine that was fairly large, and it's become a pleasure to work on.

IDE integrations of mypy warn you as soon as type errors occur. The fact that the type annotations are first-class features of the language and not embedded in comments also makes it great. The compromise of type-safety at the boundaries where you interface with 3rd party APIs that don't provide type annotations (the major ones do) does not get in the way too often contrary to what I expected.

mypy makes Python a pleasure to work with again.

> mypy makes Python a pleasure to work with again.

This is my experience as well. I love that I have the option to use Python typed and untyped. For little scripts, fiddles, prototypes, etc. it's often convenient to omit type annotations. For solid software that runs in production it's nice to have them.

Another thing that I'm excited about is nuitka [0], a Python to C compiler that allows you to create binaries from Python code. It cut start-up time of a command line tool that I compiled with in half.

[0]: https://github.com/Nuitka/Nuitka

You can write small Java services. You really don't need Spring or anything. You should try it some time.
You can, but you can't deploy them. If you really want to keep your services separate, you need a separate JVM installation and jars for each service. Go gives you this automatically with a simple binary. Go's standard library is an order of magnitude (at least) better than Java's, much more comprehensive, much more cohesive, and much more capable.
>> Go's standard library is an order of magnitude (at least) better than Java's, much more comprehensive, much more cohesive, and much more capable

Can you please provide some examples? This would be a useful comparison, as Java had way more time to work on the libraries.

Don't you think it'd be the other way around - the older a language gets, the standard libraries degrade since you can't introduce newer patterns without breaking compatibility.
>> you can't introduce newer patterns without breaking compatibility.

Yeah it is tricky, but Java has a good track record here:

In 1.2 they added all-new Collections API. The old API is still there and still works, though it is not used much these days.

Then in 5 or thereabouts Collections API got generics.

Then in 8 or so, Collections API got streams, magical multithreading etc etc.

Lambdas were added to the language and standard libraries, and so on.

Can't deloy them how? You would still use gradle or maven and package/deploy the same way.
I think Java is ok. I just don't like all the weight you inherit with the ecosystem. There's a lot of buttons you have to learn and history. It's working a submarine vs purposed craft (bad example).