Youry's Blog

Youry's Blog

Is ‘pair programming’ in your future?

leave a comment »

  1. Good discussion about Agile and Traditional SW Engineering at LinkedIn Harwood • I have been in the fortunate position of using both formal methods and agile methods in industry. The point of balance between two is interesting. Formal methods are often overwhelming for the average development. In many cases the development in hand cannot benefit from formal methods as such either because what is being developed is so common place that formalising adds nothing to the understanding of what is required or because the requirements are so under specified by product managers that what is actually taking place is an exploration of the design space using prototype code (that may actually become the product).

    The latter point is worth expanding, those that specify products rarely have the skills to understand formalism, they only grasp the dynamics of a system by seeing it “in flesh” as a (partially) working system.

    In my experience agile methods have proved quite effective at rapidly iterating the product development in these circumstances.

    Now this sounds very negative for formal methods. However this is only one side of the story. Certain aspects of systems need formalisation and, indeed proof. For example, one major area of design that developers constantly get wrong is concurrency. I have known several projects where the concurrency/synchronisation design arrived at by informal reasoning has been catastrophically wrong. The way out of these problems has been to do a formal design of the handlers for this part of the product and to prove it has the desired behaviour.

    I cannot end without adding a couple of comments on what affects the effective of the two approaches.

    For agile techniques, it has seemed to me, that the real determiner of their effectiveness has been the degree to which a common understanding of the product and code models to be used can be instilled into the team prior to development loop. That is to say that the use of techniques, such as the CRC card game, played by the team to gain a shared understanding of how the product works, and what constitutes the elements of value to the customer, has a deep impact of the effectiveness of the subsequent cycles of the agile . It is simply all too easy for inexperienced teams to “loose the plot” and to confuse completing a piece of functionality with completing a piece of value.

    For formal methods the problems are somewhat different. One major problem is the semantic distance between formal methods and programming. If you develop a model of concurrent system in CSP or CCS, for example, the primitives that you use in creating the model are vastly different from the programming primitives you have at your disposal to implement the system. The developer quite rightly asks at this point “why should I build a model that is so far away from the code I will need to write?” and “how is the model connected to the code?”. There are, of course, two distinct way to address this problem, either we can design programming languages with better primitives that reflect the formal frameworks we have or we can create formal frameworks that are nearer to the programming primitives we have in practice. On this latter point we should remember that, for example, CCS and its subsequent developments, have been pursued to understand the fundamentals of concurrency, not as a vehicle for building systems.

    Apologies to all if this has turned into a bit of a rant 🙂

  2. Is ‘pair programming’ in your future? By Toni Bowers September 17, 2012, 6:52 AM PDT, published at

“Takeaway: Some claim that sharing a desk and one computer with another programmer is the most efficient way to code.

I’m not a programmer so I cannot speak for those who code for a living, but here’s a concept that could take some getting used to: pair programming. This is where two people share one desk and one computer, with one person being the “driver,” controlling the keyboard and typing in code, and the other being the “navigator,” monitoring design and scanning for bugs.

It all started with a book: “Extreme Programming Explained,” written by Kent Beck, creator of the Extreme Programming and Test Driven Development software development methodologies. According to the book, software should be released quickly and improved along the way. This is best done more quickly, according to Beck, by double-teaming projects.

Beck practiced pair programming at a software company in the ‘80s with Ward Cunningham, the developer of the first wiki. Cunningham asked Beck to check for bugs in a software application he was working on. As time went on, the two would pair up to knock out assignments so they could move on to their own pet projects.

The practice is spreading. Pivotal Labs, a software-development shop that was bought by EMC Corp. in March, has its 175 engineers pair all day, every day. Facebook has begun using the practice, as has the San Francisco-based company Square, which says about 15 percent of its engineers pair full-time.

And there are different versions of paired partnering as well: Playing the field, or changing partners daily, is called “promiscuous pairing.” Hopping back and forth between partners is called ping-pong pairing. Even those who work remotely can take part: Remote pairing lets programmers share the same screen via the Internet.

Not everyone is onboard with the concept. Australia-based software company Atlassian created a mock instructional video called “Spooning” that hilariously mocks the practice.

So what do you developers say? Is this something you would be comfortable with?”


Written by youryblog

September 21, 2012 at 10:25 PM

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: