Slashdot Mirror


'Pragmatic Programmer' Author Andy Hunt Loves Arduino, Hates JavaScript (bestprogrammingbooks.com)

Andy Hunt is one of the 17 software developers who wrote the Agile Manifesto, and he co-authored The Pragmatic Programmer. Now Slashdot reader cerberusss writes: In an interview with Best Programming Books, Andy Hunt mentions he "hates languages that introduce accidental complexity, such as JavaScript -- what a nightmare of pitfalls for newbies and even seasoned developers... My go-to languages are still Ruby for most things, or straight C for systems programming, Pi or Arduino projects." Furthermore, he mentions that "I tend to do more experimenting and engineering than pure code writing, so there's occasionally some soldering involved ;). Code is just one tool of many."
Andy writes that he also likes Elixir, talks about Agile, reveals how he survived his most challenging project, and says the biggest advancement in programming has been the open source movement. ("Imagine trying to study chemistry, but the first half of the elements were patent-protected by a major pharma company and you couldn't use them...") And he also answered an interesting follow-up question on Twitter: "Do you feel validated in an age of Node and GitHub? Some of your best chapters (scripting and source control) are SOP now!"

Andy's reply? "We've made some great progress, for sure. But there's much to be done still. E.g., You can't ship process."

3 of 185 comments (clear)

  1. Accidental complexity by Dutch+Gun · · Score: 3, Informative

    A number of newer languages are embracing the idea of protecting the programmer from doing the wrong thing by accident, and I welcome this trend.

    Even though I enjoy my occasional work with Python, the other day I accidentally forgot to explicitly reference a specific variable from a returned tuple, the error code I wanted to check against. Python happily let me compare tuple_value != 0 without complaint. While it may be possible to conceive of a situation in which a programmer MIGHT want to compare a tuple against an integer, it seems like 99% of the time, it would be best to throw an error, and force the programmer to do such an operation explicitly, rather than assuming it was intentional. It would have saved me a lot of hassle had this operation not been permitted. So, just one example there.

    JavaScript has a lot of similar issues, from what I understand, such as weak scoping rules, global by default, no namespaces, and overly-generous implicit type coersion. All these things seem to work against the programmer, even if they were originally designed as conveniences.

    It's really a shame that "what we have" for the web is JavaScript, so it's sort of impossible to work in web and ignore it. In my particular industry, "what we have" is C++. I'm not sure whether I should feel fortunate or not compared to web programmers. C++ has it's own particular nightmare of complexity, but the good news is that with C++, you can protect yourself from stupid mistakes with enough self-discipline, and the language has improved remarkably in the last 6 years.

    --
    Irony: Agile development has too much intertia to be abandoned now.
    1. Re: Accidental complexity by UnknownSoldier · · Score: 4, Informative

      In JavaShit, variables can be used ANYWHERE in a function, even outside their _expected_ scoping.

      For example, weak scoping:

      function foo()
      {
          for( var i = 0; i < 3; i++ )
          {
              var bar = 42 + i;
              console.log( bar );
          }
       
          bar = 99; // An error in any sane language but JavaShit was designed by an moron so this is OK.
       
          bat = 99; // typo, but this OK in non-strict mode too, because JS is the new BASIC.
      }

      In contradistinction to C++ which has strong scoping:

      void foo()
      {
          for( auto i = 0; i < 3; i++ )
          {
              auto bar = 42 + i;
              printf( "%d\n", bar );
          }
       
          bar = 99; // ERROR: 'bar' was not declared in this scope
       
          bat = 99; // ERROR -- compiler catches this typo which is a potential bug being masked
      }

      Scoping helps prevent name collision and bugs.

      --
      Only an amateur defends JavaShit; professionals are too busy trying to work around the brain dead language designed in 10 days.

  2. It's both because Javascript developed in 10 days by raymorris · · Score: 4, Informative

    As someone else said, often Javascript is the right tool for the job, because the job is manipulating DOM elements in a web browser.

    A major new future in Netscape 2.0 was that it had Scheme embedded, for scripting. Ten days before the public beta, it was decided that the Scheme effort couldn't be salvaged - it just wouldn't work. But Netscape's hype had promised embedded scripting. So in ten days Brendan Eich designed, coded, tested, and integrated Javascript. 10 days for all of that means he had about two days to design the language. It shows. Other languages have had years, or at least months, of design. Javascript had about two days. Eich did an amazingly good job, for weekend design project.

    Obviously Javascript has matured a bit since then, but its origin as the mother of all all-nighters, the crashiest of all crash projects, still shows in its design, its inconsistent naming of functions, etc.