6 ms·
Java is also nice. I like it very much. (I'm a C# guy.) Java is pretty modern, has quirks, but you can be pretty productive, not a particularly bad language. H
by kodfodrasz 9y ago
Java is also nice. I like it very much. (I'm a C# guy.)
Java is pretty modern, has quirks, but you can be pretty productive, not a particularly bad language. Helps you get stuff done. Awesome tools, pretty good concurency support. It is very hish performance. It is a proven tool, just don't buy into the IBM/RedHat enterprise stuff. There are nice microframeworks available. Java is a good choice to start a project in.
- jhall1468 9y agoIt's not a bad language, it's just alternatives are vastly better for a typical startup. Java is the language that's "Good at everything", while these days we have languages that are "Great at some things", and often, whatever the use case, there's simply a better language for it. What makes Java powerful is that it's good at everything. That's incredibly valuable for Amazon and Google, because they have an insane amount of code. So whether they need concurrency, or tooling, or whatever they can throw any 4-5 engineers at the problem and they'll be able to get it done. For a startup, they aren't going to need the greatest General Purpose language ever made. They generally have specific problems. And there are simply better languages out there for almost all of them.
- pvg 9y agoWhat are the specific problems that are so radically different than the specific problems somewhat bigger companies might have? What does "For a startup, they aren't going to need the greatest General Purpose language ever made" mean?
- jhall1468 9y agoThe biggest problems big companies have is that they need to do everything. If I have a companies with 2000 engineers and I have projects in ML, Rest Servers, Cloud systems, etc, it makes vastly more sense to rely on one language to do everything, because it allows me to shift engineers from one place to another without them having to learn a new language. If I'm a startup, I generally have ONE thing that I need to excel at. If that's computer vision, why would I use Java when C++ (and arguably Python/OpenCV) is decidedly better at computer vision? If I need a simple REST service for my particular project, why in the world would I use Java over Python, Ruby or Go? The value of Java is that it does everything well, but the ecosystem is enormous. It's overkill for most projects, unless you happen to have projects that scale across multiple domains that Java does well. I find it odd that I'm getting so much push back here. There's a massive amount of cognitive overhead in utilizing Java. There's also a huge cost (both cognitive and entry) in using of Java. (The difference between a Java programmer and a generalist? How much the latter has to learn to catch up.)
- dragonwriter 9y ago> If I have a companies with 2000 engineers and I have projects in ML, Rest Servers, Cloud systems, etc, it makes vastly more sense to rely on one language to do everything, because it allows me to shift engineers from one place to another without them having to learn a new language. Well, CIOs tend to think so. I think they are wrong, and that this is one of the reasons enterprise-internal technology is so bad. You aren't actually going to.move engineers between those tasks very much, because each of them relies on fairly deep domain knowledge, and, in any case, it's unlikely that the size of demand between those tasks shifts enough that it makes sense to shift a lot of people around. And, those you do shift around are going to have a lot of work coming up to speed on domain knowledge (which is going to have a huge impact on how the language is used), which will dwarf any language-transition effects. And, furthermore, the places that do stuff like this aren't the kind of places that attract the kind of talent that could manage to the transition between these divergent domains well; what they almost invariably end up doing to deal with short-term shifts is hiring specialist contractors in the more in-demand area, and for longer-term shifts reducing headcount in one area and hiring new people in the other. At the same time, you are inhibiting productivity in most or all of the individual domains by not choosing the right tool for the specific job.
- jhall1468 9y ago> You aren't actually going to.move engineers between those tasks very much, because each of them relies on fairly deep domain knowledge, and, in any case, it's unlikely that the size of demand between those tasks shifts enough that it makes sense to shift a lot of people around. I agree, but wanted to specify "big" examples to make it clear what my point was. That said, while they do require domain knowledge, I've seen people move into entirely different domains at the same company. It's not common, but it absolutely happens.
- asdf1234 9y agoI don't use Java much but out of the languages you named none of them are better at much and with the exception of C# all of them have far, far worse tooling. Go is hardly a "modern language" from a language design perspective so you're not gaining much over Java here. It has horrendous package management and the IDEs, debuggers, profilers and live monitoring tools are probably a decade or more behind the tools available for Java and the JVM. It's also much harder to find Go programmers than it is Java programmers. Python is a very slow dynamically typed language with a horrible deployment and concurrency story. A lot of big companies justifiably won't even consider a dynamically typed language. Again all the tooling from package management to profilers to debuggers is way behind what's available for Java and the JVM. C# is a real competitor but for the most part it's still tied to Windows. This is slowly changing but the vast majority of C# libraries still require the full .NET runtime on Windows and the open source community around C# is a small fraction of the size of the community around JVM languages.
- jhall1468 9y ago> I don't use Java much but out of the languages you named none of them are better at much and with the exception of C# all of them have far, far worse tooling You're just wrong there. There are plenty of languages that do something better than Java, but none of them do everything better than Java. > I don't use Java much but out of the languages you named none of them are better at much and with the exception of C# all of them have far, far worse tooling Now we are traversing into "my opinion is fact here". > Python is a very slow dynamically typed language with a horrible deployment and concurrency story. Who the hell uses Python for concurrency? It has a global interpreter lock... if your use case obligates concurrency and you pick Python you just don't understand what you are doing. > C# is a real competitor but for the most part it's still tied to Windows. Yes, let's dismiss every other language because Python is bad at concurrency and you don't like Go's package manager... Give me a break.
- asdf1234 9y ago> There are plenty of languages that do something better than Java I agree and I never said otherwise. I specifically addressed three of the languages you named (Python, Go and C#). > Now we are traversing into "my opinion is fact here". I'd love to see someone argue that Go or Python have superior tooling to Java and the JVM. > Yes, let's dismiss every other language I'm not dismissing every other language, I don't even use Java regularly, I'm dismissing two of the "modern" languages you named.
- s73ver 9y agoI fail to see the difference between a startup and a normal software shop in this context.