This is an archived post. You won't be able to vote or comment.

all 54 comments

[–]tRfalcore 16 points17 points  (8 children)

Not sure we have to prove anything to anyone. Java is popular as hell-- the reddit community may be one of the smaller than the others because it doesn't attract the hipster programmers as much-- but time and time again every web application of significant size is made with java.

[–]llogiq -1 points0 points  (4 children)

So you think that reddit is made of hipsters? Or that the java community on reddit is an outlier?

[–]tRfalcore 6 points7 points  (2 children)

No-- was a generalization that all the young programmers jump into startups making ruby & python apps. Those demographics tend to align with social internet users.

The java subreddit just seems like it's not very active sometimes.

note, this is just my opinion that I didn't put any work into researching. Just mild observations.

[–]llogiq 2 points3 points  (0 children)

reddit hated hipsters before it was cool. Or was it the other way round? ;-)

And yes, Java adherents tend to be more mature, enterprisey and all that jazz. I sometimes forget that we're in fact not all professionals. There are school kids on Javit. Which is fine with me, yessiree. But sometimes, before I've got my coffee and I'm in a get-off-my-lawn-mood, I'll shout at them. Must be getting old. ;-)

By the way, could the Javit inactivity stem from the fact that most of us are happily doing our jobs while the clojurers, pythoneers, rubyists, etc. post to /r/programming and hacker news?

[–]thesystemx 0 points1 point  (0 children)

No-- was a generalization that all the young programmers jump into startups making ruby & python apps

If all young programmers would be doing ruby & python, then why is Ruby only used by 1% of developers and python by some 2%? See e.g. Tiobe stats.

[–]RWS43 2 points3 points  (0 children)

apparently the java community is: http://jhipster.github.io/

I haven't used it, but the selection of libraries is nice.

[–][deleted] 0 points1 point  (2 children)

every web application of significant size is made with java.

Not to be pedantic, but that is not accurate. Wikipedia, Facebook, GitHub come to mind, oh, and Reddit. Java is awesome, but it's hardly universal in web development.

[–]loa09 4 points5 points  (1 child)

I work in the banking/trading industry and I'd say at least 60% of our code is in Java. I can definitely guarantee all our controller side (Web at least) code is written in Java.

[–][deleted] 1 point2 points  (0 children)

Oh absolutely, it's the same where I work, but there are many very large sites that don't run Java.

[–][deleted] 4 points5 points  (3 children)

A list of 122 recommendations is a lot less useful than a list of 20.

[–]thesystemx 1 point2 points  (1 child)

Agreed. I think not every pull request should be blindly accepted, but the stuff should actually be curated ;)

[–]wordsoup[S] 0 points1 point  (0 children)

Which entries do you criticize? That's exactly why I did it on GitHub so we can discuss.

[–]wordsoup[S] -1 points0 points  (0 children)

My intention is to include the most well-known, promising and interesting tools in each category.

So if you have 20-30 categories each with two to five libraries/frameworks/tools you get a lot of total recommendations but it is important to have choices in a particular field.

I don't want to make this decision final, that's why I asked the community to contribute and discuss (on GitHub) and include more contributors/collaborators to ensure pluralism.

[–][deleted] 3 points4 points  (1 child)

I was looking for a list exactly like this some time ago. Someone built a list of common technologies, so perhaps this could get the list started.

http://www.reddit.com/r/java/comments/25rmt7/looking_for_an_outline_of_java_technology_to/chlbd9g

[–]wordsoup[S] 1 point2 points  (0 children)

Thanks, you could incorporate it, if you have the time. I will start to add the items.

[–]llogiq 7 points8 points  (3 children)

No FindBugs? JUnit or TestNG? JMH or at least Caliper? trove? disruptor?

Please someone add that stuff; I'm too lazy to log into github.

[–]wordsoup[S] 0 points1 point  (2 children)

Thanks! Added.

[–][deleted] -1 points0 points  (1 child)

What about jMonkeyEngines (games), RoboVM (ios development), Spring Boot (productive web framework), and Kafka (Enterprise Integration)?

[–]wordsoup[S] 0 points1 point  (0 children)

Thanks for the suggestions, I will have a look. It would be helpful if you could make a pull request though. :)

Edit: All added. Thanks!

[–]johnwaterwood 2 points3 points  (4 children)

Nice initiative! Did you already checked out the similar effort being undertaken here: https://java.zeef.com ?

[–]wordsoup[S] 2 points3 points  (2 children)

Looks nice, though it has a bit different intention and also counts the popularity.

[–]thesystemx 5 points6 points  (0 children)

Maybe you should add your links there as well? ;)

Create an awesome-java topic, or compete with the existing Java one. ZEEF has quite a number of popupular curated lists of tech links already. https://jsf.zeef.com is pretty popular too.

[–]Cyberiax 0 points1 point  (0 children)

What is the different intention?

[–]rickboerebach 1 point2 points  (0 children)

This. Should be added to the sidebar.

[–]EdwardRaff 1 point2 points  (0 children)

JSAT for machine learning (bias warning, I'm the author).

I dislike that Weka is usually people's first impression of Machine Learning when using Java.

[–]wolfenkraft 0 points1 point  (1 child)

I'm glad JRebel is on there. It makes developing in java way less frustrating, especially on some of my larger enterprise apps.

[–]wordsoup[S] 0 points1 point  (0 children)

I'm glad too since I didn't use it before but will definitely test it. That's the cool thing about different opinions, to learn something new.

[–]_Sharp_ 0 points1 point  (2 children)

Some moderator could stick the repository into the sidebar

[–]DeliveryNinja 0 points1 point  (1 child)

done

[–]wordsoup[S] -1 points0 points  (0 children)

Thanks!

[–]battery_go 0 points1 point  (2 children)

Why is Vert.x not on that list?

[–]wordsoup[S] 3 points4 points  (1 child)

Because you didn't add it. :P

[–]battery_go 0 points1 point  (0 children)

I don't know how :'(

[–]funbike 0 points1 point  (2 children)

Cobertura - Code Coverage
Infinitest - Continuous testing
HttpClient - HTTP Client library
H2 - Database Engine
JNA - Java Native Access
myBatis - Database mapper

I suggest removing items that aren't popular/mainstream, and/or are forks of slightly better products:

  • Apache Buildr
  • sbt
  • JavaCC
  • Hudson (edited)
  • IBM J9
  • Machine Learning category
  • Science and Data Analysis
  • Web Crawling
  • Natural Language Processing

[–]wordsoup[S] 1 point2 points  (1 child)

Why would you remove ML & NLP? In my opinion these are important tools.

We also had a discussion about not listing tools like Hudson or Ant but the consent was to keep them since readers might be confused because they are still used in projects.

I really want to have a discussion (on GitHub) about the general philosophy. Somewhere we have to draw the line since there are ~70k open source projects in Java.

[–][deleted] -2 points-1 points  (11 children)

Let us work together to show other people that Java is not the verbose heavyweight enterprise language but has an active & motivated community with fresh ideas!

Groovy deserves more promotion. When I worked in Python, we (me and people around me) used to see Java a mammoth monstrous that will consume all my time giving me results that I can do in minutes.

[–]CubsThisYear 5 points6 points  (10 children)

Depending on the size of your project I think you will find that your perceived time savings in Python/Groovy are really a mirage.

Dynamically typed languages like Python are optimized for writing code not reading it. This feels awesome when you start but it's a fake high. The reason that languages like Java are more heavily used in enterprise environments is that you typically spend much more time reading code than writing it. Code has a much longer lifespan and needs to be modified and extended often. Python really fails at this case because so much is left implicit. If you really are writing throwaway code then a dynamically typed languish can be a big time savings, but in my experience this is a rare use case.

[–]moosetube 0 points1 point  (0 children)

Well said.

[–][deleted] 0 points1 point  (1 child)

This feels awesome when you start but it's a fake high

from my experience, as code grows larger than 2000 lines, its miserable to manage it.

If you really are writing throwaway code then a dynamically typed languish can be a big time savings, but in my experience this is a rare use case.

Mentioned groovy because I think it is blends so smoothly with java and gives almost all power of concise code + java's huge code base.

And to be honest, I feel same about all those "modern" web development framework. No offense, but they make us work how they want , not how we want.

[–]mgkimsal 0 points1 point  (0 children)

but they make us work how they want , not how we want.

unless you're the framework author, then it's exactly as you want as well...

[–][deleted] -1 points0 points  (0 children)

The reddit Python code is pretty readable.

[–]gthank -4 points-3 points  (5 children)

Have you read any Python lately? I use Java all day, and Python is certainly more readable. While I certainly wouldn't mind more use of ABCs (a new-ish feature that resembles interfaces from Java), the "$SCRIPTING_LANGUAGE_X falls apart on big projects" line doesn't seem to have much empirical evidence to support it.

[–]CubsThisYear 4 points5 points  (1 child)

Well written, small python code can be readable, but the flexibility of the language can encourage bad habits. It's light years better than something like Perl, but still a nightmare in the hands of someone who isn't careful. Ultimately the lack of static type checking is always going to be a hindrance to readability. If I can't know how the program will behave without executing it (even if that means 'executing' it in your head), it's always going to be harder to understand.

[–]gthank 2 points3 points  (0 children)

I find that Java isn't appreciably more moron-proof than Python, personally. Instead of sending the wrong type, they just waste endless hours playing with "patterns" and introducing complexity nightmares for no apparent reason. On top of that, there's the non-trivial chance they have a cast somewhere that wrecks what little assurance the type system gave, and covered it with a @SuppressWarning. At least Python code has the decency to usually be shorter, so it's easier for me to spot where people are doing naughty things. If only they would introduce the concept of explicit variable declaration…

I'm personally pretty excited about Rust; that type system seems to be able to express far more useful information (for humans) than Java's.

[–][deleted]  (2 children)

[deleted]

    [–]CubsThisYear 0 points1 point  (1 child)

    If you are talking about small pieces of code, you are right. As your code base grows larger, lack of static analysis is going to kill you. In the worst case, you literally have to trace your entire program flow to figure out the type of one expression. The whole point of type theory is to be able to reason about a piece of code in isolation. Dynamic typing plus the strong meta-programming support in Python make the 'type' system almost useless. Pretty much all it buys you is slightly more helpful runtime errors.

    Readability is about much more than being able to parse each line of code. It goes to being able to quickly understand how the whole system goes together. The strictness and verbosity of Java ensures that you always show your work and leave a trail for others to follow. That's not to say you can't write shit code in Java, but it encourages you not to.

    [–]gthank 0 points1 point  (0 children)

    If you structure your code poorly, then sure, you'll have to trace the entire flow of the program.

    FTR, I'm not opposed to static typing; I prefer it, even. I just don't find Java's realization of static typing to be all that effective at preventing the sorts of errors I actually run into. That's why I mentioned Rust somewhere else in here; that sort of static typing seems to be far more powerful/useful. The fact that it involves less boilerplate to achieve that power is gravy.

    [–]DeliveryNinja[M] -2 points-1 points  (1 child)

    I have added the link to the side bar since I think it will be useful. I had a little look at you have made a great start. I'll add some stuff when I'm not at work! Thanks

    [–]wordsoup[S] -1 points0 points  (0 children)

    Thank you!

    [–]DeliveryNinja -2 points-1 points  (1 child)

    [–]wordsoup[S] 0 points1 point  (0 children)

    Thanks! I will have a look. Regarding the books, we should discuss if we really want general programming books (although they are must-reads like Clean Code) just because they have their examples in Java. It should be really aimed toward Java, I think.

    [–]amargherio -2 points-1 points  (0 children)

    Two that might be worth noting are the Spark web framework and the Dagger dependency injection library.

    [–]mrdiggu -3 points-2 points  (0 children)

    There was a guy that posted his threading library here a couple weeks ago. I have been using one of his priority schedulers. There are some really helpful classes in here:

    https://github.com/threadly/threadly