News for hackers. Stuff that matters.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by hamidpalo on Monday June 04, 2012 @06:22AM (#4063338)
It's about the type system.

Dynamic, weak typing makes writing static analysis/refactoring/etc tools extremely hard, but more importantly makes nearly any compile-time guarantees impossible. Having your app crash because of a small typo of a member name is impossible in C++/C#/Java. It happens to me almost once a day with Node/JS.

Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by gaius on Monday June 04, 2012 @06:38AM (#4063365)
Anyone doing a large project in an weakly-typed language will eventually spend more time writing unit tests than features.

No-one should even be thinking about unit tests if they are not already using a language in which all code paths can be evaluated and type-checked at compile time. Why get a dog and bark yourself?

Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by sktrdie on Monday June 04, 2012 @07:01AM (#4063418)
This is not why you write tests. You write tests to be sure nothing breaks when you make changes.

And you should do this with any language, typed or not.

Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by nnythm on Monday June 04, 2012 @07:24AM (#4063488)
Using a language with static typing means that there are a lot of tests you don't have to write. Do you remember the units trick from physics? If you forgot which equation you're supposed to use, keep on using identities until you're in the units you're supposed to be. Static typing checks that your units are correct for free.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by brazzy on Monday June 04, 2012 @07:52AM (#4063562)
Well, not entirely for "free", but I do agree that the price is much lower than what you end up paying eventually for the convenience of dynamic typing.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by gaius on Monday June 04, 2012 @08:03AM (#4063600)
I don't ever have to write a test in OCaml to tell me what I need to fix if I change a function signature, or add another item to a struct or an enum, or change a function to return something else, or anything like that. The compiler does it all. Every code path is evaluated at compile time. 90% of unit testing is just not needed in OCaml or Haskell (and that which you do need, there's QuickCheck for).
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by sirclueless on Monday June 04, 2012 @08:41AM (#4063699)
I had the same experience when writing Haskell. I would start by inserting a function call at the top level referencing a function I hadn't written yet, and then start hacking on the function and all its helpers. Without fail, as soon as the program compiled it was basically correct. The only thing that could go wrong were legitimate algorithmic errors, such as using the wrong base cases for recursion or something.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by ocharles on Monday June 04, 2012 @06:32AM (#4063352)
This rings very true to me too, as our entire application is written in Perl. As much as I do like the language, the lack of just about any static guarantees mean we regress an awful lot. Yes, we have unit tests, but until we have 100% coverage we have gaps for regressions that a compiler could have picked up.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by Tichy on Monday June 04, 2012 @07:07AM (#4063432)
Except that to work around the pesky types, Java people started moving everything into XML. Now they have a horrible solution to being able to work typeless.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by brazzy on Monday June 04, 2012 @07:46AM (#4063544)
Apparently you haven't looked at Java development in the last 5 years, so you may want to stop making statements about it that make you look like a fool.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by Tichy on Monday June 04, 2012 @07:52AM (#4063563)
I just did a three month enterprise Java project. I admit that I hadn't used it in a while, so I picked Spring like in the old days (+Hibernate at first, but had to kick it out eventually). And hell it turned out complicated (even with Spring). What is the new mantra that makes Java suddenly usable? Playframework?
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by brazzy on Monday June 04, 2012 @09:11AM (#4063801)
It doesn't look like you're interesting in anything except following your own mantra of "Java suxx", but XML configuration files (which were never really about working around the type system) have been almost universally replaced by annotations.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by Tichy on Monday June 04, 2012 @11:39AM (#4064443)
I know about annotations, but I admit to not being the biggest fan. And they lead to even more files...
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by brazzy on Monday June 04, 2012 @01:59PM (#4065058)
How so? I've only ever seen them eliminate external configuration files. Hell, thanks to annotations and some simplifications to the standard, EJBs have turned from the epitome of overengineered bloat into a simple, lean service layer.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by clownz0r on Monday June 04, 2012 @11:42PM (#4067203)
Annotations have only ever led to less files for me
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by berntb on Monday June 04, 2012 @07:57AM (#4063580)
Could you elaborate(/give references) about your claim?

(I don't know anything about the GP, but I really haven't looked at Java development in 5++ years. (-: If nothing else, I might need to update my jokes :-) )

Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by brazzy on Monday June 04, 2012 @09:06AM (#4063779)
XML configuration files have pretty much disappeared/become optional. It's all done via annotations nowadays, which are much less verbose since their context is implicit, and which are actual language constructs known to the compiler.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by berntb on Monday June 04, 2012 @09:48AM (#4063953)
Thanks!

Annotations have the disadvantage of needing a recompile to reconfigure?

Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by TimGebhardt on Monday June 04, 2012 @11:25AM (#4064372)
Can I ask why you're rewriting code on your production server on the fly without the aid of the rest of your tool chain?

In any good development shop you make a change, your CI server picks it up, builds it, and creates a release candidate you deploy. Every change should be checked into source control and built by your automated build bot.

At that point the difference between changing an annotation and an XML configuration file should be moot. I'd think the annotation would be easier because you can still mess up the syntax of the XML file pretty easy (e.g. "Can you change the blahblah label to System & such?" That ampersand will hose your system when you get it to production).

Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by brazzy on Monday June 04, 2012 @02:11PM (#4065115)
Well, there's always some genuine configuration that contains the actual differences between environments, like DB connection and API keys, and which isn't going to be part of the automated build.

But that's a tiny subset of what architecture astronauts try to label "configuration".

Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by ovi256 on Monday June 04, 2012 @06:53AM (#4063396)
So how about using a tool like jslint that will get you 90% of the static checking and will solve the kind of crash you mentioned ? Looks pretty good to me.
Re:Anders Hejlsberg: You Can't Maintain Large Programs in Ja... by mercurial on Monday June 04, 2012 @09:17AM (#4063826)
Does jslint handle imports? Which would be surprising, given the lack of a standard system in Javascript? If it doesn't, then this leaves you very far from your 90%.

On the other hand, pylint for Python is really good for static checking, even if it won't catch everything.