Live data from Hacker News

How companies should hire developers

antoniocangiano.com

11–20 of 20 posts

Re: How companies should hire developers

#11
post #6

Earlier quoted context omitted.

What is TTD? Or do you mean TDD (Test Driven Development http://en.wikipedia.org/wiki/Test_Driven_Development )?

Now if there was only test driven spelling, I wouldn't keep embarrassing myself on the inter tubes.

I was almost embarrassed to ask as I thought it's something I should know! 8)

Re: How companies should hire developers

#12

Earlier quoted context omitted.

But how could, lets say, demanding TDD ever cost you talented programmers? It won't, ever. This is wrong. TDD may or may not be useful. I'll give it the benefit of the doubt, but in my experience it has been used in a "cargo cult" approach to programming. The last startup I spent significant time at was eventually destroyed because they hired an "Agile/VP" of engineering. He then hired a bunch of guys who could do "T…

But that's not because of TDD, it because of people who couldn't write software. Imagine if those people were also bad at math, would you say math is only occasionally useful? Obviously I agree about "cargo cult" programming, the worst of it is when someone has a religious affinity for pair programming, but thinks testing is a waste of time.

The utility of TDD varies tremendously from one language to another. Its biggest advocacy is usually associated with dynamically-typed languages, such as Ruby, Python, and Smalltalk, because TDD is a great workaround for mistakes that can easily occur in those languages. That doesn't mean it's a panacea for all programmers, though. For example, the type systems in OCaml and Haskell are effective for automatically verifying many of the same conditions. (Testing is used within those languages, but very differently -- Comparing TDD to Haskell's QuickCheck may prove enlightening.)

Some day, better tools than the type systems in OCaml and Haskell and TDD will be invented. Let's not get so hung up on either as a solution that we miss out on even better ones (or fail to invent them).

Re: How companies should hire developers

#13
post #9

Earlier quoted context omitted.

But that's not because of TDD, it because of people who couldn't write software. Imagine if those people were also bad at math, would you say math is only occasionally useful? Obviously I agree about "cargo cult" programming, the worst of it is when someone has a religious affinity for pair programming, but thinks testing is a waste of time.

I think I am a good programmer, and I think TDD is aweful. Using unit testing, has its place, especially when working with parts that have clear input/output ranges, or in large systems, where your piece of code has to be integrated somewhere else, so you want to make sure it works before committing it. BUT, programming according to Tests, is not a good idea. Tests are not the END RESULT, not the ultimate user of you…

I try to write lapidary code, but sometimes it includes arbitrary personal choices. Also, there are times when I can't find a way to avoid combining ideas that I'd like to express separately: maybe I'm doing a performance optimization, or maybe I'm balancing different strata of abstraction. Those are times when it's great to have tests that describe what's essential about my code-under-test. The test assertions can be automatically checked, and they're expressed in formal language.

TDD certainly is a good way to help beginners gain confidence and improve their skills. And, I don't see what's so bad about a stronger programmer who chooses to start with the sparse essence of a program rather than building dense stand-alone code at the beginning. Especially if you're already committed to having tests for qc purposes or as a sort of compromised form of literate programming.

Re: How companies should hire developers

#14
post #9

Earlier quoted context omitted.

I think I am a good programmer, and I think TDD is aweful. Using unit testing, has its place, especially when working with parts that have clear input/output ranges, or in large systems, where your piece of code has to be integrated somewhere else, so you want to make sure it works before committing it. BUT, programming according to Tests, is not a good idea. Tests are not the END RESULT, not the ultimate user of you…

Working on large and complex application becomes near impossible without extensive unit test coverage. If you're using unit test of all things to guide the design of your application, you are off the deep end. That makes you a bad programmer, it doesn't make TDD bad.

Part of the problem in discussions like these is that people aren't really clear whether they're complaining about testing or TDD in particular, whether they're arguing about the benefits of TDD specifically, unit testing, or testing in general, and everybody involved may read the wrong thing into any ambiguity.

I, for one, would not argue with unit testing (particularly for libraries) or regression testing, but I think that an insistence on TDD can be excessive.

Re: How companies should hire developers

#15

Earlier quoted context omitted.

Working on large and complex application becomes near impossible without extensive unit test coverage. If you're using unit test of all things to guide the design of your application, you are off the deep end. That makes you a bad programmer, it doesn't make TDD bad.

Part of the problem in discussions like these is that people aren't really clear whether they're complaining about testing or TDD in particular, whether they're arguing about the benefits of TDD specifically, unit testing, or testing in general, and everybody involved may read the wrong thing into any ambiguity. I, for one, would not argue with unit testing (particularly for libraries) or regression testing, but I th…

That's a good point, I often catch myself conflating TDD with general unit testing.

I definitely ascribe to TDBF (Test-Driven Bug Fixing) more than TDD - if a bug shows up in my production code, adding a test to the suite to make sure that bug never comes back gives me a great deal of peace of mind. And it helps if I have enough of a testing framework from initial development (such as data and mock object setup) to add new tests quickly. But I definitely don't do enough testing for it to qualify as TDD.

Re: How companies should hire developers

#16

2) Be “true believers” in Agile methods, including story carding, pair-programming and test-driven development. I am a true believer in TTD, continuous integration and weekly team based code reviews, but pair-programming is crap. Plus, A LOT of very good developers who also love TDD and a lot of Agile/XP practices feel the same way about forced pair programming. Demanding it is a good way to lose a lot of great talen…

Why do you believe pair-programming is crap?

I have found it very useful for spreading knowledge amongst a team and for ensuring a tricky or fundamental piece of code.

Re: How companies should hire developers

#17

Earlier quoted context omitted.

Part of the problem in discussions like these is that people aren't really clear whether they're complaining about testing or TDD in particular, whether they're arguing about the benefits of TDD specifically, unit testing, or testing in general, and everybody involved may read the wrong thing into any ambiguity. I, for one, would not argue with unit testing (particularly for libraries) or regression testing, but I th…

That's a good point, I often catch myself conflating TDD with general unit testing. I definitely ascribe to TDBF (Test-Driven Bug Fixing) more than TDD - if a bug shows up in my production code, adding a test to the suite to make sure that bug never comes back gives me a great deal of peace of mind. And it helps if I have enough of a testing framework from initial development (such as data and mock object setup) to a…

Oh, yes, absolutely. I think few people would argue with that, though they may not have formally articulated it as "having a test framework". (To my understanding, what you're referring to as "TDBF" is more commonly called "regression testing".)

As is often the case, most arguments are about extreme positions.

Re: How companies should hire developers

#18
post #16

2) Be “true believers” in Agile methods, including story carding, pair-programming and test-driven development. I am a true believer in TTD, continuous integration and weekly team based code reviews, but pair-programming is crap. Plus, A LOT of very good developers who also love TDD and a lot of Agile/XP practices feel the same way about forced pair programming. Demanding it is a good way to lose a lot of great talen…

Why do you believe pair-programming is crap? I have found it very useful for spreading knowledge amongst a team and for ensuring a tricky or fundamental piece of code.

Do you mean occasional, organically-happening-as-necessary pair programming or mandatory-all-the-time pair programming?

Re: How companies should hire developers

#19

2) Be “true believers” in Agile methods, including story carding, pair-programming and test-driven development. I am a true believer in TTD, continuous integration and weekly team based code reviews, but pair-programming is crap. Plus, A LOT of very good developers who also love TDD and a lot of Agile/XP practices feel the same way about forced pair programming. Demanding it is a good way to lose a lot of great talen…

Your remarks about pair programming may be true. However, I have trouble believing this makes it a poor advertisement. Consider a hypothetical expert programmer who like pair programming but hates Ruby. Such a person could easily say what you just said.

And I know one fellow--who lives in Canada--who might not care to relocate his family to Jacksonville. He could easily write what you just wrote, this time about the fact that the offices are in Jacksonville.

All of these things--pair programming, Ruby, Jacksonville--are going to cut down the number of talented programmers who want to work for Hashrocket.

Given some set of working conditions, I believe the OP does a good job of explaining why the advertisement does an excellent job of attracting the kind of people who would be interested in working for Hashrocket.

The people who don't like pair programming, ruby, or Jacksonville are not the "market" for the ad.

Post reply on HN