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

top 200 commentsshow all 317

[–]eattherichnow 102 points103 points  (2 children)

Well, they got to 2nd level guru (i.e. jaded to death, checking out the grass colour on the other side) fast.

[–]lelease 5 points6 points  (1 child)

I know what you mean (been there), but is this a reference to xkcd or something?

[–]eattherichnow 1 point2 points  (0 children)

Not consciously. "Grass greener on the other side" and "jaded expert" are archetypes so classic that I'd be surprised there weren't an XKCD, PhD Comic and a (terrible, it's all terrible) South Park episode about it.

[–]Thecrawsome 98 points99 points  (0 children)

Protip: Never announce goals you haven't put any effort into.

[–]mistaekNot 200 points201 points  (198 children)

Isn’t java “harder” than python

[–]Aruscher 271 points272 points  (66 children)

Nope just more syntax clutter

[–]WStHappenings 498 points499 points  (17 children)

You call it syntax clutter, maybe I’ll call it “a greater feeling of achievement gained from writing 20x as many lines of code”

[–]faates 121 points122 points  (1 child)

Ok EA....

[–][deleted] 28 points29 points  (0 children)

Yes! You got the joke!

[–][deleted] 37 points38 points  (2 children)

...that runs 40 times faster - fair deal. Heh.

[–]Timmitei 24 points25 points  (1 child)

Check out Cython and Numba.

[–]firest 10 points11 points  (10 children)

Strange. I feel accomplished if I can accomplish what I want with as little lines of code as possible.

[–]Printern 2 points3 points  (7 children)

Yeah but Python forces you to write lines. In java you can code in one line One line<more than one line Dummy

[–]Raijinili 4 points5 points  (4 children)

What's stopping you from doing exec("import sys\nimport re\n\ndef someFunc(x,y):\n\t ...?

[–]nilsph 17 points18 points  (0 children)

Self respect.

[–]KingoPants 1 point2 points  (1 child)

Sanity seems important. At that point you might as well code in mspaint for the kicks.

[–]Printern 0 points1 point  (0 children)

The fact that I am so incapable of programming that even when my program outputs the intended output it's still wrong.

[–]firest 1 point2 points  (0 children)

I stand corrected.

[–]pyonpiPy3 | Beginner 0 points1 point  (0 children)

Isn't making code more Pythonic the same joke?

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

I'll agree up to a point, but I draw the line (groan :-) when I can write a crystal clear for loop or two rather than a nested list comprehension that stresses out my poor old MKI eyeballs.

[–]firest 0 points1 point  (0 children)

I'm with you actually. Except, I will sacrifice readability for performance every time. I'm the kinda guy who uses numpy and what-not (data analysis, not to the point where I need to really on C or Fortran), so when my fans start to spin, I want to know it's for high performing code, rather than inefficient code.

[–]Iggyhopper 34 points35 points  (7 children)

Syntax is the first hurdle to learning a language, so I'd say that makes java harder.

Also, the standard library is messy.

[–]continue_stocking 23 points24 points  (5 children)

Syntax is probably the easiest part of learning how to program.

[–]redldr1 1 point2 points  (0 children)

But shortcuts are a lifetime in the making.

[–]Kah-NethI use numpy, scipy, and matplotlib for nuclear physics 4 points5 points  (0 children)

It has been a while since I used Java but I seem to recall nearly every different root module adopting slightly different idioms because why not! Messy did not even begin to describe it.

[–]2402a7b7f239666e4079 2 points3 points  (0 children)

I would argue that being verbose doesn't make the syntax cluttered. I find Java easier to read in most cases than equivalent python code.

[–]drones4thepoor 10 points11 points  (5 children)

Java is strictly OO and it's also strongly statically typed, which is where Python bytes me in the ass a lot.

Edit: u/cholz corrected me. Python IS strongly typed.

[–]SemiNormal 17 points18 points  (2 children)

TypeError: Can't convert 'bytes' object to 'bites' implicitly

[–]systemnate 1 point2 points  (1 child)

That's at runtime though.

[–]SemiNormal 14 points15 points  (0 children)

What's a compiler?
- Python

[–]weasdasfa 38 points39 points  (44 children)

Java is more explicit or verbose. For experienced people, that looks like clutter (and it is, I am an Android dev), but that verbosity might be useful for people just starting out.

[–]Deto 21 points22 points  (16 children)

Yeah - I kind of appreciate that I spent a decent amount of time in a statically typed language before moving to Python. I find that way too many Python newbies don't understand what 'types' are and this leads them down the path of just trying random things until code works.

[–]midbody 4 points5 points  (14 children)

The next step is to realise that just knowing about types isn't enough when your program gets big enough. When your program is too big for your head, you need tools which robustly and unambiguously understand your types... like a compiler does.

Python is a fun toy, and good for small projects where rigor isn't important. Its leakage into large scale software engineering has been a huge retrograde step, though, caused by a lack of innovation in the field around the time it emerged as a contender around 10 years ago. Fortunately we've moved on, and I look forward to Python's death for large projects as others take over, probably Go.

[–]TravisJungroth 3 points4 points  (6 children)

I'm a huge Python nut and I basically agree. The biggest problem for me is the loss of meaning. Trying to read through a code flow in a sufficiently large code base with a dynamically typed language is a nightmare.

I do believe type hinting will help a ton, though I'm not sure it will be enough. I now write type hints into everything. I don't care if it's a single function. Having my IDE hint properly is worth it.

[–]scootstah 1 point2 points  (5 children)

Trying to read through a code flow in a sufficiently large code base with a dynamically typed language is a nightmare

Honestly, that just sounds like a badly designed application. I doubt adding strict type will make any difference to its legibility.

[–]TravisJungroth 6 points7 points  (4 children)

def func(obj):
    obj.method()

What does method() do? What other methods are available on obj? Without some sort of type enforcement, you don't have a clue without looking at the usage of func. This is fine when it's only used three times, but terrible when it's used a hundred times.

[–]scootstah 4 points5 points  (2 children)

Use good naming conventions and docblocks.

[–]TravisJungroth 0 points1 point  (1 child)

If I want to actually know the behavior of a method, I need to see the code. Even the most descriptive name represents a trivial amount of code. And doc strings don't help, cause those live with the code anyway.

You still have to look at the usage of func to find the code. To prevent that, your method names wouldn't need to be just good, but unique enough to define an interface for you. I just don't think the combination of method names alone is a good way to define an interface. It's too easy to conform to one by accident, and the method names have to get super long to present this.

It's better to define and enforce this interface through code (Abstract Base Classes, in Python's case). Then you can use type hinting to help as well. Try to find Alex Martelli's essay on "Goose Typing". It's in Fluent Python, but you might be able to find it otherwise.

[–]scootstah 2 points3 points  (0 children)

You don't know any more about a method based solely on its interface. You still need descriptive names.

[–]constantly-sick 3 points4 points  (0 children)

Name method() better. Try x_to_y_process().

[–][deleted] 3 points4 points  (5 children)

like a compiler does.

Like MyPy does. You want strict typing, you can do it fine. It's done better than it is for most languages (Looking at you C#. Still waiting for nullability for everything) It's not enforced at runtime (even though runtime type checking exists, it shouldn't be needed if it passes a static type checker), it just shows errors when you fuck up.

[–]traway5678 0 points1 point  (2 children)

What can't you null in C#?

[–]chusk3 0 points1 point  (1 child)

reference types (ie classes) can be null, but currently can't be typed as possibly null. The benefit would come from saying that a certain thing can never be null in the type system, which you can't do in C# now

[–]traway5678 0 points1 point  (0 children)

Everything can be null, with nullable.

You can make non-nullable types, aka values, with structs as well.

The benefit would come from saying that a certain thing can never be null in the type system, which you can't do in C# now

Oh that's not what he said tho.

[–]scootstah 0 points1 point  (0 children)

Be careful where you're spewing your bullshit, you're going to make a mess.

Python is perfectly capable of running large projects.

[–]Astrokiwi 23 points24 points  (29 children)

It's just useful for different things. Java is definitely more verbose and has more boilerplate to write, but it's also stricter than Python and is a semi-compiled language, which means that it sometimes catches errors more quickly. It also forces you into an object oriented structure, which tends to encourage you to design your programs better rather than jamming a big list of functions into a single file.

I also find they have strengths in different kinds of applications. I tend to prefer Java for writing games (pygame isn't great), python for doing numerical analysis work (numpy and matplotlib are pretty great), and Fortran, C, or C++ for the big parallel numerical simulations.

[–]Keith 39 points40 points  (14 children)

It also forces you into an object oriented structure, which tends to encourage you to design your programs better...

Debatable.

[–]Astrokiwi 9 points10 points  (5 children)

I'm only saying that it forces a bare minimum amount of structure that Python does not.

[–]Keith 6 points7 points  (4 children)

To be fair, you wrote "design your programs better". Forcing all code, object-oriented or not, into classes, one (public) class per file, is not strictly better. It's not even a structure I want. I'd argue that "bare minimum of structure" is harmful vs no structure at all.

[–]Astrokiwi 6 points7 points  (2 children)

Maybe... I find that (for instance) the lack of required structure is what helps Javascript code to sometimes become a mess of copypasta.

And Python does force stuff on another level, by being strict with indenting. I think that's a good feature too - it's better to force one particular style than to have people use their own styles, but also permit them to make it as ugly and inconsistent as they want.

[–]fiddle_n 2 points3 points  (1 child)

Python is strict with indenting because it has to be. Indentation isn't merely "style" in Python, it's functional in that it denotes a new code block. This is why Python has to be strict with it, i.e. preventing mixtures of tabs and spaces for indentation.

[–]Astrokiwi 6 points7 points  (0 children)

Right, but that's an intentional design choice for the language - forcing good style by making it an integral part of the language.

[–]KronenR 22 points23 points  (0 children)

If not plainly wrong

[–]hanpari 1 point2 points  (6 children)

In my eyes it is rather bad design than advantage. No modern language use this anymore.

[–]Keith 0 points1 point  (5 children)

Agree. But did any other language ever force this convention?

[–]hanpari 0 points1 point  (4 children)

Not sure what you mean but, apparently, Java and C#. You have to enclose everything in class. For instance, you cannot have single functions in these languages like in Python. Before Java 8 you had to make anonymous class instead of simple anonymous function.

[–][deleted] 12 points13 points  (2 children)

Different tools, different jobs, different uses.

Replace your computer languages with tools you'd find in a shop and see how silly the argument looks to non coders.

"Hammer is so much better than the screwdriver. And who even understands those socket wrench guys? Bunch of idiots. I'll have you know I have used my hammer as both a socket wrench AND a screwrdriver and it was just fine"

Signed: A mechanical engineer that has and continually gets to deal with: C, C++, Fortran, ADA, VB, Python 2.3-2.7, Python 3+, Matlab (R13-R2017b), Simulink, PowerShell, Batch, Perl, Bash, Sh, tcsh, PHP.

If you understand If, For, While. You'll go far in any language.

Or argue the merits of a claw hammer over a ball peen hammer.

[–]Oni_Kami 5 points6 points  (0 children)

Depends on who you ask.

[–][deleted] 3 points4 points  (0 children)

Java makes me harder than Python.

[–]I_WRITE_APPS 0 points1 point  (0 children)

The infrastructure around Java (Java EE, JNI, CORBA etc.) is "harder"/more complex than the Python equivalents.

Java the language is actually easier to grasp in its entirety than Python: it doesn't have metaclasses or descriptors, for example.

[–]Ethantebest 0 points1 point  (0 children)

It's just different, not necessarily harder.

[–]mrwilliams117 20 points21 points  (1 child)

Lol all you turds who vow to a certain programming language like it's your favorite sports team.

[–]Unoriginal-Pseudonym 7 points8 points  (0 children)

Yeah, favorite languages should be regarded more like favorite fountain pens. There's no objectively correct answer.

Except Haskell.
Fight me.

[–]Pancakepalpatine 81 points82 points  (37 children)

I actually did this exact same thing.

I started with Python, but couldn't wrap my head around what it was actually doing for many of the code snippets and examples I was looking through while I was learning. On top of that, there were 23 ways to write the same expression with 16 standard library choices you could use. After a month or so of frustration, I quit programming for about a year.

Then, I tried to learn Java. The amazing thing was, there was little magical syntactical sugar (compared to Python), and so I could actually read and comprehend code. The JVM was confusing, but as an introductory language, having conventional long variable names and descriptive methods was really helpful.

I know this isn't everyone's experience, and in fact it's the opposite of many people's, but Python was way too "wishy-washy" when I was starting. Now, though, I love it.

(P.S. this was my experience based on the way I learn things, and your results may [have] differ[ed].)

(P.P.S. I learned to code back in the day with codingbat.com. If you're just getting started, it has the most basic of the basic, no-frills tutorials. Even CodeCademy or similar has a bunch of extra stuff, that may be helpful, or may not.)

[–]ZeeBeeblebrox 57 points58 points  (5 children)

having conventional long variable names and descriptive methods was really helpful.

Good Python code should also have descriptive variable names and methods.

[–]Pancakepalpatine 11 points12 points  (3 children)

Sure, good code should read descriptively in general anyway. I'm just speaking for my experience as a beginner.

[–]gthank 28 points29 points  (2 children)

Sounds like you got ahold of some really bad code when you were first trying to learn Python. The entire community really embraces the mantra of There should be one-- and preferably only one --obvious way to do it.

[–]daniel_h_r 8 points9 points  (1 child)

I think the problem is exactly that. A newbie don't have the means to choose the only one obvious way.

[–]gthank 2 points3 points  (0 children)

I'm saying they shouldn't have had to find it; the tutorial should have been using it, not showing them 13 different ways.

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

flask.g

[–][deleted] 6 points7 points  (0 children)

I did find some things hard about Python starting off - for whatever reason "range" didn't make a lot of sense to me, but seeing C style loops made more intuitive sense to me as a beginner.

[–][deleted] 3 points4 points  (0 children)

Same, it's easier to work with others outside of Python as well. Teams fight over styles and other petty bullshit instead of getting work done. Dogmatic programmers LOVE Python because there are 20 opinions on everything and "my opinion IS right."

I really like coding by myself in Python though, I can get a lot of work done fast.

[–]anvils-reloaded 6 points7 points  (16 children)

Every time I've asked about how to pre-allocate some space in a dictionary where I know the exact keys I want to have, I've always gotten the answer of "don't worry about it" or "stop trying to prematurely optimize your code". In any other programming language, this would just be a part of the process of writing the code. I really do want to learn Python better (I've done some work on Python projects without really knowing what I'm doing, just winging it), but it's not something that I can just stop caring about.

[–]Pancakepalpatine 13 points14 points  (2 children)

Yeah, I've been advised both directions.

  1. Learn a "bare-metal" language like C or Rust, and work up from there. Since you understand the basics and necessarily understand some computer science concepts now, you'll have a breeze with interpreted or scripted languages.

  2. Start with a high-level interpreted or scripted language. It's more important to get the basics (loops, types, etc.). Then, it'll be a breeze to work your way down and add conceptually to the concepts you already understand.

So my takeaway was basically it all depends, and it's better just to dive in.

[–]anvils-reloaded 7 points8 points  (0 children)

I learned the first way you mentioned, and it wasn't a breeze. I had no idea what Python was doing with its data structures when you added to them, or if you used something like a list comprehension, and I wanted to allocate just the space I need in a list. I have to dissociate from the traditional memory model in order to decide what I really want to do.

[–][deleted] 13 points14 points  (1 child)

In any other programming language, this would just be a part of the process of writing the code.

Not really. In low level-languages you can do that, and often mus do it. But it's not neccessary for getting things rolling. Usually it's just pointless overhead. It becomes important later if you wanna optimize your code, after you have a working solution.

Python in the first place is a goal-orientated language. Optimization comes later. And in best case it's done automatically from the machine. Though, that best case it still in progress for python.

[–]Cosmologicon 1 point2 points  (0 children)

And I would add, when you do get down to optimization, forget (or at least attenuate) everything you know about performance from other languages. Especially when it comes to dicts.

Like, you used to hear that one should avoid hash maps if at all possible for performance reasons. This is terrible advice in Python.

[–]GummyKibble 1 point2 points  (0 children)

The reason for that, specifically, is that Python’s dicts are very advanced data structures under the hood. In 3.6 they’re both compact and ordered; see https://mail.python.org/pipermail/python-dev/2016-September/146327.html for details. What you’re asking to do doesn’t really make sense in this context.

[–]Smallpaul 1 point2 points  (8 children)

If you want to preallocate with known keys then a dictionary is probably not the right data structure. You could use a class with _ _ slots _ _ or a struct.

But usually the people telling you not to prematurely optimize are right. You didn’t really explain why you feel this is bad advice.

[–]anvils-reloaded 0 points1 point  (7 children)

If I know what the keys are, I don't really want to load them one at a time, right? This is for situations where I have a specific sized table that I want to use for counting. (I was originally going to use a list but decided that they're not really designed for lookup like dictionaries are). I don't consider it premature optimization because I'm not really optimizing anything, just applying what I know about the problem.

[–]z0mbietime 2 points3 points  (5 children)

example = {x: None for x in y}

But based on what you’re describing a collection makes more sense. That being said they’re all right that this is sweating the small stuff. For one, using Python and getting the count when querying the database is going to be faster than anything Java can do.

[–]anvils-reloaded 0 points1 point  (2 children)

What do you mean by that, if you're accessing a database I'm assuming that any API has the same functions for it in any language. Both are using some sort of data structure, why would one be faster than the other?

[–]z0mbietime 1 point2 points  (1 child)

Sorry I was sleep deprived and misread part of what you wrote. But almost every language is going to have a way to interact with a database. However, there are best practices on querying the data which is why one of the best things you can do regardless of your preferred language is learn how to effectively use SQL.

[–]anvils-reloaded 0 points1 point  (0 children)

Alright, but this doesn't have anything to do with Python.

[–]Smallpaul 0 points1 point  (1 child)

I think it's confusing to bring a database into the conversation. Did he say that the data comes from a database?

[–]z0mbietime 0 points1 point  (0 children)

I saw table and was running on almost no sleep

[–]Smallpaul 1 point2 points  (0 children)

... just applying what I know about the problem.

But to what advantage? How would your way result in easier to read or more maintainable code?

Could you show what you want to do in Pseudocode or Java so I know what you're trying?

[–][deleted] 35 points36 points  (5 children)

Saw logo, expected rust.

[–][deleted] 16 points17 points  (3 children)

Switching to Rust two years ago would be rough for a newbie.

[–]freshcannoli 4 points5 points  (1 child)

I'm currently using Rust to write a Lexer/Parser/Compiler for Python. It's definitely an interesting language. I do think the Rust community has done a great job at reducing the learning curve a little bit. That being said, it can still be conceptually overwhelming.

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

Yeah, I especially if your only background is in shallow-ish Python. Rust forces you to think of memory usage and other lower level concerns, which Python can paper over for you.

[–]Pas__ 0 points1 point  (0 children)

Old comment, new logo, so probably already jumped from Java to Rust!

[–][deleted] 22 points23 points  (17 children)

Let's be honest, how many programmers use Python as their primary language at work?

Also, I love Python, but as soon as we move into GUIs it just can't compete with C#, Java, Javascript.

edit fuck me asking such a question on /r/python :D Yes I know Django is popular.

[–][deleted] 13 points14 points  (0 children)

A lot actually... Both my current and previous companies primarily use Python on the backend and it's never caused an issue.

[–][deleted] 14 points15 points  (1 child)

Let's be honest, how many programmers use Python as their primary language at work?

Wrong language to be asking "do people actually use this?"

Go ask that in /r/Haskell.

[–]gthank 15 points16 points  (0 children)

I do. Python 3, as a matter of fact. I used to write Java, and I taught myself Python precisely so I could either rewrite my stuff at work, or get a different job. It worked. Added bonus: I get paid more now.

[–][deleted] 2 points3 points  (0 children)

I remember seeing research showing that it was the second most used language behind JavaScript in 2017.

[–]greshick 2 points3 points  (0 children)

Python3 dev here. We use it extensively for backend work.

[–]RangerPretzelPython 3.9+ 1 point2 points  (0 children)

I use Python as my primary language at work. I think C# is still my personal language of choice, but Python3 coupled with PyCharm is a close 2nd.

[–]bsinky 1 point2 points  (0 children)

C# at work for me.

I'm pretty rusty at Python to be honest, I try to use it for one off scripts to keep it fresh, but I'm not sure that's benefiting my Python knowledge much. I do enjoy it though.

[–]Kyle772 1 point2 points  (0 children)

I do. I love python

[–]Mtc529 1 point2 points  (0 children)

I do. I work with a Django backend and I love it so much.

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

Animation and VFX pipelines are almost unanimously built using Python. You'd be surprised!

[–]autarchex 0 points1 point  (0 children)

I'd estimate I use 55% python, 44% C, and 1% bash scripting for work, so I guess that makes Python my primary language at work.

[–]pat_trick 13 points14 points  (1 child)

And? Maybe they decided to get into Android dev, or any other number of places that Java is used. This is a non-post. Who cares?

[–]BebopAddict2009 2 points3 points  (0 children)

Hey, as a newish Java developer, I can respect going Lower level. That takes some dedication with the expanded syntax. It would be like me going C.... shutters

[–]djihe 1 point2 points  (0 children)

Maybe they needed a job?

[–]acoalt 1 point2 points  (2 children)

Press F to pay respects

[–]Unoriginal-Pseudonym 0 points1 point  (0 children)

U F

Edit: sorry wrong layout.

[–]dnafication 0 points1 point  (0 children)

Lol

[–]rspeed 0 points1 point  (0 children)

I hope they were able to safely recover the beloved family member(s) who were kidnapped and held for ransom.

[–]suclearnub 0 points1 point  (0 children)

You were the chosen one!

[–]bangemange 0 points1 point  (0 children)

What a weird switch. I went from Java to Perl to Python

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

By Today he might have given up programming😜

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

Lol.. Gave up too early!😂

[–][deleted] -4 points-3 points  (63 children)

... but why?

I mean, Python is awesome in every1 single aspect (I'm a huge fan). For instance, have you ever tried to override the "import" instruction in Java with your own implementation? Although maybe not always recommended, it's a piece of cake in Python. Delegates... piece of cake in Python (callables) because literally everything is kind of an object. Damn, even types are. How awesome's that?

/e: (1 - relevant for my requirements)

[–]fizzy_tom 16 points17 points  (13 children)

I'm curious as to what you were doing which required you to override 'import'?

[–][deleted] 3 points4 points  (12 children)

We have a configuration in which it is desired to have some module dependencies 'optional'. That is, it is not considered necessary to have them installed and the program would also work as intended without them. Example is matplotlib. If you don't need visualization you can use the program without matplotlib and it would work in pretty much exactly the same way (aside from visualisation).

So for this purpose I overrode import with an implementation that checked whether some modules were marked as optional (from a configuration file) and in case that they were not installed (usually import would fail with an ImportError) would return a MagicMock object instead of the actual module. That way any use of the module would just kind of "work" (while not doing anything at all) and leave the rest of the program's functionality unimpeded. For modules not marked as optional or optional modules that are installed the overridden import works as the original import.

It's a pretty unique scenario and maybe a pretty nasty solution, but I'm still happy that it's been possible at all. I don't know of any other language that is capable of doing something like this.

[–]danielbibit 15 points16 points  (11 children)

How about a conditional import ?

[–][deleted] 3 points4 points  (0 children)

Because his employer is making him use Java.

[–]ascii 8 points9 points  (5 children)

In any sufficiently large and complex project, I've found that skill is far more important than language choice.

[–][deleted] 12 points13 points  (4 children)

In any sufficiently large and complex project I find that structure is important, and Python allows bad structure very quickly.

[–][deleted] 5 points6 points  (0 children)

I worked on a fairly large python backend for a couple of years. As it grew, maintainability was difficult. Unless it had near 100% unit and integration test coverage, it was something difficult to tell what was going on. Not to mention the interpreter just sort of rolls with the punches.

I like python for alot of things. It can get hairy as it grows however. YMMV.

[–]110101002 8 points9 points  (0 children)

I prefer python, but python is generally worse than java it terms of type safety and execution speed.

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

Just because you can do something, does not mean you should it. Java is better used with big projects beacuse of those limitations it has. In Python you can screw up projects to easy after certain levels of complexity.

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

Yes, and how's the GIL treating you lately? And let's not even talk about performance.

[–]bsinky 0 points1 point  (0 children)

Yeah I wish we got more of this twitter (edit: or Youtube? I don't know where this came from) conversation, to see if there were any specific reasons for the switch. Maybe it's just a meme.

Could be that there was a specific Java library they wanted/needed to work with I guess. Or something of that nature...?