Ok, Sup Forums I learned Java. What would be easy for me to learn next?

Ok, Sup Forums I learned Java. What would be easy for me to learn next?

Other urls found in this thread:

xamarin.com/platform
twitter.com/SFWRedditVideos

spring so you can actually do stuff

JavaScript

Actually I learned Java in the context of Android apps development so I can do stuff and not really interested in Enterprise stuff

Python ofc.

Android

C++

perl or rust

basically any C like language. C# is the closest to Java

>Android apps development
Learn Swift for iOS development then

PHP

C#. It's like Java except all the keywords have changed and there's more of them.

Explain
Yes. That's what I did.
Is it? Well...
Need a Mac for that. Which sucks.

it's java done right(except for the lack of multiplatform thing, which was solved by JetBrains a few days ago).
Also Visual Studio >>>>>>>>Java/other IDE-s

Not trolling: can somebody please tell me why people use Java at all? What are the benefits? I am actually baffled by it. For small applications, it seems like C++ would be faster and easier. For large applications it seems impossible that it would be fast enough to be useful. Am I wrong?

prostate stimulation

>For large applications it seems impossible that it would be fast enough to be useful.
Java's pretty fast though. Not C++ fast, but faster than any of its peers in garbage collected bytecode languages.

At the University they us, that paying for good hardware is way cheaper than paying for good software. Also companies don't like to wait, they want it now and they want it all and developing with java/c# is fast and easy. Java works everywhere so that's a plus too

This. I've been reading about the optimisations done in Hotspot, it's goddamn unreal. For example, most of the time, the allocation (new) is basically free. The hot path is extremely fast.

>For example, most of the time, the allocation (new) is basically free
You're talking about escape analysis?

Portability, documentation, community, large corporations putting fucktons of work into developing libraries.

Personally I would say if you need JVM for portability go with Clojure or Scala, but those aren't taught at university.

Java 8, 9 are fast and let you write functional code, plus they have so many useful libraries and good interop with other JVM languages libraries that Java makes a lot of sense for a business.

>Ok, Sup Forums I learned Java. What would be easy for me to learn next?
Android
Kotlin
And c++
So you can do better roms and apps than some people

Not exactly. Each thread has a local allocation buffer (TLAB). As the GC is compacting, you don't need to search for free space. If the object fits into it, allocating is as fast as just moving a pointer. Size of TLABs is dynamic, based on the past statistics of the thread.

> Not C++ fast
It's pretty close, at least if you write stuff properly.

The main advantages of Java isn't actually the core language. It's everything around it.
If you think that writing getters and setters, all-arg constructors, etc. from scratch is retarded, get lombok, install it, use it, and never write that shitty code by hand again. Tell the fucking compiler to write it for you. It doesn't feel pain, so it's okay.

Anyway, what are the core benefits of Java?

> Mature tooling that gives you choice.
Let's take building as an example.
> Can't I just stick to GNU Make? I'm only going to build on Linuxen anyway.
You can. But there are other options.
> Ant (+ Ivy)
This is the oldest tool still relevant. It's pretty make-y but it uses XML for its configuration. You define targets, and what's to be done inside those targets, and then ant will do what you tell it to. These targets can do anything, including running scripts. So you can (can != should) use ant to build say, C++ if you really wanted to. This is useful if you have some C source that needs to be built because you're going to call into C code using JNI or similar. And it lets you do things like restarting servers using your build tool so you can keep a terminal emulator open and just write ant restart and stuff, and it will do it. This is really great because ant works everywhere Java does.

On the other hand, you do have to specify everything, Ivy, the dependency manager is not exactly fast, and you have to specify shit like "build" which should be fucking obvious.

Maven fixes this, and basically splits projects into a best practice setup with testing and main areas, where you can have resources available during different times, where you don't have to make an explicit build target because maven just makes that for you automatically, it has fast dependency resolution, etc. On the other hand it doesn't give you all that much flexibility, so if you want that, you will probably prefer

Yeah, the heap here is basically just a stack that you never pop from. Fast to allocate but there's a lot to worry about when the garbage collector is invoked.

> Gradle!
Which is the newest kid on the block. It uses a real probramming language to define the build, and it's more flexible than maven, but it's also faster than ant, and doesn't rely on XML.

All of these are better than MSBuild, and you can choose which set of tools you want.

Do you want lots of magic (maven), a little bit of magic (gradle) or no magic at all (ant)?

And the same holds for libraries. What type of database connection pooling do you want? What type of http server do you want? What type of framework do you want? What type of logging do you want?

It's all pluggable and it all talks to eachother through community designed interfaces, standards and such.

If you use JPA to annotate your classes for ORM tools, you can switch from Hibernate to Something Else almost immediately.
It's absolutely fucking amazing.

This is very different from the C# world where the Standard Way rules supreme. You will use MSVS. You will use MSBuild. You will use Entity Framework, etc. And You Will Like It.

Again, if you're not up to reading up on differences and exploring things, C# might seem incredibly comfy. No choice! Great! If you're the kind of guy who needs choice, and want to be able to swap out libraries, Java is simply better. There's no JPA equivalent on C#. Most of us who prefer Java to C# value that kind of library and standards supports more than we value stuff like properties. You can get tools to take that pain away. But not having stuff like JPA is just fucking painful.

You can convert Java to kotlin tho. Which is comfy.

You shouldn't learn a language that's easy for you to learn. You should learn a language that's hard for you to learn so that your horizons are expanded.

> Okay, what languages depart heavily from Java's way of thinking?
Good question user.

Here's a few that depart heavily, with recommended books in parentheses:
- Haskell (Learn You A Haskell)
- OCaml (No real recommendations)
- SQL (Head First SQL or the Manga SQL Book thing)
- Prolog (Bratko's book, 4th or 3rd edition are both fine.)
- Common Lisp (Practical Common Lisp is much better than Paul Grahams books, at least for beginners.)
- Scheme (SICP, or Teach Yourself Scheme In Fixnum Days, depending on how academic your interest is.)

Learning these languages will make you a better programmer because they will expand your mind and let you think about problems in different ways. This will make you a better thinker, and thus, a better programmer.

Here's a few languages that does not depart heavily but is in fact rather close to it in many ways.
- Python (prototype object system, dynamic typing, retarded in-the-large facilities)
- JavaScript (See: Python)
- Ruby (See: Python)
- C# (Very much like Java, but with some Microsoft finishes to make the language more comfortable to write. Some are retarded (delegates, I'm looking at you), some are good (properties), some are so-so, like the yield thing.)
- C++ (Faster than Java, less friendly towards humans.)
- D (Like C++ but less so in both regards)
- PHP (See Python, and add a retarded community. There's plenty of smart reasonable PHP developers, but they aren't the ones writing the tutorials.)

C is both similar and not similar. I'm not sure where I'd put it. Modern C development steal a lot of idioms from OOP. To the point that OOP is just syntactic sugar for the stuff they do. At least according to the C programmers I talk to. But if you want to learn another language as easily as possible, learn one of those.

>Some are retarded (delegates, I'm looking at you)
Could you explain?

Legacy tech and muh android. If it weren't for all the externalities, no one would use this piece of shit.

>C#
>when you already know Java
Don't do this, OP. If you're looking to make Windows Apps, learn C#, but don't learn a language because you have nothing better to do. That's dumd.

Delegates solve the wrong problem.
Once C# got lambdas they were entirely superfluous, and you didn't need them anymore.

Hence it's a bad feature because you now have more rules in a language than you need. (And yes, it's not hard to find examples of similar stuff in Java. Vector vs ArrayList for example.)

Called delegates return exceptions if there's no active listener.

With C# you can make multiplatform mobile apps, and OP is interested in mobile apps

Not as easy as Java, but try pooing in a toilet.

I was under the impression that was Java's greatest benefit.

How to poo in loo.

Java works on all PC-s, C# works on all phones

How does that work?

Java is for android dev, Objective-C + Swift is for iOS, and C# is for Windows phones. I don't understand how C# works on all phones.

xamarin.com/platform

>What would be easy for me to learn next?

to POO in the fucking LOO pajeet

Seriously not Indian.

That's what Pajeet would say