Tuesday, January 25, 2011

Extreme Programming Installed Ch. 1-3

Reference:
Extreme Programming Installed
Ron Jeffries, Ann Anderson, Chet Hendrickson
Addison-Wesley Professional, 2000

Summary:
Extreme Programming is a method that involves high team and customer communication.  The customer's requirements are broken up into user stories, and the stories are used as a basis for what the programmers need to accomidate.  Iterations and reviews are a huge part of XP.  The programmer should always do what the customer wants, and the requirements could change at any time.  To maintain good communication, the "Circle of Life" model can be followed.  This model will facilitate learning and keep information current.  If the customer and programmer are able to work together, the project will be steered to success.  In fact, it is better if a customer can be on-site for the duration of the project.  This will prevent guesswork in coding.  If the customer can't be there, then send programmers to visit the customer as often as possible.

Discussion:
Being an old hand at Extreme Programming (specifically Agile), I have to say that this description is in line with my personal experiences.  Communication with the customer is key, and serves to minimize misinterpreted instructions.  In addition, programmers receive knowledge of any changed requirements as quickly as possible.  In short, I would say that Extreme Programming is the most dynamic form of programming that I have experienced.
Extreme Programming diagram

Design of Future Things, Ch. 1

Reference:
Design of Future Things
Donald A. Norman
Basic Books, 2007

Summary:
This chapter emphasized the communication between people and machines, or rather, the lack thereof.  As machines become more and more automated, they take more and more choices out of the hands of their owners.  The intelligent car is an excellent example, able to brake, accelerate, follow turns, and much much more simply based on the environment it's in.  However, this can lead to trouble through misinterpretation of the environment.  The trouble is compounded through lack or human input and through little to no warning of errors.  If the machine makes an incorrect choice, the operator may only have a split second to compensate.  The main problem, Norman argues, is that there is no true dialogue between machine and operator.  The operator issues commands, and the machine issues a response.  This is contrary to interactions between, say, a horse and rider.  Both intelligent beings, they can send each other signals based on their perceptions and interpretations of the environment.  With automated machines, however, there is no true communication.  Norman ends by arguing for machines that augment, not automate, tasks.

Discussion:
Having interacted with several automated machines myself, I completely agree with Norman's analysis.  Until a machine exists that can process an environment in the same way as a human, they will always be guessing the correct action to take in any given situation.  Even if it's the correct action most of the time, it may only take one mistake by a high-powered piece of machinery to radically alter the life of a person.  I also agree that augmentation is preferable to automation.  I'm a big believer in people making their own choices, so as long as they aren't forced into a decision by a machine then I'm okay with it.
Car of the future?

Thursday, January 20, 2011

Introduction

Name: Patrick Frith
Post-graduation plans: I intend to go straight into the workforce, though graduate school is a possibility
Computing interests: AI, graphics, robotics
Computing strengths: debugging, C++, Java, functional programming
Favorite CS project: For an AI class I had to write an agent that could navigate a "Wumpus World," or a randomized world that contained elements that would reward or destroy the agent.  I enjoyed it because it really made me think of the best way to navigate a world without any foreknowledge.  In addition, I was able to add some personal touches to the finished product.
Least favorite CS project: In my sophomore year, I had a data structure assignment that involved a large amouont of provided code.  After writing and pouring over code I thought should work, I contacted the TA for the class for help.  We spent hours going over the assignment, and eventually found that the provided code was riddled with runtime errors.  It was far more trouble that it should have been.
Top tech development in the last 5 years: For the general populace, I think the top development has been the proliferation of smartphone technology.
Management/Coding style: I'm not really sure how to describe my coding style, as it seems normal to me.  That being said, I'm adaptable.  I am a night owl, so I do my best work in the late/early (depending on your perspective) hours of the day.

Me