I used to work up a tremendous sweat playing this game at the arcades. Hardly moving, just those two joysticks, but expending almost as much energy as jogging.
The difficulty of the game was just right. The controls are hard to get used to, but they make sense. When you're just beginning, the game smacks you down so fast, you wonder if it's even possible. Then you start getting some mastery, and then you run into level 5, the hulk wave. The chaos just gets more and more intense.
There was some amazing sensory pleasure about that game. It just *felt* good. Oh, it felt so good to catch one of the humans and hear that old glug-glug-glug sound they'd reused from some old pinball game. Ohhhh, I want to play again!
Yeah, I think you are right: unit testing is actually a non-trivial skill (a bit like the kind of writing needed for literate programming, perhaps?), and requires a lot of discipline and practice. As "lite" as unit tests are, they're still too much for most shops.
I heard it said ages ago, when structured programming came out, that before structured programming, good programmers wrote good code and bad programmers wrote bad code; and after structured programming, the same programmers wrote good code and the same programmers wrote bad code.
Speculation: there is a certain way that your brain has to represent things in order to write good, solid code. Fancy programming techniques provide aids for doing that. But if a person's brain doesn't work that way, the fancy programming techniques have little effect.
My daily Caltrain commute reveals massive iPhone domination achieved in less than one year, in the only market that matters! Not so long ago, it was all Blackberries and Treos.
Knuth does not seem to understand the value of unit tests. The main value of unit tests is to serve as a mental aid.
They help you define and communicate tasks in very small chunks, which is necessary for pair programming. They help you define and document the assumptions made by sections of the code. They help you modify code with confidence as you get better ideas, in two ways: they lead you to make an extremely modular design, and they tell you what assumptions you've just violated in the code that calls what you just changed (like a debugger specially tuned to your app).
Unit tests off-load error-prone consistency checking and documentation from your brain and onto the computer. They are the substitute for literate programming that actually works in real life. They are not, however, a substitute for real QA.
The Schneier article goes into a lot of complexity and obscures the main point:
Can we
trust the tally?
Anything in a computer can be hacked. Period. And there is no way to tell that it hasn't been hacked. Period.
Paper ballots are plain to read. When you recount a paper ballot where the person marks in ink what their choice is, there is no hanging chad and no concern that the punch card or optical scanner or touch-screen software has a glitch that led the machine to systematically miscount. Most importantly, people can do a recount with paper ballots. If there is a question about the accuracy of the tally, it can be independently verified.
Paper ballots are still prone to election fraud: people can "misplace" them, burn them, etc. But fraud and systematic errors are way easier with a computer. As long as balloting is done by computer, every election will be clouded by deep uncertainty.
It's interesting how many comments here focus on humiliation or
comparing yourself against other people: "You're actually not as
great as you think, you need to be taken down a few notches."
I've never found any practical use in that sort of advice. When
I was 18, I wish someone had told me factual, practical things
about the careers of creative people so I could add that to my
own experiences and make up my own mind. So here goes.
Here are some details from the real life of another "uniquely
bright" INTP, now age 38:
I once got a job as an editor for a
book publisher when he created the job for me. He liked the way
I thought about books and marketing. On the job, he taught me
some fantastically valuable stuff about getting people to do
their best work and about managing uncertainty. I've quit every
job after a maximum of four years because I thought I learned
what it had to teach me, and I moved on to something else. Some
people said I was crazy because I could have made more money by
not starting over at something new, but I'm not in this for the
money. I once wasted two years on a stupid software project
where I got paid nothing, because I was too stupid to know that
"death before dishonor" does not apply to software projects.
Then I got a job as a writer. I've performed improv comedy on
stage for money (a tiny amount, but even a little money changes
everything). One time, I got inspired and spent two weeks writing poems followed by four weeks of math. That was the best, most profitable six weeks I ever spent. I've never had the urge to write poems again, but I put what I learned to use in marketing materials and other writing. I once worked alongside some Russian
mathematicians at one of the weirdest software shops ever and
got taught some advanced math--and was paid to do it. I quit
college in my early 20's because I thought it was bullshit to
sit in a class, copy down what the professor wrote on the board,
and regurgitate it on exams. A few months later, I was getting paid to learn
Unix and lots of other things. Now I'm back in college building
on the math I picked up, aiming to become a college professor.
I still think most college classes are bullshit, but I'm playing
the college game way more intelligently and having way more fun
than before, now that I'm there with a purpose. I've sometimes
wondered if I should have stuck with college the first time, but
it's hard to say. I know a lot of real-world stuff that many
academics don't, and I don't think I could have learned it had
my career followed a straighter path.
Here are two intelligent books on careers:
What
Should I Do with My Life? by Po Bronson. Not a book to
tell you step-by-step what to do; instead, a collection of real
stories from interviews with real people who found, or did not
find, meaningful work. They give you a real sense of how varied
and unpredictable real-world opportunities are. There is hardly
any common denominator to the stories, but the author tried to
distill some lessons in this article.
I
Could Do Anything If Only I Knew What It Was by Barbara
Sher. Despite the cute title, it's actually very practical
advice about finding the kind of work that brings out your
talents in a satisfying way. The author understands that people are very
different from each other, and they work best in very different
kinds of jobs. She also understands that you need to figure
that out for yourself, through experience.
I used to work up a tremendous sweat playing this game at the arcades. Hardly moving, just those two joysticks, but expending almost as much energy as jogging.
The difficulty of the game was just right. The controls are hard to get used to, but they make sense. When you're just beginning, the game smacks you down so fast, you wonder if it's even possible. Then you start getting some mastery, and then you run into level 5, the hulk wave. The chaos just gets more and more intense.
There was some amazing sensory pleasure about that game. It just *felt* good. Oh, it felt so good to catch one of the humans and hear that old glug-glug-glug sound they'd reused from some old pinball game. Ohhhh, I want to play again!
Harmony is another JDK replacement that has taken a lot of work and has achieved very high quality. Is there any point in Harmony still existing?
Yeah, I think you are right: unit testing is actually a non-trivial skill (a bit like the kind of writing needed for literate programming, perhaps?), and requires a lot of discipline and practice. As "lite" as unit tests are, they're still too much for most shops.
I heard it said ages ago, when structured programming came out, that before structured programming, good programmers wrote good code and bad programmers wrote bad code; and after structured programming, the same programmers wrote good code and the same programmers wrote bad code.
Speculation: there is a certain way that your brain has to represent things in order to write good, solid code. Fancy programming techniques provide aids for doing that. But if a person's brain doesn't work that way, the fancy programming techniques have little effect.
U.S.-centric? How about Caltrain-centric?
My daily Caltrain commute reveals massive iPhone domination achieved in less than one year, in the only market that matters! Not so long ago, it was all Blackberries and Treos.
http://flashburrito.com/
Knuth does not seem to understand the value of unit tests. The main value of unit tests is to serve as a mental aid.
They help you define and communicate tasks in very small chunks, which is necessary for pair programming. They help you define and document the assumptions made by sections of the code. They help you modify code with confidence as you get better ideas, in two ways: they lead you to make an extremely modular design, and they tell you what assumptions you've just violated in the code that calls what you just changed (like a debugger specially tuned to your app).
Unit tests off-load error-prone consistency checking and documentation from your brain and onto the computer. They are the substitute for literate programming that actually works in real life. They are not, however, a substitute for real QA.
http://flashburrito.com
Anything in a computer can be hacked. Period. And there is no way to tell that it hasn't been hacked. Period.
Paper ballots are plain to read. When you recount a paper ballot where the person marks in ink what their choice is, there is no hanging chad and no concern that the punch card or optical scanner or touch-screen software has a glitch that led the machine to systematically miscount. Most importantly, people can do a recount with paper ballots. If there is a question about the accuracy of the tally, it can be independently verified.
Paper ballots are still prone to election fraud: people can "misplace" them, burn them, etc. But fraud and systematic errors are way easier with a computer. As long as balloting is done by computer, every election will be clouded by deep uncertainty.
http://greenlightwiki.com/lenore-exegesis/Parliame nt_of_Attitudes
Here are some details from the real life of another "uniquely bright" INTP, now age 38:
I once got a job as an editor for a book publisher when he created the job for me. He liked the way I thought about books and marketing. On the job, he taught me some fantastically valuable stuff about getting people to do their best work and about managing uncertainty. I've quit every job after a maximum of four years because I thought I learned what it had to teach me, and I moved on to something else. Some people said I was crazy because I could have made more money by not starting over at something new, but I'm not in this for the money. I once wasted two years on a stupid software project where I got paid nothing, because I was too stupid to know that "death before dishonor" does not apply to software projects. Then I got a job as a writer. I've performed improv comedy on stage for money (a tiny amount, but even a little money changes everything). One time, I got inspired and spent two weeks writing poems followed by four weeks of math. That was the best, most profitable six weeks I ever spent. I've never had the urge to write poems again, but I put what I learned to use in marketing materials and other writing. I once worked alongside some Russian mathematicians at one of the weirdest software shops ever and got taught some advanced math--and was paid to do it. I quit college in my early 20's because I thought it was bullshit to sit in a class, copy down what the professor wrote on the board, and regurgitate it on exams. A few months later, I was getting paid to learn Unix and lots of other things. Now I'm back in college building on the math I picked up, aiming to become a college professor. I still think most college classes are bullshit, but I'm playing the college game way more intelligently and having way more fun than before, now that I'm there with a purpose. I've sometimes wondered if I should have stuck with college the first time, but it's hard to say. I know a lot of real-world stuff that many academics don't, and I don't think I could have learned it had my career followed a straighter path.
Here are two intelligent books on careers:
What Should I Do with My Life? by Po Bronson. Not a book to tell you step-by-step what to do; instead, a collection of real stories from interviews with real people who found, or did not find, meaningful work. They give you a real sense of how varied and unpredictable real-world opportunities are. There is hardly any common denominator to the stories, but the author tried to distill some lessons in this article.
I Could Do Anything If Only I Knew What It Was by Barbara Sher. Despite the cute title, it's actually very practical advice about finding the kind of work that brings out your talents in a satisfying way. The author understands that people are very different from each other, and they work best in very different kinds of jobs. She also understands that you need to figure that out for yourself, through experience.
Don't measure your worth, that's neurotic. Measure your available real-world options by their worth to you.