Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

"insurmountable advantage" - I don't think so.

the simplicity that javascript and python provides is an enormous advantage to many kinds of projects.



It's not simple when you have to maintain it or debug it.

There are many classes of errors that can occur when writing software. Languages with implicit variable creation like python obscure errors like mistyping the name of a new variable (versus an explicit declaration like in C or an ML where the mistyped name will result in an error immediately modulo name conflicts). It looks correct at a glance, but:

  def foo(a_name, b_name):
    # computations
    a_nam = #some more computations
    # computations using a_name, not a_nam, returns
    # erroneous values
(NB: The above is bad practice anyways, an advantage of the single static assignment of the dynamically typed erlang.)

Oops, we forgot an 'e' at some point. Now we have a new variable, but we used the old variable name for future computations and returned a result based on that.

Type errors, I've already discussed.

Logic errors like:

  if(a < b) // when we meant a <= b
Are universal to all languages, they can't eliminate these. Actually, this leads to a major gripe I have with C. The duplication of meaning for = as both initial value assignment and later reassignment paired with the use of non-zero values to indicate true.

  if (a = b) // well, shit. a has a wrong value, and we go
             // down the wrong branch now depending on the
             // value of b.
Good practices only get us so far. Moving those good practices (static typing paired with type inference for simplicity, single static assignment or immutability by default, etc.) into the language does add mental overhead to programming. But it also produces less errorful final products.

As a guy who writes software that can literally save or kill someone depending on how well or not it functions, I'm in favor of better languages.


Per your typo point, this has already been solved by linting. If I made a typo like that, any decent editor (Sublime in my case) would draw a big red box and complain at me for using an undeclared variable. In the case of a typo on assignment as in your example, the linter would report a variable declaration without usages.

Per your testing point, so what? Doesn't everyone strive for 100% code coverage anyway? One of the big advantages of dynamic languages is that more functionality can be implemented in less code which in turn makes it easier to hit that 100% coverage.


Good point, one just has to every now and then open all files in Sublime and check for red squiggles :)

And not everyone is striving for 100% code coverage unless it really matters (e.g. SQLite). A beneficial activity becomes harmful if taken to extremes.


These languages stopped being simpler when type inference became mainstream in statically typed languages about ten years ago.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: