I've actually fallen victim to this. One position I applied for sent
me a test they wanted back within one hour. The test's first question
was a complex data model that I was to write DDL for then write two
queries for. I don't DDL or SQL, I use RAILS :)
I've yet to hear back, because although I'm, sure I aced the rest, I
completely botched the SQL and DDL sections.
I should have generated a rails app for the data model then dumped the
DDL, but that would have been cheating. I wouldn't want to go into a
job with them thinking I actually know that stuff.
Bu really, with ActiveRecord or Hibernate, does EVERY programmer have
to be a SQL guru anymore?
--
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.
So, I don't think you need to be a SQL guru, but do I think every
developer should be working toward becoming a guru at learning new
technologies.
Hi,
I just wanted to throw in some hope. When I interviewed for my current job, I
pretty much paired through Robert Martin's "bowling game" kata [1] with my
current manager. Honestly, it wasn't completely smooth sailing because I
hadn't done TDD before, but I established a degree of technical confidence and
enthusiasm about TDD and progressive project management styles (Agile/Lean, XP,
etc.). Also, he got some sense of what it would be like to code with me. As I
was coding with him, I noticed an "Extreme Interviewing" whitepaper [2] on the
desk.
[1] http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata
[2] http://www.menloinnovations.com/freestuff/whitepapers/extremeinterviewing.htm
So there's definitely good interviews out there. However, I will say this
much. When I was interviewing for jobs using the university career center, I'd
hear things like "80% of jobs are obtained through networking," but the value
of that comment didn't really sink in. I think I dismissed the notion as
depressing cronyism flying in the face of the meritocracy I wanted to promote.
But since I met my current boss through some Agile technical lunches here in
Austin, I have a very different opinion on finding job leads through
professional contacts. Now I regard it as just part of the interview process.
It not only helps employers better find me, but helps me find the right kind of
employers.
I understand your frustration, though. Telling job seekers to essentially
"seek better," is an unfortunate concession to an industry that hasn't quite
figured out how to hire good talent and translate that talent effectively into
a good product.
I'm not sure where my next job will be. For now, I'm getting a lot out of my
current job. But I'm subscribed to this list because I'm interested in seeing
how far people can go with software craftsmanship.
-Sukant
Yes, yes, and as for the later:
We need to stop thinking we're an engineering field. We're not, we're
a trade or a craft. Consider the division of labor in a traditional
engineering field. Engineers sit at a desk and consider a problem
then design a solution using standard parts and mathematical models of
how things work. Engineering techs interface with machinists,
electricians, ect in a controlled environment to build prototypes and
test item. Then once the issues are worked out an assembly crew turns
out copies.
Yes, that's over simplified and misses some types of engineering (most
civil engineering projects are one offs, not prototypes then mass
production). Also, cutting edge engineers work in labs to build their
designs. However, as a general rule an engineer is not a mechanic or
line worker. He doesn't build what he designs.
Our field is the exact opposite. We design and build. Some of us
design more (call them master craftsmen) and some barely design at all
(call them apprentices) but most of us mix the entire range of design
to repair in our jobs. Yet we interview and test and train as though
we are engineers who design really interesting things but don't really
implement them.
I think this trap results from the fact that programs have no physical
presence and thus aren't considered a tangible work product.
--
Herbert H. Nowell
"Remember that a government big enough to give you everything you want
is also big enough to take away everything you have.” - Senator Barry
Goldwater
Who is John Galt?
Hi,
I certainly don't want to be a contrarian on this matter, especially because I
think I agree with some of what you've said, but having worked in the
semiconductor industry as an engineer for several years, I feel as though
you've misrepresented what engineering really is. There's a couple of points
I'd like to try to make.
First off, I like both ideas from the Lean manufacturing /and/ the
software craftsmanship discussions. Lean is implicitly sympathetic towards
engineering disciplines. Yet somehow, the software craftsmanship movement can
sometimes make some "software is different" arguments along the lines of what
you've presented. I think this has to do somewhat because the movement is
guided by Old World sentiments that were unfortunately displaced by the
Industrial Revolution.
I think we need to reconcile these two attitudes. Fortunately, I don't think
it needs to be terribly difficult to do so. Although Lean does focus on some
very process-oriented solutions (Kanban, for instance), I think there's a also
supposed to be an emphasis on something social. In fact, I think Lean has some
craftsmanship ideas baked in as engineers are moved from apprenticeships to
master engineer positions over the course of years.
Ultimately, I think the reality is that /no/ disciple that involves the real
work with real problems can ever be addressed with cookie-cutter solutions.
The engineer /isn't/ a designer that hasn't ever implemented his work (although
that can be the case). A good engineer has an education that allow him to
reconcile problems that arise in real life. This education can lead him to
solve problems through design. But sometimes, the solutions involve things
outside of design (for instance, the semiconductor industry is saturated with
manufacturing engineering disciplines (photo, etch, yeild enhancement, test,
and the list goes on). Also, you completely overlooked chemical and petroleum
engineering, which are also very hands-on disciplines.
You do have a point that in software, we often build what we design. This
might work to our advantage, but it really doesn't make me feel like I'm not
performing some feat of engineering.
So here's how I feel about all this at the end of the day. Great engineers are
also craftsman. And great craftsman are also engineers. Engineering for me is
all about problem solving. Craftsmanship is all about how to capitalize on the
problems we've already solved before through a social consideration.
-Sukant
I haven't read many seminal books, so I should be clear about that. However,
there's a pretty strong community here so most of what I know comes from
discussions I've had at Agile and Lean groups around town and articles I've
read on-line. Hopefully that doesn't deeply discredit my arguments.
That said, I hear anything by the Poppendiecks [1] comes highly recommended.
[1] http://www.poppendieck.com/
> For the SC view of things, I've read Pete McBreens "Software Craftsmanship".
> If you read that - what's your opinion on his clear and wide
> separation of software engineering and software craftsmanship?
Someone at the office has this book. Having dipped into this discussion as far
as I have, I feel somewhat obligated to read the book and report back with my
thoughts. Might take me some time, though.
My suspicion is that we'll ultimately be arguing about the semantics of what
"engineering" means to us. In McBreen's context, that might be something
specifically polarized from software craftsmanship. But to me, that just
doesn't seem to reflect the reality of what I experienced not only in school as
a EE, but in the four years as an engineer after that.
I'll read McBreen's book, though, and write back.
-Sukant
To grok lean, one must read at least the first half of "Lean Thinking"
by Womak and Jones.
They wrote "The Machine That Changed the World" about the Toyota
Production System. It's an academic study with lots of figures and
numbers proving how much more efficient the TPS is than the factory
line.
A fews years after the book, they went out to see how much progress
all the companies had made. They found that adopting the TPS was much
much harder than they had assumed, and it often didn't work. There is
no formula for lean. So they wrote "Lean Thinking" which is about how
adopting Lean values and principles then applying your own process is
much much more effective.
I'm anti formula when it comes to software process. No one process is
going to work for everyone, or for anyone else frankly. You need to
adopt values and principles of lean/agile and build your own process.
Perhaps picking practices from XP or Scrum, but most important is
making your process your own, then continually improving it.
Sorry for the mini-blog. It just sorta is flowing this morning :)
p.s. "The Goal" by Goldratt is also a great book. It's about theory of
constraints, an important piece of Lean manufacturing. If you can
apply TOC to your software process, you'll find your productivity
greatly increases. It's written as a novel with a fictitious factory
manager finding a mentor who teaches him about TOC. There are a few
chapters which just forward the story line which can be skipped or
scanned if you just want the meat.
I prefer "glossed over" or "simplified". Actually "idealized" is
probably the best. I'm well aware that what I presented isn't a
perfect map of the real world, but it does illustrate what I consider
key differences.
>
> Ultimately, I think the reality is that /no/ disciple that involves the real
> work with real problems can ever be addressed with cookie-cutter solutions.
>
This is a different (if related) discussion. Have you read "Shop
Class as Soulcraft"? I think software development in general and the
software craftsmanship movement specifically have a lot to learn from
it.
>
> The engineer /isn't/ a designer that hasn't ever implemented his work (although
> that can be the case). A good engineer has an education that allow him to
> reconcile problems that arise in real life. This education can lead him to
> solve problems through design. But sometimes, the solutions involve things
> outside of design (for instance, the semiconductor industry is saturated with
> manufacturing engineering disciplines (photo, etch, yeild enhancement, test,
> and the list goes on).
>
Yes, but do the designers spend much time on the manufacturing
engineering disciplines? And do the design engineers spend much time
working on the products after they are created? My disdain for
engineers as workers with things beyond design stems from a decade as
a mechanic in the Navy. While perfectly designed for their purpose in
isolation much of the gear I worked on was poorly designed when
deployed in context. Unnecessary complications abounded.
A perfect example is the wrenches needed. Mechanical engineers have
guide books of various fasteners to show holding properties based on
diameter, head size, thread fineness and count, etc. So, the HP air
compressors (among other items) I routinely worked on had each
fastener perfectly chosen for it usage, neither under or over
designed. Sounds great until you have to take the thing apart. An
engineer who was more than a designer but also a mechanic would have
selected a few standard fasteners and accepted that some parts would
be over designed for operation but the whole would be better designed
for repair and maintenance.
>
> You do have a point that in software, we often build what we design. This
> might work to our advantage, but it really doesn't make me feel like I'm not
> performing some feat of engineering.
>
Saying we're not engineers doesn't mean we aren't engaged in
engineering. I have come to the conclusion that engineering has lost
by becoming a field where academic training dominates to the exclusion
of other types (and I regularly rail against most CS programs for
similar reasons). I almost went to school for mechanical engineering
over mathematics and I'm convinced my years as a mechanic would have
made me a better machine designer that most of my classmates.
That we build (and repair) what we design should allow use to avoid
the 20 wrench problem. That we don't tells me we aren't taking
advantage of something unique we have to offer. The more we think of
ourselves as engineers instead of an integrated professional whose job
is the whole life cycle the less opportunity we have to provide good
software.
Great engineers may be great craftsmen but if so, it is by
transcending engineering and learning and doing things outside the
field. As you point out, that is arguably one of the secrets of Lean
(and before it what was called Theory Z): excellence by demanding
great cross area knowledge.
Hmmm...I think I agree with the exception that I'd read #1 as craft
masters and #2 as "for lifetime journeymen". In fact, I think my fate
may be in being the later in the long term. To be a master requires
more than just time and not everyone has what it takes.
That said, more and more there is not room in any team for programmers
who want to be static.
No, but I'm definitely jotting down notes of things to read.
I hope other people haven't been too heavily burdened by the debate churn of
this thread. For me, it's been helpful to canvas the views across the group
members (since I just signed up recently). Also, I'm getting recommendations
for what I hope are great reads.
> Yes, but do the designers spend much time on the manufacturing engineering
> disciplines? And do the design engineers spend much time working on the
> products after they are created? My disdain for engineers as workers with
> things beyond design stems from a decade as a mechanic in the Navy. While
> perfectly designed for their purpose in isolation much of the gear I worked
> on was poorly designed when deployed in context. Unnecessary complications
> abounded.
Okay, I /definitely/ sympathize with your views and experience.
> > You do have a point that in software, we often build what we design. This
> > might work to our advantage, but it really doesn't make me feel like I'm
> > not performing some feat of engineering.
>
> Saying we're not engineers doesn't mean we aren't engaged in engineering. I
> have come to the conclusion that engineering has lost by becoming a field
> where academic training dominates to the exclusion of other types (and I
> regularly rail against most CS programs for similar reasons). I almost went
> to school for mechanical engineering over mathematics and I'm convinced my
> years as a mechanic would have made me a better machine designer that most of
> my classmates.
The problems with academia is probably a whole new discussion altogether. It's
also one that's been on my mind recently. I had the idea to reach out to the
student population at The University of Texas at Austin. I got a bit
over-eager and sent out an impassioned E-mail [1] to the UT chapter of ACM in
the middle of their summer break. Once the students come back from break, I'll
try to reach out again (tepid response thus far).
[1] http://pastebin.com/m1c3fe4b2
I'm definitely interested in anyone's thoughts. I'm especially interested in
anything you guys have done in a similar vein. It would be nice to do
something more concrete in the community.
> That we build (and repair) what we design should allow use to avoid the 20
> wrench problem. That we don't tells me we aren't taking advantage of
> something unique we have to offer. The more we think of ourselves as
> engineers instead of an integrated professional whose job is the whole life
> cycle the less opportunity we have to provide good software.
I had speculated previously that some of what we'd be discussing would be the
semantics of engineering. It appears that some of that is panning out.
But I think we're reaching a common ground here. I often find in semantic
debates that there's two threads of discussions. The first is a legalistic
reasoning of terms, causality, etc. But the second thread is actually more
important -- the social context that's steeped in emotion and tone.
I guess I'm a little pooped of the debating at this point. I'm with you. Both
software and non-software engineer and craftsman have a long way to go. I
still, though, see a lot of similarities between software and non-software
problem spaces, so I'd really like to see a unification of terms and concepts.
That's one of the things I like about Lean.
> Great engineers may be great craftsmen but if so, it is by transcending
> engineering and learning and doing things outside the field. As you point
> out, that is arguably one of the secrets of Lean (and before it what was
> called Theory Z): excellence by demanding great cross area knowledge.
Sounds good to me.
-Sukant
In essence, Lean talks about "respecting people" and "continuous
improvement." These two are its core values and they are *extremely*
compatible with the SC way of thinking.
Beyond that there are a lot of individual practices that Lean suggests
from a manufacturing viewpoint. There have been a variety of attempts
from a variety of players to try to draw analogies between the
manufacturing practices and what we, as software people, do. This is
the most controversial part of Lean, and I think it will take time for
the community to reach some sort of consensus.
There are at least three camps right now: the Six Sigma folks, the
Lean Software Development folks (Poppendieck), and the Kanban folks
(Kanban is kind of like a "task board" in Scrum. Some people have
tried to take the specific manner in which kanban is applied in
manufacturing and literally interpret it for software.) There are
probably other ways to interpret Lean in a software context, but these
are the ways I have encountered thus far.
FWIW, LSD (Poppendieck) have probably invested the most energy of
anyone in determining exactly how Lean maps to software. So, you can't
go wrong by starting there.
>> For the SC view of things, I've read Pete McBreens "Software Craftsmanship".
>> If you read that - what's your opinion on his clear and wide
>> separation of software engineering and software craftsmanship?
>
Responding to Olaf:
I think that the way McBreen uses "Software Engineering" is a sticking
point. I prefer to interpret it as "software as profession" vs
"software as craft." To the extent that Engineers are people with a
specific education who belong to professional organizations and whose
role and value to society is determined by such they are different
from craftsman. However, I think using the term "engineer" rather than
"profession" as the point of comparison confuses the issue.
> Someone at the office has this book. Having dipped into this discussion as far
> as I have, I feel somewhat obligated to read the book and report back with my
> thoughts. Might take me some time, though.
>
Please do read it. It is an excellent book and should give you a great
background in understanding why some of us are here, why the manifesto
was created, etc.
In essence, Lean talks about "respecting people" and "continuous
improvement." These two are its core values and they are *extremely*
compatible with the SC way of thinking.
Beyond that there are a lot of individual practices that Lean suggests
from a manufacturing viewpoint. There have been a variety of attempts
from a variety of players to try to draw analogies between the
manufacturing practices and what we, as software people, do. This is
the most controversial part of Lean, and I think it will take time for
the community to reach some sort of consensus.
There are at least three camps right now: the Six Sigma folks, the
Lean Software Development folks (Poppendieck), and the Kanban folks
(Kanban is kind of like a "task board" in Scrum. Some people have
tried to take the specific manner in which kanban is applied in
manufacturing and literally interpret it for software.) There are
probably other ways to interpret Lean in a software context, but these
are the ways I have encountered thus far.
FWIW, LSD (Poppendieck) have probably invested the most energy of
anyone in determining exactly how Lean maps to software. So, you can't
go wrong by starting there.
>> For the SC view of things, I've read Pete McBreens "Software Craftsmanship".
>> If you read that - what's your opinion on his clear and wide
>> separation of software engineering and software craftsmanship?
>
Responding to Olaf:
I think that the way McBreen uses "Software Engineering" is a sticking
point. I prefer to interpret it as "software as profession" vs
"software as craft." To the extent that Engineers are people with a
specific education who belong to professional organizations and whose
role and value to society is determined by such they are different
from craftsman. However, I think using the term "engineer" rather than
"profession" as the point of comparison confuses the issue.
> Someone at the office has this book. Having dipped into this discussion as far
> as I have, I feel somewhat obligated to read the book and report back with my
> thoughts. Might take me some time, though.
>
Please do read it. It is an excellent book and should give you a great
While engineers may or may not be craftsmen, I think it's dangerous to
behave as if craftsman aren't "professional". Like it or not,
"unprofessional" has a lot of emotive baggage you probably don't want
to fight. I also consider myself both a craftsman and a professional -
I don't consider myself an engineer. YMMV.
Steve Hayes
Unfortunately, profession, like engineer, is an overloaded term. I am
referring specifically to the concept of a professional as someone
who: 1) has completed a specific course of academic training, often
requiring more than a four-year degree 2) is a member of a
"professional organization" e.g. a state bar association, state
medical board, NSPE, etc. 3) Is held to specific standards of
"professional ethics" under which his/her membership in the
professional organization can be evaluated and revoked. 4) cannot
practice his trade without the appropriate degree and/or membership in
the appropriate organization.
This, IMO, is what we need to contrast with "craftsmen" who, by and
large, receive training on the job and are held to the standards of
their peers as well as their customers. A craftsman may be, though
need not necessarily be, associated with some organization of his
peers (e.g. a "guild") He may be held to a standard of ethics by his
peers. Although, his ability to practice cannot be revoked other than
by word-of-mouth.
This is interesting, but does not describe anyone in software that I
have known in my 20+ year career. To me that makes it a straw man in
the context of software craftsmanship. Pete was referring to people
who did not meet this standard, but would still have identified
themselves as 'software engineers'. I think using "professional" the
way you are using it, in relation to software, confuses the issue.
Steve
Yes, that is the best way. Let's show the world the what we are
talking about by crafting remarkable software.
> If our ways are so much better - then the industry will notice.
Agreed.
:-)
I like your terms better than the preceding ones, but it would be
useful to have some that are more diplomatic.
> Anyway, one thought is just "showing the world" what we are talking
> about, instead of trying to explain.
>
> If our ways are so much better - then the industry will notice. So
> let's continue discussing, and share things like the better way to
> interview people which was discussed not so long ago on this list
> (pair programming something instead of asking 'geeky questions').
>
Lol. Yeah, you invited me here to discuss the topic that I brought up,
and we've worked a ways afield.
Problem solving is an important part of the software craft. And,
formal problem solving is theoretically useful. However, while
understanding if a problem is NP-complete or NP-easy is a useful
skill, and it may help me to determine what the first test should be,
It doesn't help me write the test and then implement a simple
solution.
That is the problem I have with traditional "software engineering",
and the problems that are presented on programming tests. Assuming
that I know what that test is, can I write it? And can I make it pass?
And can I do so simply? And can I keep such a solution simple as my
understanding of the domain evolves and I am forced to incorporate
more complex ideas? Etc.
> (unfortunately massive snip of very interesting how-did-I-get-here post)
>
> Getting back to software: the only analogue to the above that I have
> encountered in software is Test Driven Development. In TDD I can 1)
> create a model that can be validated 2) create a working system and
> validate it against that model 3) adjust both the model and the
> implementation until I have a system that I am reasonably sure will do
> what I want it to do and behave in a predictable way.
>
> So, a "Software Engineer" if he is anything like a "Hard Engineer"
> must have TDD as the central practice of his work. If he does this,
> then the two disciplines are somewhat comparable.
>
> (rest of original conversation snipped for brevity)
Adam,
I'd agree that TDD /has/ to be a "central practice", in a similar way to the
way that, say, statistical analysis is a central practice of the process
engineer. It's necessary - but not in and of itself sufficient. The nasty
thing about TDD is that while it proves that you understand your
implementation and that your implementation meets your (known) expectations,
there can still be a very real risk that you've, in effect, built the wrong
product (i.e., something not fit for the (customer-)intended use). Other
aspects of various methods, including Agile as a whole, act to mitigate that
risk - but they're still craftwork; basic practices that get adjusted and
force-fit into a situation without really having proactive control over the
process and progress of the project. (Your uncle was an experienced man who
understood that even "proper" engineering disciplines, like EE, still had
some craft elements associated with them - if "you don't find out until
you've tried it", it's not part of the CBOK - and should it be?)
Thanks for sharing, and putting up with my own blathering here and on-blog.
Jeff
--
Jeff Dickey http://archlever.blogspot.com
Gmail: dicke...@gmail.com
Email: jdi...@seven-sigma.com
Phone/SMS: +65 8333 4403
Skype: jeff_dickey
LinkedIn: jdickey
Yahoo! IM: jeff_dickey
MSN IM: jeff_...@hotmail.com (for IM only, not for email, please)
ICQ: 8053918
QQ: 30302349
GnuPG key: (for jdi...@seven-sigma.com)
> That is the problem I have with traditional "software engineering",
> and the problems that are presented on programming tests. Assuming
> that I know what that test is, can I write it? And can I make it pass?
> And can I do so simply? And can I keep such a solution simple as my
> understanding of the domain evolves and I am forced to incorporate
> more complex ideas? Etc.
What's you definition of "traditional software engineering"? Because I
don't think software engineering is only theoretical. At least I didn't
learn it that way...
Best reagrds,
Markus
That seems to be a rough thumbnail sketch of how the professions of law,
accounting, medicine and "real engineering" (P. Eng.) are set up. I can see
a lot of value in /software practitioners/ aiming for that, but I think
herding autistic cats would be easier than getting a lot of the 'hacker
superhero coder' types to get on board. (But then, drawing a public
distinction between that type of possibly-employed para-amateur and
professionals meeting the above definition would be helpful for all
concerned.)
--
Jeff Dickey http://archlever.blogspot.com
Email: jdi...@seven-sigma.com
Gmail: dicke...@gmail.com
Phone/SMS: +65 8333 4403
Skype: jeff_dickey
LinkedIn: jdickey
Yahoo! IM: jeff_dickey
MSN IM: jeff_...@hotmail.com (for IM only, not for email, please)
ICQ: 8053918
QQ: 30302349
GnuPG key: (for jdi...@seven-sigma.com)
Fingerprint D367 FB97 4E59 BEC0 8EBC D8E3 3BD4 7D4C DFE0 6488
Valid 01/07/2009 to 31/12/2009
Download from http://tr.im/qqQa
On 24/8/09 10:35 , "Steve Hayes" <steve...@cogentconsulting.com.au>
wrote:
For a few years I was officially a professional engineer (via Mechanical Engineering). It was not a pleasant experience, as I was not in any of the recognised categories, or projects.