frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

Cerebras Launches Qwen3-235B, Achieving 1,500 Tokens per Second

https://www.cerebras.ai/press-release/cerebras-launches-qwen3-235b-world-s-fastest-frontier-ai-model-with-full-131k-context-support
96•mihau•1h ago•40 comments

Show HN: Header-only GIF decoder in pure C – no malloc, easy to use

26•FerkiHN•1h ago•20 comments

Apple's Liquid Glass: When Aesthetics Beat Function

https://www.maxvanijsselmuiden.nl/liquid-glass
21•maxvij•1h ago•7 comments

Brave blocks Microsoft Recall by default

https://brave.com/privacy-updates/35-block-recall/
108•XzetaU8•3h ago•82 comments

Geocities Backgrounds

https://pixelmoondust.neocities.org/archives/archivedtiles
27•marcodiego•2d ago•9 comments

Qwen3-Coder: Agentic coding in the world

https://qwenlm.github.io/blog/qwen3-coder/
637•danielhanchen•15h ago•276 comments

SQL Injection as a Feature

https://idiallo.com/blog/sql-injection-as-a-feature
28•foxfired•1d ago•9 comments

QuestDB (YC S20) Is Hiring a Technical Content Lead

https://questdb.com/careers/technical-content-lead/
1•nhourcard•48m ago

Extending Emacs with Fennel (2024)

https://andreyor.st/posts/2024-12-20-extending-emacs-with-fennel/
88•Bogdanp•6h ago•15 comments

AI groups spend to replace low-cost 'data labellers' with high-paid experts

https://www.ft.com/content/e17647f0-4c3b-49b4-a031-b56158bbb3b8
76•eisa01•3d ago•28 comments

Mathematics for Computer Science (2024)

https://ocw.mit.edu/courses/6-1200j-mathematics-for-computer-science-spring-2024/
175•vismit2000•9h ago•22 comments

Rescuing two PDP-11s from a former British Telecom underground shelter (2023)

https://forum.vcfed.org/index.php?threads/rescuing-two-pdp-11-systems-in-uk-from-a-former-big-british-telecom-underground-shelter-in-central-london.1244723/page-2
73•mhh__•6h ago•12 comments

More than you wanted to know about how Game Boy cartridges work

https://abc.decontextualize.com/more-than-you-wanted-to-know/
336•todsacerdoti•17h ago•37 comments

Android Earthquake Alerts: A global system for early warning

https://research.google/blog/android-earthquake-alerts-a-global-system-for-early-warning/
297•michaefe•18h ago•103 comments

Algorithms for Modern Processor Architectures

https://lemire.github.io/talks/2025/sea/sea2025.html
214•matt_d•13h ago•37 comments

Why you can't color calibrate deep space photos

https://maurycyz.com/misc/cc/
159•LorenDB•12h ago•64 comments

I watched Gemini CLI hallucinate and delete my files

https://anuraag2601.github.io/gemini_cli_disaster.html
231•anuraag2601•17h ago•279 comments

Org tutorials

https://orgmode.org/worg/org-tutorials/index.html
114•dargscisyhp•9h ago•47 comments

Don't animate height

https://www.granola.ai/blog/dont-animate-height
420•birdculture•3d ago•243 comments

Swift-erlang-actor-system

https://forums.swift.org/t/introducing-swift-erlang-actor-system/81248
289•todsacerdoti•17h ago•66 comments

We built an air-gapped Jira alternative for regulated industries

https://plane.so/blog/everything-you-need-to-know-about-plane-air-gapped
245•viharkurama•17h ago•159 comments

Managing EFI boot loaders for Linux: Controlling secure boot (2015)

https://www.rodsbooks.com/efi-bootloaders/controlling-sb.html
40•CaliforniaKarl•3d ago•7 comments

TODOs aren't for doing

https://sophiebits.com/2025/07/21/todos-arent-for-doing
377•todsacerdoti•23h ago•218 comments

Subliminal learning: Models transmit behaviors via hidden signals in data

https://alignment.anthropic.com/2025/subliminal-learning/
182•treebrained•18h ago•36 comments

SubTropolis and KC's Limestone Caves

https://kcyesterday.com/articles/subtropolis
12•taubek•2d ago•0 comments

Many lung cancers are now in nonsmokers

https://www.nytimes.com/2025/07/22/well/lung-cancer-nonsmokers.html
191•alexcos•21h ago•255 comments

Show HN: WTFfmpeg – Natural Language to FFmpeg Translator

https://github.com/scottvr/wtffmpeg
67•ycombiredd•8h ago•52 comments

Font Comparison: Atkinson Hyperlegible Mono vs. JetBrains Mono and Fira Code

https://www.anthes.is/font-comparison-review-atkinson-hyperlegible-mono.html
232•maybebyte•22h ago•145 comments

Gemini North telescope discovers long-predicted stellar companion of Betelgeuse

https://www.science.org/content/article/betelgeuse-s-long-predicted-stellar-companion-may-have-been-found-last
134•layer8•20h ago•35 comments

Show HN: Phind.design – Image editor & design tool powered by 4o / custom models

https://phind.design
75•rushingcreek•19h ago•19 comments
Open in hackernews

Java is still worth learning

https://empatheticdeveloper.wordpress.com/2025/07/20/why-java-is-still-worth-learning-in-2025-a-developers-25-year-journey/
40•ivanche•2d ago

Comments

delusional•6h ago
Advocating that people use either Quarkus or Spring is like advocating they build their stuff in COBOL.

Java is an alright language by itself, but the "EE" frameworks and the ecosystem that surrounds them are corrosive to good software. You are actively harming your brain by learning JavaEE. If you do that to new developers you deserve to have your beans turn undiscoverable on Christmas Eve.

imtringued•6h ago
Spring and Quarkus are not Java EE.
mqus•6h ago
Yeah, they are "jakarta EE" now. Or what do you mean?
fiddlerwoaroof•6h ago
Spring has some compatibility shims for EE but my understanding is it’s always been its own thing and was originally formed in reaction to EE
ivan_gammel•6h ago
Spring is not „jackarta EE“, it’s compatible with some of EE specs (a good thing), but otherwise it’s just a different framework.
antonvs•5h ago
Spring is neither Java EE or Jakarta EE. It can integrate with those frameworks, but it's a completely independent system.
Xenoamorphous•4h ago
Probably OP meant that they are ubiquitous in Enterprise settings, no that they're part of "EE Java".
ivan_gammel•6h ago
Spring is a good choice for new projects today.
minebreaker•6h ago
Spring is so versatile that people use it in every way they can possibly imagine. Spring is fine IMHO if you keep it simple enough and refrain from fancy ideas. Maybe I'm just saying to keep it simple, regardless of what you use...

TLDR: don't use XML.

antonvs•6h ago
These days you'd typically use Spring Boot, which is a layer over Spring that simplifies its use significantly. As others have pointed out, none of this is JavaEE.

Frameworks like Spring are absolutely essential for many kinds of business software. Sure, there are slightly more focused alternatives like Micronaut (and Quarkus for that matter), but they tend to have more specific use cases.

In practice, teams that try to write real-world business systems without such frameworks end up with a spaghettified mess that just illustrates a variation of Greenspun's 10th rule: Any sufficiently complicated Java program without a framework contains an ad hoc, informally-specified, bug-ridden, slow implementation of one-tenth of Spring.

pjmlp•3h ago
What is corrosive is the enterprise attitude of arquitecture astronauts, and that you will get regardless of the language.

I have been dealing with "EE" frameworks since C was the main enterprise language, or even xBASE.

Because OOP hype frameworks, we had Yourdon Systems Method and nice overblown frameworks written in C, with OS IPC all over the place, aka microservices.

Klaster_1•6h ago
Can anyone recommend a good Java learning resource for those who already know a popular language like JavaScript or Python?
jimbob45•6h ago
https://learnxinyminutes.com/java/

Great starting place for any language.

ivan_gammel•6h ago
The content of this post makes some sense, however it does look like it’s written by AI and thus lacks depth, context and personal touch.
theletterf•6h ago
Especially sentences like these:

"This wasn’t just about type safety – it was about reducing the mental burden of programming."

The "x wasn't just about n — it was about m" carry a strong LLM smell.

dqv•5h ago
Another giveaway:

> Whether you’re debugging your first NullPointerException or architecting enterprise systems, there’s always someone willing to help you grow.

> Whether you’re starting your programming journey or looking to add a robust, reliable language to your toolkit, Java remains one of the best investments you can make in your technical future.

I wish people would be more thoughtful about how they used LLMs.

booleandilemma•5h ago
I hate that I have to second-guess whether or not something has really been written by a human nowadays. Especially with these blogs that have sprung up in the past couple years.
raincole•5h ago
Quote from the article:

> Java has been my companion through:

> Learning object-oriented programming > Building enterprise applications > Navigating the transition to cloud computing > Exploring microservices and distributed systems > Mentoring other developers > Speaking at international conferences

Yeah this is literally what 90% of senior programmers have done regardless their favorite languages. Either AI-slop or human-slop.

minebreaker•6h ago
I don't know. I started my career as a Java dev, but what made me grow as a software developer was learning Scala. I learned a lot about functional programming, algebraic data types, effects, and so on.

I'd say Java is a great production language, mostly because it's so simple that I don't need to "learn" it (when you know better than using madness like `==` or Serializable).

misja111•5h ago
I went the same route and am still working as a Scala dev. However Scala adoption seems to slowly go down, unfortunately .. Which is a shame because it's a beautiful language and I love using it as FP together with Cats.

However Java has advantages too: the IDE support was miles better than Scala, build times were shorter, most frameworks were more mature and better supported and the language itself was much more stable.

minebreaker•5h ago
So true. Scala 3 made it even worse. Hope Jetbrains will improve that, but they seem to fully committed to Kotlin.
piva00•4h ago
Scala adoption is going down because it's a behemoth of a language with so many features that it takes too long to learn and be proficient with it.

There's beauty in simplicity, and Scala is the antithesis of that, it has not only the kitchen sink but the whole kitchen and some house attachments within it. I fell in love with Scala for a while, worked with it for a couple years, and absolutely hated it whenever I had to train someone new. Nowadays I simply refuse to work with it because I'm not willing to relearn all the stuff it needs to be productive.

saghm•5h ago
I get the point you're trying to make, but there's something ironic about touting a language as "simple" immediately followed by mentioning that using the basic equality operator that's used by pretty much every other mainstream language is "madness". I know every language has warts, but that one is pretty egregious both in terms of how quickly people would run into it for the first time and how easily it could have been avoided (e.g. by using something else for the less commonly needed equality operator, like how Python uses `is`). Having things that look correct and compile fine but then fall for reasons that you have to explicitly learn isn't really "simple".
minebreaker•4h ago
Fair criticism, but it's not really a practical problem. Usually a linter will catch them easily, and even when junior devs ignore the warnings, you can just tell them to use "equals."

The thing is that, equality is the difficult problem. "equals" in JVM languages has a lot of problems. Dynamic languages are much more horrible in this aspect. JavaScript `==` is much worse than Java. Python is guilty too in my view, for using `__eq__` method. The only language I know which solves the problem correctly is Haskell. (Or, `Eq` in Cats)

ravirajx7•6h ago
I’ve been working as a backend developer for close to six years now, but reading this brought me right back to college.

Like many others, I started with C. It taught me the basics - memory, pointers, writing data structures from scratch - but most of the time it felt like I was just trying not to break things. Solving problems became more about handling the language than understanding the logic.

Then I came across Java, and something just clicked. It felt structured, readable, and intentional. Almost like reading good English. For the first time, I could focus on the actual problem instead of building the tools to solve it. Collections, built-in libraries, and a reliable runtime made coding feel productive, not just painful.

Even now, years later, Java still feels like home. It’s not perfect, but it gave me the space to learn, grow, and build things that last. I really appreciated this article - it captures that quiet strength Java has, and the care so many people have put into making it better over time. It reminded me why I still enjoy writing Java after all these years.

rapsey•5h ago
Funny I had the exact opposite reaction to Java when I needed to use it in college. So many abstractions, forced design patterns and boilerplate. Absolute soul sucking joyless development.
chii•5h ago
may be it was the way you were taught java.

It had abstractions but you were never forced to use them. Ditto with design patterns - you could use them, but none were forced, unless you _had_ to use a framework (like spring), but that's a choice! May be it wasn't your choice, but it was a choice someone made.

If you used java like you used C, java is much easier and less mentally demanding, and therefore less prone to mistakes.

rapsey•5h ago
> Ditto with design patterns - you could use them, but none were forced, unless you _had_ to use a framework (like spring), but that's a choice! May be it wasn't your choice, but it was a choice someone made.

Every language has a koolaid aspect to it. Java drinks the OOP+design patterns koolaid, so it was standard to use it incessantly. Yeah in theory there is a choice, not really in practice though. I find the typical over abstracted, one line functions everywhere java codebase revolting.

piva00•4h ago
> Yeah in theory there is a choice, not really in practice though. I find the typical over abstracted java codebase revolting.

It has gone extremely out of fashion to try to use abstractions over abstractions in Java the past 10-ish years. It used to be The Thing to do in the early 2000s, over time people got fed up with such obtuse way of programming, everything hidden under abstractions of abstractions, fucking nightmare.

Of course, there are still large remnants of this era, and folks who were trained in this still trying to apply the same bullshit design patterns to overcomplicate simple stuff, but in my experience it's been a pretty big shift away from that to more readable and simple code.

I still dread the years I worked in Java codebases with their factories of factories, registries of delegates, all the JEE bullshit, and extremely glad I haven't had to deal with this kind of stuff for at least the past 10 years or so...

happymellon•5h ago
Abstract objects are optional. I haven't seen a codebase that really uses them (outside of going into the Spring Framework)

Design patterns are optional, but are applicable across languages. Their purpose is to communicate effectively.

high_na_euv•5h ago
I had same experience with c#

You focus on algorithms and solving problems instead of fighting with language, building systems, linker errors, solved problems being annoying, etc

In general the joke is real:

How much c# is faster than cpp?

By a few months at least

happymellon•5h ago
> Solving problems became more about handling the language than understanding the logic.

I've worked with Java for 25 years and have a love/hate relationship.

Java garbage collection is both great, and terrible. Sometimes objects are instantiated in a method, and should be marked for GC when you leave the method but aren't. There isn't logic or reason, and it trips up juniors hard and reworking "new" features like streams into basic for loops fixes it, even though there isn't any really good reason why.

When it works first time you never even need to think about it, and its awesome. When it doesn't, there is no escape hatch to fix it. Its probably for the best, I would probably prefer someone switched a stream to a loop to fix a GC bug than to keep the stream and add additional code for flagging objects.

lucianbr•5h ago
> Sometimes objects are instantiated in a method, and should be marked for GC when you leave the method but aren't.

Can you give more details, and/or an example?

lolive•3h ago
Apart from the comment of happymellon (blaming Spring for doing things behind your back), it happens that a factory , building objects for you , will have a “bug” and retain a reference to them for whatever reason. That is sometimes tricky to figure out. Nothing Java can be blamed for, as these kind of tricks can happen in any language. ([newbie at C but] I suppose in C, the consumer of the object can force its deallocation, which may lead to other nasty side effect]
lucianbr•3h ago
> I've worked with Java for 25 years and have a love/hate relationship.

> Java garbage collection is both great, and terrible.

> Nothing Java can be blamed for

I mean, it's not like we're discussing Java or anything. So they hate java because of something that can happen in any language?

lolive•3h ago
They expected not to have to deal with memory at all, I presume ;)

[to go a bit off topic, the debugging of those issues is reasonably tool-assisted in Java, whereas I honestly don’t know how to solve them in, let’s say, Javascript/TS).

jabiko•5h ago
> Java garbage collection is both great, and terrible. Sometimes objects are instantiated in a method, and should be marked for GC when you leave the method but aren't.

In the last decade of writing Java software I didn't ever come across a genuine GC bug where a unreferenced object wasn't collected. I'm not disputing that they exist, but if you regularly hit such "bugs" I'm wondering if your understanding of Java GC might be flawed.

Do you expect objects to be immediately collected when they are not reachable anymore?

happymellon•3h ago
No its not regularly, I think just once in at least 10 years, probably longer. And it could easily be either a Spring bug, or bad configuration through misunderstanding.

My point was more that it can be opaque when it doesn't act as expected. Sometimes heap inspection is helpful, but if you use Kafka or Spring Data, etc, it can easily just appear to be a char or int array.

lucianbr•3h ago
So you hit this bug about one and a half times in your entire career, you're not sure Java caused it or even if it was really a bug, but due to it you have a love/hate relationship and garbage collection is terrible?
jajko•5h ago
Similar story - did half the university courses in C or C++, then picked up this new language called Java for next semestral project. I made 3D map of my home country from a set of 3D points in something called Java3D, long-abandoned effort that could make 3D objects and interactions ie in desktop UI but also on web via applets (I told ya long time ago, this was early 21st century).

Working under it, apart from usual initial pains was marvelous - the language itself somehow forced me to make much cleaner code compared to C, which as a beginner became horrible mess pretty quickly. Suffice to say, debugging was trivial, no pointers just easy life.

25 years later, Its close to 100% of all work I ever done professionally and I don't mind surfing that wave till retirement, Java is so spread into corporate sphere that there will be enough work especially for seasoned experts for decades to come.

Stuff juniors often complain - OO bloat, EE megabloat etc become invisible pretty quickly, and you just work with the code, however you like it. Its a great platform to see that premature optimization is really not something to worry about during initial implementation (unless you do N-th rewrite of some performance-critical app, which most of us rarely if ever do). It doesn't mean any spaghetti code is fine, just that following normal design principles is normally good enough and one can focus on things like security, clustering and actual features.

Tade0•6h ago
The further away you are from VC money, the more "boring" technologies like Java make sense.

Whole careers have been built on producing CRUD web applications with Java on the backend and Angular on the frontend.

It's not exciting, but so is life without income in countries where this line of work is something to aspire to. I should know, as I live in such a country.

jajko•4h ago
I refuse to jump on this oh-so-popular bandwagon of (seemingly) everybody complaining how java is uncool ad nauseum. You can make cool stuff in literally any language, and syntactic sugar around and how to express it are details. That's junior dev thinking, chasing fads, repeating others and not forming one's own opinions. This is mine.
anon-3988•6h ago
If Java can be compiled into a single binary and have a package manager then I would learn it.

I really want to like Java, or JVM-based languages specifically, but its extremely annoying and complicated to figure out how and why thing works.

RamblingCTO•5h ago
I think you might need to look into java (or better kotlin) then. Is gradle not a package manager on top of a build system, just like npm? Is a fatjar/shadowjar not a "single binary"?
raincole•5h ago
> Is a fatjar/shadowjar not a "single binary"?

No, it isn't. `go build` is a single binary.

ivan_gammel•5h ago
Technically speaking, what’s the difference between native binary requiring some set of OS APIs or portable binary requiring a VM layer on top of OS? User experience can be the same, you can run those things from command line, pipe inputs and outputs etc.
chii•5h ago
the difference might be expectations that the OS api exists and does not require an installation pre-execution of the binary.

On the other hand, i think the jvm, like python, ought to be part of a standard install of an OS tbh. Then there would really be no difference.

piva00•4h ago
You can package a JVM into a binary executable, no need for a system JVM that way.
ajuc•5h ago
You can compile java aot into binary executable native to your platform. There's many options to do it.

You can do it with a fatjar so that all the dependencies are there. You have all the dependencies clearly stated and versioned (and they are referenced globally - so you don't need to remember where you downloaded that one library from or how to compile that weird dll).

Of course if you actually care about being able to run the code in 20 years - you're far better off leaving it as a fatjar instead of making it an executable.

I have java programs that I made 20 years ago when I was at university that still run on my modern linux machine.

I also wrote C++ programs back then and none of the executables work out of the box (even building one of them is a struggle because half the libraries I used were abandoned - RIP libparagui, some you can't even download from the internet anymore, and most that you can download - don't have versions working with the most recent libc).

That despite the fact I tried to make a static executable for linux when I compiled it back then. I just failed.

I spent a week like 10 years ago trying to make my master's thesis program run again. I basically had to port it to a different graphic library because of dependency hell.

anon-3988•5h ago
Granted this was years ago when I was a noob. I could not figure it out. But these days I can simply do `cargo test`, `cargo run`, and `cargo add`. I looked up what fat jar is and found this: https://stackoverflow.com/a/36539885

Seriously? This XML reminds me of the issues that I had when I first started Java, what the hell does any of these mean (yes, yes, RTFM) but then I could also just use another language and be done with it?

ajuc•5h ago
Fun fact - cargo, npm and other package managers for programming languages were inspired by java maven.

Java is still using maven architecture (even if you use gradle to interact with them).

I'd argue Java was the first language to get dependency management right - you have 1 place you put all your dependencies - globally uniquely identified and versioned, downloading and building them is automated. It's especially jarring when you compare to the chaos in C++ land.

RamblingCTO•4h ago
Again, that's why you should have a look. You're badly misinformed. No need for XML or maven. You can just run ./gradlew test and stuff like that.
misja111•5h ago
Java can be compiled into a single binary. You can use for instance Graal VM for that: https://www.graalvm.org/latest/reference-manual/native-image...

Java has Maven and Gradle that serve as package managers. I'd say they are not any more complex than npm, except if you need complexity to do something very specific.

chii•5h ago
> except if you need complexity to do something very specific.

and i do argue that maven has the complexity correctly silo'ed - you need to write a maven plugin to do anything complex and custom, and fit that plugin into the maven ecosystem/api/framework (however deep you need to go).

As opposed to the 'normal' Makefile style build, where you add instructions and scripts (which i think both Ant and gradle inherited the idea from, and thus neither really makes for better builds imho).

brabel•4h ago
You don’t even need GraalVM. Use jlink (part of the JDK) to create a JVM runtime with only the parts of it that you use, specially if you use the module system. Then you distribute your app as a binary basically, plus the resources it needs (the class files and images/text/etc files). I prefer that to using Graal because very often using Graal requires specifying extra metadata and behavior may differ from what you test, not to mention the atrocious compilation times and its lack of a JIT which means it may start faster, but peak performance is very likely lower.
pjmlp•3h ago
Like for about 25 years now, small sample (there are others),

https://en.wikipedia.org/wiki/Excelsior_JET

https://en.wikipedia.org/wiki/GNU_Compiler_for_Java

https://www.aicas.com/products-services/jamaicavm/

https://www.ptc.com/en/products/developer-tools/perc

The difference being that those projects required $$$$ that only big corps were willing to shell out.

Now you get free beer via GraalVM (evolution from MaximeVM efforts at Sun Labs), and OpenJ9, IBM's AOT compiler that traces back to Maestro realtime JVM for embedded development.

So complaining about $$$$ in AOT toolchains is no longer a reason.

Then we have the Android cousin that does a mix of JIT and AOT since Android 7.

thibran•5h ago
No. I've done Java long time ago and now again in a new job. Java is still verbose and clumsy. Did not like it back then and don't like it now.

Would prefer to use Kotlin or Clojure.

dzonga•5h ago
JVM is probably the most impactful piece of software ever written.

our world literally runs on the JVM.

however - the "Java" ecosystem used to suffer from architecture astronauts & complexity merchants. Certain things like Quarkus & SpringBoot have helped reduce that.

if you keep Java simple, don't ingest too much OOP Kool-aid. You can literally make anything that will work today, 10 years from now, 20 years from now. that's reliability you won't get from Python, Ruby & Javascript.

Remember the JVM offers alternatives - Clojure, Kotlin. with a Kotlin a nice compromise.

vismit2000•5h ago
Obligatory fireship: https://www.youtube.com/watch?v=m4-HM_sCvtQ
lolive•5h ago
As a senior Java developper, I would say the most important things you will learn from Java (beyond types) are:

stream on collections (the local functional implementation of map/reduce/…),

interfaces everywhere,

and more importantly safe function extraction by your favorite IDE.

Let me elaborate the last one: you write an horribly long spaghetti code (because you are a junior, or you are in a hurry). That’s ok because the “Extract method” instant feature of your IDE will help you safely extract each piece of code AFTERWARDS into its own small function (that can be tested in isolation, where local variables stays internal to the function, where the interface contract in term of input/output/sideEffect is clear, where the function naming is meaningful).

The IDE can even tell you that this code you are extracting as a function appears at several other locations that should also be replaced with a call to that new function.

I don’t know if Typescript support in IDEs reaches the same level of simplicity/safety in term of function extraction.

But that feature is absolutely critical to go from spaghetti code to clean modular code, when you are a junior/work with juniors.

parallax_error•5h ago
I’ve in university and the classes have been almost exclusively taught in Java. Learning C/C++ definitely felt like a step backwards, as there’s more you have to implement yourself instead of using the standard library. With that said, I think I learnt a lot more about how systems work under the hood by learning C, so perhaps it’s not as good for learning programming concepts IMO
zarzavat•5h ago
This is why whenever someone asks me what language they should learn first (if they want to be a professional and not just a hobbyist), I say C. Don't learn a high level language first.

Learning Java before C is like learning to ride a bicycle before you learn to walk. You will need to learn C eventually, but learning C once you already have a high level language under your belt will make the experience frustrating. Having to manage your own memory, build your own data structures, it can be fun, but it's less fun once your brain is already wired to expect these things to be done for you.

parallax_error•4h ago
I agree, I’ve definitely had a lot of “ahh, that’s why it does that/works that way in Java” when learning C
tialaramex•4h ago
In C you program the C Abstract Machine, this machine is a child's drawing of the Digital computers on which C was invented, it's simpler and easier to grasp than they actually were but fundamentally similar. Your computer today does not much resemble this, but your computer is the real machine your software will be executed on anyway. Mistaking the Abstract Machine for your real one is a catastrophic misunderstanding and C feels as though this is the bare metal when it is not.

As a result it's more honest to use a language where it doesn't feel as though you're touching the bare metal, because you aren't anyway†

When I last checked both Oxford and Cambridge teach an ML as First Language. So did the place where I did my degree decades ago although today it teaches Python (which I believe is a mistake). That's because the theory of computation is foundational here, not the practice.

† Even assembler isn't touching the bare metal, you have features like out-of-order execution and register renaming between the machine code you wrote and the actual things done.

p0w3n3d•4h ago
I've been hating Java since 1999 for many reasons, yet I'm a Java Developer since then (with episodes of Python, C, C++ and Qt). The language itself got on my bad side when the Java developers said that they will not implement operator overloading (I'm a little bit crazy about the subject) because - EKHM - it would allow writing unclear code, which is bananas.

Things missing in Java:

  - .? operator
  - operator overloading
And there were a lot more, but most of them are already solved. The language is tidy and usable, the Optional api is not bad, the native function calling is improving.

But what I wanted really say is: the language itself is one thing, but the libraries available are the other. The strongest libraries in Java are the part of the language, especially time handling, character encoding, etc. Java was built with utf-16 in mind and other languages are still trying to cope with it. There are frameworks (outside the language standard) which allow crazy fast web service and DB development. It's all good, it's all standard and it's rarely breaking the backward compatibility. So you get a new developer, just after CS Bachelor and they jump into the project and understand the huge part of it.

When I'm learning new languages, I tend to try writing business applications and usually I cope with the same problems: datetime, string encoding, database connecting, etc. Yeah, golang has great goroutines, but they still import web service library from some guy's github, which can vanish in no time.

xscott•2h ago
Seconded on operator overloading, but being restricted to the limited set of "primitive" (value) types is horrible too. Complex numbers are table stakes. The idea that I need to dynamically allocate an object holding two floats and hope the JIT can optimize that into a stack value is awful.
ivan_gammel•2h ago
I think with value types we may see some support of operator overloading eventually. Done carefully, Java way, covering most important use cases, but leaving extremes outside of the scope.
piva00•1h ago
No operator overload, I think it was a wise decision to not allow it after seeing the bizarro world of Ruby, Scala, C++, and others.
daitangio•3h ago
Java is the new Cobol.

Java had changing its skin: Applets and Security managers, part of the cornerstone of Java 1.102 are gone. So Java are 2-3 different evolving language nowadays.

JVM has so strong optimization layers which make very difficult for other languages to provide similar performance (Erlang is one of them in my humble opinion).

Yeah C/C++ program are faster but error prone (manual memory allocation...) PHP is faster for web developing but refactoring is a nightmare. Python can compete, but I do see few big projects written in it (Zulip,Dropbox,Plone/Zope).

JavaScript is super rapid dev rapid but can become a mess.

Rust is the newcome, I do not know but it seems quite cognitive-complex to code with it (I may be wrong).

I worked with shit-like Java code and i was always able to refactor it in small chunks.

The verbosity of Java is its major strength, but some things added to the language (like default interface implementations, virtual threads) are drawbacks because it create some confusion on basic pattern strategy you can employ with the language.

pjmlp•3h ago
Only ART, .NET, Erlang, and V8 are on part, with similar engineering efforts.

Which when coupled with the great IDE tooling, graphical debuggers and libraries, is the reason why with exception of Erlang, they remain my main tools.

With the occasional dip into C++ for native libraries.

pjmlp•3h ago
Not only it is one of the best ecosystems, Java bashers keep forgetting that it has a cousin ruling 80% of the world market in mobile phones, via the Java subset it supports, and the whole JVM infrastructure Gradle, Kotlin and Android Studio rely on.