Best,
Dave Hoover
//obtiva: Agility applied. Software delivered.
"I mean, after all, Kent Beck himself said I don't have to test this."
--
Curtis Cooley
curtis...@gmail.com
===============
Once a programmer had a problem. He thought he could solve it with a
regular expression. Now he has two problems.
On Fri, May 15, 2009 at 9:40 AM, Dave Hoover <dave....@gmail.com> wrote:An interesting experience report from a masterhttp://www.threeriversinstitute.org/blog/?p=187That post scares the hell out of me. Well, not that bad, but boy does
it open up a can of worms.
"I mean, after all, Kent Beck himself said I don't have to test this."
--
Curtis Cooley
curtis...@gmail.com
===============
Once a programmer had a problem. He thought he could solve it with a
regular expression. Now he has two problems.
Interesting indeed. However, the title is not strictly correct. It is
important to keep in mind that the word "test" is heavily overloaded
and its interpretation is very context dependent. What Kent is
actually talking about is not whether to test or not, but whether to
test automatically or manually first. This is a subtle but important
distinction, but it turns it largely into a question of timing.
Regardless of whether I agree with Kent or not, I think there are some
key points not mentioned in the article and a couple of false
assumptions.
Kevlin
I do think that for some developers it makes sense to follow the
rules, but experts need to have free will (see:
http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition). I
put myself in the expert category, sometimes, depending on the subject
matter, which is why I am often against the black-and-white arguments
I see on this list. I see things in more shades of gray.
So I agree with Kent, but maybe for the sake of others, he should have
kept his thoughts to himself ;)
Rob
http://www.google.com/profiles/IamRobertHanson
This is a great post, and will have strict TDD'ers questioning "the
faith", and have "0-known-bugs-maxim" (and other 0-tolerance idioms)
followers wondering if it ok to let a bug or two slide if it makes
sense.
I do think that for some developers it makes sense to follow the
rules, but experts need to have free will (see:
http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition). I
put myself in the expert category, sometimes, depending on the subject
matter, which is why I am often against the black-and-white arguments
I see on this list. I see things in more shades of gray.
So I agree with Kent, but maybe for the sake of others, he should have
kept his thoughts to himself ;)
Rob
http://www.google.com/profiles/IamRobertHanson
On Fri, May 15, 2009 at 12:40 PM, Dave Hoover <dave....@gmail.com> wrote:An interesting experience report from a masterhttp://www.threeriversinstitute.org/blog/?p=187Best,Dave Hoover//obtiva: Agility applied. Software delivered.
There is a subtlety to the post that I have not seen anyone mention.
Kent tested everything, although he did it in an "outside the box"
way. Actually, he didn't perform the tests, his early adopters did.
And they didn't even know it. Kent provided a way for errors in the
applications to be reported behind the scenes. Then, he could fix the
bugs his testers found.
The other subtlety was his mention of acceptance tests. I got the
impression he did not acceptance test drive the development of Max. He
did not mention whether or not he unit tested, or TDDed.
And for those in startups that think they need to go fast:
http://butunclebob.com/ArticleS.UncleBob.SpeedKills
http://www.artima.com/weblogs/viewpost.jsp?thread=51769
--
Curtis Cooley
curtis...@gmail.com
===============
Once a programmer had a problem. He thought he could solve it with a
regular expression. Now he has two problems.
Anthony's point is a reality for a lot of people. Unfortunately, it is a prime example of the current state of our industry as it relates to Ron Jeffries' first comment (and Dave's) on Kent's post: the danger of people who don't have the necessary experience with TDD or automated testing misusing the intent/usage of the post.
The reality of the startup, as I've spoken to and heard from people, is not that testing/TDD is inappropriate due to speed; it is that a startup environment is not conducive to on the job learning. If you do not have the necessary skills with a technique to be rapid with it, then trying to use it will slow you down. When you put yourself in the situation to be under constant and extreme deadline pressures, you are accepting the reality of not allowing effective improvement in skills. Rather than saying that 'xxx technique is not appropriate,' it is more honest to say that 'learning xxx technique is not appropriate.'
On Sat, May 16, 2009 at 5:57 AM, Robert Hanson
<iamrobe...@gmail.com> wrote:This is a great post, and will have strict TDD'ers questioning "thefaith", and have "0-known-bugs-maxim" (and other 0-tolerance idioms)followers wondering if it ok to let a bug or two slide if it makessense.Pragmatism beats dogmatism every time, but us "black and white 0-bug
tolerance" folks still think that it's important to strive for 0-bugs,
or perfection, or whatever seems too hard for the "shades of gray my
project is special folk", and continually improve our process instead
of accepting mediocrity because somehow our special circumstances do
not apply. I do not expect to ship with 0-bugs, but that does not stop
me from striving for 0-bugs.
--
Curtis Cooley
curtis...@gmail.com
===============
Once a programmer had a problem. He thought he could solve it with a
regular expression. Now he has two problems.
On May 16, 2009, at 1:07 PM, Corey Haines wrote:
The reality of the startup, as I've spoken to and heard from people, is not that testing/TDD is inappropriate due to speed; it is that a startup environment is not conducive to on the job learning. If you do not have the necessary skills with a technique to be rapid with it, then trying to use it will slow you down. When you put yourself in the situation to be under constant and extreme deadline pressures, you are accepting the reality of not allowing effective improvement in skills. Rather than saying that 'xxx technique is not appropriate,' it is more honest to say that 'learning xxx technique is not appropriate.''learning xxx technique is not appropriate.' That is probably the best way I have heard it articulated. However, I would add at the end "at this time" so the full statement is"Learning xxx technique is not appropriate at this time"with an immediate follow up of "when is the correct time?" because you should always be evaluating when "is" the correct time. However, isn't this where practice comes into play? If I am lacking in a particular skill, and it isn't appropriate to do it "on the fly with the current project" I should be practicing at home so I can employ the xxx technique next time. Thoughts?
I quite suppose this is not what you meant, but here you seem to be
On 16 May, 19:35, Corey Haines <coreyhai...@gmail.com> wrote:
> If you feel that there is a better, more effective way to develop software,
> but you are unskilled in it, it is a personal decision whether you should
> take the time to practice and internalize it. As an analogy, think about
> wood-working. There are tools that, once learned, can make a world of
> difference in the effectiveness of your building techniques. Until you learn
> them, though, they slow you down and perhaps even work against you. Trying
> to learn to use the tool while actually building things is not the most
> effective to learn the tool. Instead, you would go about using the tool to
> build very small projects, learning to handle it appropriately and
> efficiently for specific tasks.
suggesting tool-based development. The key skills, those that really
make a difference, have nothing to do with learning to use tools. This
is more or less trivial, but maybe a couple of examples might help the
newbies: you won't become a designer by learning how to apply some
filters in Photoshop; you won't become a musician by learning how to
hack a way through Cubase; you won't become a proficient software
professional by learning VS, or SVN, or ScrumDesk, or anything like
that.
> On-the-job training on production systems is inefficient at best,This might be true only in theory: as a matter of fact, in most
> counter-productive to the business at worst.
software factories, people already work over-time, all the time!
(Thanks to incompetent software managers: "permanent emergency" I call
it.) Then, training on-the-job, meant as learning new skills while
going, is in most cases the only option.
Moreover, and FWIW, I completely disagree with this approach to
"practice": IMO, if something distinguishes a mature software
developer from a non-mature one, that is indeed that there is not,
there cannot be, and there should not be, any distinction between
working and practicing.(This might be elaborated furtherly, if
needed.)
My point is: it's not gonna make you a developer *at all*. A carpenter
On 20 May, 03:41, James Martin <jimmymar...@gmail.com> wrote:
> So, I agree with you: learning how to use the functionality of my test
> framework (tool) without ever actually learning how to write a useful
> test is not really going to make me a well-rounded developer.
surely needs to know how to properly use a hammer, but learning to use
a hammer won't make you a carpenter. (BTW, we could also remember that
know-how is not know-what.)
I'd just strongly disagree: on this idea of the preminence of
> If you can't make time for practice or move to a working environment
> that encourages it, then you're probably not dedicated to the craft.
> And that's OK. No one is forcing anyone else to be a craftsman.
"practice", which is anyway strictly related to the overall idea of
what craftsmanship may mean. Of course, I have noted the widespread
emphasis on practice, so I understand my position needs to be better
qualified.
I'll certainly try. Unfortunately, not until tomorrow; today is going
> I think further elaboration is needed.
to be a long day...
there are so many things in there which make me say "+1", and then
there's all the related thoughts and feelings i have about the whole
issue which also all make me say, "+1".
sincerely.
I quite suppose this is not what you meant, but here you seem to be
suggesting tool-based development. The key skills, those that really
make a difference, have nothing to do with learning to use tools. This
is more or less trivial, but maybe a couple of examples might help the
newbies: you won't become a designer by learning how to apply some
filters in Photoshop; you won't become a musician by learning how to
hack a way through Cubase; you won't become a proficient software
professional by learning VS, or SVN, or ScrumDesk, or anything like
that.
This might be true only in theory: as a matter of fact, in most
> On-the-job training on production systems is inefficient at best,
> counter-productive to the business at worst.
software factories, people already work over-time, all the time!
(Thanks to incompetent software managers: "permanent emergency" I call
it.) Then, training on-the-job, meant as learning new skills while
going, is in most cases the only option.
Moreover, and FWIW, I completely disagree with this approach to
"practice": IMO, if something distinguishes a mature software
developer from a non-mature one, that is indeed that there is not,
there cannot be, and there should not be, any distinction between
working and practicing.(This might be elaborated furtherly, if
needed.)
Neither practice nor the job define the craftsman. If a person has a job that does not allow him direct time to study or "practice" and who has no time outside of work to practice, but who nonetheless works to the best of his ability, given the context of his surrounding environment, to improve his skill and code, is he not a craftsman?
All the qualities that we associate with a craftsman -- design, testing, collaboration, practice, etc. are important, but I don't think the lack thereof in any way implies that somebody is not a craftsman. Rather, it's the underlying attitude of the individual. If I were required to classify an individual as a craftsman or not, I think I would measure one thing -- purposeful self improvement.
The number of craftsmanship-like practices and attributes a person has may serve as a rough indicator of how fast somebody might attain the skills necessary to be an expert "craftsman."
This, however, brings up another quandry. Is somebody who, by talent or prior effort has the skills that make him better than 95% of all others, is he still a craftsman if he no longer cares to improve himself nor use his skills to the fullest?
--Kaleb
hey, i think national geographic says, isn't that when the younglings
have to kill him and eat him?
This, however, brings up another quandry. Is somebody who, by talent or prior effort has the skills that make him better than 95% of all others, is he still a craftsman if he no longer cares to improve himself nor use his skills to the fullest?
I agree. Ongoing long-term successful deliveries define the craftsman.
One's portfolio is what one's reputation is built on. Additionally,
peers and mentors and apprentices can point to your progress and
influence in your communities of practice.
> If a person has a job that does not allow him direct time to study or "practice" and who
> has no time outside of work to practice, but who nonetheless works to the best of his
> ability, given the context of his surrounding environment, to improve his skill and code,
> is he not a craftsman?
Unless you're constantly working overtime or have some long-term
crises going on at home, I don't believe it's possible to have "no
time outside of work to practice". It's simply a matter of
priorities. For example, I started learning to program when I was 26.
I was married, had a 2-year-old at home, and my wife was pregnant
with our second child. I was (and still am) very busy from 6AM to
10PM, 7 days a week. But I did 2 things to allow myself to progress
as a craftsman during my "apprenticeship" years: 1) I refused to work
overtime, and 2) I usually slept about 4 hours a night. I know that's
not sustainable, I make sure I get about 8 hours of sleep nowadays.
But sleep was the sacrifice I was willing to make to give myself the
time to read and code as much as I needed to get to where I wanted to
be. More about my story at
http://blog.nexwerk.com/2009/05/21/dave-hoover-talks-about-my-apprenticeship-years/
> All the qualities that we associate with a craftsman -- design, testing, collaboration,
> practice, etc. are important, but I don't think the lack thereof in any way implies that
> somebody is not a craftsman. Rather, it's the underlying attitude of the individual. If
> I were required to classify an individual as a craftsman or not, I think I would
> measure one thing -- purposeful self improvement.
Self-improvement is important, but it's an (ongoing) means to an end.
A craftsman is not defined by attitude, a craftsman is defined by a
portfolio of successful projects. Self-improvement and attitude will
facilitate successful collaborations and project deliveries over the
course of decades.
> This, however, brings up another quandry. Is somebody who, by talent or prior effort
> has the skills that make him better than 95% of all others, is he still a craftsman if
> he no longer cares to improve himself nor use his skills to the fullest?
I think the more important question is, who cares if that guy is a
craftsman? It's sort of like asking if a team is agile. It seriously
doesn't matter if they are agile. What matters is if they are
delivering value to their customers frequently and consistently over
months and years. I see software craftsmanship as a way of
approaching one's career as a software developer. I don't find it
helpful as a way of classifying people.
I think that is a very good point. Naturally, at the beginning of
one's journey, there's no portfolio, no set of projects to point at
yet. Your focus should be to build the skills and relationships that
will allow you to start creating that portfolio of successful
collaborations. These are the apprenticeship years. Whether that
focus defines you as a "craftsman" or is a sign that you're an
"aspiring craftsman" doesn't really matter to me. The direction is
the critical thing.
Well qualified. It's almost always about priorities. I know a lot of people who say they don't have time, yet they seem to fit in over 12 hours of television a week.
> > All the qualities that we associate with a craftsman -- design, testing, collaboration,
> > practice, etc. are important, but I don't think the lack thereof in any way implies that
> > somebody is not a craftsman. Rather, it's the underlying attitude of the individual. If
> > I were required to classify an individual as a craftsman or not, I think I would
> > measure one thing -- purposeful self improvement.
>
> Self-improvement is important, but it's an (ongoing) means to an end.
> A craftsman is not defined by attitude, a craftsman is defined by a
> portfolio of successful projects.
Hmm... By the dictionary definition this seems exactly right, but it also seems somewhat different than what is often presented as a craftsman in the arena of software development.
> Self-improvement and attitude will
> facilitate successful collaborations and project deliveries over the
> course of decades.
>
> > This, however, brings up another quandry. Is somebody who, by talent or prior effort
> > has the skills that make him better than 95% of all others, is he still a craftsman if
> > he no longer cares to improve himself nor use his skills to the fullest?
>
> I think the more important question is, who cares if that guy is a
> craftsman? It's sort of like asking if a team is agile. It seriously
> doesn't matter if they are agile. What matters is if they are
> delivering value to their customers frequently and consistently over
> months and years. I see software craftsmanship as a way of
> approaching one's career as a software developer. I don't find it
> helpful as a way of classifying people.
Good point.
Thanks for your thoughts and reflections.
--Kaleb
Yes, it's an excellent point.
> Naturally, at the beginning of
> one's journey, there's no portfolio, no set of projects to point at
> yet. Your focus should be to build the skills and relationships that
> will allow you to start creating that portfolio of successful
> collaborations. These are the apprenticeship years. Whether that
> focus defines you as a "craftsman" or is a sign that you're an
> "aspiring craftsman" doesn't really matter to me. The direction is
> the critical thing.
I think this what I was trying to point out when I said "purposeful self improvement." But when I said it, I hadn't thought of any distinctions between the phases of becoming a craftsman.
--Kaleb