<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
  <title>DABlog - Home</title>
  <id>tag:dablog.rubypal.com,2013:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.7.3">Mephisto Noh-Varr</generator>
  
  <link href="http://dablog.rubypal.com/" rel="alternate" type="text/html" />
  <updated>2011-02-26T13:14:40Z</updated>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/rubypal/KoEa" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="rubypal/koea" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2011-02-26:3413</id>
    <published>2011-02-26T13:13:00Z</published>
    <updated>2011-02-26T13:14:40Z</updated>
    <category term="Computers" />
    <category term="Coolth and Weirdth" />
    <category term="Ruby" />
    <category term="Training series" />
    <link href="http://dablog.rubypal.com/2011/2/26/training-part-4-live-code-demos" rel="alternate" type="text/html" />
    <title>Training, part 4: Live code demos</title>
<content type="html">
            &lt;p&gt;You may think of live coding as a necessary evil: the thing you have
to resort to when a connection fails and you can’t get at a running
example, or when someone asks a question you’re not sure of the answer
to and you have to try it out in real time. Admittedly, memories of
coding in public (especially the connection-failure ones where you end
up writing an entire Rails application on the spot…) are not always
pleasant memories.&lt;/p&gt;


	&lt;p&gt;But I’d encourage you, as a trainer, to embrace live coding. Don’t
wait for things to go wrong before you do it; weave it into your
presentations and examples by design. You’ll find that the rewards are
well worth the risks, and that the risks can be successfully managed
without too much effort.&lt;/p&gt;


&lt;h3&gt;Live coding in presentations and Q&amp;A&lt;/h3&gt;

	&lt;p&gt;Live coding usually doesn’t happen in silence (except when something’s
gone wrong). I use it in tandem with answering questions and
presenting topics. I think with my fingers; I’m more comfortable and
confident saying things about code while I’m writing code. Whether
you’re that way in general or not, live coding can keep things lively
in your classroom.&lt;/p&gt;


	&lt;p&gt;Sometimes the answer to a question doesn’t come to me unless I can do
some typing; sometimes the answer comes to me but wouldn’t mean much
or be clear enough without live code to illustrate it.  I’ve never had
the impression that anyone thinks less of me as a programmer or as a
teacher because I’ve resorted to trying something out before answering
a question. Furthermore, the technique of trying things out is,
itself, an important one, and a good lesson for your students to
learn. “Is Hash#update a destructive operation?”  someone asks. “Let’s
ask Ruby,” I reply, and then try it out on the screen in irb. (By
the way, update is destructive. So is merge!. But merge isn’t, and
there’s no update!. No wonder I have to keep checking.)&lt;/p&gt;


	&lt;p&gt;“Let’s ask Ruby” is a good slogan to keep in mind, and a good one to
impart to your students. I’m always surprised when someone sends a
question to a Ruby mailing list that could easily be answered by
typing a few characters of code into irb. But it does happen;
apparently the trying-it-out habit isn’t ingrained in everyone, and
the classroom situation is a good place to try to instill it.&lt;/p&gt;


	&lt;p&gt;As for live demos during presentations: I show code snippets and
examples on slides, but I often end up tabbing away from the slides
into a console session and showing live examples of the language
features and idioms that the slides describe. In this context I see
live coding as a kind of bridge between static presentation and having
the students themselves do some coding. Obviously having me code isn’t
the same as having them code; but I believe that seeing me enter code
on the screen encourages them to do the same, to an extent that seeing
a static example doesn’t.&lt;/p&gt;


&lt;h3&gt;Managing risk with semi-live coding&lt;/h3&gt;

	&lt;p&gt;There are certain things I don’t like doing from scratch live. 
Deployment with Capistrano is one of them. It never seems to go right
all the way along. I’ll take the fall for this&amp;mdash;I have no reason
to assign blame to Capistrano&amp;mdash;but I have to live with the fact
that live Capistrano installaton and setup demos are, for me, risky.&lt;/p&gt;


	&lt;p&gt;So I do my live demo of Capistrano, but I do it with the help of a
list of steps, written on a piece of paper, and I prepare a certain
amount of it in advance. (It’s the permission settings and passwords
that always get me.). I don’t hide the list of steps from the class;
there’s no detrimental effect to their seeing it, and if they think my
use of a script like this means that I’m inadequately skilled, then at
least now they know!&lt;/p&gt;


	&lt;p&gt;Having the demo scripted reduces the risk, if not to zero then at
least pretty close. Deciding when you need this kind of aid is up to
you. For me it’s Capistrano; for you it might be something else. The
main thing to remember is that the usefulness of a live demo for the
students is that it’s dynamic and engaging. It doesn’t matter if you
use a “cheat sheet”, any more than it matters whether a pianist plays
by heart or from the music, as long as the performance is good.&lt;/p&gt;


	&lt;p&gt;The “cheat sheet” technique applies mainly to fairly complex code
demos that you can predict and plan in advance (as opposed to those
that you do spontaneously in response to a question, or as a sample
illustration of a language feature). Losing your way in the demo isn’t
the only risk of a lengthy demo, though; there’s also the lengthiness
itself. You don’t want to get embroiled in irrelevant details, nor to
start boring the class.&lt;/p&gt;


&lt;h3&gt;Managing lengthy demos with the cooking-show approach&lt;/h3&gt;

	&lt;p&gt;I draw inspiration from television cooking shows, in the matter of
dealing with code demos that might otherwise be too long or detailed.
These shows often use a kind of time-lapse technique. The chef mixes
some ingredients and gets everything to the point of putting it in the
oven. Then, instead of waiting in real time for the cake to bake, the
chef produces a finished cake that’s been baked beforehand. The lesson
can then resume at the point of frosting the cake.&lt;/p&gt;


	&lt;p&gt;The cooking show approach can be very handy for in-class demos. It’s
particularly suited to cases where you want to demonstrate how to do
something relatively small, and then want to show how it fits into a
finished application. Rather than have the students sit through the
writing of the whole application, you can write the bit you’re talking
about&amp;mdash;a data validation directive in a Rails model file,
perhaps&amp;mdash;and then run the whole application and show that it
fails when the data is invalid. Or you might walk through the creation
of one class or module, but then have the others already prepared so
that you can fast-forward.&lt;/p&gt;


	&lt;p&gt;On cooking shows, the fast-forward technique might apply to the overall
process (baking a cake, say) or to a subprocess that doesn’t lend itself
to real-time presentation, like waiting for dough to rise or chopping large quantities
of onions. The TV chef might illustrate the chopping technique, but
then pull a bowl of pre-chopped onions out of the refrigerator and thus 
condense the time-frame.&lt;/p&gt;


	&lt;p&gt;The same thing applies in training. The time lapse you incorporate may
involve a whole application, or it may involve a repeated task at one
level of abstraction, analogous to chopping onions. By all means do a live
demo of adding a “has_many” association to one or two of your
models. But if you’ve got a lot of such cases in your sample
application, consider doing most of them in advance and leaving just
those one or two to do as a live demo.&lt;/p&gt;


	&lt;p&gt;So keep your irb session open, even during your slide presentations,
and think creatively about semi-live and cooking show-style
demos. Live coding keeps things in the moment, and adds motion and interest
to the features you’re trying to put across.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2011-02-04:3412</id>
    <published>2011-02-04T10:34:00Z</published>
    <updated>2011-02-04T10:43:09Z</updated>
    <category term="Computers" />
    <category term="Coolth and Weirdth" />
    <category term="Ruby" />
    <category term="Training series" />
    <link href="http://dablog.rubypal.com/2011/2/4/training-part-3-thoughts-on-the-lecturing-component-of-presentation" rel="alternate" type="text/html" />
    <title>Training, part 3: The lecturing component of presentation</title>
<content type="html">
            &lt;p&gt;There’s no such thing as pure lecture in my technical classroom. From the very
beginning I encourage students to open up program files and interactive interpreter sessions and play with them while I’m talking. Meanwhile I’m
often bouncing from a bullet list on a slide, to a console where I demonstrate a
coding technique in real time. And much of the time I’m not even presenting; I’m
walking around the room helping people with their hands-on exercises.&lt;/p&gt;


	&lt;p&gt;In writing about modes of instruction&amp;mdash;lecture, demo,
hands-on or “lab” mode&amp;mdash;I am drawing artificial boundaries. In
the classroom it’s actually a blend. But bear with me; the artificial
boundaries aren’t entirely artficial, and they allow for some
salient and helpful points to be made.&lt;/p&gt;


	&lt;p&gt;In today’s post I’ll be talking mainly about lecture mode: the part
where you’ve got the class’s attention and you’re sitting there saying
stuff and showing slides and writing code in a file or console. In
later posts we’ll look more closely at some specific points about code
demos, as well as some ideas for making the most of hands-on exercise
time. This time around we’ll focus on the verbal and its cognitive 
underpinnings.&lt;/p&gt;


&lt;h3&gt;The teacher’s “advantage”: the z-axis&lt;/h3&gt;

	&lt;p&gt;The biggest problem people face when speaking to a class about a topic
is &lt;em&gt;trying to say too much&lt;/em&gt;. In fact, it’s largely for the purpose of
isolated and tackling this problem that I’ve separated lecturing out as its
own topic.&lt;/p&gt;


	&lt;p&gt;Consider a lecture snippet that consists of the following two points:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;To create a Ruby hash, put the keys and values in curly braces.
You separate keys from values using the so-called “hashrocket”, '=&amp;gt;'.&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;Never mind for the moment what’s being projected on the screen (maybe bullet
points, maybe a live code demo). The teacher wants to make those two points
verbally about hashes.&lt;/p&gt;


	&lt;p&gt;Now here’s what happens: a feeling of guilt kicks in, a kind of
full-disclosure compulsion. How (one’s teacherly conscience prompts
one to ask oneself) can I mention curly braces as literal hash
constructors, and not at least mention that they’re used for other
things?&lt;/p&gt;


	&lt;p&gt;So now we’ve got two main points and an aside, with the main points flowing
into each other and the aside understood to be in parentheses, so to speak:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;To create a Ruby hash, put the keys and values in curly braces.
    (Curly braces are also used for code blocks, but that's a
    different usage.)
You separate keys from values using the so-called “hashrocket”, '=&amp;gt;'.&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;But you still feel like you haven’t done your pedagogical duty; or
maybe that voice in your head is telling you that if you don’t say at
least a little bit about operator overloading in general, as a kind of
placeholder, your students will later come to feel that you omitted an
important topic reference. So, for either nurturing or self-protective
reasons, we get an aside inside the aside:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;To create a Ruby hash, put the keys and values in curly braces.
    (Curly braces are also used for code blocks, but that's a
    different usage.
        (Lots of operators are overloaded in Ruby -- square
        brackets, for example.))
You separate keys from values using the so-called “hashrocket”, '=&amp;gt;'.&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;You know you’re digressing but you’re confident that the main topic is moving
forward effectively and that the digressions will serve as useful placeholders
for later discussion. You have no doubt that what you’ve done amounts to the
utterance of two main points, with a bit of embellishment but clear and
communicative nonetheless.&lt;/p&gt;


	&lt;p&gt;In other words, you perceive the asides as occupying a space somehow different
from the space of the main points; you perceive them along a kind of z-axis,
oblique to the main axis of exposition&amp;mdash;something like the axis of depth
shown here:&lt;/p&gt;


	&lt;p&gt;&lt;img src="/images/lecture1.png" alt="Digressions stand apart from main points in teacher's mind" width="450" /&gt;&lt;/p&gt;


	&lt;p&gt;The only problem is that what your students are actually hearing&amp;mdash;what they,
rather than you, perceive&amp;mdash;is more like this:&lt;/p&gt;


	&lt;p&gt;&lt;img src="/images/lecture2.png" alt="Students hear topics and subtopics in a flattened way" width="300" /&gt;&lt;/p&gt;


	&lt;p&gt;The lesson? Have mercy on your students. They’re probably smart, but they don’t
have the necessary experience in the topic to evaluate, as your verbal
presentation unrolls before them, what’s a main point and what’s a
digression. They don’t have the background, so to speak, to pick out the
points in the foreground.&lt;/p&gt;


	&lt;p&gt;Sure, if you make an aside about Led Zeppelin or how to
bake bagels, they’ll get that it’s an aside.  But if you chase down every
little technical opening or clue in your own speech, if you pepper
your exposition of a subtopic with points from elsewhere in the general topic, it will only
serve to confuse your listeners and add to their anxiety about mastering
the subject matter.&lt;/p&gt;


&lt;h3&gt;When in doubt, lie&lt;/h3&gt;

In the preface to &lt;cite&gt;The TeX Book&lt;/cite&gt;, Donald Knuth has this to say about
topic flow:
&lt;blockquote&gt;
Another noteworthy characteristic of this manual is that it doesn’t always tell
the truth. When certain concepts of TeX are introduced informally, general
rules will be stated; afterwards you will find that the rules aren’t strictly
true…. The author feels that this technique of deliberate lying will actually
make it easier for you to learn the ideas. Once you understand a simple but
false rule, it will not be hard to supplement that rule with its exceptions.
&lt;/blockquote&gt;

	&lt;p&gt;Lecturing without filling in all the details that you know are lurking
in the topic feels like lying. It’s OK, though. In fact it’s your
responsibility. You’re not &lt;em&gt;really&lt;/em&gt; going to say
everything, even if you try to cram some extra points in. All these
digressions are no more than token efforts, when measured on the scale
of the full complexity of your topic. So treat them very skeptically
when they present themselves to your brain for delivery to the class.&lt;/p&gt;


	&lt;p&gt;I don’t mean that you have to become robotic or cleanse your speech
of every molecule of outside reference. (Your students won’t let you
do that anyway, once they start asking questions.) But try to shake
the feeling that you have to cover the entire canvas with your brush
on the first pass through. The learning canvas is random access; you
can come back to things instantaneously at a later point when they fit
in.&lt;/p&gt;


	&lt;p&gt;And remember that &lt;em&gt;you are not being tested&lt;/em&gt;. A lecture is not an oral
examination. Even in an oral exam you’d probably want to do more than just
a brain dump; all the more should you pick and choose carefully what you
say in lecture mode. No one is keeping score. They’re just trying to
connect the dots and learn from you.&lt;/p&gt;


	&lt;p&gt;It’s tricky, of course, because subtopics do have circular
dependencies and there are a lot of enticing sub-subtopics on almost
any path through a topic. The art of lecturing on technical material
(and lots of non-technical material, for that matter) is the art of
presenting a non-linear topic in a linear way. Correspondingly, the
discipline of lecturing is the discipline of not trying to say
&lt;em&gt;everything&lt;/em&gt; in the course of talking about any &lt;em&gt;one&lt;/em&gt; thing.&lt;/p&gt;


&lt;h3&gt;Listening to yourself&lt;/h3&gt;

	&lt;p&gt;When you’re talking to a class, you’re performing. I don’t mean you’re being a
phony or putting on an act. I mean “performing” in a more technical sense. I’m
a musician, so I understand this best in connection with music.&lt;/p&gt;


	&lt;p&gt;The most difficult and in some ways the most mysterious thing about
musical performance is that when you’re performing, you’re also
listening. It’s an instantaneous process: the listening part of you
tells the playing part of you how things are going and what
adjustments have to be made, yet somehow the adjustments aren’t
exactly adjustments &lt;em&gt;to&lt;/em&gt; anything because they precede the
actual production. You can’t really listen to something you
haven’t played yet, but that’s what it feels like.&lt;/p&gt;


	&lt;p&gt;Like I said, a mystery. Let’s leave it at this: performing means
letting go but it also means carefully monitoring what you’re doing.&lt;/p&gt;


	&lt;p&gt;With experience, you learn to listen to yourself as you lecture.  When
I’m explaining something, part of my brain is creating and delivering
the explanation. Another part is consuming it: I’m listening to myself
and instinctively spotting the gaps, fuzzy spots, and glitches,
hopefully before they happen. I’m also making quick, executive,
performative decisions, perhaps literally as I’m drawing breath, as to
what’s really relevant and what isn’t.&lt;/p&gt;


	&lt;p&gt;My impulses, for what it’s worth, tend fairly strongly toward the
fill-in-every-detail direction; I need my inner musician (or my inner
editor with a red pencil, if you like) guiding me and directing
topic-traffic so that I can keep things moving forward. It works, too;
but it’s something I had to become conscious of to master.&lt;/p&gt;


	&lt;p&gt;Presenting a topic with the right balance, the right arc, and the
right (probably small) coefficient of digressions, means you’re truly
in the teaching zone.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Next up: advice on code demos&lt;/em&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2011-01-27:3410</id>
    <published>2011-01-27T12:51:00Z</published>
    <updated>2011-01-27T19:56:58Z</updated>
    <category term="Computers" />
    <category term="Coolth and Weirdth" />
    <category term="Ruby" />
    <category term="Training series" />
    <link href="http://dablog.rubypal.com/2011/1/27/training-handling-mixed-levels-of-student-experience-in-a-class" rel="alternate" type="text/html" />
    <title>Training, part 2: Handling mixed levels of student experience in a class</title>
<content type="html">
            &lt;p&gt;For me, the most challenging thing about training is accomodating
people who come to a class from different backgrounds and with
different levels of experience and knowledge. So let’s dive right into
that.&lt;/p&gt;


	&lt;p&gt;How different are different levels? At times, very.&lt;/p&gt;


	&lt;p&gt;I remember a Rails class whose members included a participant in
that year’s “Rails Day” contest (i.e., a very experienced Rails
developer), side-by-side with someone who had literally never written
a computer program and never seen a command line. The latter person
was a front-end designer, and I have every reason to think she was
skilled and successful. But she did not belong in that class. (To be
fair, the Rails Day guy probably didn’t either&amp;mdash;except that he was
actually there in part to help some of the other people in the class,
who were his co-workers.)&lt;/p&gt;


	&lt;p&gt;Given a room with that diverse a population, what you can say? I mean
that quite literally: &lt;i&gt;what can you say?&lt;/i&gt; What sentence can come
out of your mouth that’s going to make sense to everyone in the room
and hold everyone’s attention? You don’t want to aim too high and
confuse the less advanced people. But you don’t want to bore the more
advanced students by aiming too low.&lt;/p&gt;


	&lt;p&gt;Managers sometimes err (quite understandably) on the side of sending more
rather than fewer people to fixed-cost, on-site training courses; and
even with public courses, self-selection based on advertised course
requirements and content doesn’t necessarily serve to keep the group
at one level. If you train, you’ll face this issue early and often.&lt;/p&gt;


	&lt;p&gt;Still, there’s a lot you can do to make the experience rewarding for
everybody even in a very mixed-level group. Here are some
suggestions&amp;mdash;in no particular order except that the first one is
the foundation on which all the rest, and indeed all of your training
activities, must be built.&lt;/p&gt;


&lt;h3&gt; A. Deliver what you promised to deliver&lt;/h3&gt;

	&lt;p&gt;This comes absolutely first and foremost. If the course was sold as a
beginner’s course, then you have to provide a worthwhile course for
beginners. If it’s an advanced course, you have to give the advanced
students the best experience you can. Beyond this you can tweak and
adjust; but delivering what you promised has to be the starting point.&lt;/p&gt;


	&lt;p&gt;Occasionally you’ll get a class where everyone is at the same level as
each other and it’s not the level you advertised. That doesn’t happen
often, but if it does, you can go ahead and recalibrate the whole
curriculum. I did that once with a programming team who had much more
experience than I’d been led to expect them to have. They were too
polite to come out and say that they were too advanced for the
curriculum, but it was pretty obvious. So we changed gears on day two
and spent the remaining days on more advanced topics and code
critique.&lt;/p&gt;


	&lt;p&gt;That’s a rarity, though. You’ll find the truly mixed-level class to
be much more common, and whatever you do to optimize the experience for
everyone, you must stay rooted in the curriculum you’ve promised to
cover.&lt;/p&gt;


&lt;h3&gt;B. Make the prerequisites clear in advance&lt;/h3&gt;

	&lt;p&gt;When you’re discussing the course skill-level with the client or
prospective participants, show some tough love: be clear and firm
about the prerequisites. It’s in everyone’s interest. Don’t try to be
all things to all people. Use clear terms like “not suitable” or “too
advanced” or “only right for beginners” if those terms apply.&lt;/p&gt;


	&lt;p&gt;Course prerequisites don’t have to be fine-grained, but they do have
to be clear. “Everyone in the course should already be experienced
with at least one object-oriented programming language” is an example
of a reasonable prerequisite. So is “The participants need to be at
least somewhat comfortable in a Unix-like environment.” You don’t need
to know whether they know all the command-line options for
grep. You just need to establish the basic requirements.&lt;/p&gt;


	&lt;p&gt;If you’re teaching a dependent technology&amp;mdash;meaning, the way
learning Rails depends on learning Ruby&amp;mdash;address the role of the
parent technology. You can teach Rails to people who know Ruby, or to
people who don’t; but mixing Rubyists with non-Rubyists in a Rails
class is problematic. Make sure you’re in accord with your clients
about any assumed parent-technology baselines.&lt;/p&gt;


&lt;h3&gt;B. Try to control the teacher/student ratio&lt;/h3&gt;

	&lt;p&gt;To the greatest extent that you can, keep the teacher/student ratio at
1/15 or better. Beyond about fifteen, in my experience, you hit
critical mass: the amount of help needed by the students expands
beyond the confines of the available time for one instructor, so you
fall further and further behind.&lt;/p&gt;


	&lt;p&gt;This is ancient wisdom, of course. Universities like to brag about
their tiny class sizes and all of that. And with training classes (as
with universities, incidentally), you can’t always control it. But if
you’re presented with, say, the prospect of providing hands-on,
closely-coached technical training for twenty-five or thirty people, see
if you can find another instructor&amp;mdash;or at least a lab assistant who
can troubleshoot software installation and other matters so that you’re not
doing everything.&lt;/p&gt;


&lt;h3&gt;D. Have extra material in reserve&lt;/h3&gt;

	&lt;p&gt;Try to have some ideas for extra projects up your sleeve, above and
beyond any in your stated curriculum, particularly for students who
are too advanced for the course. Bring a few books with you, and if
someone isn’t feeling challenged enough, point them to a chapter that
you think they can learn from. They won’t feel shunned; they’ll feel
relieved. The whole problem is that the too-advanced person shouldn’t
be there in the first place, so anything you do to help them not be
bored is in their interest.&lt;/p&gt;


&lt;h3&gt;E. Enlist the help of the more advanced students&lt;/h3&gt;

	&lt;p&gt;I’m thinking of situations where, say, one student is clearly
over-qualified for the exercises in the workbook, and another student
is struggling. It’s possible that the best course of action is for the
over-qualified student to pair up with the struggling one and help
them out.&lt;/p&gt;


	&lt;p&gt;This is a tricky strategy, though. It’s your job, not theirs, to do
the teaching. The situation has to be really right before you ask
students to teach each other.&lt;/p&gt;


	&lt;p&gt;But it often is really right. For one thing, teaching something helps
you consolidate your own knowledge&amp;mdash;so everybody wins, including
the student-teacher. And some people would rather spend the time
engaged in an activity with someone else than go off and work on an
application or read a book.&lt;/p&gt;


	&lt;p&gt;As &lt;i&gt;the&lt;/i&gt; teacher, though, you have to make sure that the result
is at least as great as the sum of its parts: all parties involved
have to understand and accept the plan. You don’t want it to backfire
and have either student (or both) think you’re trying to brush them
aside. Be circumspect about this option, but keep it in mind for the
right situation.&lt;/p&gt;


&lt;h3&gt;F. Master the art of not answering questions&lt;/h3&gt;

	&lt;p&gt;Don’t get me wrong: in general it’s good to answer questions. But
when questions come from students who probably shouldn’t have taken
the course in the first place, and are shifting the focus onto
material that’s either too simple or too advanced, it’s your job to
protect the class.&lt;/p&gt;


	&lt;p&gt;When I get a too-advanced question, I usually answer it quickly and,
if need be, incompletely. I don’t want to digress too far from the
curriculum&amp;mdash;and above all I don’t want to make the less advanced
students feel anxious because they can’t follow what I’m saying.
You can always ask the advanced student to talk to you about their
question later; but you only have one shot at making the dynamics of
the classroom work for everyone. So answer the question quickly; offer
to go into it privately later; don’t get into a lot of examples and
demos based on the question (that can really make the other students
feel abandoned); and move on.&lt;/p&gt;


	&lt;p&gt;Too-basic questions can be harder to deal with than too-advanced
questions. In fact, it may be through such questions that you first
discover that some of your students are under-prepared.  This may be a
good time to consider a temporary ad hoc student-teacher system (see E.,
above) where someone else in the class helps the person, assuming it’s
something that can be communicated relatively quickly (like how to
start Ruby from the commandline, creating a MySQL database from
scratch, etc.).&lt;/p&gt;


&lt;h3&gt;G. Make it easy to move around the materials (e.g., staged code shapshots)
&lt;/h3&gt;

	&lt;p&gt;For the main do-as-you-go application in my Rails workbook, I’ve got
twelve code snapshots. Each one represents the state of the
application at a particular point in the book. If a student falls a
bit behind, or wants to skip a section they already know about, they
can move to a later chapter or section and “fast-forward” by swapping
the appropriate code snapshot into their working code directory.&lt;/p&gt;


	&lt;p&gt;Furthermore, if I need to fast-forward through a topic, I can then
pick up from a particular code snapshot and keep going. I might do
this with a couple of topics if, say, a client has asked me to deliver
a four-day course in three days&amp;mdash;or if I’ve just fallen behind a
bit and want to get the class back in sync with the courseware. (I don’t
make a habit of falling behind but I do try to provide enough material
that compressing one or two subtopics won’t be a tragedy.)&lt;/p&gt;


	&lt;p&gt;Staged code snapshots aren’t the easiest thing in the world to maintain,
but they’re a good example of adding an element of independence to the
classroom experience for students who want to adjust the pace.&lt;/p&gt;


&lt;h3&gt;H. Talk to the person in charge&lt;/h3&gt;

	&lt;p&gt;I’m thinking here mainly of private, on-site training engagements
(though the principle could be extended to on-going discussions with
individual students too). You’ll probably have a discussion at the
beginning and/or end of each day with the manager who set up the
training. You should definitely bring any issues about class
preparedness level to that person’s attention.&lt;/p&gt;


	&lt;p&gt;When you do, you’ll find that ninety-nine percent of the time the
manager will say something like, “Yeah, I was afraid that it would be
too easy for Julie” or “Bill said he’d learn Ruby on his own over the
weekend but I guess he didn’t.” The manager knows the team. None of
what you say is going to be a huge surprise.&lt;/p&gt;


	&lt;p&gt;Be sympathetic, though. The client didn’t do this to make your life
hard. At worst, they just didn’t think it through in terms of
preparation and were eager to get the most value out of your skills.
Everyone’s acting in good faith.&lt;/p&gt;


	&lt;p&gt;Sometimes, the manager will take someone out of the training after the
first day. I always feel a pang of guilt at this&amp;mdash;but I shouldn’t, and
you shouldn’t. It’s a correction that will make things easier and more
productive for everyone, including the person who shouldn’t have been
in the training in the first place. Of course you want to challenge
yourself to make the experience accessible to and meaningful for as
many people as you can. But don’t be Utopian about it; there really is
such a thing as a person for whom a given class at a given time just
isn’t right.&lt;/p&gt;


&lt;h3&gt;Summary&lt;/h3&gt;

	&lt;p&gt;Here’s a summary of the suggestions we’ve just gone over:&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;A. Deliver what you promised to deliver&lt;/li&gt;
&lt;li&gt;B. Make the prerequisites clear in advance&lt;/li&gt;
&lt;li&gt;C. Try to control the teacher/student ratio&lt;/li&gt;
&lt;li&gt;D. Have extra material in reserve&lt;/li&gt;
&lt;li&gt;E. Enlist the help of the more advanced students&lt;/li&gt;
&lt;li&gt;F. Master the art of not answering questions&lt;/li&gt;
&lt;li&gt;G. Make it easy to move around the materials (e.g., staged code shapshots)
&lt;/li&gt;
&lt;li&gt;H. Talk to the person in charge&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;Handling the mixed-level classroom successfully is not easy. You need
to stay alert and to keep applying energy to the situation to make it
as good as it can be for everyone, while delivering what you promised
to deliver. A mixed-level group requires agility and adaptability, but
with structure.&lt;/p&gt;


	&lt;p&gt;Some of the training companies I subcontract with do Likert scale
evaluations (“Strongly agree, Agree, Neutral…”&amp;mdash;that kind of
question). One of the questions is often about the pace of the class:
much too slow, too slow, perfect, etc.  In a mixed-level class, I
don’t expect everyone to say the pace was perfect. I aim, though, for
the mathematically best result possible: I want the curve to max out
at “perfect” and fall away (hopefully not &lt;i&gt;too&lt;/i&gt; far) to the sides.&lt;/p&gt;


	&lt;p&gt;Then I know I’ve done my best.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2011-01-24:3409</id>
    <published>2011-01-24T22:52:00Z</published>
    <updated>2011-01-24T22:56:00Z</updated>
    <category term="Computers" />
    <category term="Coolth and Weirdth" />
    <category term="Ruby" />
    <category term="Training series" />
    <link href="http://dablog.rubypal.com/2011/1/24/training-a-series-introduction" rel="alternate" type="text/html" />
    <title>Training: a series introduction</title>
<content type="html">
            &lt;p&gt;This introduction is the first&amp;mdash;number zero, if you like&amp;mdash;in
a series of articles about technical training, intended to be read by
trainers but of interest, I hope, to a variety of teachers, managers,
and interested learners from various backgrounds. After this introduction I am planning at least three further articles, addressing such topics as how to handle classes with mixed levels of experience and what’s involved in choosing among different teaching modes (lecture, hands-on, etc.). After that, we’ll see.&lt;/p&gt;


	&lt;p&gt;Not all teaching is training. But as far as I’m concerned, all
training is teaching; and teaching is a fascinating, challenging,
absorbing art. I’m not going to philosophize at any length about the
terminology. I just want to make it clear that in this series about
training, I consider myself to be addressing a branch or style or
permutation of teaching, with all that that implies.&lt;/p&gt;


	&lt;p&gt;I’ve taught a lot and I’ve been at it for a long time. From 1992 to
2005 I was on the faculty of the Department of Communication at Seton
Hall University, teaching media history and research to
undergraduates. Meanwhile I’d been programming computers as a hobby
since 1972 (with some gaps, but pretty steadily since 1990), and I’d
become a Ruby and Ruby on Rails expert.&lt;/p&gt;


	&lt;p&gt;By mid-2005, my academic career and my supposed hobby were on a
collision course. I had a year-long sabbatical coming up, with the
expectation that I would write an academic book; but that summer I
signed a (non-academic) book contract with Manning for &lt;cite&gt;Ruby for
Rails&lt;/cite&gt;.&lt;/p&gt;


	&lt;p&gt;The timing was favorable for a change. Ruby beckoned; and with a
sabbatical scheduled I wasn’t expected to be in the classroom
anyway. So I changed careers: I resigned from Seton Hall, instead of
taking the sabbatical, and started to earn my living as a Ruby 
consultant, author, and trainer.&lt;/p&gt;


	&lt;p&gt;I figured I’d finish &lt;cite&gt;Ruby for Rails&lt;/cite&gt; and then get a
programming job. I did finish the book, but instead of getting a job I
set up a one-man consultancy, Ruby Power and Light, and started taking
on short-term contracts&amp;mdash;and a lot of training jobs. I trained
and trained. In 2006, I traveled to something like twenty-three
cities, from California to Sweden, training people in Ruby and Rails.&lt;/p&gt;


	&lt;p&gt;I continued to make my living mainly from Ruby and Rails training
through most of 2009, at which point I started working full-time as
a developer at &lt;a href="http://www.cyrusinnovation.com"&gt;Cyrus Innovation&lt;/a&gt;. I’m still involved in training projects, though,
especially (though not exclusively) a recurring training event called
&lt;a href="http://www.compleatrubyist.com"&gt;The Compleat Rubyist&lt;/a&gt;. Teaching isn’t my main bread-and-butter at the moment, 
but it is a part of me and always will be.&lt;/p&gt;


	&lt;p&gt;I hope you enjoy the series.&lt;/p&gt;


	&lt;p&gt;&lt;i&gt;Next up: Handling mixed levels of experience in a training class&lt;/i&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2010-03-24:3408</id>
    <published>2010-03-24T01:07:00Z</published>
    <updated>2010-03-24T01:08:44Z</updated>
    <category term="Coolth and Weirdth" />
    <link href="http://dablog.rubypal.com/2010/3/24/accredidation" rel="alternate" type="text/html" />
    <title>AccrediDation</title>
<content type="html">
            &lt;p&gt;I’ve noticed that people routinely pronounce “accreditation” as if the first ‘t’ were a ‘d’: accredidation. I’ve been wondering why, and I have a theory.&lt;/p&gt;


	&lt;p&gt;First, consider that ‘t’ often becomes a ‘d’ sound before ‘ed’. “faded” and “fated” can sound very similar. “imitated” is pronounced more like “imitaded”.&lt;/p&gt;


	&lt;p&gt;Now, it’s also true that while “imitated” sounds like “imitaded”, no one says “imiDation” instead of “imitation”. Nor does anyone say “visiDation”, “mediDation”, or “cogiDation”. So why “accrediDation”?&lt;/p&gt;


	&lt;p&gt;The reason, I believe, lies in the past tense form of the word: accredited. In that word, the ‘t’ after the ‘d’ sounds like a ‘d’ (like “imitaDed” and so on). I surmise, therefore, that something along the following lines happens when people pronounce “accreditation”: The brain gets to that first ‘t’ after the ‘d’ and, out of habit born of d-ifying the ‘t’ in “accredited”, pronounces it as a ‘d’.&lt;/p&gt;


	&lt;p&gt;What the brain doesn’t quite take into account is that there’s a syllable “missing”. If the past tense were “accreditated” instead of “accredited”, then no one’s brain would ever have thought that there were two ‘d’ sounds in a row, and no one would say “accredidation”.&lt;/p&gt;


	&lt;p&gt;It’s the only theory I can think of that explains why this word alone, among all the -itation words in the language, gets pronounced this way.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-11-13:3407</id>
    <published>2009-11-13T13:23:00Z</published>
    <updated>2009-11-21T17:51:17Z</updated>
    <category term="Computers" />
    <category term="Coolth and Weirdth" />
    <category term="Events" />
    <category term="Friends" />
    <category term="Ruby" />
    <link href="http://dablog.rubypal.com/2009/11/13/starting-a-new-job-in-december" rel="alternate" type="text/html" />
    <title>Starting a new job in December</title>
<content type="html">
            &lt;p&gt;I am very pleased and excited to announce that I have accepted a Senior Developer position with Cyrus Innovation, Inc. Cyrus is based in New York City. I will be, at least for the foreseeable future, assigned to a team working on-site at a New Jersey client. It’s a work-place I’ve been in before (I’ve done training for them), and I know some of the other members of the Cyrus team who work there. So while it’s definitely a big change for me and a new adventure, it’s also a familiar and collegial environment that I already know I like working in.&lt;/p&gt;


	&lt;p&gt;And it really is a big change! The last full-time job I had was my professorship at Seton Hall University (1992-2005).&lt;/p&gt;


	&lt;p&gt;The question is (drumroll…) why now?&lt;/p&gt;


	&lt;p&gt;Throughout the years that I’ve been doing freelance and independent consulting and training, I’ve regarded the prospect of a fulltime job with ambivalence. On the one hand, it’s less independent. And much of the brainstorming I’ve done this year about whether or not to seek a fulltime job has been kind of depressing, because it’s been motivated largely by the fact that my freelance business has dropped off a great deal (and I have no marketing skills, which means that when the market gets tight, I tend not to remain competitive). I’ve also been conflicted about fulltime jobs because I am very settled where I live and do not want to move.&lt;/p&gt;


	&lt;p&gt;On the other hand, I’ve always understood that a fulltime job would provide a measure of continuity and security that I’m increasingly feeling the lack of in my independent work. And, even more importantly, there’s the sense of belonging to a team of colleagues. I’ve always looked with a pang of envy at friends who are part of a development team, and whenever I’ve spent even a couple of weeks on a team helping out, it’s been incredibly stimulating. I always go through a big learning spurt when I work directly with other developers, and I don’t do nearly enough of it.&lt;/p&gt;


	&lt;p&gt;So I’d reached the point where I was interested in a full-time job but, fussy customer that I am, it had to be one that didn’t require me to sell my house and move, and that I had very, very good reason to believe would provide me with the kind of collegial environment that had been, for four years, the thing I had pined for the most as an independent. (I also didn’t want to telecommute, because sitting alone in my house literally all the time is not the right formula for me.)&lt;/p&gt;


	&lt;p&gt;Well, fast forward a bit and here I am, having found what I was hoping to find! That’s the story. I start December 7. (And all the “date that will live in infamy” jokes have already been made :-) Wish me luck!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-10-17:3367</id>
    <published>2009-10-17T14:57:00Z</published>
    <updated>2009-10-20T02:05:25Z</updated>
    <category term="Computers" />
    <category term="Events" />
    <category term="Ruby" />
    <category term="Travel" />
    <category term="ruby events computer travel" />
    <link href="http://dablog.rubypal.com/2009/10/17/the-compleat-rubyist-what-s-it-all-about" rel="alternate" type="text/html" />
    <title>The Compleat Rubyist: what's it all about? </title>
<content type="html">
            &lt;p&gt;First things first:&lt;/p&gt;


	&lt;p&gt;In case you haven’t heard about it, I’m very excited to report that I
am teaming up with two other Ruby programmer-authors, namely:&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;Gregory Brown, author of 
&lt;a href="http://oreilly.com/catalog/9780596523015"&gt;&lt;cite&gt;Ruby Best Practices&lt;/cite&gt;&lt;/a&gt;,
and&lt;/li&gt;
&lt;li&gt;Jeremy McAnally, author of 
&lt;a href="http://www.manning.com/mcanally"&gt;&lt;cite&gt;Ruby in 
Practice&lt;/cite&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;to present &lt;a href="http://thecompleatrubyist.com"&gt;The Compleat
Rubyist&lt;/a&gt;, a two-day Ruby training event in Tampa, Florida, January
22-23 2010.&lt;/p&gt;


&lt;h2&gt;The idea behind the event&lt;/h2&gt;

	&lt;p&gt;It all started with the books.&lt;/p&gt;


	&lt;p&gt;We got the idea of doing some kind of joint project because
our books (including the two above, plus my book, 
&lt;a href="http://www.manning.com/black2"&gt;&lt;cite&gt;The Well-Grounded Rubyist&lt;/cite&gt;&lt;/a&gt;) 
complement each other really nicely. My
book is a language tutorial. Jeremy’s book (to which both Greg and I
contributed) contains advice about using Ruby in a series of
application contexts. Greg’s book makes a different kind of pass
through the language, with an eye to idiomatic, productive
techniques.&lt;/p&gt;


	&lt;p&gt;A training event seemed like the perfect collaborative effort. We’ve
designed an unusual format, optimized for in-depth learning and for
a workshop/hands-on style.&lt;/p&gt;


&lt;h2&gt;Who’s it for?&lt;/h2&gt;

	&lt;p&gt;I’ve been training Ruby programmers for years, and I
can tell you that it’s very common to become quite good at Ruby but
still have room for getting deeper into how things work, what the best
practices are, and other areas.&lt;/p&gt;


	&lt;p&gt;I’d say that’s the “sweet spot” for our attendees: people who have
been using Ruby, and want to go further in their understanding and
skills.&lt;/p&gt;


	&lt;p&gt;Does that mean intermediate? advanced? talented beginner?&lt;/p&gt;


	&lt;p&gt;Hard to say. I’d like to think that almost any Ruby programmer can get
something out of spending two days with us. (And we’re hoping to get a
lot out of it too.) We’re not that concerned with pinpointing a level.
Have a look at the event description, and decide whether it sounds
good for you.&lt;/p&gt;


&lt;h2&gt;See you there, we hope!&lt;/h2&gt;

	&lt;p&gt;We’re happy to field questions, if you have any. There’s a contact
link on 
&lt;a href="http://www.thecompleatrubyist.com"&gt;the event website&lt;/a&gt;, as
well as links for registering and for more info about the venue.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-07-16:2326</id>
    <published>2009-07-16T22:05:00Z</published>
    <updated>2009-07-16T22:05:55Z</updated>
    <category term="Coolth and Weirdth" />
    <category term="Events" />
    <link href="http://dablog.rubypal.com/2009/7/16/the-wise-latina-comment-in-historical-perspective" rel="alternate" type="text/html" />
    <title>The wise Latina comment in historical perspective</title>
<content type="html">
            &lt;p&gt;I’ve watched no more of the Sotomayor hearings than has happened to be
on while I’ve waited for the guy behind the counter to toast my bagel,
and things like that. I don’t see much point in watching them, since
it’s pretty easy to predict what her critics are going to ask her and
say about her, and not terribly interesting to hear her answers.&lt;/p&gt;


	&lt;p&gt;But I do want to say something about this “wise Latina” thing, if I
can do so without boring myself as well as you to death.&lt;/p&gt;


	&lt;p&gt;With very few exceptions, all Supreme Court justices, ever, have been
white men. So have most other judges in the U.S. That means that &lt;em&gt;someone&lt;/em&gt;, &lt;em&gt;somewhere&lt;/em&gt; along the line, felt that white men make wiser decisions than people who are not white men. Maybe closer to “everyone” than “someone”, in fact.&lt;/p&gt;


	&lt;p&gt;White male jurists never have to say anything public to the effect that
white males as wiser, as jurists, than people who aren’t white
males, because it’s been said for them. It’s been said by virtually every
President who has made judicial appointments and nominations, every Senator on whom the strangely homogenous pattern has not weighed heavily, and every citizen who never
considered withholding a vote from the perpetrators of this
centuries-long exercise in exclusion.&lt;/p&gt;


	&lt;p&gt;In short, the entire history of the Supreme Court and much of the rest of the judiciary  amounts to a
sustained assertion that white men make wiser decisions than anyone
else.&lt;/p&gt;


	&lt;p&gt;So along came Sotomayor, and expressed a different opinion.  She
expressed an opinion that was not the opinion on which the entire
history of the Supreme Court has been predicated. She espoused the
belief that white men do not, in every imaginable case, make wiser
judges.&lt;/p&gt;


	&lt;p&gt;Well!&lt;/p&gt;


	&lt;p&gt;How dare she?!&lt;/p&gt;


	&lt;p&gt;Doesn’t she realize that The Universal Opinion on this subject has
already been established?&lt;/p&gt;


	&lt;p&gt;Of course it’s the same old thing. The belief that white males are
wiser is so widespread, so ingrained, so taken for granted, that it
seems natural. You don’t have to think about it; your thinking has
been done for you. And you don’t have to be so gauche as to say that
you believe it, because as long as you don’t saying anything, it will
be assumed that that’s what you think.&lt;/p&gt;


	&lt;p&gt;All Sotomayor did was to &lt;em&gt;respond&lt;/em&gt;. She was responding to
history. History was saying—loudly, repeatedly, in chorus echoing
down the centuries—that white men make wiser jurists. Sotomayor said:
maybe not, under some circumstances.&lt;/p&gt;


	&lt;p&gt;That’s all.&lt;/p&gt;


	&lt;p&gt;Think of it this way. Sotomayor walks down the street every day, her
whole life, and every couple of blocks, somebody says to her: White
male jurists make wiser decisions than anyone else. Senators say it;
Supreme Court justices say it. Citizens say it; Presidents say it.&lt;/p&gt;


	&lt;p&gt;After a lifetime of that, Sotomayor says: well, not necessarily.&lt;/p&gt;


	&lt;p&gt;And everyone gets mad at &lt;em&gt;her&lt;/em&gt;.&lt;/p&gt;


	&lt;p&gt;The every-couple-of-blocks thing represents about one millionth of one
percent of what Sotomayor, and the rest of us, have &lt;em&gt;actually&lt;/em&gt;
had communicated to us over our lifetimes. So why the hell shouldn’t
she respond? And why are people treating her like Oliver Twist asking
for more gruel?&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-06-10:1375</id>
    <published>2009-06-10T23:57:00Z</published>
    <updated>2009-06-10T23:57:57Z</updated>
    <category term="Computers" />
    <category term="Events" />
    <category term="Ruby" />
    <link href="http://dablog.rubypal.com/2009/6/10/my-new-ruby-book-is-out" rel="alternate" type="text/html" />
    <title>My new Ruby book is out!</title>
<content type="html">
            &lt;p&gt;I’m realizing that the new book isn’t getting enough buzz, so here’s some buzz!&lt;/p&gt;


	&lt;p&gt;My new book, &lt;a href="http://www.manning.com/black2"&gt;The Well-Grounded Rubyist&lt;/a&gt;, is now out and available from the publisher as well as Amazon and other retailers and stores.&lt;/p&gt;


	&lt;p&gt;If you’re learning Ruby, or want to learn Ruby, or want to refresh your Ruby knowledge and get more deeply into it…read this book! 
&lt;img src="/images/twgr.jpg" /&gt;
I talk more about the book in my recent interviews for &lt;a href="http://www.infoq.com/articles/interview-david-black"&gt;InfoQ&lt;/a&gt;, &lt;a href="http://on-ruby.blogspot.com/2009/05/author-interview-well-grounded-rubyist.html"&gt;On Ruby&lt;/a&gt;, and &lt;a href="http://rubylearning.com/blog/2009/06/09/interview-author-david-black/"&gt;RubyLearning&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;Some reviews and comments&lt;/h2&gt;

	&lt;p&gt;Here are some review quotations, from various sources:&lt;/p&gt;


&lt;div&gt;
&lt;blockquote&gt;
I think this book is a definite read and should be in every Ruby developer’s library. 
&lt;/blockquote&gt;
...
&lt;blockquote&gt;
Excellent. Easy to read, but not dumbed down. I came away with a much deeper understanding of &lt;span class="caps"&gt;WHY&lt;/span&gt; oop is used, and how to use it in ruby. 
&lt;br /&gt;
&lt;br /&gt;
If you are looking to understand ruby, look no further.
&lt;/blockquote&gt;
...
&lt;blockquote&gt;
David does an excellent job going beyond the language and hitting those concepts in the built-in classes and modules that you need to know and will experience in the real-world.
&lt;/blockquote&gt;
&lt;/div&gt;

	&lt;p&gt;You can also find complete reviews &lt;a href="http://citizen428.net/archives/386-Review-The-Well-Grounded-Rubyist-Manning-Publications.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.infoq.com/news/2009/01/The-Well-Grounded-Rubyist"&gt;here&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;(And don’t get confused if some sites have a different-looking cover. There were two cover designs. The new one is the one you see here.)&lt;/p&gt;


	&lt;p&gt;Enjoy!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-04-21:413</id>
    <published>2009-04-21T23:15:00Z</published>
    <updated>2009-04-21T23:16:10Z</updated>
    <category term="Computers" />
    <category term="Events" />
    <category term="Ruby" />
    <link href="http://dablog.rubypal.com/2009/4/21/the-well-grounded-rubyist-now-available-in-pdf" rel="alternate" type="text/html" />
    <title>"The Well-Grounded Rubyist" now available in PDF!</title>
<content type="html">
            &lt;p&gt;It’s been a busy few days, with the release of not &lt;a href="http://dablog.rubypal.com/2009/4/21/envycasts-featuring-david-a-black-ruby-1-9-what-you-need-to-know"&gt;my Ruby 1.9
Envycasts&lt;/a&gt; but also the &lt;span class="caps"&gt;PDF&lt;/span&gt; version of my new book 
&lt;a href="http://manning.com/black2"&gt;The Well-Grounded Rubyist&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;TWGR&lt;/span&gt; is an expanded, updated, Ruby-only reworking of my 2006 book
“Ruby for Rails”. It targets Ruby 1.9.1, and includes a great deal of
new material (enough that it took me almost a year longer than I
thought it would to write :-) The book is entirely about the Ruby
language, not Rails. Lots of readers of &lt;span class="caps"&gt;R4R&lt;/span&gt; encouraged me to write a
“just-Ruby” book, and here it is!&lt;/p&gt;


	&lt;p&gt;I’m looking forward to the release of the paper version on May 1, too. Not sure yet whether there are Kindle and/or Sony e-reader versions coming, but I’ll keep you posted.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-03-21:395</id>
    <published>2009-03-21T01:22:00Z</published>
    <updated>2009-10-27T16:11:54Z</updated>
    <category term="Coolth and Weirdth" />
    <link href="http://dablog.rubypal.com/2009/3/21/is-this-an-early-use-of-the-slang-cool" rel="alternate" type="text/html" />
    <title>Is this an early use of the slang "cool"?</title>
<content type="html">
            &lt;p&gt;Here’s a passage from &lt;i&gt;The Man in Lower Ten&lt;/i&gt; by Mary Roberts Rinehart, published in 1906. I’ve included some context but the main thing I’m interested in is the appearance of the word “cool” in the second paragraph.&lt;/p&gt;


&lt;blockquote&gt;
“Nonsense,” he said. “Bring yourself. The lady
that keeps my boarding-house is calling to me to insist. You
remember Dorothy, don’t you, Dorothy Browne? She says unless
you have lost your figure you can wear my clothes all right. All
you need here is a bathing suit for daytime and a dinner coat for
evening.” 
&lt;br /&gt;
&lt;br /&gt;
“It sounds cool,” I temporized. “If you are sure
I won’t put you out—very well, Sam, since you and your wife are
good enough. I have a couple of days free. Give my love to Dorothy
until I can do it myself.” 
&lt;/blockquote&gt;

	&lt;p&gt;I can’t see what “cool” means in the second paragraph, other than “cool” in the slang sense that we use it. My understanding is that “cool” in that sense started, or at least came into common usage, during or after World War II. In any case, 1906 seems insanely early for it.&lt;/p&gt;


	&lt;p&gt;But what else could it mean in the quotation above? The wardrobe described in the first paragraph doesn’t suggest a particularly cool climate. Is there some other nuance of the word I’m not getting?&lt;/p&gt;


	&lt;p&gt;I shall leave comments open on this one, at least until the spam gets intolerable.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-03-14:392</id>
    <published>2009-03-14T14:21:00Z</published>
    <updated>2009-03-14T14:22:23Z</updated>
    <category term="Computers" />
    <category term="Events" />
    <category term="Ruby" />
    <category term="Travel" />
    <link href="http://dablog.rubypal.com/2009/3/14/did-i-mention-ruby-training-in-atlanta-april-1-3" rel="alternate" type="text/html" />
    <title>Did I mention Ruby training in Atlanta, April 1-3?</title>
<content type="html">
            &lt;p&gt;The answer is…yes! I did mention it. But I’ll mention it again.&lt;/p&gt;


&lt;h2&gt;Want to learn Ruby, and learn it right?&lt;/h2&gt;

	&lt;p&gt;Come to Atlanta for three days and learn Ruby from:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;me (author of &lt;a href="http://www.manning.com/black"&gt;&lt;em&gt;Ruby for Rails&lt;/em&gt;&lt;/a&gt;, &lt;a href="http://www.manning.com/black2"&gt;&lt;em&gt;The Well-Grounded Rubyist&lt;/em&gt;&lt;/a&gt;, and other stuff; long-time Ruby programmer; one of the most experienced Ruby trainers on the planet)&lt;/li&gt;
		&lt;li&gt;Jeremy McAnally (“mrneighborly”, author of &lt;a href="http://www.manning.com/mcanally"&gt;&lt;em&gt;Ruby in Practice&lt;/em&gt;&lt;/a&gt;, creator of the Ruby Hoedown (annual conference))&lt;/li&gt;
		&lt;li&gt;Rick Olson (“technoweenie”, member of the Rails core team; plugin writer extraordinaire)&lt;/li&gt;
	&lt;/ul&gt;


&lt;h2&gt;You gotta better way to learn Ruby?&lt;/h2&gt;

	&lt;p&gt;I doubt it. Just read that list of instructors again… and you get training materials, a book (“Ruby in Practice”), and lunches.&lt;/p&gt;


	&lt;p&gt;There’s registration info &lt;a href="http://www.entp.com/training/atlanta09"&gt;here&lt;/a&gt;, and you can &lt;a href="mailto:dblack@rubypal.com"&gt;contact me directly&lt;/a&gt; with any questions.&lt;/p&gt;


	&lt;p&gt;Hope to see you there!&lt;/p&gt;


	&lt;p&gt;P.S. If you’re a Ruby expert but have friends or co-workers or employees who could use an accelerated intro/intermediate course, send them along!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-02-16:385</id>
    <published>2009-02-16T14:50:00Z</published>
    <updated>2009-02-16T14:52:25Z</updated>
    <category term="Computers" />
    <category term="Events" />
    <category term="Ruby" />
    <link href="http://dablog.rubypal.com/2009/2/16/ruby-training-in-atlanta-april-1-3" rel="alternate" type="text/html" />
    <title>Ruby training in Atlanta, April 1-3!</title>
<content type="html">
            &lt;p&gt;Want to learn Ruby, or improve what you already know? Come to Atlanta!&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.rubypal.com"&gt;Ruby Power and Light&lt;/a&gt;
 and &lt;a href="http://www.entp.com"&gt;&lt;span class="caps"&gt;ENTP&lt;/span&gt;&lt;/a&gt; are teaming up to present a three-day Ruby course in Atlanta. You can get more info, and register, &lt;a href="http://www.entp.com/training/atlanta09"&gt;here&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Training will be by me and Ruby developer/author Jeremy McAnally (“mrneighborly”). And Rick Olson (“technoweenie”) will be there too, helping with the training and sagely dispensing Ruby wisdom and advice. (Seriously!) It will be at the Georgia Tech Hotel &amp; Conference Center.&lt;/p&gt;


	&lt;p&gt;Please &lt;a href="mailto:dblack@rubypal.com"&gt;email me&lt;/a&gt; if you have any questions. Otherwise, see you there!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-02-03:381</id>
    <published>2009-02-03T01:38:00Z</published>
    <updated>2009-02-03T01:38:44Z</updated>
    <category term="Coolth and Weirdth" />
    <link href="http://dablog.rubypal.com/2009/2/3/why-athletes-thanking-god-for-victories-is-stupid" rel="alternate" type="text/html" />
    <title>Why athletes thanking God for victories is stupid</title>
<content type="html">
            &lt;p&gt;I hate it when athletes thank God when they win. My reasons for hating
it have nothing to do with my own atheism. I hate it because it’s
narcissistic and because it’s theologically infantile.&lt;/p&gt;


	&lt;p&gt;If you win a game and then thank God, &lt;em&gt;and do not thank God when you
lose&lt;/em&gt;, you are going on record as believing that God wanted you to win,
and that a victory by your opponent would have represented a thwarting of
God’s plan.&lt;/p&gt;


	&lt;p&gt;But how do you know? Isn’t it possible that losing is what God has planned for
you, and that it will do you good? Maybe losing will strengthen your
character. Maybe your opponent needs the win (or the prize money) more than
you do, and God somehow managed to figure that out in spite of being dazzled
by your greatness.  Maybe you should be thanking God for protecting you from
the sin of pride by not letting you win a spiritually meaningless, entirely
earthly contest.&lt;/p&gt;


	&lt;p&gt;But I’ve never seen an athlete drop to his or her knees and thank God after a
loss.  Why not? Because the ones who thank God when they win have a dinky,
anthropomorphic conception of God. Their God is “the man upstairs,” the Santa
Claus figure, the parent who may or may not give them the birthday present
they want. And to hell with the other kids. Me, Me, Me.&lt;/p&gt;


	&lt;p&gt;So what gives? Where does this all come from? Whose big idea was it to thank
God only for bringing about what they themselves wanted to happen anyway?&lt;/p&gt;


	&lt;p&gt;Let’s go back to ancient times. Things were different with respect to thanking
gods, &lt;em&gt;because there were lots of gods&lt;/em&gt; and the gods took sides
in the contest. It made sense for the Greeks
to thank Athena for the victory over the Trojans because Athena was, at some
Olympian level, duking it out with Ares and Aphrodite. The Greeks’ powerful
friends prevailed over the Trojans’ powerful friends. And the Greeks
understood that someone had actually made an effort on their behalf, faced
uncertainty, and prevailed. So they thanked her.&lt;/p&gt;


	&lt;p&gt;Dear athlete: Do you think that God faces uncertainty when you play a tennis
match?&lt;/p&gt;


	&lt;p&gt;Do you think that God has to make an effort on your behalf to make sure you
win?&lt;/p&gt;


	&lt;p&gt;Do you think that God’s enemy is rooting for your opponent?&lt;/p&gt;


	&lt;p&gt;And if you don’t think all that, what exactly are you thanking God for when
you win? I mean &lt;em&gt;exactly&lt;/em&gt;. Not just vaguely that you’re happy, and
happiness feels good, so it must come from God. That’s theological babytalk.&lt;/p&gt;


	&lt;p&gt;The best thing that can be said about thanking God for an athletic victory and not for a loss is
that it’s an ignorant corruption of what was a perfectly reasonable pagan practice. 
If you’re a monotheist and thank God for a win, you’re making
a statement about your own inherent worth, and what you believe is God’s
opinion of that worth, in comparison to the inherent worth of your opponent.
You’re asserting that your victory is of the Lord to an extent that a victory
by your opponent would not have been. And you’re implying unmistakeably that
your opponent is in league with God’s enemy.&lt;/p&gt;


	&lt;p&gt;In other words, thanking God for an athletic victory is stupid, uninformed,
thoughtless, self-absorbed, and about as far from anything religious or
spiritual as you can get. I understand the whole thing about religion not being the same as
rational thought. But this isn’t even the same as religious thought. It’s just
vanity.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://dablog.rubypal.com/">
    <author>
      <name>dblack</name>
    </author>
    <id>tag:dablog.rubypal.com,2009-01-23:371</id>
    <published>2009-01-23T22:31:00Z</published>
    <updated>2009-01-23T22:32:07Z</updated>
    <category term="Computers" />
    <category term="Events" />
    <category term="Ruby" />
    <link href="http://dablog.rubypal.com/2009/1/23/railsconf-registration-and-a-hiatus-year-for-railsconf-europe" rel="alternate" type="text/html" />
    <title>RailsConf registration (and a hiatus year for RailsConf Europe)</title>
<content type="html">
            &lt;p&gt;Registration is now open for RailsConf 2009 (May 4-7). You can get more details, and register, at
&lt;a href="http://www.railsconf.com"&gt;the RailsConf 2009 website&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;RailsConf is taking place in Las Vegas, one of my favorite cities. Yes, I know what a weird and ironic place it is. But for whatever reason, I’ve always found it extremely enjoyable. May is a good time to go&amp;mdash;hopefully not to hot to step outside!&lt;/p&gt;


	&lt;p&gt;There’s a lot going on at RailsConf this year, highlighted by its timing in the wake of the Rails/Merb merger decision. There will be lots of merger news and highlights, along with the usual great lineup of talks and, above all, the chance to meet and get to know other Rails developers as well as Rails core team members, authors, bloggers, and pretty much the whole gang!&lt;/p&gt;


&lt;h2&gt;A hiatus year for RailsConf Europe&lt;/h2&gt;

	&lt;p&gt;Ruby Central and O’Reilly have decided to take a hiatus from producing RailsConf Europe this year, for the simple reason that it didn’t bring in enough revenue last year to justify doing it again, particularly given the tight economy and the need to err on the side of caution. RailsConf Europe has always been a really great event, and people who go to it really love it, but we need a year of retrenchment while we figure out how to get everyone else to realize how great it is! Plans for 2010 are not certain yet; we’re taking it one year at a time.&lt;/p&gt;


	&lt;p&gt;Meanwhile, the Ruby and Rails communities continue to produce an astonishing number of high-quality, uniquely branded and flavored events. I’m not even going to try to list them all here. Do a search, though, and you may very well find one near you.&lt;/p&gt;
          </content>  </entry>
</feed>
