24 ms·
For my use cases, Java has all the wrong compromises: - not high level enough to compete with Python/Ruby/JS/PHP, etc - not low level enough to compete with R
by BiteCode_dev 6y ago
For my use cases, Java has all the wrong compromises:
- not high level enough to compete with Python/Ruby/JS/PHP, etc
- not low level enough to compete with Rust/D/Nim/Zig
- not specialized enough to compete with Erlang/R/Go/Julia
- not opinionated enough to compete with Lisp/Haskell
So why use Java ? It's good, it's fast, it's productive, it's well supported, battle tested and documented for decades with a huge pool of devs. And many companies already use it and the tooling is excellent.
But those are not sufficient reasons for me.
Python is older than Java, well supported, battle tested, documented with a huge pool of devs. But it's way better for high level stuff, data mangling, scripting, gluing, and for most web dev stuff.
If I want a distributed system or something with a lot of I/O, Erlang and Go will always be better than Java. Sure, they are less widespread, with all the stuff it implies, but for such a nice need, I will pay the price hapily: my goal is optimization for the use case. Same for stuff that needs to go fast or have a small footprint, I'm not going Java if I can go Rust.
If I want to have fun, Java is out of the loop. Better sharpen my inner weirdness by fighting with some exotic lisp. Why try productive ? I wanna enjoy myself, not run a business.
So Java is not a bad choice. It's an excellent tech. I just don't have a use case for it.
- christkv 6y agoKotlin solves most of the problems for us while leveraging the benefits of the JVM.
- BiteCode_dev 6y agoJVM != Java. We are talking about Java as a language, not the JVM as a platform. You can also run Python on the JVM. Although, some Java compromises are definitely linked to the JVM.
- KptMarchewa 6y ago>You can also run Python on the JVM. Jython is stuck on 2.7 and unmaintained.
- vips7L 6y agoGraal's implementation of python is maintained and up to date with python 3.
- sarsway 6y agoWhat's the state of server-side Kotlin now, is it usable and what kind of JVM are cloud hosts running it on? Kotlin seems like one of the best languages out there.
- christkv 6y agoWe use it in production with spring boot and deploy a single jar file on azure. Works pretty well
- RhodesianHunter 6y agoNot only usable, but becoming very widely used. It's no different from Java for deployment.
- LennyWhiteJr 6y agoKotlin is widely used internally at Amazon. In both AWS and retail.
- jcadam 6y agoWe're using Kotlin with Spring at the moment and everyone on the team prefers it over Java. I suggested Kotlin when they laughed at my suggestion of using Clojure. Ah well.
- pjmlp 6y agoLong term, Kotlin will only stay relevant on Android. They cannot fully embrace the JVM while targeting ART, JS and native at the same time.
- RhodesianHunter 6y agoWith respect, you're wrong. I say this because we're now seeing widespread adoption of serverside Kotlin at places like Google and Amazon. With the support of Google and Jetbrains they can target whatever they want.
- pjmlp 6y agoWith respect, welcome to the Kotlin version of #ifdef, where language features depend on the underlying runtime. That 3D graphics library using SIMD and value types from JVM on ART or JS? Good luck achieving the same perfomance and memory semantics. Kotlin/Native has already been rebooted as its memory model was incompatbile with JVM libraries.
- johnnycerberus 6y agoHow is Kotlin going to support the SIMD interface? It really sounds like #ifdef for every platform, unfortunately.
- dropofwill 6y agoIt’s worked out ok for scala (though i don’t think anyone cares about it for android). Obviously a lot of code that only works on the JVM, because a lot of people just don’t care about native/js. But most core libraries will have ‘shared’ pure scala code and then have the platform specific implementations in separate folders. This is all fairly standardized with sbt plugins to do all the heavy lifting. From the app side you just don’t use classes that you can’t use? It will be interesting to see how things like Valhalla and Loom will pan out.
- pjmlp 6y ago
- dagw 6y agoAre there many companies seriously using Kotlin for large projects outside of the Android space?
- throwaway10110 6y agoYes
- jicea 6y agoYes, our stack is Spring Boot + Kotlin on the back side, TypeScript + Vuejs on the front. We’ve millions of unique visitors each month, and we’re pretty satisfied with the stack.
- RhodesianHunter 6y agoGoogle, Amazon, hundreds of F 500's
- hagy 6y agoCash App uses Kotlin Multiplatform, including server-side code, https://kotlinlang.org/lp/mobile/case-studies/cash-app https://kotlinlang.org/lp/mobile/case-studies/cash-app
- LennyWhiteJr 6y agoAbsolutely. Kotlin is *widely* used for backend code at Amazon.
- cutler 6y agoYes, I think today the languages worth focusing on are Kotlin, Swift and C#. They are similar in many ways and come with built-in nullability. They are also platform languages offering excellent tooling and a productive development environment.
- wwn_se 6y agoPython projects that start to grow has a tendency to become hard to manage in a way that I have not seen in Java at all. Java is like you say not the greatest at anything but it is also not the worst at anything. Its great for projects where the you don't know what you should optimize for or don't care. If java is to boring maybe kotlin is the way to go. I really like kotlin and in my personal experience the only downside is that the IDEs is not as good as the java counterparts yet.
- BiteCode_dev 6y agoI've seen plenty of even small Java projects becoming hard to manage as well. The design pattern hell is a thing. You know the joke: a dev has a problem, uses Java, and now has a ProblemFactory :) Not to say Java is not a great language for big projects, it certainly is well equipped for that, especially because it has superb tooling available on the market. But I've done plenty of big projects in Python, some ended badly, some ended great. Not to mentions dropbox, youtube and instagram are testaments to Python can be used in large projects. So I don't think Python is unsuitable for big sized projects. You certainly do have to worry about different problems than in Java, especially for projects that started without type hints. In my experience though, you reach less architecture dead ends with Python because the language is so flexible that a bad decision early on can easily be transformed or worked around even very late in the project without much fuzz. So I don't use "size of the project" in my consideration to not user Python/Go/Rust/etc over Java.
- Nursie 6y ago> You know the joke: a dev has a problem, uses Java, and now has a ProblemFactory :) I think this joke is probably about as dated as the versions of java it was made about.
- BiteCode_dev 6y agoUnfortunatly, I know a lot of devs that don't even know it's a joke. Singleton is still a design pattern used in the wild.
- helsinkiandrew 6y agoIt's horses for courses. Some plus points for Java: - you can integrate code from hundreds of developers fairly safely (knowing that no one has changed the default behaviour fo builtins and different dependencies won't clash). - the syntax, although not the most succinct is fairly easily readable and maintainable by other developers.
- BiteCode_dev 6y agoIt's also True for Go, Rust, Haskell, etc. But even for Python (which syntactically speaking is probably the easiest to read of all the list), if your team scale, you just scale the tooling with it. The Python ecosystem is very rich in tooling for enforcing best practices. Poetry will manage dependencies cleanly. pylint will let you check that builtins are not overriden. Mypy will check for types. So of course, it's not as good as Java, but again, the post is about compromises the language make, which are not the proper ones for me, personally.
- acdha 6y ago> - you can integrate code from hundreds of developers fairly safely (knowing that no one has changed the default behaviour fo builtins and different dependencies won't clash). It's exceedingly rare for this to be untrue of Python — it's technically possible to hack builtins but there's intense community pressure against doing that. > - the syntax, although not the most succinct is fairly easily readable and maintainable by other developers. This is sort of true but it misses the aspect which makes Java hard to maintain: the language being less capable means that you end up with more boilerplate syntax which has to be understood when reading it and the patterns that produces tend to be the long-term maintenance issue instead.
- kaba0 6y ago> This is sort of true but it misses the aspect which makes Java hard to maintain The boilerplate syntax you talk about comes from like java 1.4. Modern Java is quite expressive with streams and lambdas. If one does employ the Java Beans convention than yeah, he/she has to autogenerate a few getters setters, but those don’t occlude the actual logic. And frankly, empirically, Java is anything but hard to maintain. You would be hard pressed to find many languages that continue to manage at the scale Java apps routinely handle. Yeah, it’s (typical business monstrosity) hard to understand, probably has many thousands hours of technical debt, but it just works, and more things can be added to it (and occasionally with much more work, removed as well).
- pron 6y agoYou say Java is not X enough to compete and then list things that Java has successfully competed with for years and continues to have a very wide lead over now, with the exception of Python and JS in limited circumstances -- the browser and machine learning. The reason Java does compete so successfully is that it is high level and yet provides a virtually unmatched combination of performance, maintainability and observability (including always on, low-overhead deep profiling). None of the alternatives you mentioned come close. This is why it continues to be a top choice at Amazon, Apple, Netflix, Google, Alibaba, Uber, Soundclous, and almost all Fortune 500 companies. Saying it is "out of the loop" is either wishful thinking or delusional, depending on your perspective. It's just not the reality.
- BiteCode_dev 6y agoI'm just exposing my own selection criteria. It's not an absolute metrics. I'm just saying, "to me, that's why I never end up using java". Java is good enough for the vast majority of things. But so is Python. And for specialized things, there are better choices available to me. I'm not a Fortune 500 though.
- pron 6y ago> But so it Python. For a very different definition of "good enough," i.e. unless you're working on a large codebase maintained by a large team for years, need high performance, or need deep low-overhead observability. So Java is "good enough" for a much wider selection of "serious" (large/mission-critical/long-lived/ high-performance) software. > And for specialized things, there are better choices available to me. That's OK, but in reality Java does very successfully compete with almost all the languages you've mentioned; it is they that, in practice, find it very hard to compete with Java.
- BiteCode_dev 6y agoDropbox, instagram, google and youtube all were written in Python at some point. Languages don't scale, architectures do. But even when the language became the bottleneck, they went the road of rust and go, not the road of java. Again, not to say Java is not used by those companies with great success.
- jokoon 6y agoYou perfectly nailed how I feel about java.
- pharmakom 6y agoYou use Java because it is low risk. I think it might be lower risk than any other language in terms of design patterns, hiring, library support, run-time surprises, etc. The language itself isn’t great though. Java solutions tend to be bloated and make it hard to decipher the underlying domain logic. I certainly wouldn’t pick Java for a small team of experienced developers.
- BiteCode_dev 6y agoI agree that Java is low risk from a manager responsibility perspective: nobody has been fired for choosing it for a long time. Now, from a project success perspective, I think it's not. I've seen a lot of Java projects fail, over engineered, full of spaghetti code, riddle with inscrutable abstraction, stuck in a glue of badly designed architecture that has been fossilized by the type system. I'd say from a project risk perspective, it's a pretty average language, it has pros and cons, but they balance each other.
- chii 6y ago> Java projects fail, over engineered, full of spaghetti code, riddle with inscrutable abstraction, stuck in a glue of badly designed architecture that has been fossilized by the type system. these are properties of a poorly designed project, and isn't due to it being java. You may be able to causally link the failure to the people on the project being "incompetent" - but that's not really the fault of java! i say java is a pretty good language, if you have large teams, with varying levels of competency amongst the members. As long as you have somebody good to do the overarching design and direct the project, it would do relatively OK. if you have a small, elite team, then it may not be the right choice (depending on the team).
- goto11 6y agoI have seen a lot of projects fail over the years, for many different reasons, but I have never seen a project fail due to the choice of programming language. > I've seen a lot of Java projects fail, over engineered, full of spaghetti code, riddle with inscrutable abstraction, stuck in a glue of badly designed architecture that has been fossilized by the type system. Sure, but do you really think the same organization would have produced perfect simple elegant error-free code is Haskell or Smalltalk (or whatever "better" language you are comparing to) under otherwise same requirements, deadlines, resources and management? I'm not saying languages doesn't matter. A better/more appropriate language is like having a bigger screen or a better chair. All else being equal, it will increase productivity and make developers happy. But it will not make or break a project. The things that will break the project: Bad/unclear specifications, bad management of change requests, lack of testing, unrealistic scheduling, lack of customer feedback, bad communication or conflicts among developers.
- Nursie 6y agoPython is generally less performant. Go has a smaller ecosystem. IMHO, YMMV etc.
- jokoon 6y agoYou're right, but: * performance is not really an issue for most software ("97% of the time, premature optimization is evil"). A well designed software doesn't suffer from performance issues with current computer performance, unless you do AI or bleeding edge graphics or science simulation. * there are ways to speed up performance sensitive parts with something else than java, for example by using C/C++, would it be with a python module or cython. Not ideal, but generally you gain performance by adapting your design, not by changing languages. A garbage collector is rarely predictable, hence java is not a good fit for performance. * I remember playing minecraft with friends, and the server was regularly crashing because it was out of memory, or something like that.
- Nursie 6y agoThe OP brought up performance reasons to choose language. :shrug: > I remember playing minecraft with friends, and the server was regularly crashing because it was out of memory, or something like that. I've seen this, but I don't think you can really use one server program running out of RAM as indicative of much. I do still find the pre-setting of max memory on the command line a little bit odd though.
- toomanybeersies 6y agoPre-setting max memory seems odd these days, when everything runs in docker, with its configurable memory limits. Handling process memory usage pre-docker wasn't so easy.
- pydry 6y agoPerformance as an issue is massively overstated in high level languages. CPU intensive hot paths are rarer than people think, I/O performance is a bigger deal than people think and there's more hyper optimized code written in performant languages that you can call directly than most people realize. A lot of graduates think that compsci jobs involve optimizing algorithms or some shit coz they did that type of thing as undergrads, so they port that attitude across. It's also the reason why pypy was massively hyped for a while and then not really used all that much. It was solving the performance problems python never really had.
- DrBazza 6y agoDon't forget that Java first appeared in the late 90s and is a language of its time. That's not say that it hasn't evolved, but many of the decisions and choices were of that era.
- BiteCode_dev 6y ago- Java: 1995 - Python: 1991
- dagw 6y agoThe first and second half of the 90s where very different times when it came to programming. Furthermore Python and Java set out to solve very different problems, which is reflected in their design decisions.
- dnautics 6y agoThere's a lot of very reliable distributed systems written in java. But if something goes wrong, and it will, because distributed systems, you will not want to debug it. And because java is very enterprisey, distributed java developers are expensive. You're competing with faang salaries.
- ivan_gammel 6y agoThere are ways to deal with this problem. Debugging of microservices can be efficient and you don't have to hire the entire team of experts.
- kaba0 6y agoWhat other platform would you want to debug? There is basically no better one then the JVM when it comes to profiling. Exceptions are detailed with stack traces, you can even attach a profiler in production and let it run there because of the negligible overhead with flight recorder. Hell, there are even debuggers that can run your program backwards.
- dnautics 6y agomost things on the erlang virtual machine? Debugging elixir is fantastic.
- a_imho 6y agoI have the exact same criticism about Python.
- BiteCode_dev 6y agoWell, that's the point of opinion isn't it ?
- the_only_law 6y agoI almost considered using Java instead of Erlang for a project I started working on. For one, my mind is still stuck in trying to model systems in a very OOP way, and I was (am?) struggling with OTP. I figured I could pull in Akka to get some of the nice Erlang stuff. But Erlang was just such a good fit for this project. I wasn’t so huge on the Java version of Akka. I also briefly looked at Scala, but I avoid Scala for similar reasons to C++ and Haskell. The nativess of a lot of the features I wanted to Erlang just looked better and it will be a cool homage to the language’s roots. Also this is probably more my fault, but I don’t really understand how distribution works anymore. Supposedly Oracle JDK is no longer supported and you’re supposed to package a JVM with your application, but all the big Java apps still require me to have a system wide JVM to run them? OpenJDK seems to work fine for now. Also after toying with a LAPB implementation, I’m so mad other languages don’t have a good type for dealing bit level data. Bitstrings are a godsend.
- kaba0 6y agoOpenJDK is basically the Java JDK. Oracle JDK is only a “fork” of it, but they have complete feature-parity. Oracle only provides paid support for current and older versions of OpenJDK (similarly to many other vendors) So you can just install OpenJDK from a package manager, use the jlink tool and create your own small “JRE” that you want to bundle. Jpackage can create a platform native executable from that, that is either an installable exe, .deb, rpm or MacOS’s format (I forgot it’s name)
- 2ion 6y agoMy main issue is that people writing Java (or for the JVM) because of their backgrounds (app-level code printers) almost completely disregard how that code works on the JVM, at scale, in a highly responsive and/or high throughput service. You can't just use a big, "safe bet" framework like spring, which taints EVERYTHING in that project, write a simple REST API and then do heavy work "in the background" without side effects. "Running Java" requires detailed system engineering / ops expertise specific to how the JVM works and can be tuned, and all too often, how specific frameworks internally pile their abstractions on top of each other. Problem is, a modern "Java app" is a pile of large frameworks and libraries. As a system engineer, I HATE Java applications written by clueless programmers. They are difficult to handle and I often have to dig in and fix bad usage of framework features that somehow passed code review by equally clueless "senior" developers. I then get to spend a day to find out why this or that connection pool in there managed by this or that library does not handle its connections correctly, just to find the magic framework level variable that tunes that specific screw. Stuff of nightmares. Every Java project is also __severely__ underdocumented. That's because even if you write documentation for YOUR code, the framework has books of documentation on ITS specifics, and includes high-level libraries which THEMSELVES have heaps of specific documentation. Climbing the tree until one arrives at actual standard library calls is like climbing into clouds and hoping to see the sun some day.
- deleted 6y ago[deleted]
- cartoonfoxes 6y ago>"Running Java" requires detailed system engineering / ops expertise specific to how the JVM works and can be tuned > almost completely disregard how that code works on the JVM As an occasional clueless programmer, I've had occasion to touch systems written in Java. Could you point me at some resources?
- gher-shyu3i 6y agoWhat he wrote is not specific to Java. At scale, any program written in any language will require detailed knowledge. This includes "simple" languages like golang. Reality is complex, and for non-trivial programs complexity is going to be somewhere.
- dunefox 6y ago> So Java is not a bad choice. It's an excellent tech. I just don't have a use case for it. The language is underwhelming, the JVM is great.
- hannasanarion 6y agoIt is, but if all you want is a JVM, Java is still probably the worse choice over Scala or Kotlin
- dunefox 6y agoYeah, absolutely. It's objectively worse than most languages.
- bitcharmer 6y agoThe exact opposite is true. Scala's and Kotlin's syntactic sugar comes with tonnes of overhead and additional allocation. Java is pretty raw compared to them and allows you to stay closer to the C-spirit and thus retain more control over the side effects of the code you write.
- smabie 6y agoYou can write Scala to pretty much just look and run like old school Java if you want. I haven't seen any benchmarks, but I doubt a Scala app written idiomatic style would be any slower than the Java version written in idiomatic style. Also, what is this C spirit we are trying to stay close to? I'm certainly not interested in any "C spirit"
- bitcharmer 6y agoThe C spirit I'm referring to is the raw, verbose and low-level-ish nature of writing code in C. For high-performance/low-latency Java apps it is absolutely crucial to have this level of control over code and resulting instructions emitted by the compiler. On the other hand - if you don't care about it and want to focus on domain-level stuff you absolutely can. This is what I find the most appealing about Java.
- de6u99er 6y agoThose are all the wrong reasons in an enterprise environment. Seasoned Java developers would laugh at you if you would tell this to their face What I love about Java is, that I can update the runtime without being afraid to break something. I also love the mature eco system. What's also great is that the compiler catches most code issues before you try running your code. What I don't like is the module support introduced with Java 9, which is vastly inferior to OSGi.
- goto11 6y agoYour premise is that you are able to chose a language based on how appropriate it is for a specific use case. This alone shows you are not the typical user of Java! Java is typically used in larger or long-lived organizations. It is rare to start new projects from scratch. Most development is maintenance and extension of existing systems. Even if you start a greenfield project, it would be most prudent to chose the same platform and language which is already used in the organization. An alternative language would not only have to be better, it would have to be very significantly better to make up for the overhead and headache in maintaining code in multiple languages - never mind the increased difficulty in hiring and training developers. Geeks tend to evaluate language based on how appropriate they would be for a greenfield project with no organizational baggage. But this is an extremely rare use case for most business. HN often has reports about startups rewriting everything from scratch every four months, when a new language or platform becomes fashionable. But this is not the world where most developers live.
- ascagnel_ 6y ago> Even if you start a greenfield project, it would be most prudent to chose the same platform and language which is already used in the organization. Anecdotally, I see a trend of greenfield projects moving from Java to NodeJS. I can't think of too many organizations that have zero web presence, and basically any modern web presence requires the use of JS, so there's almost always some JS expertise built into the organization.
- Pet_Ant 6y ago> there's almost always some JS expertise built into the organization. That is usually part of the front-end team that don't do the backend SQL work. Tho team that would get assigned the work for a backend greenfield would be versed in Java.
- Retric 6y agoIt’s surprisingly rare for things to split like that. At most companies people will be more skilled at front end or back end work, but it’s rarely a clean separation with front end vs back end teams. That’s an outgrowth of most projects being quite small. Paying a team or 20+ people to work on one thing is freaking expensive to the point where it needs major benefit or huge company to be worth it. On the other hand maintaining lots of little projects that all automated something can easily pay for a single developer at even fairly small companies. Across tends of thousands of small and midsized companies you get a lot of such teams which grow and shrink, split off and merge over time.
- huonib 6y agoI think the problem is because of the virtual machine, instead of being compiled to an executable. I mean GraalVM is great - but why did it take so long to develop? I mean Sun could still be alive if developers and users had instant startup times, could have easily deployed Java to servers and clients, and that it was not only faster but used way less memory.
- mnd999 6y agoThe virtual machine is (was?) the whole point. You can run the same binaries on your dev box or your server, whatever flavour of server that happens to be. Startup times are not an issue on servers as processes are typically long-lived anyway. It is a bit of an issue on serverless (lambda etc.) but that’s a relatively new thing. High memory usage is generally poor tuning - if you give the JVM 1gb it will use it and avoid GC until it needs to. Sometimes it’s poor coding too, I’ve seen web APIs accepting files as base64 encoded json strings which is horrific server side.
- huonib 6y agoI'm sorry, did you claim poor tuning? look at this graph: https://alvinalexander.com/sites/default/files/inline-images/java-v-graal-memory-annotated.jpg https://alvinalexander.com/sites/default/files/inline-images... from: https://alvinalexander.com/scala/graalvm-native-executables-faster-than-scala-java-jvm-apps-less-ram/ https://alvinalexander.com/scala/graalvm-native-executables-...
- mnd999 6y agoGraal is very clever, but that memory example is nonsense. I just tried the Find example they give and whether the graal version beats the java version is completely dependent on Xmx. Obviously I don't have their dataset, so it's not exactly the same test. edit: In fact the numbers in the blog are so far off mine they may accidently have been testing /usr/bin/find.
- kaba0 6y agoIt didn’t take too long, there was AOT compilers available two decades ago as well. There was just not much interest in it, because performance gets worth, and startup time is seldom interesting. (Pretty much only command line tools would require faster startup, and recent serverless) And memory usage is a tradeoff. Though most of the time java could run with almost half of the currently used memory, it is unnecessary work to GC if memory is available.
- justbored123 6y ago> Python is older than Java, well supported WELL SUPPORTED???? Have you ever coded a real thing in python? I'm getting "Warning, no longer supported" console messages in all my basic well established tools and libraries written in python because a guy that lives in a world of academics and theory and not in a world of business and delivery dates decided that python3 was not going to have backwards compatibility with python2 because they made a massive irreparable disaster when they designed python2. That is not a professional tool for multi-million dollar companies, that is a toy for spoiled nerds. Exactly the same that Visual Basic 5-6 were when I was starting. Extremely easy to use and extremely fast, at the price of been garbage for anything larger than a toy app. And because all the kids learned that at uni and went to create the next thing in it like PyTorch and TensorFlow, now you have to do all the real code in C / C++ to handle what python can't in terms of speed an reliability, doubling you code base, your Dev teams, and the needed skill set. I have been programing in java in large multinationals for 10 years and I used python every single day for the past 3 years for what its useful: small hacky scripts to increase productivity. The real sh*t that manages you cellphone towers, you home-banking, you online shopping, your logistic chain and your android cellphone apps, all things that I have worked on, gets done in Java.
- BiteCode_dev 6y agoDropbox, Instagram, Google, Youtube, reddit and Nasa all have been heavily Python powered for a decade. I myself have coded a streaming platform getting half a million user every day in Python. Baring the CDN to store the content, it runs on 2 servers, one for the DB. So real things get done in Python pretty well.
- for_xyz 6y agoIn case of the Dropbox please read this: _But as the company grew, new engineers who joined couldn’t understand the code. Clever code is usually short and cryptic, written by and for the individual who came up with it, but is hard for anyone else to understand—and nearly impossible to maintain. Guido called this “cowboy coding culture”. He recognized its value in our early stages of trying to implement things quickly, but knew it wouldn’t be sustainable over time, so he decided to speak up in his own quiet way._ And now they'll have to rewrite everything in programming languages where maintenance is not a burden. [0] https://blog.dropbox.com/topics/company/thank-you--guido https://blog.dropbox.com/topics/company/thank-you--guido
- chasd00 6y agoTo me Java is like a garbage truck. You get to work, start it up, do a nearly invisible but absolutely essential duty, then, at the end of the day, you turn it off and go home. No one dreams about garbage trucks or puts one in a car show but they’re there and ready to go right back to work when you are.
- bengalister 6y agoI agree mostly. Some good use cases for Java: - cryptography: It has a wide range support of symmetric/asymmetric algorithms from legacy to modern ones. - XML and SOAP with Web Service Security in particular. - Modeling large business concepts because of static typing, Objects inheritance and polymorphism, no memory management while still being performant. I would not use Python for that but other languages can compete C#, Scala, Kotlin, maybe Typescript.
- BiteCode_dev 6y agoPython and Ruby both would fit the bill perfectly for all those use cases for me. The cryptography module in Python is awesome. lxml and sud deals with XML and Soap in a blink. Modeling large business concept is a joy with dataclasses, and the language will never be the perf bottleneck. Now I understand that if you are experienced with Java, it would solve all those problems perfectly. But again, I would not, personally, gain anything by using it for this.
- fighterpilot 6y agoJava is great when you need speed approaching Rust/C++ but don't actually need to be the fastest. It's way easier than C++ and will get you 80 percent of the way there in terms of performance
- ta988 6y agoThis is oversimplifying probably. The JVM can make your non-optimized code faster than your non-optimized c++ code.
- fighterpilot 6y agoAgreed
- fouric 6y ago> not opinionated enough to compete with Lisp/Haskell Interesting - you seem to be saying that Lisp is very opinionated. If that was your intent, may I ask why? Your experience doesn't jibe with my experience as a Common Lisp user, which is that Lisp isn't opinionated enough, and gives you too much flexibility (in some cases).
- suyash 6y agoEver heard a technology called GraalVM ?
- winrid 6y agoJava is very high level - it runs on a VM and manages memory for you. I think the opinion you're trying to convey is "not untyped enough".
- JAlexoid 6y agoPython's tooling is horribly underdeveloped... And you notice that when moving from Java to Python. And all the solutions are at this point in time are hacks. If I needed to waste more time on hacking a setuptools script, to get a file placed into /usr/local/lib/shared... I'd rather use Go or Rust.
- vietvu 6y agoIf I can choose, I won't use Java either. Some jobs in the past requires me to use it, since it's popular. However, nowadays I can just use Python since most of my job is about data engineer.
- _huayra_ 6y agoYou're missing the other JVM-based languages, notably Scala. Scala has a "tunable" level of PL feature usage; you can write very Java-esque Scala at the beginning and slowly incorporate more advanced features. The key thing about these features are that once you understand what they do, it allows you to write fewer lines of code overall. Fewer lines typically means fewer bugs, and it communicates intent with more clarity (at least to developers who are familiar with the patterns). This makes it easy to onboard new devs who may not know a lot of Scala and let them be productive from day 1 (writing Java-style Scala) while advancing their skills towards more fancy idioms. I have stayed away from JVM-land after taking a different tack in my career trajectory, but I worked at Twitter about a decade ago when they were transitioning to a JVM-based stack and were early adopters of Scala. It was really a joy to be able to simultaneously get my work done while uncovering all of the new cool language features!
- TwoBit 6y agoIf you are talking about Erlang and D etc then your uses are unusual and not typically commercial and so I don't put much value in your response. No offense intended though.
- EvilEy3 6y ago> If I want a distributed system or something with a lot of I/O, Erlang and Go will always be better than Java. Based on what?