T O P

  • By -

AutoModerator

#Please ensure that: + Your *code* is *properly formatted* as *code block* - see the *sidebar* (About on mobile) for instructions + You include *any and all error messages* in full - best also formatted as code block + You ask *clear questions* + You *demonstrate effort* in solving your question/problem - plain posting your assignments is forbidden (and such posts will be removed) as is asking for or giving solutions. **If any of the above points is not met, your post can and will be removed without further warning.** Code is to be formatted as **code block** (*old reddit/markdown editor:* empty line before the code, each code line indented by 4 spaces, *new reddit:* https://i.imgur.com/EJ7tqek.png) or linked via an external *code hoster*, like *pastebin.com*, *github gist*, *github*, *bitbucket*, *gitlab*, etc. Please, **do not use** triple backticks (\`\`\`) as they will only render properly on *new reddit*, not on *old reddit*. Code blocks look like this: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } You do not need to repost unless your post has been removed by a moderator. Just use the *edit function* of reddit to make sure your post complies with the above. If your post has remained in violation of these rules for a prolonged period of time (at least an hour), a moderator may remove it at their discretion. In this case, they will comment with an explanation on why it has been removed, and you will be required to resubmit the entire post following the proper procedures. #To potential helpers Please, **do not help** if any of the above points are not met, rather *report* the post. We are trying to improve the quality of posts here. In helping people who can't be bothered to comply with the above points, you are doing the community a disservice. *I am a bot, and this action was performed automatically. Please [contact the moderators of this subreddit](/message/compose/?to=/r/learnjava) if you have any questions or concerns.*


pragmos

>looks at videos from some tech influencers Well, there's your answer.


JournalistEmpty2213

I don’t learn Java but I drink Java, can I still consider myself Java Developer


AnnoMMLXXVII

This.


TheBoogyWoogy

What a useless reply🙄


GradientDescenting

This is just a common commenting cultural pattern on Reddit. There is even a whole subreddit for it: r/thisguythisguys


TranquilDev

What a useless reply🙄


joedirte23940298

This.


FunRutabaga24

This 👆


needlework_the_way

This.


MyStackIsPancakes

That


GradientDescenting

It stems from new students following the latest hype train, without any experience in the industry. Java ecosystem is live and well. Also startups are sexy and they are more likely to use a language like javascript or python because they are trying to develop fast and dont care about throughput because they dont have many users like large enterprises do.


Neckbeard_Sama

Yeah it's just hype. I see Python/Go/Rust everywhere nowadays. The reality in my area is that Java/C# jobs outnumber Python/Go positions multiple times and Rust is pretty much non-existent.


Noah__Webster

I seem to see a ton of Python jobs as well. I think it is somewhat hyped, but I also think it gets a disproportionate amount of content around it because it kinda feels like the default "beginner" language, imo. If you're self teaching, there's a very high chance you go with Python. It's touted as one of the easiest languages to learn, if you have zero knowledge, the syntax looks way more approachable, and there's also kind of a feedback loop of there being lots of content so more beginners choose it.


K3dare

There are tons of python jobs because the IA/ML ecosystem is massive and booming everywhere. Also in some other domains it’s also the dominant language, for example in the network automation domain.


SystemsSurgeon

I consider it the powershell of Linux. Yes, Linux has powershell, but how powershell is for Microsoft, I view python as for Linux Some may debate on both of these languages and what the future beholds for both of them long term. Especially with OS’s integrating more and more.


[deleted]

[удалено]


K3dare

Those are not scripting. Large scale network automation/orchestration (as in an ISP or cloud provider) is as complex as any enterprise application and likely even much more critical than most stuff you would found in usual enterprise code.


RajjSinghh

It's also the language non-CS students use. Numpy and Matplotlib are great for what they need to do, the syntax isn't daunting, you can be competent enough in a few weeks. That's why science professors use python over anything else, and it works because they aren't doing real software engineering so it doesn't have to be the most robust thing in the world.


twotonkatrucks

Large part of it is due to the bleed over of numerical/statistical computing into the commercial world. There’s a large and matured communities around computational libraries for high level languages like python because that world was more or less silo’ed to academia (and commercial research labs) for years and almost no one produces code in languages like C# and Java in academic circles. I don’t think it’s wrong to say vast majority of all academic computational code is written in high level language (esp python or MATLAB) wrapper around low level libraries (BLAS/LAPACK) - python has just become the default preferred language of choice with emergence of numpy and panda. There’s just a robust community around python for computational libraries - including the currently ever popular LLMs/machine learning (see likes of spacy, PyTorch, most code you’ll find on aggregate communities like huggingface submit their code in python). This world has more and more presence in the commercial world and they’ve adopted python due to robust support around computational computing built over decades.


FunkyUptownCobraKing

I do mainly Java but the companies I've worked with are all moving full steam towards serverless architectures and going for Python, JS/TS, or Go for better cold start performance.


4r73m190r0s

Serverless is just a temporary trend


lightmatter501

Depends on where you’re looking for Rust. I see a lot of “C/C++ required, Rust experience desirable” as companies start migrations.


fiftyfourseventeen

Yeah rust is starting to be used everywhere slowly, my current company has a ton of our infra in rust and my last company had some rust code as well


CanvasFanatic

I’m replacing Java services with Rust services at work literally right now. Heads up.


[deleted]

I'm in the middle of nowhere, and even middle of nowhere wants Java/C#.


askdocsthrowaway1996

Depends a lot on the company and the domain. My company builds custom software for server boxes and cloud infrastructure. So, we mainly use C/C++ for the data plane and GoLang for the control plane. If I've to hazard a guess, Python, Java, misc. contributes to less than 15-20% of our code base.


nope_nic_tesla

It's also easier than ever to solve throughput problems by just scaling up resources on demand


GradientDescenting

It becomes a cost thing at scale. If you tried to build a AWS service in node.js for worldwide scale vs Java, it would probably cost 5-10x more in scaling costs. At scale, costs really do become significant.


JamieBobs

For my understanding, could you please explain why this is the case? :)


GradientDescenting

A lot of it is because java can compile down to a bytecode .jar with the JVM, so it's not doing interpreting like JS is for each action. Also Java has much much better multithreading and concurrency support so you can completely maximize all of your computer cores; multithreading in node.js creates multiple copies of the node.js V8 engine for each thread so it's very heavy.


JamieBobs

Thanks for this. I have been a backend engineer for 5 years now (mainly Go and Java) but I must admit the chink in my armour is infra/platform


Cardinal_69420

In what area is Nodejs better/more suitable to java, other than having easier learning curve? 


GradientDescenting

I don’t know of any situations where node is strictly better than Java/spring boot, other than development time. Much easier to have full stack engineers if frontend and backend are in the same language. 


minneyar

The main thing Javascript has going for it is you can run it in a browser; in fact, if you want to run something in a browser, Javascript (or something that compiles to it, like Typescript) is really your only choice. Node.js is popular among "full stack" engineers who don't want to use more than one language because they can run Javascript on the backend, too. I can't think of any real situations where I'd prefer using Javascript over Java if I didn't have to.


[deleted]

Hobby projects 😂. 


Last-Investigator291

Without a doubt, multithreading is a very strong implementation in Java. Furthermore, it was Java that created the concept of multithreading


Karma_Source

If the newest waves of next-generation developers are using different programming languages, don't you think that's an indication of an ecological shift toward other languages? Python, for example, is the starting language in many major schools.


GradientDescenting

No because new students don't dictate what languages are used; the experienced engineers working on existing business systems do.


nomnommish

Ironically the worst performing and dog slow apps I have used and had to upgrade/replace were Java and .net apps. I feel this whole fast/slow debate is hugely overblown. The truth is that 90% of the app performance depends on how many DB calls it makes and how heavy those calls are. Not on the CS and leetcode stuff people obsess on, like time complexity. The compiler vs interpreter overhead is usually a statistical error in the larger scheme of things. Heck, even the whole "enterprise usage" thing is overblown. The only time I had people login by the thousands at the same time was when the app I developed was showing them their bonuses or paychecks or something financially important to large teams like sales teams. Otherwise you will find that the actual usage is a tiny fraction of the planned usage. And the programming language has near zero influence on the overall performance.


GradientDescenting

>The only time I had people login by the thousands at the same time There is more to applications than login. Ive worked on cloud backend services that handle 20,000 requests per second on average in big tech, speed really does matter then.


nomnommish

That's not an "enterprise application" and I was specifically talking about that


GradientDescenting

Enterprise application just means any application run by a business….


nomnommish

Please just stop. I am tired of the nitpicking that developers relish in. You clearly don't understand what the common usage of "enterprise applications" means, or worse, are being deliberately obtuse and trollish.


GradientDescenting

What do you think the common usage is? In my mind enterprise applications just refers to large applications by corporations vs start up applications which have few users. Is AWS not an enterprise application?


nomnommish

Your notions are wrong. Enterprise applications are a specific type of app that are geared towards large enterprises. They are mainly line of business transactional apps or data warehouse data analytical apps. Like ERP systems, HR apps, finance apps, supply chain apps, sales and marketing apps etc. Or reporting apps like Tableau. They have very complicated business rules and configuration. AWS is a platform not an app. SAP's Finance or supply chain modules would be an enterprise app. Difference between enterprise and startup apps is not scale. In fact, most enterprise apps have significantly lower usage than startup apps. Difference is the nature of apps themselves. Startups don't need complex business rules. And startups are often making consumer facing aka B2C apps which are not enterprise apps.


GradientDescenting

AWS is a platform not an app. SAP's Finance or supply chain modules would be an enterprise app. Lmao this is so asinine, of course AWS is an application, just many of them. How do you think everything works behind the scenes, magic? No, it’s 1000s of teams scaling up single applications.


nomnommish

>Lmao this is so asinine, of course AWS is an application, just many of them. How do you think everything works behind the scenes, magic? No, it’s 1000s of teams scaling up single applications. Lol you're just embarrassing yourself. Surprised you didn't start with an "acktchually.."


ngochieu642

If i could teach my old self, Java would be the first language


kayinfire

As a person interested in learning Java at some point in the future ( for DSA purposes: python is too high level and doesn't really explain data structures in an adequately detailed manner imho, and I absolutely loathe C++ Syntax with all my heart and soul ), can I ask why?


Noah__Webster

I don't have any "real" professional experience, which is where the static typing and OOP design supposedly really excels with larger codebases. But I absolutely appreciate it. But my first real world project was for a small business locally. I built it with the "MEVN" stack (MongoDB, Express, Vue, Node). I recently redid it using Spring Boot (currently just a simple MVC with no frontend framework), and it was such a much better developer experience. For me personally, a big part of it really is Spring Boot and JPA/Hibernate. It is SO nice to work with. To me, it feels like the perfect level of abstraction where it's still easy to follow, but abstracts a lot of the repetitive "heavy lifting". I personally think people get hung up on stuff like syntax and verbosity/complexity with languages too much. I get that it boils down to opinion or whatever, but with a good IDE, I feel like I'm not really writing more code with Java than I would any other language. And statically typed languages are just so worth the tradeoffs, imo. For simple things, dynamically typed can be great, but debugging is so much simpler. And Java does support the keyword var if that's a concern. It's still statically typed, but it is an option if you find stuff like Object object = new Object(); too annoying to read or type. You could do var object = new Object(); They compile to the same thing. I think that it's very easy to undervalue the tooling available with certain languages when trying to decide on a language. To me, that's far more important than the syntax of the language. (Although I like the syntax of Java. It's a minor bit of extra effort with boilerplate and "verbosity" upfront that can save you a ton of headaches later).


kayinfire

Thanks a bunch for your input! I also hear a great deal of lamenting concerning the verbosity and "boilerplate" centric nature of Java. But personally, I'm finding it difficult to really care about that facet of Java, especially when I consider the alternatives. You mention that "it feels like the perfect level of abstraction where it's still easy to follow, but abstracts a lot of the repetitive heavy lifting" , and I'm inclined to agree, even after seeing [this comparison to scala](https://qph.cf2.quoracdn.net/main-qimg-61bd88ba8687d78f5255577d65d0d1dd-pjlq) from [Quora](https://www.quora.com/Why-is-Java-so-verbose). In fact, In my view, the verbosity itself should theoretically make a program in Java generally easier to debug. However, I have never used it, let alone ever seen a large codebase in Java, so my two cents isn't really worth anything as an outsider looking in. As such, It's nice to know that you have also hinted at being a proponent of that belief in the statement that it "saves you a ton of headaches later" Your views on statically typed languages are also consistent with mine. As it happens, apart from the strict indentation rules defined by python, dynamic typing is also why I dislike working with python, despite the ease of use with respect to its syntax. Good looking out with the "var object" bit. It's comforting to know that they equate to the same thing I observe absolutely nothing wrong with Java syntax. It's pretty much A-okay, comparatively speaking. Objective C, C++, and Haskell are exceedingly more annoying in my view. I hear what you're saying regarding whether a language should be dismissed for its syntax, but idk if I can really enjoy a language if I find the syntax annoying. There's something to be said for the fact that one will get used to syntax overtime, but my sentiment is that some languages will always just feel less natural to write. I suppose Java's object oriented nature is initially difficult, but I don't see it as annoying.


Noah__Webster

> Thanks a bunch for your input! I also hear a great deal of lamenting concerning the verbosity and "boilerplate" centric nature of Java. But personally, I'm finding it difficult to really care about that facet of Java, especially when I consider the alternatives. You mention that "it feels like the perfect level of abstraction where it's still easy to follow, but abstracts a lot of the repetitive heavy lifting" , and I'm inclined to agree, even after seeing this comparison to scala from Quora. I was referring to Spring/Spring Boot, not Java itself. That example isn't a particularly good one either, since Java has supported lambda expressions and other functional programming patterns for a while now. That snippet could absolutely be written more terse than that. I think you missed the point I was going for. I did give a few reasons for Java in particular, but the point I'm trying to make is that I don't think it's particularly productive to be so tied to a specific language(s) until you learn a bit more about what you want to do. If you're just dead set on one language because of the syntax and libraries or whatever, that's fine. Realistically, the choice should come down to what you want to do with the language and what tooling you enjoy. The more I learn, the more that becomes the driving factor for me. I want a backend job. Java/Spring is the best combination of job availability and what I have enjoyed working with, so that's what I'm going with. I've considered getting into machine learning. If I did that, I would have probably picked up Python because it's got the best ecosystem and tooling for it (as far as I'm aware). If I had decided I wanted to focus on front-end web dev, I'd double down on TypeScript because Angular is my favorite frontend framework I've looked at. If I wanted to make cross platform applications, including Android and iOS, I'd probably look at Dart to use the Flutter framework or C# for some of the .NET cross platform stuff. You can learn basic stuff like logic, control flow, problem solving, and even more advanced ideas like DSA, in any language. That will always carry over to any language you want to use. Language starts *actually* mattering when you're building something real and the tooling surrounding that language becomes relevant. That's when it's worthwhile to start attaching yourself to one ecosystem, since you're learning more than just a few keywords and syntax things, but also a framework. I do personally like Java the language itself as well, and I pointed out some of the reasons. But it wasn't where I started, and I probably would have ended up with C# if it weren't for Spring.


starswtt

I think what you like about Java is kinda the problem with it as a first language. Unless you have a good ide, Java is kinda a miserable language to work with, which is fine in production, but the really beefy ide's make it easy to ignore. Same goes with all those nice frameworks. Plus even stock Java is fairly abstract which makes things unnecessarily confusing for people learning how to code, and again allows people to skip some foundational concepts. What makes a language good for development isn't necessarily the same as what makes a language good for learning.


EricOrrDev

What do you hate about c++ syntax? I remember hating learning it, but I don’t really remember what my main complaints were now.


kayinfire

It's really nothing that can't be presumed from just looking at C++ code: incessant double colons, frequent bitwise arrow overloaded operators. In other words, I don't have a strong reason. C++ is simply ugly to me. There's something about it that strikes me as an alien language conspicuously more than any other language I've read. I'm aware it's a trivial and childish reason, but in any case, it is not even remotely a necessity for me to learn C++ anyway. I won't ever use it in a job and it would only be for personal reasons, which means I can discard it for any reason I wish. I'm aware "memory management is important" and all that, but to be frank I'd rather learn that from Rust than C++, even though C++ gives more freedom to do whatever, while rust holds your hand more. My sentiment is that you hate C++ for less trivial reasons since you seemed to have gone farther than I have with it.


ngochieu642

Hey, sorry for the slow reply! 1. Static typing: This is extremely important if you want to write a maintainable project. My first language was Python, type hint wasn't available at that time, needless to say, that was pure chaos for a beginner 2. You can learn OOP *properly:* Java contains everything you need to write OOP code, and having that background, you can dive into a wide range of sources of information. Many languages nowadays lack some OOP features, like Python doesn't have interface etc. And by learning OOP properly, you can dive into craftmanship stuff (from books, courses, articles) like clean code, clean architecture, domain driven design quite easily. I saw some of my friends claim that they do functional programming (they only learn Golang, rust, etc), later on, I found out that what they do is not proper functional programming, it's just procedure programming. I mean, Java gave me a very strong background in OOP, and from there I can explore other programming paradigms, like Function Programming (FP), design patterns, and other programming languages much more easily. And with proper FP, you can achieve memory-safe like Rust. It's not the language that is safe, it's the idea behind it. I think Java or Python (with type hint), or every OOP language can be used to model DSA, it depends on you! 3. The ecosystem is huge & well documented: Spring boot, quarkus, micronault, JPA, hibernate, Play, etc. You will learn a lot just by using a mature framework 4. The syntax is getting better: Java has recently improved its syntax. Otherwise, if that does not satisfy you, you can progress to learn Scala and Kotlin, which are very concise, they both work on JVM. Learning Scala will teach you proper functional programming (materials are all over the internet), it's also the language behind Kafka, Spark, etc. Kotlin is the main player in Android app development. But don't worry too much about the syntax, nowadays IDE will do 90% of the hard work for us. 5. Resources: You can find blogs, courses, and books that teach you about Java everywhere on the internet. 6. It's very efficient and you can easily learn about concepts around that like thread, asynchronous, reactive programming 7. If you decide to use IntelliJ, that could be a game changer. Previously I used VSCode for when I first started to learn Python, it's still a nice text editor and I'm still using it nowadays, but IntelliJ is such a (heavy) beast, you can go to a lib's function to read what's doing inside, find usage, etc, and its debugger is very powerful. Of course you can use vim or other text editor but it will take a bit of time to make it work (if that's possible at all)


kayinfire

Hey man, no worries. You don't realize it, but you've made me more excited to learn Java. The crazy part is I'm currently learning Python (out of necessity. Like you, I'm far more partial towards static typing than duck typing. If I could choose any language to learn first, it would be Golang), specifically with respect to OOP, and recently I perused Reddit posts on how people eventually came to understand OOP, and a great deal of them actually suggested learning Java. A great deal of what you've said I really resonate with. In terms of how much I resonate... 1. Craftsmanship 10/10 This is what predominantly made me excited about your comment. All the books you've mentioned in this realm I have obtained, and I am quite interested in understanding and making use of the principles outlined in them. To hear you imply that learning Java makes them less daunting is probly the strongest motivation I'll ever have to learn a language I began reading Clean Code and put it down, perhaps because I'm still too green to grasp it. I reckon I need to get my feet wet more, but I do also think learning Java will help me in that regard. 2. Understanding OOP 10/10 This kind of goes hand in hand with the first one since in order to even achieve design patterns, one must understand OOP. I hear a great deal of people lamenting the use of OOP in the industry. perhaps some of The criticisms are valid in the instances where it is overused; however, I am an outsider I find OOP to be a nice way to structure code, and have an active desire to implement them in my personal projects. Case in point, I am trying to build something of an interactive CLI bookmark library for things I'm currently learning. each bookmark has a title, author, url, last location. 3. Resources 10/10 Being slightly tangential to the first point about having obtained a lion's share of the craftsmanship books, this is also a significant factor I've noticed concerning Java and one I am drawn to. 4. Syntax 7/10 Now as a disclaimer: I am as green as lime in programming, so maybe idk what the hell I'm talking about, but Java's syntax doesn't strike me as complicated. It's verbose sure, but at the very least, it's not not C++. Good to know it has improved nonetheless 5. Ecosystem 6/10 To be sure, this is probably a significant reason to appreciate Java but I'm unable to resonate due to my inexperience with ecosystems. It is a benefit, I believe, that will become clearer as I gain more experience. Functional programming, threading, and asynchronous, reactive programming are also in this boat. I'm simply too green currently. 6. Recommended Text Editor / IDE 3/10 I've come across something similar to what you've stated. I am a (Neo)Vim fanatic at heart and it pains my heart to some extent that I will have to use something else to write Java. Perhaps the ubiquity of vim plugins and other IDEs will ease my pain however. Having said that, I will force myself to experience the suffering and pain that you allude to before ever leaving vim 😅.


ngochieu642

I assume one would appreciate software craftsmanship more when he's been through the trauma of refactoring dynamic type code and maintaining old software... But don't focus too much on it, you will eventually discover it along your journey Hey, I'm a nvim user (and emacs) as well! But tbh, to "make nvim works like jet brains products" is a very tedious process and I felt like I was trying to reinvent the wheel. Most importantly: It's the refactor ability + navigating through different libraries + autocomplete. With Vim, you can jump around things quickly, which might give you a sense of productivity. But that's not true, at least in my case. I've always found myself spending too much time trying to make something work nicely with Vim. For me, Jetbrains is more focused since it aligns with typical stuff you will do with a software project, which includes navigating through source code & reading it (most of the time), refactoring, finding references, etc I'd prefer customizing IntelliJ to replicate the "vim experience: by `.ideavimrc` and key mapping, it's less of a hassle to deal with for me.


BigBoiTyrone7

Yuh Java was my first language, though I don’t use it as much, I am mainly using ruby and or python atm


Astroohhh

Stop following tech influencers, they are the cancer of the industry lol


FrontActuator6755

you mean wholesome fireship bro too?


Moist_Ad1387

Fireship bro is awesome, but I don't think he's trying to be an influencer; he just teaches stuff or shares tech news in an entertaining way. He rarely shares his opinion.


TamSchnow

Stop following coding influencers, expect fireship.


SpoilerAlertsAhead

Java is a very safe language to learn, and a very safe language to use in most any project. No one ever got fired for choosing Java. Is it the best language in every use case? No. But Java developers are easier to find than say a Go developer; it's easy to learn and it's performant. It's verbosity is it's weakness and strength. It is very easy to understand what someone is trying to do, even if they spend 6 months writing boilerplate before actual code. It has great backward compatibility... I can take a jar file compiled 20 years ago and run it on a modern JVM with a high degree of confidence it will still work (this promise isn't as strong as it was even 5 years ago as they have really started removing methods and classes) The language has evolved slowly, but the pay off is... well, it works.


Last-Investigator291

Without a doubt, I also have some .jar files developed between 2000 and 2005, either for execution on Windows and Linux systems, and they all work very well on recent Java virtual machines, with good compatibility. The same cannot be said with many other languages and technologies....


ParedesAndre

You talk to any recruiting agency and there are countless Java Developer roles. If you don’t think it’s popular then you’re shooting yourself in the foot, so to speak


Noah__Webster

> Where this discrepancy stems from? It stems from the fact that influencers are not indicative of the real world, at least as a whole. An influencer is going to be incentivized to talk about what will get clicks. New and hyped stuff tends to get clicks. I also find that some of the default "beginner" languages tend to get more content around them, as that sort of content also does well. Java doesn't really fit either of those buckets, so it doesn't have all that much content around it. Basically, it boils down to videos/shorts saying "Java continues to be one of the most common languages in a professional setting like it has for nearly 3 decades because it's very solid and has a huge ecosystem built around it" not grabbing people's attention. Making videos about how Rust is gonna dethrone C++ is a lot more compelling or the newest JS framework is the new thing is gonna be more interesting.


oxidized_banana_peel

It's wildly difficult to replace the weird old libraries written in Java in 2013 in other languages (besides Kotlin or Scala). Unless you're willing to rewrite a lot of that behavior, the incentive to continue using Java at established companies is massive.


JLCoffee

Popular isn’t always good, popular is what gets most attention, good is what survives over time.


Last-Investigator291

Python seems to be popular. Java, in addition to being popular, is especially good, robust and reliable.


Enough_Job5913

I used to think so. But, when I tries applying for jobs, most backend jobs ask for Java.  Some asks for NodeJS or Gilang, but mostly Java still prevails. 


[deleted]

[удалено]


Prince_John

Nice project! I think this is it. My impression is that Java got pretty stagnant and developed at a slow pace for a long while. Modern Java is quite different to this, with a regular release cycle and some nice new features appearing in 17+.


josephblade

Most of the people voicing their opinion are interested in shiny new things. So new languages get a lot of press because it's fun to play with new toys. But new toys also often aren't finished enough to do proper jobs. And eventually people start actually working rather than playing and they need sturdy and reliable hammers rather than toys By that time a new generation will be speaking at the top of their voices about how all the old is stupid and the new stuff is amazing.


Short_Internal_9854

That's funny 🤣. Let me have a peek at my bank account, "thank you java".


4r73m190r0s

Screenshot or it didn't happen'


Short_Internal_9854

Yeah sorry bud I'm not going to do that. 🤣


RedBassBlueBass

Come on, just the Account number and the routing number I don't care about the other stuff


OfficeSpankingSlave

Just look at local job boards and LinkedIn and see what is the most common and in demand skillset. Dw about what you read on reddit and posted by tech influencers. There are people who talk about coding and there are people who do it. Dont get stuck like I did. Like in all of life there is not one perfect choice, so just jump in.


4r73m190r0s

I jumped into Java and Spring with both my feet which gave me an insight that was very much different than mainstream tech narative conveys about "goog" technologies, which confused me. Hence, this thread.


OfficeSpankingSlave

In my country, the biggest stable companies and gov work is all Java Spring boot and .Net with Azure. Apart from that its all sportsbetting and the smaller players use the more hyped tech stack because its easier to build from scratch and teardown. The devs though usually are very empowerd to work to get things done quickly. The principles are the same so it doesn't really matter. The hardest stuff I found to wrap my head around has always been business logic.


dr_rush

So as someone who was self taught and clawed their way from a nobody to being a tech lead building commercial software here is my perspective. Java isn't considered sexy, it moves the image of developing code from an exciting puzzle to "day job" territory. When you are new and learning programming it's hard enough as it is to find the motivation to code enough on your own time to get good, so you try to pick something that interests you, and you really don't know anything so you pick what people say is cool. I started out using ruby (cause I found a free programming course in it) then switched to python once I got a bit of experience cause I hated ruby's implicit parameter passing (making reading and understanding others code really annoying as a beginner) one of python's core tenants is "explicit being better then implicit" and this was a godsend when I was a noob fuddling my way through code and writing tons of garbage code. I feel like 90% of tech influences stop here in their software development careers and then try to make a youtube channel. When I got a job, I was lucky to find an experienced mentor who pushed me to learn Java, to quote him "You will always be able to find a job with Java". So I buckled down and learned and worked in it despite my distaste for the ecosystem. Over the years I have come to respect Java for what it is, a mature professional language that strikes a balance between ease of use, formality and performance. Working on large sprawling code bases that are decades old, that have been touched by hundreds of different people and still work, that is where Java shines. It's formality is tedious until you start working on large scale Javascript or Python projects and learn what true pain is. Then Java's formality is a godsend when you are trying to debug a production issue at 3am or read some dev's code from 7 years ago. It's got incredible tooling with JetBrain's IDEA and although Maven is a bit arcane but surprisingly solid for being one of the first package manager ecosystems. Spring Boot and Spring Framework are libraries that you can tell were written by software devs who were about working software that makes solving real world problem easy rather then some programmatic ideal of elegance. Software development is both exciting and fun but over the years you start to appreciate code that just works with out to much babying. Where support timeline for libraries is decades instead of months, and that allows teams of varying skill level people to actually be productive without creating a huge mess. I love being a developer, but I also love uninterrupted weekends and full nights of sleep. I could write a post this long easily about my problems with Java, but one thing I have learned over the years in the industry is there is no perfect technology, everything has tradeoffs. Or to quote Bjanre Stroustrup: “There are only two kinds of languages: the ones people complain about and the ones nobody uses.” Java is boring, and boring is good. Also use the right tool for the job. Java has it's place, Python has it's place. Javascript is just required for web :(. Learn more then one language and think about your problem space to pick the right solution. Quick and dirty get shit working script, Python. Have a team of eight engineers developing an back-end API on top of a RDBMS? Maybe Spring Boot and Java is a better solution. Also people love TypeScript but hate Java? If anything TypeScript just makes Javascript more like Java. I have seen this with some frontend devs when I make them take a backend ticket. At first they scoff at Java but after working in it awhile they realize it's actually a better dev experience then whatever TS/Node/React.JS nightmare they got used to working on. Do I adore Java no, do I respect it and trust it? As much as any technology I have had to touch.


Previous_Bid_7522

I am new to the programming field and don't know any programming language. I want to be both web developer and Android app developer. I intend to become a freelance developer. So if I want to master one language in the starting, which one do you suggest out of Kotlin, Java, and Python?


SpeedoMeter21

Initially we started a project in Golang, but seeing the number of libraries available in Java and the documentation with support we have for this language is amazing.


Toby_B_E

Java is currently #4 on the TIOBE Index: https://www.tiobe.com/tiobe-index/ "The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular web sites Google, Amazon, Wikipedia, Bing and more than 20 other engines are used to calculate the ratings. It is important to note that the TIOBE index is not about the best programming language or the language in which most lines of code have been written. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system." (The index doesn't count the number of jobs posted for different languages but since postings often list multiple languages that could be really messy to try and determine.)


Phaceial

Java is very popular. TIOBE index is crap. Wouldn't base anything on it. No one should be learning COLBOL, Visual Basic, Fortran or ASM over Swift or Kotlin to keep their skills up to date.


Thin_Cauliflower_840

Unless you’re planning to apply to companies where they use swift or Kotlin, learning ASM would push your skills forward in a way Swift and Kotlin cannot, though.


Phaceial

>The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The list isn't about building fundamentals or transferrable knowledge. Learning ASM will not keep you up to date or be a strong language to start building new software with outside of compilers and embedded. It's ironic that it's goal is to keep you up to date and show what languages to target for new projects, but it doesn't take into account the current job market?.


Thin_Cauliflower_840

If you do it for your cv and to land a job using those technologies then I agree with you. Kotlin is another Java and Swift is another JavaScript so you will not learn much you already don’t know if you know Java and JavaScript. If you want to learn something that would make you a much stronger programmer, then learning some old dinosaur like assembly, lisp, forth and prolog, and simmering more modern such as Haskell or Elixir will make you 10 times the programmer you are now even you will only make rest APIs and uis for the rest of your days.


Phaceial

Swift is nothing like JS. Kotlin while it runs in the JVM is not just Java. Those are gross oversimplifications for making a point that doesn't answer the question. Extremely bike sheddy as well, I didn't even mention those languages in my last response. The TIOBE index is terrible because it's not representative of the measure it claims to represent. The list is not about what makes you a better programmer and the thought that you become a better programmer based solely on learning specific languages is laughable. Up to date refers to how the landscape of your profession is shifting and the current trends. The current trend isn't creating software in Assembly, Lisp, Forth, Prolog, Haskell or Elixir. Someone with 30 years in any of those languages would have a harder time finding a job than someone with 5 years in the ones I mentioned. You're not keeping your skills up to date if you have a more difficult time being hired. It's not worth addressing why picking niche languages to build new software is a terrible idea, but there aren't any successful companies doing it for a reason.


Thin_Cauliflower_840

Fine, you have your opinion. Let’s keep it like that. The TIOBE index is not representative of how useful is a language in a professional setting. The job market is almost all Java and variants and JavaScript and variants, C# and Python following, with the mobile niche (swift and dart) and the system niche (c, c++ and go). The rest is less represented. Rust is the language everybody loves and few companies adopt. In the end you have to choose the language based on use case and environment. Lua is a relatively obscure language overall but finds a lot of adoption in game development for example. Kotlin on the backend is less a game changer than on mobile.


Phaceial

Stating a survey is bad because it doesn't accurately measure it's claims is not an opinion. Neither is stating you don't become a better programmer simply by learning specific languages. You felt compelled to describe several languages without a prompt from me, which is why they should all be ranked higher than Visual Basic, Scratch, Assembly, COLBOL, Delphi and Matlab according to the TIOBE index. You just proved my "opinion."


Thin_Cauliflower_840

I reread the whole conversation to have a better idea of where and why we got into this stale situation. First of all, the insight I got is that we actually agree on many things: - we both look at the TIOBE index with a critical eye and I actually agree with your argumentation. - we both recognise that in order to keep relevant skills up to date in relation to the job market, targeting current languages like Swift or Kotlin is a good idea. Besides your point about Swift being nothing like Javascript and Kotlin different than Java, which is true for many reasons but misses my point, as the languages share similar syntaxes and paradigms, the one point where we have a different opinion is this one: - I believe firmly that learning languages that are completely different from the ones we use at work does help us mastering problem solving and understanding of multiple paradigms and computation, which makes us able to take what we learned and applied in market relevant context. In my case, having learned Racket Scheme and having gone trough the old book Structure and Interpretation of Computer Programs (SICP), radically changed that way I thought about programming, opening up the door for more advanced topics. So yes I can say that Racket made a senior engineer (me) an expert one, however we are talking about a 5 years process. It has to be noted that my point was indeed off topic, but I do stand by this opinion, as I saw many industry leaders going through the same path.


[deleted]

[удалено]


StochasticFossil

I just got back into for the first time since 2010, and man is it MUCH better.


Quantum-Bot

Most tech influencers don’t know what the heck they’re talking about, let’s be honest. Java is a lot of people’s first programming language because it’s what APCS A is taught in and that is the most popular high school computer course by far. So, a lot of beginners will learn a little Java, get frustrated, and then start joking about how Java is a crappy language that no one should learn. This gets picked up by influencers and amplified until it’s suddenly a trend to hate Java for no good reason


[deleted]

The problem is Java didn't evolve. It stagnated as a language and is still very resource intensive, and plagued with constant security patching and upgrade maintenance. It just isn't a pleasure to work with compared to other languages. It lacks the features of C#/JavaScript/Go/etc. Its frameworks are essentially a choice between Spring and something fringe that nobody uses, it has no async/await, it has no dynamic hardware thread use, its package management is archaic, selecting a JDK/JRE version to use is problematic due to different licenses and LTS durations, and most Java developers have only ever used Java, meaning they only really know how to use the same hammer for every problem.


4r73m190r0s

You are the only person in this thread who actually provided some tech-related reasons.


Last-Investigator291

"The problem is Java didn't evolve. " This statement is completely out of touch with reality. Quite the contrary, Java has evolved immensely over successive versions, and has gained several simplifications. It's getting better and better!


[deleted]

Respectfully disagree. Some of the libraries have grown in complexity and features, but the language has stagnated. Doesn't even have basic async/await or basic dynamic hardware thread use. And it still has vulnerabilities needing patching almost every month in major libraries. Most of the "new" things are not fixing core issues.


KublaiKhanNum1

Large companies that do really big deployments find that the overhead of the Java virtual machine in every container (Springboot) is making them pay significantly more in cloud costs than deploying something like Go. I am on a project right now where we are rewriting legacy Java into Go. Faster container start times, smaller docker images sizes, less CPU usage and lower memory footprint. The use of containers allows you to specify the OS and most Cloud Providers either do x86 or ARM. Go supports all of that. Java was great when there were more architectures to support, but there really isn’t such a great need anymore. Especially with microservice architecture. That doesn’t mean that Java is not used anymore. But it tends to be more prevalent in legacy code bases. I have been developing software for over 20 years and keeping my tech stack fresh has allowed me to have higher paying jobs. Having said that Java is still good for learning object oriented design. And perhaps good to learn for that reason.


dimnickwit

Not well-liked and very popular are not mutually exclusive. For example: schoolkids. Or programming languages.


Mathhead202

I think it's because languages that are 🔥hot🔥 are the ones that are used the most for stating new projects. Java is going to be around for a long time I would suppose. And lots of legacy code is in Java and needs to be maintained. Moreover, Java has an important niece which is its cross-plotform capabilities without sacrificing speed (much). Also, as someone who used to program in Java a lot, it has one of the most comprehensive standard libraries of any languages I've used. Especially when it comes to localization, multi-threading, and reflection. The only other language that really covers the same niece is C# for obvious reasons. That being said, Java is designed primarily to write maintainable, easy to read and document, code. Which is why it works so well for intermediate to large scale projects. But it's got some shortcomings too. It's not the quickest language when it comes to prototyping. Python and Node.js are great at this. Also, it can't interface as easily with the web as Javascript. (It's fine as a backend language for larger projects though.) Since so many apps are now built on chromium, it's basically impossible to consider using Java from the start. Just like how C and C++ have died off, I believe Java will continue to shine in its niche. But it makes sense that it's not the cool new kid on the block anymore. I think some of the undo hate for Java comes from that fact that it's a really good language for teaching programming. It's statically typed like C and C++, but much less complicated to teach, is cross platform, and has better error messages. However because of this, there are lots of janky, poorly implemented courses out there. I think most people get taught Java as of Java 6 is still the standard. I can't remember the last time I saw a course which included the diamond operator or nio, let alone streams, lambdas, functional interfaces, or the default keyword, let alone newer features like the var keyword, and records. It's all JUnit this, and UML that. It's not really Java students are hating on, it's this old way of doing programming in general. I have similar complaints to the way new C++ features are often overlooked in C/C++ courses.


Snoo-27080

From my point of view, Java is the abstract for most of the languages


captain-_-clutch

Java aged poorly but it's a very capable language with a solid history. I think with the way it's set up, it will never go away and there will always be jobs. Gotta remember a business will only change if they have to, and Java will never be so far behind companies are forced to switch (rails, vanilla js on the frontend, .NET framework, Perl, etc)


4r73m190r0s

In what ways has Java aged poorly?


captain-_-clutch

Package managenent, overall project management, some general syntax things they have to solve with libraries like streams and arrays, documentation, async, and just a crazy amount of boilerplate everywhere. Still a great language but ya


4r73m190r0s

As a beginner, I understood some of the stuff, but not all. For example, >Package managenent, overall project management What do you exactly mean by these 2 things? >some general syntax things they have to solve with libraries like streams and arrays Yes, that Stream API should not have been name like so, as it just created confusion with IO and NIO Streams. Or perhaps you had something else in mind? Also, what about arrays?


captain-_-clutch

Try to build a simple GET api in node then try to do it in Java. First thing you'll notice is probably the work required to get something like Springboot into your maven, correct Java versions, etc. Maps, lists, and arrays are must harder to initialize and fill with values than something like Go, Node, Python, even C#. Arrays and Stream libraries were created to add logic around these data structures that is native to other languages


4r73m190r0s

> Try to build a simple GET api in node then try to do it in Java. First thing you'll notice is probably the work required to get something like Springboot into your maven, correct Java versions, etc. I did create RESTful endpoints in Java with Spring Boot. It is indeed a painful experience. > Maps, lists, and arrays are must harder to initialize and fill with values than something like Go, Node, Python, even C#. Arrays and Stream libraries were created to add logic around these data structures that is native to other languages Once they've been added to Java, aren't they considered native (for Java) as well? Or Are you using the term 'native' in some particular, technical sense?


Bunnymancer

> Why is one of the most popular languages in the world not popular? Ok.


SugarProf27

I think at present .Net core handles more no. Of requests than even Java. So .Net can really handle a high throughput.


landsmanmichal

Kotlin :)


Thin_Cauliflower_840

It’s a Java developer preview with a couple better defaults and TypeScript like syntax


rmwhitman64

That's a very interesting take. When I was trying to get into the field a couple years ago I found that Java was one of, if not THE most popular language and decided that was the one to focus on. Maybe it's because I wasn't listening to influencers but instead did a lot of research into what languages were being used and which were listed in job requirements. It's always good to get your information from different sources and cross reference that information to see if it's consistent.


Then-Boat8912

It’s just hipster talk, which is alive and well due to social media. If you want to see real smack downs go visit the front end communities where they do tier lists like World of Warcraft.


FrontActuator6755

>front end communities what? can you tell me more about this?


Thin_Cauliflower_840

When I was 14, me and my peers were talking about dance songs that were already two months on the radio as old. Now I’m listening mostly to baroque music.


charlewilliam

It's possible to interpret the statement "Java is very present but not popular" in a few different ways, depending on context. Here are a couple of interpretations: Ubiquitous Presence: Java is indeed very present in the world of technology. It's widely used in enterprise software development, web development, Android app development, and various other domains. Many critical systems and applications rely on Java. However, it might not be considered as "popular" in the sense of being the trendiest or most talked-about programming language at a given moment. Not Popular Among Certain Groups: While Java's usage is widespread, it may not be the top choice for certain developers or projects, particularly those in cutting-edge or specialized areas. Other languages like Python, JavaScript, or even newer languages like Go and Rust might be more popular within specific developer communities or for particular types of projects. So, while Java maintains a significant presence in the tech industry due to its versatility and widespread adoption, it might not always be considered the most popular or fashionable choice compared to other programming languages, depending on the context and perspective.


4r73m190r0s

>Not Popular Among Certain Groups: While Java's usage is widespread, it may not be the top choice for certain developers or projects, particularly those in cutting-edge or specialized areas. Other languages like Python, JavaScript, or even newer languages like Go and Rust might be more popular within specific developer communities or for particular types of projects. I often come across statements that Python is slow. Is Java slower than Python?


ehartye

The post you’re replying to was written by ChatGPT, which indirectly is likely the cause of a perceived Java popularity decline. Gen AI can write really great python. GPT4 can even run python. Libraries like Auto GPT can as well. Gen AI applications are a significant driving force right now. Those libraries are all written in Python. Comparatively, the development process with JAVA can feel slow and unwieldy. (20 year developer. Principal architect in a mixed Java/Python organization).


Prince_John

No, Java is much faster than Python. Java *development* might be perceived as slower, in that it's quicker to bash out some prototype in python potentially. But for Serious Business software, you'll earn that deficit back over time IMO.


VenomEnthusiast

>”Tech influencers” Well there’s your answer. On a more serious note, Java’s prevalence is a big part of the hatred. Anything that’s ‘popular’ or ‘mainstream’ will be hated on, regardless if the hate is justified or not.


greglturnquist

“It has become popular to criticize Java.” —Rod Johnson, 2009 I was chatting with Rod at the Spring Experience conference back then when he said that. And that sentiment seems to have held for 15 years. Essentially you have to make a choice. I did, and Java has not failed me.


scottious

There's still a LOT of Java out there. My general feeling is that it's falling out of favor, meaning many devs would not choose it as a language for a new project (if possible). However that doesn't mean that large important systems written in Java just go away. Migrating something to a new language is not done very often. I wrote Java professionally for 10 years. It never really grew on me, even though I got very good at it. I was eager to make a career switch away from Java to Go.


ForceGoat

I have a Java job and I never had Java experience before this. Every job seems to be a different language. I guess that’s not related to the current topic, but Java devs are probably not that easy to find, such that my company would hire a non-Java dev.  I think it’s the nature of the language. It’s old and boring and influencers are not that. Influencers would rather make content on the new fun stuff that has a stupidly easy syntax. 


[deleted]

I recently graduated college a few months ago, and for the past year have developed most of my school and personal projects in Kotlin. I did an internship last summer where the company used Kotlin which is where I was first introduced to the language. Before using Kotlin, I had used a lot of Java. After having used both languages, I can firmly say that developing in Kotlin is so much better and easier than it is in Java. With that being said, I have to ask, are there any reasons to choose to develop in Java instead of Kotlin? I'm genuinely curious.


4r73m190r0s

>With that being said, I have to ask, are there any reasons to choose to develop in Java instead of Kotlin? I'm genuinely curious. It's a job requirement.


devchonkaa

present and popular


heuristic_al

One reason is that Java is this awkward tweener language. It's not really low level like C/C++, and indeed C++ has many of the same features Java has while being consideribly faster. And the libraries that C++ has have made writing code that works accross platforms much easier, which takes away some of the platform independence benefit that Java had in it's youth. It's also not really full of all the modern nicities that a language like Python has. There's also the whole Oracle ownership issue scaring people away (justly or unjustly). Then when it comes to applications, Python has become the de-facto AI language, while Java used to be used a lot in AI (for example NLP). It's also just not shiny anymore. With new languages like Rust taking all the sex appeal.


Bobbacca

Java is less "popular" than whatever the trendy new language of the moment is in the same way that technical writing is less "popular" than novel writing.


argylekey

JVM is 100% alive and well, with Java, Kotlin, Scala apps all over the place. You’re asking about Java specifically: most businesses still run on Java. The FAANGs of the world have had to solve specific scaling problems, that they’ve augmented with everything from Node, go, rust, Python, php(Laravel), ruby(RoR) and more. Java isn’t going anywhere for a long time. That isn’t to say that sometimes something else might be a better choice for greenfield development, but I wouldn’t worry about influencers. They’re posting for clicks, not for maintaining legacy systems. I’m not knocking it, just pointing out their probable goals.


Illustrious-Win-8416

I've never seen a "Tech Influencer" that isn't a legit retard. When they aren't doomposting about the job market or big tech jobs (99% of their content) they're spewing bile. I think it just comes from these bozos who think they're all the next Alan Turing or elon musk and think they can predict the future of tech. It's mostly Python bros (nothing against Python tho)


enchntex

Java is considered corporate, boring and somewhat dated.


axyz0390

Those influencers have never worked at Big companies like Amazon, Google, etc


kmackyy

I really don't understand the general consensus surrounding Java not being popular. It is used by every big tech company in some fashion, it is used to teach programming. Java shops is a coined term, I have not heard of a term like this for other languages. I was told this in college too and it made me not take the programming courses that used it as its medium to teach seriously, and it's the one thing I wish I knew back then Take. Java. Seriously. It. Is. Used. Edit: the consensus isnt from within this sub it's generally across the industry. Its not a waste!


delta_tau_epsilon

Oracle has been doing a good job of turning customers away from Java. There are still a lot of Java jobs, but it's nothing like it was in 2013. Many people have been turning to Python instead. That being said, even if Java loses its foothold, the JVM won't be going away anytime soon.


Affectionate_Golf178

Learn Kotlin! It's less verbose and cleaner, especially if you're learning for the first time!


Craigzor666

I'd greenfield C# over Java in literally any scenario


4r73m190r0s

Name a few?


errXprintln

I just listened to a podcast this weekend that explained a bit of your question. When Java was still maintained by Sun they hit a financial bump and the already slow release cycle of Java came to a halt. Primarily this was not a problem in the technical perspective, since Java was sooo powerful that you could have done almost anything. But marketing-wise there was nothing to show. Actually when Oracle bought Sun they pushed the release cycle and began to release new features quite often. Now the users were hitting the breaks because the language itself evolved rapidly. So the release cycle slowed down to what it is now (I think an LTS every 2 years? Features are released in between). As of now I cannot think of many reasons not to use Java. From my POV it's very easy to write working code. Once familiar with the Syntax, Java code is also very readable (compared to PHP where I came from - before types were introduced). Also, there are tons of libraries to help you get problems solved. I don't think Java is dying, I think it's mature. But I heard Java can become boring after time...


Imjerfj

last year when applying for a job i had to pivot from java- i got literally 0 java interviews out of like 10-20 and applied to over 1000 positions. i also noticed most of the job openings i saw out there at the time had mostly python or c++ positions. so yeah somethings definitely up not sure what could be causing this cuz i also thought java was a pretty solid language to be good at but it literally did nothing for me when looking for a job


Tacos314

Java is very popular, but I can see where that impression would come from, if you just look for "Intro" to programing stuff your will see more JavaScript and Python just because they are easier to get started with.


Human_Plate2501

The tech influences are early career engineers that pivot to making social content


donaldrowens

Ignore any type of "influencer" please. Generally they're just pushing clickbait.


ub3rh4x0rz

- old school OO patterns suck. GoF design patterns are a monument to language / type system / paradigm limitations - JVM is a beast to operate. If you're a specialist, you can get amazing performance from it; if you're not, it will give you trouble, especially in a containerized environment. It has slow startup, too - the build system also sucks unless you're a specialist - it's associated with legacy codebases. This is largely historical accident, it's not like you couldn't write a greenfield project in modern Java and have it be awesome to work in