2010 08 25
From TheCommandLineWiki
Contents |
Feature Cast for 2010-08-25
(00:17) Intro
- Quick review of Netanel's "Copyright's Paradox"
- http://www.amazon.com/gp/product/0195137620?ie=UTF8&tag=thecommandl0a-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0195137620
- An incredibly well researched discussion
- Of the balance between copyright and free speech
- He covers both sides quite well
- You get a strong sense of the historical shift
- And the key cases and events informing the narrowing
- Of what are supposed to be the free speech safety valves
- And the key cases and events informing the narrowing
- I especially like his deconstruction of the Blackstonian interpretation
- Even though he is immensely critical of copyright maximalists
- He concedes well that we need a variety of media, sources and business models
- Like other scholars in the area, he concludes with recommendations
- I would put his right up with the more recent work by Pam Samuelson
- The book is not very long, just over two hundred pages
- It is a demanding read
- Distraction from a sentence if a paragraph
- Can unravel the whole sense of it
- It is pretty gripping, if you are interested in the subject
- So distraction may not be as much of a concern
- I am glad I bought this book as I marked pages
- And highlight passages to go back to
- I could see re-reading this book on a regular basis
- No new shows on 8/29, 9/1 or 9/5
- Dragon*Con!
- http://dragoncon.org/
(03:56) Listener Feedback
- From Grant about role of mobile phones in developing world
- http://thecommandline.net/2010/08/01/news_220/
(07:51) Hacker Word of the Week: finger-pointing syndrom
(08:23) Hacker Superstitions
- I've seen more than a few programmers who observe superstitions
- These aren't usually the ones with which you're familiar
- Like throwing some spilled salt over your shoulder
- Explaining them is often as difficult
- Shrouded in personal or shared history
- In form they are often as eccentric as more common superstitious practices
- At their core, I think that hacker superstitions and the more plain variety
- Are given credence for much the same reason
- Invoking them is usually done as a hedge against the unknown
- Or the seemingly unpredictable
- In the absence of something we know, they help us deal with a situation
- It is useful to have something, anything to do
- It assuages our need for action of some kind
- Even if there isn't necessarily any real effect
- These aren't usually the ones with which you're familiar
- BREAK
- Most hacker juju typically has to do with personal process
- There are a lot of different activities involved
- In assembling, releasing and supporting programs
- Programmers have a great deal of choice in specifically
- How they go about each and every one of these tasks
- Some times techniques are chosen rationally
- Based on formal teaching or a well argued point from a peer
- Other times, they are developed seemingly at random
- As much as we strive for all experiments with software tools
- To be undertaken with rigor and to result in full understanding
- Many times hackers arrive at a formula that works solely by trial and error
- Tools for building software often come with a bewildering array of options
- There isn't always the time needed to explore them exhaustively
- Documentation is sometimes incomplete, leaving correct usage up to guess work
- There are plenty of cracks and bad joints
- Through which irrational beliefs can seep into daily routine
- One former coworker described his update, build, commit cycle
- As a superstitious practice
- He never committed a change to source control without pull fresh updates
- Followed by a full compile
- This all had to be executed within a limited window
- If he sat to long after updating or compiling
- Then his local copy might be too stale versus the server copy
- Bear in mind that he was usually the only committer against that particular server
- All the same, if he failed, his irrational fear was he'd commit a change
- That broke the build for someone else
- This is a slightly more rational impulse than most
- In soliciting help with this feature, an online acquaintance
- Related the compulsion to ensure source code comments
- Are all symmetrical
- Related the compulsion to ensure source code comments
- At first I wasn't entirely sure how this qualified as superstitious
- When I pressed, he explained how he felt that not tending to comment symmetry
- Might hide a real problem with matching up braces and parenthesis
- Even though the two are not necessarily related
- And a good editor or IDE can match up actual structural symbols like braces
- He still clings to his need to keep comments arranged just so
- He also shared that he is OCD a malady I suspect is common
- Neuroses that lead to fastidiousness like this can actually be an advantage
- At the expense of perhaps some wasted motion in coding
- There are a lot of different activities involved
- It is far too easy for the weakest link, the hacker, to fail
- The anecdotes about personal process highlight this really well
- It isn't necessary ignorance of what the software is doing that is the problem
- Making a mistake in processing is all too easy
- In the source control example
- Getting distracted before a commit
- Can make it easy to forget whether your local source is up to date
- Or that you have indeed performed a good compile
- Getting distracted before a commit
- A little wasted motion in following a superstition
- Can save a lot of waste if a mistake is allowed to care
- Especially in a team environment where the impact on other contributors
- Acts as a force multiplier on the mistake
- Breaking the build is invariable traceable back to a simple goof by someone
- Fear of stalling the whole team can lead to some constructive habits
- That aren't necessarily rationally tied to real risk
- If we assessed the likelihood of a mistake occurring
- Say by looking at some historical data on build breaks
- We'd most likely realize that it doesn't happen all that often
- Worrying about causing breaks can incur some intangible costs
- That might erode a healthy team dynamic
- Or sap momentum in a small but noticeable way
- Having a juju, as irrational as it may be, can bring a counter intuitive benefit
- The example of the comments and braces is similar
- With modern tools, the probability of an uncaught unbalanced brace is low
- Even when it does happen, all the syntax highlight and language support
- Usually makes short work of tracking down the problem
- Anxiety about making this mistake can rob momentum
- The person who shared the story has found a way
- To harness his OCD to be able to spend some small effort
- To avoid some larger worry that might actually hamper his work
- BREAK
- The unpredictable is pretty much the everyday with software
- According to the dictionary, superstition is informed
- By belief in supernatural causes
- There isn't anything supernatural in software in the conventional sense
- If you cannot easily apprehend the cause of something you are seeing though
- It is easy enough to assign it to something like the supernatural
- Many non-programmers have a view of coding like math
- All variables in the course of putting together a program have to be accounted for
- If it is a giant equation or proof, then everything has to be accounted for and explained
- For trivially small programs, that may actually be possible
- When a program grows to a size where it does something truly useful
- It is next to impossible for one person to be able to fully quantify
- Everything that it does at every moment when it is running
- It is next to impossible for one person to be able to fully quantify
- Worse, software is a complex phenomenon
- A bigger program isn't just more of the same
- With the problem of understanding being
- That you just have to remember more states and instructions
- With the problem of understanding being
- More source code really is different source code
- There is more opportunity for non-local effects
- Like variables in broader scopes affecting ones in narrower scopes
- Or state inside some shared object being unexpectedly changed
- When you through any kind of parallelism into the mix
- It gets that much worse
- It isn't even necessary that you are explicitly working with parallel code
- Such as spawning your own threads or processes or using co-routines
- By their very nature, many programs are inherently parallel
- This is true for server applications of all kinds, such as web applications
- With which most of us are pretty familiar
- Multiple users don't ask servers to do work in an orderly fashion
- And wouldn't tolerate the work they are trying to do being queued up
- So the server can do just one thing at a time
- And wouldn't tolerate the work they are trying to do being queued up
- Imagine how much worse Twitter would fail
- If every time you posted a tweet
- You received a note like a customer service call queue
- "Your tweet is important to us and will be posted in the order received."
- "There are 1,317,242 tweets ahead of yours in the queue."
- If every time you posted a tweet
- That means that there legitimate sources of ignorance
- Code pathways outside of our ability to easily understand them
- It makes sense that some hackers would think of these blind spots
- As something akin to the supernatural, where the natural
- Is what we can understand and for which we can easily account
- As something akin to the supernatural, where the natural
- According to the dictionary, superstition is informed
- This can lead to a couple of funnier and more frustrating superstitions
- Failing to reproduce a problem when the developer is present
- Can lead to a semi-serious belief
- That the developer scares away the problem
- Or emits some sort of bug suppression field
- Oddly enough, the other explanation for this particular super-normal situation
- Relates to science, not superstition
- I've heard the term Heisenbug, even used it myself
- The idea is that the developer's observation of the bug changes its behavior
- Like the effect of observation in quantum mechanics
- Or the inability to measure both speed and position at the same time
- In my experience, there is something to the idea of viewing perturbing a system
- It isn't the code that is changed, however
- Unconsciously, even the most savvy user may change what they do
- To reproduce a particular bug when a trouble shooter is present
- Just hit refresh is a not uncommon mantra
- Sergio on Identi.ca pointed out how repetition of a bug
- Often clears it up without anything explicitly changing
- I've seen some systems where such bugs are never solved
- And users just develop the habit, or superstition, of repeating some task
- This is likely a consequence of some contention between parallel requests
- The times a particular bug pops is when two or more users
- Are hitting the same stretch of code or two conflicting parts
- Even if both users are giving in to the mistaken belief
- That repeating will make the bug go away
- Running that same function over increases the odds
- That the time between the two executions hitting that trouble spot
- Is wide enough for one or both users to slip through without error
- That the time between the two executions hitting that trouble spot
- These race conditions can be ridiculously difficult to solve
- Under even the best conditions
- When you can reproduce it with a minimum number of users
- And control very carefully the timing of all them
- In my experience, these sorts of bugs are slow to solve
- If you pay very close attention, increasing or improving logging
- You might get a bit more of the puzzle as time goes on
- I've met very few people who can reason out race conditions in their head
- Or on a white board
- But most people are capable of finding counter examples
- That deflate a proposed explanation of the necessary sequence of events
- This is a case, where a fix is genuinely needed, where more information
- Can eventually help refine belief enough to lead to a fix
- Most of the time when I've gone through this
- I'd say we got very close to the actual sequence of execution
- But never all the way towards pinning it all down
- Solutions can often be coarse enough
- That some residual ignorance or misbelief can still linger
- Failing to reproduce a problem when the developer is present
- BREAK
- Ironically enough, debunking a superstition can sometimes make things worse
- If the belief really is irrational
- But the resulting action is harmless or oddly beneficial
- Then there is little harm in letting superstitions persist
- Think about pseudo science for a minute
- Where some correct knowledge mixed with some incorrect knowledge
- Leads to some utter wackiness
- Where some correct knowledge mixed with some incorrect knowledge
- Our minds are really good at recognizing patterns, correlation
- They are not so good at rigorously testing for correct causation
- If the correct portion of technical knowledge
- Relates to some easy to break part of a system
- You could see a developer or user making changes
- Thinking they had a good grasp on the system
- But in reality breaking things far worse because of that mixture of knowledge and ignorance
- If the same person lacked that bit of knowledge
- And had some practice or technique that appeared to work
- They might be less tempted to try to reason through doing something more or different
- I am not saying ignorance is an unalloyed good
- That would be very elitist and not what I am getting at
- Rather, I think it would be fairer to say incompletely debunking a superstition
- Can be more dangerous than leaving well enough alone
- I would say this is most true when the time and effort to educate
- Maybe is more than can be afford at a given time
- This was certainly more common in my experience when I worked in support
- Out of good intentions, I'd try to explain some program or peripheral
- To a clearly superstitious user who drove the software or device just so
- There was always pressure to close tickets, to solve a problem and move on
- You could never spend a whole afternoon improving someone's literacy
- Leaving them with an incomplete understanding
- And maybe inflating their sense of what they knew
- Often led to more support calls from that user
- Than just letting them do and think as they had in the first place
- If the belief really is irrational
- There is often a strong overlap with ritual
- I distinguish rituals from superstition
- By the level of awareness as well as the intent
- When I spoke about rituals, I was describing practice
- That helped support work in an explicit and positively reinforcing way
- Practicing a ritual is usually rational, designed to improve an aspect
- Of our practice of hacking
- When a ritual does not have a rational basis
- It rarely introduces any kind of risk to the work we do
- An irrational ritual may still have a sound basis
- Say an emotional one
- But the intent is always conscious and towards the good
- Exercises that simply boost mood can have a positive knock on effect
- Making us more attentive, patient and generally ready to tackle challenges
- Doing them incorrectly may fail to list our spirits but won't break a build
- Superstitions are often more immediate, more intertwined with the tasks at hand
- The way we interact with source control or the particular build steps we invoke
- Or as commonly informed by superstition as having thought things through
- From first principles, considering all the possible side effects
- Or as commonly informed by superstition as having thought things through
- They may be harmless
- In some cases observing them or not really makes no difference
- On the outcome of a particular bit of work
- In some cases observing them or not really makes no difference
- But there are also the cases where they can directly impact
- Some aspect of building software as much for the bad as for the good
- It is worth thinking about our personal superstitions
- It isn't necessary to eliminate them or even shift them onto a more reasoned footing
- Understanding the potential risks is enough to ensure
- That we trim out those that may be harmful
- And only observe the ones that at worst have no effect
- But in the observation may help lighten the cognitive load
- Incurred by managing the inherent complexity in hacking together software
- I distinguish rituals from superstition
(26:51) Outro
- Contact me
- Email to feedback@thecommandline.net
- Web site at http://thecommandline.net/
- IM to command.line@skype
- Listener comment line is 240-949-2638
- http://twitter.com/cmdln
- http://identi.ca/cmdln
- I'd like to thank libsyn.com for AAC hosting and Wouter de Bie for MP3 hosting
- These notes and the show audio and music are covered by a Creative Commons license
- http://creativecommons.org/licenses/by-sa/3.0/us/
- Attribution, share alike

