News for hackers. Stuff that matters.
Re:The Importance of Humility in Software Development (2020) by goto11 on Wednesday May 12, 2021 @02:52AM (#27127475)
Lots of programming wars is just tribalism. Java is disliked on HN because it represent "enterprise" - big long-lived organizations which maintain a codebase for decades and therefore conservative. A different tribe than the startup tribe HN represent. Java is not in particular more verbose than say C or Rust for solving the same task, it is just a random slight on the language of a different tribe.

HN is a great community, but it has a very narrow perspective on the world.

As a beginner it is fine to chose to master one language first, but in the long run you should not "choose a language", but rater learn to learn any language, and understand they all have their strength and weaknesses.

But there are so many choices of tools and technology in this industry and it is impossible to learn it all. Tribalism makes the world simpler because it narrows your perspective.

Re:The Importance of Humility in Software Development (2020) by js8 on Wednesday May 12, 2021 @04:02AM (#27127890)
> Java is disliked on HN because it represent "enterprise" - big long-lived organizations which maintain a codebases for decades and therefore conservative

I work on mainframes and dislike Java. Conservatism is not a problem, my problem is I perceive lot of Java people being pretty smug, and they are just because Java is #1. (And I also worked in C#, so I know the difference. Java itself is not the thing that makes people smug about it, it's the position on the popularity ladder.)

I mean, if your approach is, we use this old and tested language, it has many warts, but works for us.. good.

If you go, well, we use this language, because it's #1, and therefore it's clearly the best in the world.. no, thanks. I know Forth and Lisp and Haskell, and I know the world out there, which you don't, so I know for a fact there are innovations that didn't make it to Java yet, or pretty badly.

To me, humility in programming is (partly) don't think your tool is the best just because it's the most popular one at the moment.

Finally, this perception of Java is changing (it is being slowly dethroned by Python and JS and other contenders), and with that will come more pragmatism (less of crazy OOP and patterns cargo cults), which will actually make it more likable in the future.

Re:The Importance of Humility in Software Development (2020) by Jenk on Wednesday May 12, 2021 @04:54AM (#27128192)
Weirdly my perception of Java (and C#) is actually a bit of what you describe, but often a lot more one of drifters who know/care just enough to get a salary and continue to drag their bad legacy habits and patterns with them from role to role.

The more esoteric a language is, I find the more _passion_ the average developer has for that language, it's libraries, and tooling.

Now I'm not saying the passionate Java and/or C# devs don't exist - they certainly do, C# is my bread-and-butter and I like to think I still have a flicker of passion for my work - only that there is a vast ocean of driftwood developers making it more difficult to find the sharks.

Haskell (my perception of), for example, has demonstrated some of the strongest devoted (to themselves _and_ Haskell) developers I'm yet to meet. That market is just nothing but developers who love their toolset and just want to write and learn amazing code.

Re:The Importance of Humility in Software Development (2020) by 0xEFF on Wednesday May 12, 2021 @10:41AM (#27130885)
> That market is just nothing but developers who love their toolset and just want to write and learn amazing code.

The risk with this type of developer is they often prioritize their toolset and amazing code over the actual businesses needs. I’ve seen it lead to the wrong tool being used for the job.

A couple years later when these devs move on the business has a harder time maintaining the code they leave behind.

There are always drifters to be hired, which has some value.

Re:The Importance of Humility in Software Development (2020) by Jenk on Wednesday May 12, 2021 @02:21PM (#27133468)
Yes it is very much a double edged sword. The other risk associated with highly passionate Devs is that one day the work your business values no longer accommodates what tooling they want to work with, or they themselves change tack sporadically after discovering something new. I've had amazing JavaScript developers quit on me because they got bored of using react and wanted to pursue a role in Vue, for example.

But I'll take hiring (and the implied difficulty in finding) a dozen of those kind of Devs over drifters all the same.

Re:The Importance of Humility in Software Development (2020) by roenxi on Wednesday May 12, 2021 @06:37AM (#27128726)
> The more esoteric a language is, I find the more _passion_ the average developer has for that language, it's libraries, and tooling.

If they weren't passionate, why use an esoteric language? If you want an easy time, something mainstream will be easier. It isn't like anything is actually impossible to implement in C; there are just trade offs in number of bugs and time to implement. Both of which are minor impediments vs algorithm and program architecture. Anything newer than C is just bonus modern features.

Re:The Importance of Humility in Software Development (2020) by Jenk on Wednesday May 12, 2021 @08:34AM (#27129513)
> If they weren't passionate, why use an esoteric language?

Because it is kitsch. Ruby suffered this fate in the mid 00s IMHO. It gained a lot of traction because of Rails and suddenly the recruitment space is flooded with hacks and bootcampers.

Re:The Importance of Humility in Software Development (2020) by 0xbadcafebee on Wednesday May 12, 2021 @09:33AM (#27130110)
Many IT workers are smug. Programmers, network admins, DBAs, sysadmins, architects. They all think they know something that other people don't (which is sometimes true!) and then transmute that feeling into a sense of superiority, which funnily enough ends up limiting them.

All programming languages are garbage to me now. Even my favorite languages. Most systems, networks, databases, are garbage to me. Frameworks, architectures, patterns, paradigms, protocols, standards, conventions..... all garbage.

I now see the whole system as like a municipal waste treatment plant. If we work really hard, the highest thing we can aspire to is to prevent waves of unprocessed shit from exploding out a release valve into a nearby stream. Our work should be unglamorous and practical, because ultimately someone's going to have to drink our water, and making sure it doesn't have shit in it should be our highest priority.

Re:The Importance of Humility in Software Development (2020) by NortySpock on Wednesday May 12, 2021 @12:34PM (#27132210)
It does, at least, mean that (most of) our work is honorable and honest: keep shit out of the drinking water, keep the lights on, provide data products to businesses or people in or people for them to make informed decisions about the (business) world around them.
Re:The Importance of Humility in Software Development (2020) by denton-scratch on Wednesday May 12, 2021 @10:45AM (#27130929)
"waves of unprocessed shit"

I totally agree.

I also agree that the disputes about language choices is tribalisitic. There's nothing wrong in principle with Java. But Java nuts do love creating factory-factory-factories. Layer upon layer of abstractions really doesn't confer simplicity.

Most recently, I've been a PHP developer. It's objectively an awful language, that has grown by accretion, and was never designed. But it's quick to write, reasonably easy to read, and there's pretty good documentation online, and a million tons of chunks of example code.

So my choice of language is essentially tribal; the details of the language aren't really important, as long as it's not getting in the way. It's the kinds of people that use the language that matters to me.

Java's reputation as a corporate language is well-deserved; and (with exceptions) the type of people that use it seem to be corporate drones, that don't mind spending a week writing a factory-factory-factory that nobody needs.

Re:The Importance of Humility in Software Development (2020) by amarant on Wednesday May 12, 2021 @04:20AM (#27128004)
Agreed! Most of my professional experience is in Java, and the biggest issue I've experienced in the java community is precisely this lack of humility. Usually that comes in the form of people believing that Spring is the best framework for java backend development, regardless of your needs, because it's the biggest, most popular framework. Arguments do not work on these people, at all, they start countering technical arguments with "I work at BigTech Inc. and we use Spring, so clearly you don't know what you're talking about"

Java as a language does have problems, but if you use it right, it can be pretty nice to work with. The verbosity issue is kind of a double edged sword, on the one hand there's lots of typing, on the other hand, I find it (the verbosity) can help make code very readable and easy to understand, at least if well written.

Re:The Importance of Humility in Software Development (2020) by TheOtherHobbes on Wednesday May 12, 2021 @08:42AM (#27129605)
The original argument that developers who look down on Java lack humility is not disproved by the counter-argument that Java developers also lack humility.

The common factor is developers lacking humility and comforting themselves with Tribal Tool-ism.

The tools are not the issue - the attitude around them is.

It's more of an anthropological and political problem than a technological issue.

Of course there is no one ultimate definitive best language, and there may not even be a definitive ultimate best language for specific kinds of problems.

But the anthropology around Tool-ism is fascinating, and under-researched.

And it's very relevant to the real-world effectiveness of CS, because irrational professional beliefs in both tooling and management can have very harmful and expensive real-world consequences.

Re:The Importance of Humility in Software Development (2020) by saagarjha on Wednesday May 12, 2021 @04:13AM (#27127956)
I actually see Java looking at itself and realizing where it need to catch up to other languages these days. As someone who grew up with Java 5/6/7, the current pace seems breakneck with much-welcomed improvements.
Re:The Importance of Humility in Software Development (2020) by locallost on Wednesday May 12, 2021 @04:17AM (#27127986)
It's not just HN, and it's not just Java. Actually it's not just software development, it's almost everything - movies, music, sports. A is better than B because. C sucks. In certain contexts this is ok, the fun is in the pointless argument, but engineering should be more serious than that. Alan Kay referred to the whole field as a pop culture, and I can see his point.
Re:The Importance of Humility in Software Development (2020) by p0nce on Wednesday May 12, 2021 @04:21AM (#27128011)
> HN is a great community

HN feels like white collar GPT-3. It predictably likes things that are more abstract, less practical, and promise novelty while replacing the incumbent. It also used to be a very self-serving chamber for startup investors. Honestly I come for the randomness but as community it's really the point of view of vocal people only.

Re:The Importance of Humility in Software Development (2020) by gonzo41 on Wednesday May 12, 2021 @04:41AM (#27128127)
I see that attitude as a symptom of professional boredom. Some people like shipping products, some people like solving problems. Sometimes people who like problems build complex products to solve imaginary problems.
Re:The Importance of Humility in Software Development (2020) by p0nce on Wednesday May 12, 2021 @05:44AM (#27128465)
> Sometimes people who like problems build complex products to solve imaginary problems.

While I'm critical, I'm guilty of this. Well said.

Re:The Importance of Humility in Software Development (2020) by lenocinor on Wednesday May 12, 2021 @12:56PM (#27132466)
I agree about the vocal people being the ones that influence the conversation. I hope there can be some way to fix this problem. I’ve been reading Hacker News avidly since close to when it started, and I comment occasionally when I feel like I have something unusual to offer. But mostly I don’t influence the site even though I’ve spent multiple thousands of hours here, and I wish that could be better somehow.
Re:The Importance of Humility in Software Development (2020) by ChrisMarshallNY on Wednesday May 12, 2021 @04:16PM (#27134622)
I try to offer the types of things that I'd like to see. Basic modeling.

I'm very much into encouraging folks to connect at a "human" level, and not treat each other as abstractions.

I also like practicality and experience. I've found that I feel as if I'm contributing, by telling stories. I'm of "a certain age," so I have a lot of them; including embarrassing ones.

    "Good judgment comes from experience. Experience comes from bad judgment."
    --Attributed to Nasrudin, but I read it from Will Rogers
It's not "making it all about me," but it is about not projecting onto others, and trying to bring my own life experience into things.

I have become a bit despairing of what has happened to the culture of the tech industry. I feel as if what used to be a fun, exploratory place has become a voracious, hyper-competitive gladiatorial arena; complete with lords on the sidelines, giving thumbs up and thumbs down.

I know that it seems as if I may be looking back with rose-colored glasses, to those that have always known the industry as it is now, but I assure you. It was once quite different. We had fun, and we shared information, and we were pretty damn nerdy.

When I was reading the various accolades about Dan Kaminsky, it actually choked me up. He was the type of person that seemed to be everywhere. The people who were really good at stuff didn't use it as a hammer to pound others; they shared their passion and exuberance.

I try, in a rather awkward way, to do that, myself. I'm quite capable of being a super-negative "black hole," but I won't do that. I wouldn't want to live in a world like that, so I won't contribute it.

Being negative is an easy way to get lots of clicks and shares, but it fouls everything it touches.

Re:The Importance of Humility in Software Development (2020) by enriquto on Wednesday May 12, 2021 @05:54AM (#27128518)
> HN is a great community, but it has a very narrow perspective on the world.

Don't you say? Isn't everybody out there writing rust on neovim?

Re:The Importance of Humility in Software Development (2020) by fn1 on Wednesday May 12, 2021 @03:54AM (#27127829)
> Java is disliked on HN because it represent "enterprise" - big long-lived organizations which maintain a codebase for decades and therefore conservative.

Exactly. But what I found is that refactoring java-monoliths can be a very interesting and intellectually stimulating task.

Re:The Importance of Humility in Software Development (2020) by heresie-dabord on Wednesday May 12, 2021 @09:35AM (#27130130)
> tribalism

Apart from the juvenility of social memia, there is the fact that programming languages are themselves buggy, opinionated expressions of how to solve a problem. Given enough followers, some languages become very like a temple that sees no ill within its own walls.

A programmer must be able to reason clearly about the code, or something (or some opinion) has become dogma.

There are many good programming languages. Leaving tribe and tribalism brings maturity.

Re:The Importance of Humility in Software Development (2020) by doggodaddo78 on Wednesday May 12, 2021 @09:30AM (#27130086)
Tribalism is social nonsense. I taught myself C in 92 and Java 1.0 in 96. That Java was extremely verbose compared to C for chaining calls or just normal method calls. Rust is also verbose for constructing types and performing type manipulations. C is verbose for getting things done because of its low-level nature. As productivity and safety goes, I'd choose Rust over Java or C as a systems language for most purposes. The JVM is a secure foundation for running applications in multiple languages. Clojure, Kotlin, JRuby make excellent replacements for the Java language while still on the JVM.

JVM and CLR runtimes have an enormous amount of production experience baked into them. BEAM also would be fine.

It's a toolbox with tools that are better suited for some jobs than others, and it also depends which ones a group of developers know.

Re:The Importance of Humility in Software Development (2020) by axguscbklp on Wednesday May 12, 2021 @03:30PM (#27134241)
>Java is disliked on HN because it represent "enterprise" - big long-lived organizations which maintain a codebase for decades and therefore conservative.

Yet HN commenters tend to like the React ecosystem, which at this point is pretty close to Web Development Enterprise Edition.

Re:The Importance of Humility in Software Development (2020) by mywittyname on Wednesday May 12, 2021 @11:41AM (#27131593)
> Java is disliked on HN because it represent "enterprise" - big long-lived organizations which maintain a codebase for decades

It's one of the few languages out there capable of producing a codebase that lasts for so long. That annoying verbosity and enforcement of naming conventions and directory structure mean that the Next Guy (or Gal) to come into the project and probably figure out what's going on. Most codebases written in other languages are constantly rewritten in the language de jure.

Re:The Importance of Humility in Software Development (2020) by anaerobicover on Wednesday May 12, 2021 @02:12PM (#27133375)
de jure -> du jour

"by law" -> "of the day", "current"

Re:The Importance of Humility in Software Development (2020) by EricE on Thursday May 13, 2021 @02:13PM (#27145345)
>As a beginner it is fine to chose to master one language first, but in the long run you should not "choose a language", but rater learn to learn any language, and understand they all have their strength and weaknesses.

Exactly. Languages come and go. But if you understand the fundamentals - why things work the way they do - it makes it much easier to move between languages, programming models and whatever the latest fad is. Being adaptable is a far more valuable skill over time. Nope, it's not easy - but rarely are things of value easy (it's why they are valuable - ha!). It is easier to start out early with this perspective and continually building on it throughout your carrier than trying to pick it up mid stream later on in life, so the sooner you start the better! I've never considered myself "done" when it comes to reading or learning. Like those sharks that die if they stop swimming - that's a good way to envision your long term intellectual health :)

Re:The Importance of Humility in Software Development (2020) by internetslave on Wednesday May 12, 2021 @02:54AM (#27127491)
Java is miserable to write. You don’t realize this until you work with other languages. It was literally built with guardrails to keep enterprise coders from getting too creative
Re:The Importance of Humility in Software Development (2020) by goto11 on Wednesday May 12, 2021 @03:22AM (#27127646)
Yes lets rewrite everything Ruby on Rails and CoffeScript, it is just so much more productive and creative! At least this was the opinion on HN a few years ago. Now of course other tools and languages are fashionable. And nothing against Ruby or CoffeScript per se, but the demands of an enterprise where software lives for decades is just different than for a startup which rewrite the whole stack every six months.

Creativity and cleverness is a double-edged sword, which is exactly what Dijkstra is talking about.

Re:The Importance of Humility in Software Development (2020) by nmfisher on Wednesday May 12, 2021 @04:17AM (#27127988)
Compare writing Java professionally with writing Kotlin professionally. It's like night and day. Same projects, same VM, all that's different is the language.

Distaste for Java isn't elitism or arrogance, it's just that the language is so damn painful to write.

If you start your career with Java (as I did), dipping your toe into another[0] language for the first time feels like Neo being ejected from the matrix and waking up to reality.

You realize your eyes are finally open, you're awake, and you can see that all that pain was just what Java saddles you with, and wasn't "the way programming is done (TM)".

[0] depends on which language, of course. Java to C# isn't a big jump.

Re:The Importance of Humility in Software Development (2020) by ajuc on Wednesday May 12, 2021 @04:25AM (#27128028)
Could you write your top 3 Java pain points?

I started working in C++, moved to Java, used several other languages commercially (Python, JS, PHP, Groovy, Kotlin), and about dozen other languages for personal projects including the hip ones like Clojure, Prolog, Ruby.

My first programming languages were C64 BASIC and Turbo Pascal. I've written some Ada and SML.

And I just don't understand the Java hate.

Re:The Importance of Humility in Software Development (2020) by austincheney on Wednesday May 12, 2021 @05:27AM (#27128368)
I have worked in Java shops my entire career (Travelocity, Orbitz, Expedia, Southwest, Bank of America) and have lots of pain points. In these cases Java is used to prop up a web server and typically with Spring.

Pain points:

* Stack traces seem to run to 500+ lines and nobody reads them.

* The processes, release management, and integration of code in a Java environment is glacial slow and obtuse featuring very low automation and many large teams of dev ops. The very idea continuous deployment is absent. Code releases occur at regular intervals quarterly or monthly if you are super fast and it feels like moving a continent. All of that slowness and super man power also applies to everything else not written in Java like riding on the back of a retardant elephant.

* Java applications running enterprise web servers are monolith beasts like the Great Wall of China wrapping the Pacific. Refactoring in those applications feels like inventing a new language while sinking in quicksand. Writing a JavaScript application in a massive MVC framework feels like that too but Java is orders of magnitude worse.

* What I really don’t understand is that Java is such a fast language but large enterprise web server applications written in Java always feel so slow in user experience in production. It just feels like something from the late 90s. That slow becomes the baseline experience to internal development by which all user experience ultimately suffers. There is no reason pages from these servers should take 5-20 seconds to fully load in the browser even though the page is a light smattering of static text with sprinkles of CSS and JS. I have an application in TypeScript that emulates the front half of an operating system and it fully loads in the browser in 0.3-0.8 seconds (averaging around 0.65 seconds).

Re:The Importance of Humility in Software Development (2020) by js8 on Wednesday May 12, 2021 @05:50AM (#27128493)
> What I really don’t understand is that Java is such a fast language but large enterprise web server applications written in Java always feel so slow in user experience in production. It just feels like something from the late 90s.

My personal suspicion is that the programming style used in Java (OOP and patterns) together with the fact that everything is a reference, and everything is implemented in Java itself way down, kills the cache locality, which is the thing that makes modern computers fast.

Yes, you can write fast Java programs, if you keep abstractions to a minimum, use arrays rather than objects when allocating, and take advantage of the JIT compiler. But these are more lab conditions (which are great for benchmarks) rather than the real world conditions. I think finally having a proper record type in Java will help to fix this.

Re:The Importance of Humility in Software Development (2020) by twic on Wednesday May 12, 2021 @06:52AM (#27128815)
Shitty, poorly-run corporate behemoths (a) are shitty and poorly-run and (b) use Java, because it's an industry standard. You are making the error of thinking that the latter consequence causes the former.
Re:The Importance of Humility in Software Development (2020) by js8 on Wednesday May 12, 2021 @08:34AM (#27129523)
Interestingly, the old COBOL/CICS/DB2 stacks do not seem to have this problem (and they are run pretty much only by corporate behemoths). Why is that?
Re:The Importance of Humility in Software Development (2020) by ajuc on Thursday May 13, 2021 @02:51AM (#27139185)
less hardware to throw around = better (simpler) codebase
Re:The Importance of Humility in Software Development (2020) by q-big on Wednesday May 12, 2021 @07:41AM (#27129143)
> Shitty, poorly-run corporate behemoths (a) are shitty and poorly-run and (b) use Java, because it's an industry standard. You are making the error of thinking that the latter consequence causes the former.

Other programming languages make it "more inconvenient" to apply such managament/programming practices.

Re:The Importance of Humility in Software Development (2020) by ajuc on Wednesday May 12, 2021 @06:27AM (#27128686)
> Stack traces seem to run to 500+ lines and nobody reads them

ok, you have a point here :) when you have libraries for filtering stacktraces you know something is wrong

> the processes, release management, and integration of code in a Java environment is glacial slow and obtuse featuring very low automation and many large teams of dev ops. The very idea continuous deployment is absent

that is the exact opposite of my experience - maven infrastructure beats anything C++ or Python have, and in every Java project I worked on we had CI (mostly BitBucket+Jenkins but I've also seen Apache Continuum and Team City and we had CI even back in svn/cvs era).

> large enterprise web server applications written in Java always feel so slow in user experience in production

Also not my experience, I've worked on an intranet app for warehouses that used jboss 4, jbpm 3 and plsql at the backend and a very small custom c# client running on remote Windows CE terminals. We had transactional and persistent business processes drawn as graphs invoking PL/SQL on the server, it was pretty nice. And the full roundtrip between pressing a key on a remote terminal and rendering the received response was under 150 ms. That's for all the layers: - c# client -> intranet -> SOAP on jboss -> EJB3 -> jbpm -> hibernate -> JDBC -> PL/SQL and back

And it was around 2008 - in the age of spinning disks :) Certainly it was good enough for us and actually faster than previous simple code that we were replacing (remotes telnetted to a C++ text-only server that connected to the same business logic in PL/SQL). ORM cache wins covered all the performance loses caused by additional abstraction layers.

We didn't use html/js/front-end templating engines tho, at the time most people used JSF or similar and it sucked. We had a custom XML protocol that was rendered by the C# client and it was very fast.

Of course it wasn't that demanding - under 500 users all on the same local network. But without any thought spent on optimization (other than enabling 2nd level cache in hibernate) it was a pretty good result.

> There is no reason pages from these servers should take 5-20 seconds to fully load in the browser even though the page is a light smattering of static text with sprinkles of CSS and JS.

well yeah, something's wrong. I bet on data layer or passing each request through 20 microservices on different continents (this is the most recent fashion in server-side programming and it sucks).

Re:The Importance of Humility in Software Development (2020) by ArnoVW on Wednesday May 12, 2021 @05:01AM (#27128235)
Haven't upgraded Java since version 9, so take this with a cube of salt (my suspicion is that many hardcore Java haters were created by Java 5, 6 etc).. but my general issue is the readability. The idioms used to perform 'standard' things are verbose. The worst for me is that it's impossible to catch exceptions in lambdas. The absence of named or optional parameters.

Mind you, I'm only saying that after having spent 2 years in Kotlin. The Stockholm syndrom is real: you don't realize how much better things can be from the inside. Programming has become enjoyable again, my work 'feels' cleaner, more readable. Null safety makes reasoning about code that much easier. I can switch to functional programming when it's convenient. I keep all the tooling from Java, including the amazing IntelliJ IDE.

At the end of the day, choices are a matter of arbitration. Do I want the speed of C, the ecosystem and resource pool of Java, the locality / mathematical guarantees of functional languages, and the IntelliJ IDE? Sure. But they don't exist in one language.

So when I'm programming embedded, it's C. When I'm creating a complex data treatment pipeline for machine learning, it's Scala. And when I'm making a CRUD application that will have to support a team of 15 developers hacking on it for a decade, I'll go with Kotlin.

Re:The Importance of Humility in Software Development (2020) by oftenwrong on Wednesday May 12, 2021 @11:51AM (#27131725)
>The worst for me is that it's impossible to catch exceptions in lambdas.

I don't take issue with your comment overall, but this is not true. You can catch exceptions within lambdas, and you can define functional interfaces that declare that they throw checked exceptions.

Re:The Importance of Humility in Software Development (2020) by ArnoVW on Wednesday May 12, 2021 @02:24PM (#27133502)
You're right. It's been a while and I forgot the exact issue. I looked it up on StackOverflow, to refresh my memory [1]. It is indeed possible to thow exceptions within a lambda.

My issue is that for something as everyday as "throwing exceptions", you have to define a separate interface, or catch it inside the lambda. The first option being the Evil Verbosity everyone is on about, the second essentially rendering the exception useless as an instrument.

[1] : https://stackoverflow.com/questions/18198176/java-8-lambda-f...

Re:The Importance of Humility in Software Development (2020) by smitty1e on Wednesday May 12, 2021 @05:24AM (#27128350)
Java, in my experience of having to puzzle out a couple of large codebases in my career (that is, not having been a serious developer) is what happens when a couple of idioms run amok.

Inversion of control, interfaces, and OO make wandering a codebase feel like being lost in a bureaucracy.

Then we het to the issue of projects being coupled to IDEs. "Oh, this is an Eclipse project." "Oh, this is IntelliJ".

All of that chrome and tailfin leads to projects that take longer to boot than the OS.

The disdain for Java may be less about the language per se than the attendant mindset.

Re:The Importance of Humility in Software Development (2020) by Viliam1234 on Wednesday May 12, 2021 @04:01PM (#27134480)
> Then we het to the issue of projects being coupled to IDEs. "Oh, this is an Eclipse project." "Oh, this is IntelliJ".

We use Maven projects, and edit them in whatever people prefer to use.

Re:The Importance of Humility in Software Development (2020) by ajuc on Wednesday May 12, 2021 @06:54PM (#27136157)
Yeah that's a weird complaint. Java build system situation is better than most other languages. Especially C++ is in stone age comparatively.
Re:The Importance of Humility in Software Development (2020) by smitty1e on Thursday May 13, 2021 @06:03AM (#27140416)
Maybe it was more historically true. Then there was the Ant vs. Maven vs. Gradle thing.

This would not be such a complaint (look at the explosion of build systems everywhere) if Java were less touted as "write once, run anywhere".

Build systems and configuration management are two hard problems.

Re:The Importance of Humility in Software Development (2020) by ajuc on Friday May 14, 2021 @02:22AM (#27151315)
Maven and gradle projects can depend on each other, are producing the same kind of artifacts and deploying them to the same repositories. And both can be used in any IDE you like.

And ant is prehistory.

In C++ they don't even have Maven equivalent (only thousands build systems but no universal way of naming/deploying/running projects or specifying dependencies).

In Python there's several maven-like systems that are incompatible and don't have the concept of universal project identifier or repositories.

In JS and Rust they basically copied the Maven system and changed it a little.

Clojure uses Maven wrappers with lispy syntax for pom files.

I struggle to find a language where this is solved better than in Java.

Re:The Importance of Humility in Software Development (2020) by blazespitfire on Wednesday May 12, 2021 @05:19AM (#27128318)
All the problems here are solved till Java 15 in every iteration. A lot of opinion in Java is based on comparing old versions of Java with latest version of other languages
Re:The Importance of Humility in Software Development (2020) by nmfisher on Wednesday May 12, 2021 @05:44AM (#27128466)
Bear in mind that I've written almost no Java since 8, so this may well be out-of-date.

With that in mind, though, the biggest gripe I have, by far, is its needless verbosity. It always feels like I need a huge amount of boilerplate and repeated keystrokes to get things done. My fingers literally get more sore writing Java than anything other language.

Lack of extension methods is probably my next complaint, because you end up fumbling about writing a lot of code to address what should be

Lack of null-safety would be the next one, too. I'd say around 90% of my runtime errors are due to improper null handling, so this would cut down a huge source of errors.

On par would be painful deployment (and to a degree, package management). For some reason Java always felt like it needed an industrial-size team to get anything actually up and running, and needed more hardware than any other language. That might not be fair, but I think it's definitely fair to say that deployment is not Java's strong point.

Re:The Importance of Humility in Software Development (2020) by bluefirebrand on Wednesday May 12, 2021 @11:59AM (#27131815)
> With that in mind, though, the biggest gripe I have, by far, is its needless verbosity. It always feels like I need a huge amount of boilerplate and repeated keystrokes to get things done.

This is my biggest complaint about OOP development in general and languages like Java and C# that are heavily invested in OOP paradigms are miserable for me as a result.

Re:The Importance of Humility in Software Development (2020) by denton-scratch on Wednesday May 12, 2021 @11:00AM (#27131127)
"more hardware than any other language"

It doesn't, in fact; but configuring a Java application to run well with minimal resources is a problem that isn't a programming problem, it requires a separate skillset. So you end up with build specialists, and deployment specialists, which in turn results in long deployment timetables.

Re:The Importance of Humility in Software Development (2020) by podunkPDX on Wednesday May 12, 2021 @03:02AM (#27127537)
I can’t speak to the actual act of Java development, but I can speak to Java applications from a sysadmin perspective (15 yr Sr. QA Engineer to a 3 yr Linux admin (don’t ask)) — I’ve got no real beef with Java from the development side, but maintaining some of those stacks in production is pure pain.
Re:The Importance of Humility in Software Development (2020) by lmm on Wednesday May 12, 2021 @03:29AM (#27127677)
Huh? Java is probably the least demanding stack from the sysadmin side - no big chains of library dependencies, no docker, strong backwards compatibility that means you can fearlessly upgrade the language. All you have to do is keep an up-to-date JVM installed on your servers and deploy single-file fat JARs to them.
Re:The Importance of Humility in Software Development (2020) by smitty1e on Wednesday May 12, 2021 @05:30AM (#27128381)
Then you get into managing a collection of Java projects where each on ships its own JVM and keystore to obviate version issues.

And then you have to deploy certificates against all that.

I'm not bitter.

Re:The Importance of Humility in Software Development (2020) by twic on Wednesday May 12, 2021 @06:57AM (#27128840)
The keystore situation is indeed poor. For several years now, it has been possible to do more key management in-app, so you don't need to manage keystores (i have written programs which pull standard PEM-encoded keys from environment variables). But the practice of using a JKS keystore is so ingrained that it's very rare to make use of that.
Re:The Importance of Humility in Software Development (2020) by lovasoa on Wednesday May 12, 2021 @04:09AM (#27127941)
Until you get an out of memory error. Then you need to start fiddling with the JVM.

Or until you realize that you have a 99th percentile latency of multiple seconds...

Re:The Importance of Humility in Software Development (2020) by lmm on Wednesday May 12, 2021 @04:47AM (#27128159)
No language is immune to slow or memory-hungry code. The JVM is probably the easiest runtime to monitor/instrument/profile (and it's not like having no runtime makes that any easier, quite the opposite), and has probably the most tuneable GC going.

I guess enabling your users to do that might be work for a sysadmin, but that's more a reflection of those users having higher expectations for Java than for other runtimes - providing your users with the same capability in other stacks is never easier than Java, and often significantly harder.

Re:The Importance of Humility in Software Development (2020) by oblio on Wednesday May 12, 2021 @04:52AM (#27128182)
There are only a bunch of out of memory errors, though. And they're easy to fix.
Re:The Importance of Humility in Software Development (2020) by rendaw on Wednesday May 12, 2021 @03:39AM (#27127724)
I know this is just flamebait, but I write a lot of Rust, Python, Java, C++, Ruby, Typescript, etc. Java is fantastic to write in. What guardrails are you talking about?
Re:The Importance of Humility in Software Development (2020) by oblio on Wednesday May 12, 2021 @04:51AM (#27128179)
My guess? Lack of first class functions and macros. Maybe higher kinded types.

The first one is annoying, not really something a professional software developer would care about for more than 10 minutes while creating a new product.

Macros can be major footguns, they're something that can only be realistically used efficiently and safely in large code bases by actual senior engineers. So the jury's still out how much they really increase productivity for the averaged developer.

Higher kinded types seem great, but it seems that they're not easy to implement and they also slow compilation down a bunch (someone please correct me on this). These seems hard to bolt on to an existing language, so Java can't be faulted much.

Re:The Importance of Humility in Software Development (2020) by smitty1e on Wednesday May 12, 2021 @05:27AM (#27128369)
Java itself may lack macros, but by the time you get in reflection and libraries with XML and compile-time magic to work around the lack of macros and the whole thing is a giant plate of spaghetti, maybe macros were no' so bad after all.
Re:The Importance of Humility in Software Development (2020) by rendaw on Wednesday May 12, 2021 @07:41AM (#27129147)
Those would've been my guesses too, but Java's had first class functions in the form of anonymous classes since 1.1, and as the other commenter mentioned reflection takes care of a lot of macro use cases.
Re:The Importance of Humility in Software Development (2020) by the_arun on Wednesday May 12, 2021 @03:34AM (#27127699)
Problem is not with programming languages. It is with lack of programming principles. For eg. Consistency, Readability, Maintainability. Software requirements keep changing with time & so if we do not do continuous refactoring, we see a decay. Also in enterprises team ownership keeps changing & we miss the accountability. This erodes software. People need to give a damn to maintain software.
Re:The Importance of Humility in Software Development (2020) by ajuc on Wednesday May 12, 2021 @03:49AM (#27127795)
That's like a mason or an engineer complaining that the bricks are too boring and predictable :)

There's a place for "artistic licence languages" like Ruby or Clojure and I like them for experimenting, but when you want to build a house you want the bricks to be boring.

Re:The Importance of Humility in Software Development (2020) by crm on Wednesday May 12, 2021 @03:10AM (#27127588)
I think those guardrails often help with the humility the article discusses - they reduce cognitive load, and let you focus on the problem at hand, at the expense of expressing total creativity. It's a tacit admission that we aren't all knowing, and often need help from our tools to save us from ourselves.
Re:The Importance of Humility in Software Development (2020) by lmm on Wednesday May 12, 2021 @03:27AM (#27127668)
I find it's just the opposite - when working in a Java codebase you can't focus on the actual problem because you have to spend so much of your time reading past the needless verbosity - or, often, debugging the crazy reflection framework that your organization has introduced because that verbosity became intolerable.
Re:The Importance of Humility in Software Development (2020) by ratww on Wednesday May 12, 2021 @04:04AM (#27127904)
I think you're both correct.

I find that the language itself is quite good, simple to use and has some nice features and performance... but the issues you mention are also there, however they're part of the frameworks and individual codebases.

Re:The Importance of Humility in Software Development (2020) by marcosdumay on Wednesday May 12, 2021 @09:46AM (#27130253)
> crazy reflection framework

Did the Java community get over their love of code generation already? Last time I used it, I'd debug the crazy 1000's of computer generated lines that people changed here and there.

Re:The Importance of Humility in Software Development (2020) by lmm on Wednesday May 12, 2021 @07:46PM (#27136620)
That's never been my experience in over 10 years of JVM work - people mainly use reflection or bytecode manipulation (aspectj) to do the kind of things you'd use code generation for. The only exception is thrift/protobuf and that's dumb serialization code that hopefully no-one's editing.
Re:The Importance of Humility in Software Development (2020) by marcosdumay on Thursday May 13, 2021 @09:18AM (#27141731)
Oh, the last time I've made any extensive use of Java was more than 10 years ago. I've met an off the shelf code generation based platform on the meantime, but luckily it was deemed too expensive so I didn't need to even finish a technical evaluation (much less use the monstrosity).

Anyway, that is great news. That unexplainable love for code generation was one of the things holding the language back. It's always good to see things improve.

Re:The Importance of Humility in Software Development (2020) by livesinhel on Wednesday May 12, 2021 @03:12AM (#27127594)
> It was literally built with guardrails to keep enterprise coders from getting too creative

Just as Go.

Re:The Importance of Humility in Software Development (2020) by saagarjha on Wednesday May 12, 2021 @04:14AM (#27127964)
Go somehow takes the worst bits of Java in this regard and makes them even worse :(
Re:The Importance of Humility in Software Development (2020) by 0xbadcafebee on Wednesday May 12, 2021 @09:36AM (#27130144)
> It was literally built with guardrails to keep enterprise coders from getting too creative

You say that like it's a bad thing...

Re:The Importance of Humility in Software Development (2020) by valenterry on Wednesday May 12, 2021 @03:00AM (#27127525)
A programming language is one of the more important tools as a software developer. Having to use a suboptimal tool is neither productive nor fun. You can't always have the latest tool of course, but Java is quite outdated in many regards (even though starting to catch up a bit recently).

I think it has nothing to do with being "enterprise".

Re:The Importance of Humility in Software Development (2020) by seba_dos1 on Wednesday May 12, 2021 @03:27AM (#27127667)
As a person who has learned and used several programming languages (not exceptionally many, but enough to be able to start new projects with "hmm, so which language I already know will be the best for this"), I have never taken these language wars seriously. It's actually kinda surprising to me that some people apparently do. Do they take vim vs. Emacs holy wars the same way?

I mean, plenty of arguments used in those wars are perfectly reasonable. PHP isn't elegant. Java is verbose. C++ is overcomplicated beyond salvation. JavaScript is shit. Those are all facts ;) However, they still can and often are the best choices for a given project. Is PHP pleasant to write in and think about? Heck no, but deploying it is exceptionally easy and sometimes that's much more important. I wouldn't ever think of using JavaScript as an example of good language design, but it accidentally turned out to be flexible enough to become the lingua franca of the Web and is here to stay. No amount of drooling over Rust will change the fact that you're going to have a hard time with it on some platforms where having a proper C++ toolchain available is ubiquitous. And sometimes the way Java code use to be structured is exactly the perfect fit for a project you're working on to ensure its long-term maintainability despite of the fact that people who work on it come and go in your startup all the time (so having access to a healthy pool of Java developers to hire from who's pretty much already familiar with your project despite of never seeing it before is a huge advantage).

If those tools really were "suboptimal" they wouldn't exist anymore. They do, because they aren't - if anything, they may be poorly chosen to do a specific job.

Re:The Importance of Humility in Software Development (2020) by valenterry on Wednesday May 12, 2021 @04:23AM (#27128019)
I think "language wars" is exaggerated a bit. Yeah, maybe some people see it as a "war", but for me it's just about tooling. When I say "gas-powered cars are outdated in many regards" then I just mean that they e.g. don't accelerate as fast and are noisier. Some people make a war out of that though, that's true.

I agree with everything you said.

> If those tools really were "suboptimal" they wouldn't exist anymore

A tool (such as a language) can certainly be suboptimal on its own but still be productive because of the package of the language, the ecosystem, the knowledge that people have etc.

My point is, even if Java would offer the best package, it is still valid to criticise the shortcomings of the language and dislike this part of the package. It doesn't have to be "hate because of enterprise".

Re:The Importance of Humility in Software Development (2020) by pulse7 on Wednesday May 12, 2021 @03:17AM (#27127620)
General statements like "...Java is quite outdated in many regards..." without providing any specifics are a sign of mentioned tribalism. Such general statements don't bring quality to the discussion, because nobody can really check whether Java is really so outdated or not.
Re:The Importance of Humility in Software Development (2020) by valenterry on Wednesday May 12, 2021 @04:17AM (#27127989)
I replied specifically to

> Java is disliked on HN because it represent "enterprise"

which I think is not true. Maybe for some people, but there is valid criticism too.

I am happy to give examples, but I am disappointed that you call my response "tribalism". It really is not meant like that.

Re:The Importance of Humility in Software Development (2020) by pulse7 on Wednesday May 12, 2021 @04:50AM (#27128172)
If I personally dislike XYZ I could write "XYZ is quite [outdated/boring/miserable/painful/awful/uncreative] in many regards". But people here are more interested in (specific) advantages and disadvantages than my personal taste...
Re:The Importance of Humility in Software Development (2020) by tored on Wednesday May 12, 2021 @06:48AM (#27128780)
Most important tool is the programmer. Suboptimal programmers are worse than suboptimal tools, because suboptimal programmers create suboptimal tools.
Re:The Importance of Humility in Software Development (2020) by ratww on Wednesday May 12, 2021 @04:09AM (#27127938)
I'm not personally a Java fan, but "java is quite outdated" is a quite outdated statement itself.

Sure, it's not as fast to add stuff as C#, and also surely anyone looking for a fight can nitpick, but it has most modern features you'd expect a modern language to have.

Re:The Importance of Humility in Software Development (2020) by valenterry on Wednesday May 12, 2021 @04:15AM (#27127970)
I acknowledge that it improved recently and I'm not saying it is a bad language. But it is missing a lot of features and convenience that the majority of newer language add. Java prefers to put a lot of emphasis on compatibility, which also has its merits. But the language itself (not ecosystem/tooling) is outdated in many areas. I stand by that.
Re:The Importance of Humility in Software Development (2020) by baby on Wednesday May 12, 2021 @03:41AM (#27127736)
I’m sorry but Java is an awful language that is mostly used because you are forced to, or because that’s the only language you know. There are much better modern alternatives.
Re:The Importance of Humility in Software Development (2020) by hugi on Wednesday May 12, 2021 @03:49AM (#27127794)
What an extremely typically HN comment.
Re:The Importance of Humility in Software Development (2020) by saagarjha on Wednesday May 12, 2021 @04:15AM (#27127972)
It might be what us typical for now, but hopefully if we recognize it as a bad comment it won’t be in the future…
Re:The Importance of Humility in Software Development (2020) by Chris2048 on Wednesday May 12, 2021 @04:56AM (#27128203)
Much like "1 + 1 = 2"
Re:The Importance of Humility in Software Development (2020) by fn1 on Wednesday May 12, 2021 @03:56AM (#27127846)
You can read this to see how modern java differs from the java 15 years ago: https://wittchen.io/posts/an-opinionated-guide-to-modern-jav...

Also the JVM is highly optimized, more stable and faster than most other runtimes (and it can run must of the other languages).

Re:The Importance of Humility in Software Development (2020) by aethertron on Wednesday May 12, 2021 @04:33AM (#27128075)
Parallel Universe blog is 404'd :(
Re:The Importance of Humility in Software Development (2020) by ratww on Wednesday May 12, 2021 @07:08AM (#27128918)
> mostly used because you are forced to, or because that’s the only language you know

This probably describes 99% of all programming done today, no matter the language.

Not everyone is a polyglot programmer able to choose their tech stack at their company.

Re:The Importance of Humility in Software Development (2020) by blackoil on Wednesday May 12, 2021 @10:27AM (#27130716)
Try reading the blog again.