Archive

Archive for April, 2011

Just a Couple of Weeks Away

April 28th, 2011

Competence

April 26th, 2011

When I first saw Starling Software’s Programmer Competency Matrix, I was struck by the parallels between its four levels and the first four of the five that Dr. Patricia Benner identified in her landmark book From Novice to Expert: Excellence and Power in Clinical Nursing Practice. Her five levels—which are grounded in a ton of empirical data—are as follows:

Stage 1: Novice
Novices have had no experience of the situations in which they are expected to perform. Novices are taught rules to help them perform. The rules are context-free and independent of specific cases; hence the rules tend to be applied universally. The rule-governed behavior typical of the novice is extremely limited and inflexible. As such, novices have no “life experience” in the application of rules.
Stage 2: Advanced Beginner
Advanced beginners are those who can demonstrate marginally acceptable performance, those who have coped with enough real situations to note, or to have pointed out to them by a mentor, the recurring meaningful situational components. These components require prior experience in actual situations for recognition. Principles to guide actions begin to be formulated. The principles are based on experience.
Stage 3: Competent
Competence develops when the practitioner begins to see his or her actions in terms of long-range goals or plans of which he or she is consciously aware. A plan establishes a perspective, and the plan is based on considerable conscious, abstract, analytic contemplation of the problem. The conscious, deliberate planning that is characteristic of this skill level helps achieve efficiency and organization. The competent practitioner lacks the speed and flexibility of a proficient one but does have a feeling of mastery and the ability to cope with and manage the many contingencies of the real world. The competent person does not yet have enough experience to recognize a situation in terms of an overall picture or in terms of which aspects are most salient, most important.
Stage 4: Proficient
The proficient practitioner perceives situations as wholes rather than in terms of chopped up parts or aspects, and performance is guided by maxims. Proficient practitioners understand a situation as a whole because they perceive its meaning in terms of long-term goals. The proficient practitioner learns from experience what typical events to expect in a given situation and how plans need to be modified in response to these events. The proficient practitioner can now recognize when the expected normal picture does not materialize. This holistic understanding improves the proficient practitioner’s decision making; it becomes less labored because the practitioner now has a perspective on which of the many existing attributes and aspects in the present situation are the important ones. The proficient practitioner uses maxims as guides which reflect what would appear to the competent or novice performer as unintelligible nuances of the situation; they can mean one thing at one time and quite another thing later.
Stage 5: Expert
The expert practitioner no longer relies on rules to connect his or her understanding of the situation to an appropriate action. The expert practitioner, with an enormous background of experience, now has an intuitive grasp of each situation and zeroes in on the accurate region of the problem without wasteful consideration of a large range of unfruitful, alternative diagnoses and solutions. The expert operates from a deep understanding of the total situation. He or she is no longer aware of features and rules; his/her performance becomes fluid, flexible, and highly proficient. Experts do use analytic tools in situations where they have had no previous experience, or when they make a wrong initial assessment of the situation.

I’d like to find out what knowledge programmers think they acquire at each of these five stages. My first guess is in the table shown below; what else do you think should be there? And what shouldn’t, or is in the wrong place? (Note that this table starts at Novice level, which is not the same as an absolute beginner who has seen nothing at all. For us, a novice is someone who has done a standard first-year university “Computing 101″ course, and can hack together code to (more or less) pass an assignment, but in Benner’s terms, has no “life experience” of their own on which to base decisions when faced with real-world problems.)

Topic Level 1

(Novice)

Level 2

(Advanced Beginner)

Level 3

(Competent)

Level 4

(Proficient)

Level 5

(Expert)

Description Our assumed starting point If they learn just one thing If they learn everything in our course Beyond the scope of this course (but in the next one) Large-scale development for computational science
Data Structures list list of lists dictionary, queue tree (recursion) cyclic graphs (and too many others to mention)
Control Flow for
while
if
raise/except overriding methods
first-class functions
recursion closures
decorators
Modularization function libraries (import) first-class functions
classes
dynamic import
introspection
cross-language programming
Patterns what’s a pattern? forall
case
sentinel
most valuable
flag
reduce
filter
factory vs. prototype
template method
visitor
composite
command
strategy
proxy
decorator
Text readline
substring
escape characters
tokenization using split
wildcard regular expressions character encoding (Unicode) recursive descent parsing
Relational Databases select
where
aggregation join
foreign keys
one-to-one
one-to-many
many-to-many
NULL
transactions
triggers
stored procedures
Data Management shared drive version control
structured vs. unstructured data
compression
dirty/missing data
metadata (format specifiers, provenance)
discipline-scale databases
ontologies
Design functions for code re-use entities and relationships
encapsulation
interface vs. implementation
polymorphism
inheritance
Open/Closed Principle
Liskov Substitution Principle
frameworks
OO design patterns
Version Control checkout
update
commit
merge rollback branch management
Build “javac *.java” “make program” patterns and rules macros
conditional builds
continuous integration
Documentation README.txt Javadoc and equivalents
Coordination email mailing list
shared spreadsheet
project blog
bug tracker
IRC/chat (archived)
Testing hand-run tests (interactive or scripted) unit tests using a framework
“make test”
debugger
boundary case analysis static analysis
coverage
stubs/mock objects
Packaging and Deployment tar and email version control labels
“make tarball”
installation scripts RPMs, Eggs, autoconf
Web Programming download files by clicking on them wget
url.open.read
the HTTP protocol
public/private key pairs
CGI to serve static content partial failure
service composition
Performance Engineering timing profiling
big-O
algorithms vs. tweaks
Amdahl’s Law
memory hierarchy
task farming
processor pipeline
data parallelism
threading
message passing

Uncategorized

Sunday

April 25th, 2011
Comments Off

Today, my friends Jorge and Val welcomed their first child, Aurora Aranda-Cortés, into the world. And today, for the first time in nine years, my sister and her family didn’t have Easter dinner with my parents, because she is too ill to make the 40 minute journey.


The Morris dance is common to all inhabited worlds in the multiverse.

It is danced under blue skies to celebrate the quickening of the soil and under bare stars because it’s springtime and with any luck the carbon dioxide will unfreeze again. The imperative is felt by deep-sea beings who have never seen the sun and urban humans whose only connection with the cycles of nature is that their Volvo once ran over a sheep.

It is danced innocently by raggedy-bearded young mathematicians to an inexpert accordion rendering of “Mrs Widgery’s Lodger” and ruthlessly by such as the Ninja Morris Men of New Ankh, who can do strange and terrible things with a simple handkerchief and a bell.

And it is never danced properly.

Except on the Discworld, which is flat and supported on the backs of four elephants which travel through space on the shell of Great A’Tuin, the world turtle.

And even there, only in one place have they got it right. It’s a small village high in the Ramtop Mountains, where the big and simple secret is handed down across the generations.

There, the men dance on the first day of spring, backwards and forwards, bells tied under their knees, white shirts flapping. People come and watch. There’s an ox roast afterwards, and it’s generally considered a nice day out for the all the family.

But that isn’t the secret.

The secret is the other dance.

In the village in the Ramtops where they understand what the Morris dance is all about, they dance it just once, at dawn, on the first day of spring. They don’t dance it after that, all through the summer. After all, what would be the point? What use would it be?

But on a certain day when the nights are drawing in, the dancers leave work early and take, from attics and cupboards, the other costume, the black one, and the other bells. And they go by separate ways to a valley among the leafless trees. They don’t speak. There is no music. It’s very hard to imagine what kind there could be.

The bells don’t ring. They’re made of octiron, a magic metal. But they’re not, precisely, silent bells. Silence is merely the absence of noise. They make the opposite of noise, a sort of heavily textured silence.

And in the cold afternoon, as the light drains from the sky, among the frosty leaves and in the damp air, they dance the other Morris. Because of the balance of things.

You’ve got to dance both, they say. Otherwise you can’t dance either.

—Terry Pratchett, Reaper Man, 1991

Uncategorized

Random Hacks of Kindness June 4-5 2011

April 12th, 2011
Comments Off

RHoK #3 will take place June 4-5, and once again, Toronto will be a host site. Do some good doing something you love…

Announcements

Table of Contents

April 8th, 2011

If all goes well, The Architecture of Open Source Applications will be available for purchase by the beginning of May. As a teaser, there’s a table of contents below the fold—we think it’s going to be a great book, and hope you’ll think so too.
Read more…

Architecture of Open Source Applications

It’s Complicated

April 6th, 2011

Two people asked me “how are things?” this morning just a few seconds apart.  My answer is, “I need a job, my sister has two months (maybe three), and we’re about to re-elect a cold-hearted control freak because progressive forces in this country have run out of steam.  But all three of my current book projects are moving forward, I woke up beside my wife and daughter this morning, and we get to have elections as often as we want.” As Facebook says, “It’s complicated.”

Uncategorized

PyCamp Toronto June 27-30 2011

April 5th, 2011
Comments Off

The University of Toronto Department of Physics brings PyCamp to Toronto on Monday, June 27 through Thursday, June 30, 2011. Register today at http://trizpug.org/boot-camp/torpy11/

For beginners, this ultra-low-cost Python Boot Camp makes you productive so you can get your work done quickly. PyCamp emphasizes the features which make Python a simpler and more efficient language. Following along with example Python PushUps? speeds your learning process. Become a self-sufficient Python developer in just four days at PyCamp! PyCamp is conducted on the campus of the University of Toronto in a state of the art high technology classroom.

Python

An Ounce vs. A Pound

April 3rd, 2011

Run for the Cure, Ride for the Cure, Dance for the Cure—they have saved a lot of lives, and I have nothing but respect for all the people who have organized them, taken part in them, and given them money, but what about prevention?  Shouldn’t we put just as much energy and effort into wiping out the things that cause cancer?

Uncategorized