News for hackers. Stuff that matters.
Re:Bill Gates answers questions about Java during a depositi... by possibilistic on Sunday October 26, 2014 @08:38PM (#8513180)
I've never done any Windows development, so I'm curious as to why C# might be considered superior to Java (especially Java 8).

Is it simply better language features ( typing, generics, etc.?), or does the argument also include .NET and the CLR?

Will Microsoft open up development on unix systems (not mono)? I've interpreted signals from the CEO as an indication this could happen. What about visual studio?

Re:Bill Gates answers questions about Java during a depositi... by V-2 on Sunday October 26, 2014 @09:24PM (#8513308)
Well, Java caught up somewhat with version 8: with lambdas and Streams to provide LINQ-like functionality - which, however, isn't equally good imho, and not extendable because it's not based on extension methods. And unfortunately I have no access to these goodies anyway, as an Android dev :/

Ah, and then there's still the inferior, type erasure based generics. There is nothing on par with C#'s awesome async-await. There's no yield return semantics (when used properly, you can create very clean and robust code thanks to it). You've got to deal with the infamous checked exceptions (I think it's the consensus these days that this wasn't such a good design choice after all). No single-root type system (so you've got Integers and ints, and the latter aren't objects) etc. And there's more, even little things like var keyword or partial classes that don't exist in Java (like many language features, partial classes can be used for evil, but it's very helpful for dealing with autogenerated code). Operator overloading. Nasty and weird syntax for annotations (in compare to C#'s attributes).

Some of these can be a matter of taste for sure and I'm not interested in language flamewars :) I write both Java and C# for living, just personally I prefer the latter.

It would be real big if Microsoft purchased Xamarin and made it free (or much cheaper). They've really gained momentum in recent time and it feels like they are getting recognition from MS now.

Re:Bill Gates answers questions about Java during a depositi... by brusch64 on Monday October 27, 2014 @04:34AM (#8514441)
coming back to Java, after some years of programming C# I have the same feeling.

C# feels like Java done right. Many of Java's shortcomings can be masked with a great IDE (making setters and getters) nobrainers - but I prefer C#.

Re:Bill Gates answers questions about Java during a depositi... by dserodio on Monday October 27, 2014 @02:51PM (#8517351)
Except for pass-by-value and pass-by-reference. Java's model of always passing a reference value makes the mental model around references so much simpler.
Re:Bill Gates answers questions about Java during a depositi... by brusch64 on Friday October 31, 2014 @06:12AM (#8538046)
It makes the model simpler, but I found this pretty cumbersome. I wanted to write a method returning two values (Boolean), so I had to return an array of Booleans. Out parameter seem easier for me (and more concise)
Re:Bill Gates answers questions about Java during a depositi... by jghn on Monday October 27, 2014 @04:55PM (#8518127)
I thought scala was java done right ;)
Re:Bill Gates answers questions about Java during a depositi... by V-2 on Monday October 27, 2014 @05:13PM (#8518217)
Well - both, kind of :)

Take a look at this presentation: http://www.slideshare.net/omervk/scala-for-c-developers

It draws some parallels between C# and Scala.

Re:Bill Gates answers questions about Java during a depositi... by MichaelGG on Sunday October 26, 2014 @09:02PM (#8513249)
The CLR is more flexible than the JVM, but if you're only using C# you'll usually only notice when doing C interop. With the major exception of structs and generics, which may provide large speed improvements.

C# the language is superior in essentially every way to Java. Far less code = less bugs. F# takes it up another notch, while allowing you to keep interop.

Microsoft has had plenty of opportunity to officially support Mono, but they have not. Their patent promise only extends to Mono as long as you don't run into other issues with Microsoft. If MS wanted, they could, at any time, start really supporting Mono and work to unify runtimes. But anything's possible.

Re:Bill Gates answers questions about Java during a depositi... by pmoriarty on Sunday October 26, 2014 @10:34PM (#8513483)
"Far less code = less bugs" ?

By that measure, APL programs must be the least buggy in existence.

Re:Bill Gates answers questions about Java during a depositi... by MichaelGG on Sunday October 26, 2014 @11:42PM (#8513667)
The recent discussion on K suggests that may be the case.
Re:Bill Gates answers questions about Java during a depositi... by azth on Monday October 27, 2014 @02:27AM (#8514165)
Link?
Re:Bill Gates answers questions about Java during a depositi... by MichaelGG on Monday October 27, 2014 @03:01AM (#8514239)
https://news.ycombinator.com/item?id=8475809

I'm not sure if K generalizes well. It may be that plenty of software has edge cases that must be handled that don't have any elegant representations. I have a hard time believing such little code can actually work that well. But it seems impressive enough that I plan on learning it some and making sure I'm not massively missing out on something because it seems foreign.

From my own experience, less code certainly means less bugs. Even with denser code. Simply having to jump around to find stuff (due to more lines) seems to cause more problems

Re:Bill Gates answers questions about Java during a depositi... by chipsy on Monday October 27, 2014 @04:13AM (#8514394)
I've been gravitating towards the stance lately(independently of reading about K and the APL family style) of aiming towards "total-factor symbol reduction" - i.e. a program coded with fewer symbols, and fewer unique symbols, is preferable to one that introduces many new symbols, or uses existing ones inefficiently.

From this perspective, just factoring out imperative code into a named subroutine becomes a pain point because it adds new symbolic content - a new name, things being passed in, things being returned, things that were in scope suddenly falling outside of it. It is no longer an "organization tool" - you can add a level of block scope and a comment for that instead, and navigate the resulting large functions with code folding. And classes - well, classes become something to avoid!

APL style simply moves this concept down to the per-character level of thought and advocates additional care towards certain measures of readability. "It is more likely," says the APL programmer, "that you will see a typo in a 2 character name than in a 10 character name." The language aids in this process by providing tools that drastically condense common operations and encouraging their use as the default.

Re:Bill Gates answers questions about Java during a depositi... by MichaelGG on Monday October 27, 2014 @12:12PM (#8516358)
Read John Carmack's writings on inlining (also discussed here on HN [1]) where inlining refers to keeping one function with all its work done in there, instead of calling out even to things like "myfuncstep1", "myfuncstep2", etc.

I just hit a major bug due to that kind of thing, where stuff wasn't clear due to messy size of the code (customer insisted on C#). If the relevant sections had been sitting on screen, then I most likely would have noticed or never even made it in first place.

I also started working with a new hire, one that isn't an FP proponent, and I'm shocked at the variable names. Even iterating a list of entry objects: I'd naturally write the list as 'es', and the current item 'e'. Versus 'entriesToProcess' and 'current entry'. Or even 'entries' and 'ent'.

People's objections there seem to be that 'entries' is more readable than 'es'. While that may be true in isolation, I'm not sure it matters when working on a codebase above a few hundred lines. The amount if context is likely to be high enough that you're not going to be plucking one line out for changing, and the local context (and typing) should make it apparent it's a plural of e.g. entries, not employees.

1 https://news.ycombinator.com/item?id=8374345

Re:Bill Gates answers questions about Java during a depositi... by V-2 on Sunday October 26, 2014 @09:24PM (#8513310)
To be fair, F# has its counterparts in the JVM world (like Scala or Clojure). I used the rather niche Kotlin lang on Android, for hobby projects so far, and it's pretty nice, too, even if not fully mature. More similar to Scala, I believe.
Re:Bill Gates answers questions about Java during a depositi... by pmoriarty on Sunday October 26, 2014 @10:36PM (#8513490)
I don't think F# is particularly similar to Clojure. No more similar than OCaml or SML are to Lisp (which is not very).
Re:Bill Gates answers questions about Java during a depositi... by V-2 on Monday October 27, 2014 @03:42AM (#8514328)
True, it's a different FP flavor. They (F#, Scala, Clojure) are in similar position though in that they're FP-centred alternatives to the main language of the platform (C#, Java)
Re:Bill Gates answers questions about Java during a depositi... by asveikau on Sunday October 26, 2014 @09:44PM (#8513355)
Generics in C# don't do type erasure. That's one of the "language nerd" features that's a big win. Most other stuff I can think of is kind of surface level. (Though nice to have: Property syntax, native interop that sucks less, IDisposable, closures, extension methods, linq)
Re:Bill Gates answers questions about Java during a depositi... by dserodio on Monday October 27, 2014 @02:49PM (#8517340)
I'm surprised Microsoft hasn't bought Xamarin yet. Mono being a first-class citizen (with an appropriate license) would do wonders to attract Java and non-MS developers to .Net - myself included.
Re:Bill Gates answers questions about Java during a depositi... by NicoJuicy on Monday October 27, 2014 @05:27AM (#8514546)
Actually, because Windows development (using Visual Studio) is not only c#

It's also vb.net, f# and so much else. Even node.js is integrated now! In short, it's a very adaptable IDE (with a lot of features also).

But it isn't Windows anymore since Owin.

What's also nice is that they are innovating the platform for integrations with popular (opensource) like features. Eg. The scaffolding of Rails got integrated into Asp.Net MVC in it's own way. NodeJS selfhostable option is adapted into .Net as "Owin". SignalR is their realtime component, you got live IDE features when developing webapps (it uses SignalR in the background)

It's kinda a mix of "all worlds" :)