Was looking at my next language after python. Rust is one , should something like kotlin be the other ?
For interviews python seems to be nice and fast to type.
Was looking at my next language after python. Rust is one , should something like kotlin be the other ?
For interviews python seems to be nice and fast to type.
From a Go dev who came from .NET, Go is one the best tools I've learned in a very long time. Code is incredibly readable, I never come back to an old code base and have to wrap my head around the weird abstractions like "MapperServiceFactoryFactory" because they're no idiomatic. Code can be verbose, but the verbosity is what aids its readability.
I haven't had any issues maintaining large Go codebases, the only issues you come across are the same regardless of the language you use. And that's things like ensuring consistent style across a team of developers.
The important properties with maintaining code bases like that are language regularity (most code is written the same way and you don’t have to make personal “taste” decisions on things), good documentation and online communities, well-maintained libraries, tooling features for versioning and namespacing, deployment simplicity, etc. Go nails those things.
I agree that Python is great for interviews. I would not use it for a large codebase maintained by a bunch of people for years, unless there is a really compelling reason.
- language regularity; black has been the default for years now, and if you want to enforce a different style, there are other tools
- documentation and online communities; not even a contest, no language comes close to Python in extensive documentation and online support
- libraries; much the same, Python standard libraries are world-class
- versioning & namespacing; Depending what you need from this, Python is again more robust, namespacing in Go is a disaster.
- deployment simplicity; ...alright, you got this one. Python deployment is harder than it should be. Still, I find my Docker images about the same complexity between the two; more complex deployment in Python, but no need for compilation
(I only actually use one of each of those with my own code, but I have to know about them all to work in the ecosystem.)
Also IMO, Python’s stdlib comes nowhere close to the quality of Go’s.
Somehow despite all this I still enjoy writing Python, and use it sometimes for my personal stuff. But in a team setting on a large code base? Nah.
It's all rock solid and easily understandable by the whole team.
There are plenty of legitimate reasons to choose a different language, so it makes sense to figure out what's important for oneself and go from there. The only problem is that it's hard to know all of the aspects that may be important without trying a tool out... so we do, quite reasonably, turn to blog posts with other people's opinions.
I do think it's good to differentiate the opinions of people who have really worked with the tool vs. those who are just e.g. complaining about Go's error handling because they're used to exceptions but they haven't done any significant work with Go.
For deciding on whether or not to learn a language: I'd say it depends on _why_ you want to learn a language. If it's for getting a different job, then look at the kinds of jobs you want and learn the languages/skills to do that. If it's for pure knowledge, then learning languages that teach you something new are useful. Go's concurrency might be interesting in that regard. Rust's borrow checker is certainly interesting.
If you want fun, you might consider other languages, like Ruby, or Clojure, or Rust, or Scala, or Elixir, or... But they are not going to be as much the foundation of corporate software, exactly because they are more expressive and require higher qualification to handle well. The languages from the first list, though, while more boring, provide a more certain piece of bread and butter.
It's still insanely frustrating in many ways, but if you need code that is fast (i.e. faster than Python), typed (I don't think type hints are a valid replacement), where concurrency is not a never ending nightmare (or at least not any more than it needs to be), and compiles to native binaries, go is a great language to use that doesn't scare large companies away.
So I don't see why go is not worth to learn.
However depend on what engineer are you, IMHO go is one of the top mindshare language for backend services.
Definitely go for kotlin if you want to write a GUI. I'd also recommend Kotlin (or maybe go, never used it) if you want to write a server. Rust has ambitious but not there yet server frameworks, and it's quite hard to go off the beaten track with most Rust server frameworks (say if you want to write your own little cache layer).
I'm just a student, but I have the impression rust isn't a good choice for maximizing career prospects. Still writing it, because I love it.
Java: 12,879 Golang: 4,339 COBOL: 321 Haskell: 18 Rust: 2
The Rust jobs also appeared to be blockchain related, so I wouldn’t count on that being a place that could get you to retirement. I would expect Rust is a requirement so a marketer add a bullet point in his or her slide deck.
I don’t know what Dice is, but Indeed, stack overflow, angel list, and google’s job aggregator all had quite a few rust jobs when I was looking. I also kept a spreadsheet of companies I had heard about who were using and hiring for rust over the course of the last couple of years at my previous job. In addition to FAANG and Microsoft, there were quite a few smaller shops like 1Password and Signal.
And the job I wound up taking has nothing to do with blockchain, fwiw
The company I joined didn’t expect people to already be rust programmers, and I think about half of our engineers are from non-CS backgrounds. Experience counts for way way more than your degree once you’re a few years into the field.
So, keep an eye out! There’s plenty of stuff out there for whatever interests you, and most programming (even in a language like rust) is not super heavy on meatier CS concepts most of the time.