1. 14
  1.  

  2. [Comment removed by author]

    1. 1

      I suppose it depends on what they’re doing, doesn’t it? Getting the wrong answer sometimes can be worse than not delivering the feature, or vice versa, depending on the situation.

      My preference, though, given a mediocre team of programmers, would be to improve their skill level until they’re not mediocre any more.

      1. 1

        “My preference, though, given a mediocre team of programmers, would be to improve their skill level until they’re not mediocre any more.”

        In some cases this is certainly a good solution, I agree. Another alternative though is: given a mediocre team of programmers, fire them all and hire a team who can get the job done well.

        The reality at most smaller companies and startups is that the luxury of investing time (money) into turning mediocre developers into high performers does not exist. There is no “training” budget.

        I, myself, only hire developers who can get the job done, and can get the job done quickly. I’m on a tight budget and a tight schedule.

    2. 5

      I agree more with the second half of the post. I’ve worked with Java from time to time, and trying to wrap my head around the whole program was always impossible because there were factories of factories and abstractions everywhere. But at the same time, that does make individual units of code easier to understand. You just care about what’s on the screen, not all the rest. This can be disconcerting, and it requires active effort to avoid thinking about everything else, but once you do you can start moving forward, slowly but steadily. It’s very much a team language. You trust and depend on your teammates to produce something that works, then you worry about your little silo.

      His comments about ruby/python/perl making everything look like a hash are interesting, though I disagree. I’ve seen interview candidates fail spectacularly because they tried to map the interview problem into a “put it into a hash table” problem. (As in, sorting an array by trying to stuff into a hash table, then iterating over the keys, and… Disaster.) Hammers and nails. Java doesn’t provide a particularly powerful hammer, or perhaps the tools it provides are all about equal, so problems don’t all look like nails. It’s prone to over engineering and unnecessary abstraction, and candidates will fail because getting from start to finish is a long way and they lose sight of the finish, but I’ve seen fewer candidates fail because they tried to reformulate the problem into the one nail they know how to deal with. It’s a general purpose language in every way.

      1. 5

        MJD fails to convince me in this post that he likes Java.

        1. 4

          Java is neither a good nor a bad language. It is a mediocre language, and there is no struggle. In Haskell or even in Perl you are always worrying about whether you are doing something in the cleanest and the best way. In Java, you can forget about doing it in the cleanest or the best way, because that is impossible.

          Relaxing this a bit, it is also what I like about Go. Go doesn’t reward “clever code”, gofmt doesn’t even reward clever formatting. You just write code and that’s it.

          Rob Pike:

          Not so long ago, a programmer was someone who programs, but that seems to be the last thing programmers do nowadays. Today, the definition of a programmer is someone who complains unless the problem being solved has already been solved and whose solution can be expressed in a single line of code.

          1. 3

            I think the issue he is having with the hiring process is with his line of questioning

            Taking in stdin, doing some transformations and then putting the result to stdout is easy in most languages, but in Java it’s a pain as there are so many different ways to do it, e.g.

            BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
            String line;
            while ((line = bi.readLine()) != null) {
                ....
            

            …etc. I have trouble remembering that snippet and often have to search my snippet library for it if I ever need to use it in my code.

            Plus, combined with the fact that most typical Java developers don’t tend to write command line applications, with a lot of application development focused around the web/server side of things, you can kind of understand why this might present a problem to Java developers who’ve never ventured outside of their IDE.

            1. 2

              Great observation. I’ve always avoided “use a library” questions, but hadn’t considered reading stdin might itself be such a question.

            2. 1

              Save every candidate some time. The first question should on the test should be “What language are you going to use to do this test?” Then, you can end the test abruptly, if you don’t love the answer.

              1. 1

                The text tackles the topic from a simililar perspective like http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

                1. 2

                  That’s a good article. I was going to sum it up to make my own observation, but then there it is at end:

                  the bottom line is that a JavaSchool that won’t teach C and won’t teach Scheme is not really teaching computer science, either.

                  Very true in my experience. At the schools that use C for coursework, the programming isn’t be the hardest part of the degree. If you’re changing the language for projects to be easier, it’s because the coding has shifted to being the hardest part of the degree, which means all the really hard parts got left in a pile somewhere.

                  (I also have my gripes with the CS vs programming fanatics who swing too far in the other direction. Practical programming is not a trivial addon to someone who memorized an algorithms textbook.)

                  1. [Comment removed by author]

                    1. 2

                      Yes, that’s part of the java school shift. All work in one language. It reflects the change in emphasis where the language used was just a tool to learn the core concept to becoming a core concept.

                    2. 1

                      Hmm, I thought one of the reasons SICP gives for using Scheme is that they didn’t have to spend time on teaching syntax. What you’re saying sounds almost opposite. Are these things both true?

                      1. 3

                        Ironically, in my circles, MIT didn’t have a great reputation as a school you’d want to hire somebody from because after that one scheme course, it was possible to slip through the program without ever touching a keyboard again. i.e., they may be smart, but they have no experience making anything resembling real programs. (by reputation, I didn’t try enrolling at MIT to test this theory.) That aside…

                        I can understand the appeal of skipping over syntax so that freshmen can unlock the magic of the computer, as it were, within the first week. But even C syntax isn’t that hard. My intro class was taught in C and the mechanics of curly braces and semicolons were purely an afterthought. Like literally the professor said “you put curly braces here and a semicolon after each line” and that was it. Next topic: pointers.

                        Remember I don’t teach programming; I was only taught programming. I would say, however, there’s a difference between a single intro programming class and an entire CS degree worth of coursework. Burning one week out of ten on syntax is a lot. One week out of 100? Optimizing the wrong problem.

                  2. 1

                    While I do find Java perfectly acceptable in many situations, and I accept that it is often the only viable option in certain shaped companies, I disagree that it is in any way a relaxing langauge.

                    Relaxing languages for me are things like Lisp, where I can execute little s-expressions as I go.

                    Or Go, where the documentation is brief, you know what your tools are and you use them.

                    Or Python where everything is simple to write.

                    Java on the other hand is heavy. Achieving things needs new classes, in new files. It’s difficult to play around. You need an IDE to do real refactoring, you probably need an IDE to code because the standard library is so huge.

                    I’d use Java if it was a requirement, but it is so much more relaxing and easy to code in a more programmer-friendly language.