Thursday, April 15, 2010

Influencing Your Way to Agile

I recently presented at the Emerging Technologies for the Enterprise conference in Philadelphia.

Speaking at ETE

It was a fantastic conference, as always with the folks from Chariot Solutions. I had a great crowd even though I was in the last slot of the last day of the conference. For all of you that couldn't make it (and those of you who did and wanted my slides) I thought I'd write up my thoughts on influencing your way to Agile.

I love Philly ETE because of the community and the amazing speakers and all of the focus on new technologies, emerging practices and practical tips and tools—things that are relevant to the work that I do everyday that I can take back with me.

But how often do you really bring those ideas back to your organization and change things?

I'm not saying it doesn't happen—I have brought back some valuable tips and definitely picked up new technologies, but especially the ideas that involve changing the behavior, actions, opinions of others—maybe Uncle Bob sufficiently shamed you into deciding that you and your team needs to actually practice TDD—so many ideas like that fizzle out before they ever have a chance to become reality.

What inspired me to study influence is the patterns that I saw over and over again: You're in a company on a team. You have your job; you depend on some people and some people depend on you. There are some norms for how things get done, for how people interact and communicate. As an individual and an organization you sometimes fail and sometimes succeed at what you do. Love it or hate it but if you care at all about what you do and your organization (or the people in it) you see some room for improvement. So, you come up with an idea.

The goal is usually to take your idea and get to the point where you can give it a try so that you have a shot at turning it in to reality and making a positive change in your world.

But how do you get there? For most non trivial changes you have to get some others on board before you can turn your great idea in to reality. So between the time that you have a great idea and you give it a try you have to go and talk to them, convince them to go along with it.

What really bothers me is all too often you get stuck at these in between points before you even to give it a try. And what happens is that over time when you hear "no" often enough you often start to give up before you even try.

So many ideas, so much energy gets lost (wasted) because we don't know how to communicate our ideas and we don't have the relationships and skills we need in order to be able to successfully influence each other when a great idea does come along.

I know I titled my talk “influencing your way to agile” but I’m not really here to talk about agile. Agile is a mindset--a conscious decision to accept change and adapt the way we work to accommodate constantly changing requirements. In my mind a commitment to agile is also a commitment to discipline and continuous improvement. I’m not strict in my observance of agile practices--Agile techniques are just more tools in my toolbox, but I do buy into the core principles of transparency, collaboration, responsiveness, getting things done. They just seem like good ideas.

Most developers that I meet are either on a team that is trying to "be more agile" because of some pain or frustration with their current way of working or is already "sort of agile" and dealing with the same or new pains and frustrations with the way they work.

Regardless, I don't know if I've ever met anyone that has said "yeah, everything about the way my project/organization/community is perfect--nothing needs to change“

It doesn't matter if you are a developer or a team leader or an executive--I hear the same sort of thing--everyone has frustrations, sees opportunities for improvement, occasionally comes up with new ideas. Everyone is dealing with change and the behavior of others.

Behaviors are very hard to change. One way of looking at it is that there are two ways to do it and they are by influence or by authority.

If you are the CEO of your company (and a totalitarian one at that) then you can use your authority to force people to change their behavior. Most of us don’t have that much authority over others, which means we have to use our influence.

You are going to need to learn how to exercise the influence you have and grow your influence (by building the working trust relationships and trust between you and the people you work with) in order to make change happen.

Some people are really good at influence. The rest of us have to practice.

So I’ve come up with 6 steps to help you practice, or exercise your influence. These are meant to be applicable to exercising influence over your teammates, boss, customers, anyone. These steps are very simple and I can’t provide you with any sort of guarantee, but I have found that when you are just starting to become aware of the positive influence you can have on the people around you and you want to get better at it it helps to have steps to follow.

Step 0: Generate ideas

You can't influence change if you have no idea what you want to see happen. This is step 0 because most of the time you already have an idea before you come to me to talk about how to learn to exercise your positive influence on others.

Step 1: Pick an idea and take time to think about it

It is important that you are sure that the idea you decide to try to introduce into your organization is a good one. Also, you want to be sure that this is an idea that will benefit the whole organization--not just you or your team. If you are just out to make your own life easier you are going to have a harder time finding allies for your cause eventually. If you do believe that this change would benefit your organization as a whole then you also need to spend time practicing explaining that benefit--make sure you can clearly articulate what exactly you propose and how it specifically meets a need or contributes toward a goal for the organization, elevator-pitch style.

Also consider if this is the right time to introduce a new idea and make a big change. I tend to get excited about making improvements and want to start everything right now. The right idea at the wrong time is not the right idea, though, and that can be hard to see, especially if this improvement is one you have been searching and thirsting for for a long time.

Step 2: Find potential allies

Just like with collecting ideas you will need to collect allies. Who can help you make the change you are proposing? Who absolutely has to be involved? In other words, who do you need to influence?

Pick one person to start with.


Step 3: Get to know your potential ally

If you have a good working relationship with someone and you trust one another then it is relatively easy to convince them to help you try out a new idea if you really believe in its value.

If you don’t have a good working relationship with the person you decide you need to influence be ready to sell your idea—think of what they value, what they need—how would this change benefit them and their current situation. Some people can be convinced purely by explaining the benefit to the organization, but I don’t count on that. If the change that you are proposing doesn't benefit them directly sometimes you can offer them something unrelated instead. Is there a project they are working on that you can help with?

Communication styles are extremely important and we are often unconscious of the effects that our differing styles have on our ability to collaborate. Some people are very formal and others are very casual. Some people want all of the facts and they want them in writing, others would be annoyed by that. Some people want to hear an idea only after it has been fully flushed out, others prefer to hear about an idea at the very earliest stage (later is boring). It is important not to ignore the other person's preferred communication style and it often helps to adapt your style to match theirs while you are asking them to do you a favor.

Once you have thought about all of these things you are ready to go ask!

Step 3.5: Assume they are your ally

I caution everyone to skip this step at your own peril. When you don't have a good working relationship with someone (or especially when you have an antagonistic relationship) it is all too easy to walk up to them with your shoulders tensed and eyebrows lowered like you are ready for a fight. You may even have your come backs or defenses prepared ahead of time. If you do this be prepared to fail at influencing them to join your cause.

Push everything out of your mind except that which has to do with how your interests overlap and your future successes can reinforce one another. Picture them as an ally and then walk in to their office.


Step 4: Ask for it

Make your proposal, ask for their help. Show how it benefits them (and the organization). Listen to what they say in response.


Step 5: Rinse and repeat

The more successful exchanges you make the stronger your relationships become and the easier it is to get a yes.

Dealing with "No!"

If you go around asking people to change their behavior you are going to hear a lot of "No"s. It is important to listen to what they say when they say no, and how they said it and then to reflect on what happened. Was there a problem with the idea or with the relationship or the presentation of the idea? Often a combination of factors. It is important to reflect on the many refusals that you will receive to either come up with a better idea, or a better way to present the idea or to find relationships that need more work and ways to improve those relationships.

Here are some questions to ask yourself:
  • Did you present the idea in a way that made sense to them and their situation?
  • Do you really understand their context?
  • Was it a good idea?
  • Was it the wrong time?
  • Do they trust you?
  • Did they really say no?
That last one is interesting because sometimes they don't really say no, but they also don't say exactly what you were hoping. Often times instead of no they want to discuss your idea, criticizing it or questioning some of your assumptions--listen and learn what you can. A good critic can be one of your best allies sometimes.

But sometimes it is the relationship that is the problem and the other person is never going to say yes to your idea, no matter how good or beneficial to them. You might think the other person is just stubborn/incompetent/uncaring/evil. When they say no it feels personal. The resistance/misunderstanding is often a result of the positions that we hold in our organizations. When I start to view someone as hostle and irrational when they reject my ideas I like to ask myself this question: If you swapped jobs/roles how would the dynamic be different? Would you feel the same way they do? Would you act the same? Be honest.

Often if I can get out from under my anger and frustration I can see how the position the other person is in leads them to react to my idea in a certain way and that I would probably do the same in their position.

In my talk I went through some of the common patterns of system-related tensions and how to address them. Rather than go through them again I am going to just say that you need to read Seeing Systems: Unlocking the Mysteries of Organizational Life by Barry Oshry.

If you are having a hard time forming productive relationships across all layers you are going to have a hard time influencing change. Seeing these patterns helps you empathize, so that you can approach your colleague as an ally instead of an enemy. Seeing is not going to solve all of your problems, but it certainly helps.

Let's get practical


Okay, I want to give some practical tips for influencing change. The first three are general things that you muse do to succeed at influencing your organization:

  • Care deeply
  • Be positive
  • Stay focused

If you don't care deeply about the success of your whole organization and all of the people in it you are going to have a hard time mustering the energy to make real change happen.

Be positive to attract followers. Cynicism wears you down eventually and people are already going to be tired from all the work it takes to change our behavior for the better.

Stay focused: it is easy to get distracted at work because there are always a million things to do, fires to put out. Change is very slow and influence is very messy and if you lose focus on what you are trying to accomplish, well, you are not going to succeed. It isn't easy, but I find that it helps to have some key allies in play to help me stay focused. If you set up a regular meeting with an ally or mentor to discuss your progress, for example, it is a little easier stay focused week after week.

Don't be afraid to ask for help like that. Another common urge when you are championing a new idea or big change is to want to hold on to it like it is your baby. The thing about organizational change is that it needs to grow to be successful and that means you need to let it get too big to fit in your hands alone--ask for help. Getting help also means that you will be less likely to burn out and lose focus before you have reached your goal.

One good way to attract followers without having to hunt them down is to make your efforts visible. In Scrum we like to have information radiators in the team space so that anyone, any teammate or stakeholder or anyone, can walk by and see what is going on--what is done, what hasn't been started yet, what has been sitting in the in progress pile for a week (stuck?). This is also a good idea for your change projects. If you try out your new ideas and have a little success and want to try it on a larger scale, make that visible however you can.

Speaking of success, don't forget to celebrate even the smallest of victories. Cookies, a lap around the building, high five, happy dance, however you and your allies prefer to celebrate, take time to do so. And say thank you!

Whew, I have several more practical tips that I covered at ETE, but rather than write them all out here I'm going to say that instead you should go read Fearless Change: Patterns for Introducing New Ideas by Mary Lynn Manns and Linda Rising. This book is chock-full of simple and widely used tactics for introducing change. All of my favorite tools were in there as well as many that I hadn't tried before that I wish I had known of sooner.

Finally, be patient. I can't stress enough how SLOW change is. Some days it feels like we must be moving backwards we are moving so slow, but you have to keep working and stay positive and put on your long-range goggles before you give up and decide that it is hopeless.

And be flexible too, as the momentum for your change grows and you attract followers to your cause and learn about your organization your idea is going to change. Let it change; learn as you go. "Power is the ability to act as if you can make happen whatever it is you want to make happen, knowing that you cannot, and being willing to work with whatever does happen" -Barry Oshry (Seeing Systems)

Thanks for reading so long! Let me know how you are doing. What ideas are you trying to introduce? What are your favorite tools for introducing change?

Tuesday, January 26, 2010

My First Spring Roo App (two months later)

Getting Started with Spring Roo


When I started working with Roo I think they were on RC 2 and now we are on the full-fledged Release 1.0.0, and I noticed that a lot of the tutorials that got me through those early days are a little outdated since a few common commands and generated output have changed over the past two months. I thought since I borrowed so heavily from the ROOsters before me (thanks BTW, Ben Alex and Stefan Schmidt) I would return the favor and talk about my experience a bit. I haven't gotten around to writing my own step-by step guide, but at least I can tell you more about why I chose Roo and pass along the things I have learned along the way.


I don't remember when I first learned about Spring Roo, but right from the start I was impressed. I cut my Spring teeth working on a few fairly large and complicated Spring webapps for about a year before I met Roo. I did the Springsource training, drank the koolaid; I honestly like working with Spring and I feel at home working in Java, but I did miss the fun and seemingly fast-paced development on the Rails projects from my past. Roo promised to bring back the fun and help to make a lot of the routine work of writing Java code disappear.


I had a little side project that started up in November of 2009; the idea was basically a really simple CRUD app. Three domain objects, some security, done. We all know how requirements do tend to change and multiply (especially when you bring a nice-looking and complete webapp as a demo to the first meeting, thanks to Roo), but this project is under control and I am still using Roo to add functionality (like email sending) and to manage the simple domain objects and their controllers and views.


Gotchas


Oh man, have I fallen into a few holes on my way to getting this app off the ground. Some of them turned out to be ROO bugs (I was working with the release candidates, after all) and others were just boneheaded mistakes on my part. In hopes of helping you avoid the same traps here is my list of gotchas and tips for working in Roo. I'll update these as I get a chance, but here are some of my recent lessons learned:


  • If you push in Roo on your domain object so that all of the entity management code is laying around and love to collect all of your imports under something like javax.persistence.* make sure you have an explicit import for javax.persistence.EntityManager. I usually set my minimum pretty low, so that if I optimize imports (ctrl + shift + o in eclipse/STS) then it will use a * instead of listing imports individually if I have more than 10 or so from the same package. That is normally fine, but causes serious problems for your little Roo app. It will yell at you for not returning the right type on your entityManager() method.
  • I am using some security on my manager methods and I went to write a test and I wasn't getting the results I expected. It was saying something about "can't parse expression" referring to the Spring EL expression that is used in the PreAuthorize annotation on my manager method. Well, it turns out I was using the wrong kind of authentication token to fake someone being logged in for my tests. Here is the real way to do it:


    I call this from my test:

    private void addResearcherToSecurityContext(Researcher researcher, boolean admin) {
         Collection authorities = researcher.getAuthorities();
         if (admin) {
             authorities.add(new GrantedAuthorityImpl("ROLE_ADMIN"));
         }
         TestingAuthenticationToken authentication = new TestingAuthenticationToken(researcher, researcher.getPassword(), authorities.toArray(new GrantedAuthority[authorities.size()]));
         SecurityContextHolder.getContext().setAuthentication(authentication);
    }
    

    and put this in my test application context:
    <bean class="org.springframework.security.authentication.TestingAuthenticationProvider" id="testAuthenticationProvider" />
    

    and put this in my test application security context:
    <authentication-manager alias="authenticationManager">
    <authentication-provider  ref="testAuthenticationProvider" />
    </authentication-manager> 
    

    Simple, huh? It really is. You should know that my Researcher object extends UserDetails and that is what I use for authentication. Now I can write methods where I try to update someone else's account or do admin-y things as a non-admin and make sure that I get an access denied exception and all my data is safe.


  • This is more of a spring/hibernate thing than a Roo gotcha, but I'm going to put it here anyway because it just happened to me again... If you have a manager or, in this case, a test, and all of the methods are transactional. Don't annotate each method with @Transactional because inevitably you are going forget one time and then sit there running your test over and over wondering why it is saying "org.hibernate.SessionException: Session is closed!". You can stick the @Transactional on your class and then you are all set, no matter how many methods you add.
  • Don't forget: the forums and jira are your friends. There is also a seemingly constantly growing list of Roo links and resources on the forum

Thursday, November 19, 2009

Pair Exchange Program

I just finished the first ever pair programming exchange program!



It all started when I was at SDTConf back in October. I don't remember the exact conversation, but the question was generally if software development as a craft takes two programmers pairing together to pass on and practice the craft then how will it ever scale?



Someone jokingly suggested that Corey Haines should get a bigger car--Corey travels all over the place pairing with people and promoting the craft of software development. One idea that I think Corey actually proposed was the idea of a pair exchange.



The idea is simple: we can't all get Corey Haines or another big name in the XP, Agile, Craftsman, etc. communities to come and pair with us, but there are lots of smart people in every town. If you two are both passionate about practicing and improving your skills then why not use each other as a resource? Everyone has a vacation day to spare, take a day and go pair. If your boss will let you, bring your pair partner to work.



I know a lot of developers in Philadelphia and I had no trouble thinking of the perfect programmer to pilot my pair exchange program with. Woody Zenfell III is not only one of the smartest and most professional programmers I have ever worked with, but we make a killer pair. It is like our brains are wired almost exactly oppositely, but we get along really well. I like that he is fun to work with and we get a lot of good work done together. Plus, I know his company already and I know that he is on a team of 1 and is probably missing working with other developers.



When I first brought this idea up to my manager I had reason to be optimistic. My manager sees the value of pairing, even though my team doesn't really practice it much, and he is very supportive of learning and professional growth. I was thrilled when he agreed to the whole thing, both me going to Woody's office for a day and for Woody to come and pair with me and chat with my team. Woody's boss was also game and we were set!



We decided to do one day at each office, back to back. Since this was our first pair exchange we didn't really know what to expect other than that we would show up, work on some stuff and see what value we get out of it. For me, I knew Woody's code base pretty well, having actually worked on it with him back in our consultant days. For Woody, my team culture and our domain and the code base were all new, so a chunk of time in the morning went to talking about those things. Other than that we just paired; it was awesome. At Woody's place we had some tasks that needed to get done and so we did them. At my place we talked about design for a long time and wrote a test that I was having a hard time writing. Lots of great side-conversations happened with my teammate neighbors. It was fun and we got a lot done.



What did we get out of it?



For this first exchange it seemed like we were for the most part exchanging little tips, tricks and techniques that make us more efficient and effective. Woody, for example, showed me how he is creating dependency graphs (actual pictures) for all of the stored procedures and reports in his system, automatically, so that he can more confidently make changes to them. He is also getting those database elements into source control and refining a test and deployment process for them, which is something I hadn't thought of before, but is really smart given how important those reports are to his company. He also showed me captures in EasyMock, which were exactly what I was always dreaming of but never had because we were still using EasyMock 2.3. In return I showed him ctrl+r in cygwin/linux for searching your history. Then he showed me pushd and popd--that's just so handy.



In addition to tips and tricks we had a lot of conversations about how we do things, like how we work with our users and what process we follow for organizing our work and testing and deployment.



At the end of the second day we took several laps and talked about the experience. We agreed that it was definitely valuable and something we want to do again. We imagined that after a while we will run out of tips and tricks to show each other and then we didn't know what would happen then, but maybe that we could use each other as reinforcements for when something really sticky comes up and we need a fresh perspective. We talked about doing it again quarterly or monthly or more randomly. We aren't sure how our bosses viewed the experiment, and of course they would have to feel like they are getting a good deal out of this for them to allow it to continue. A lot of factors went in to making this experience go smoothly: the fact that we have both paired a lot before and with each other before, that our bosses are agreeable, there are no super-high security requirements that would prevent guests from coming over and peering at the code, etc. I am curious how well it would go if I was pairing with someone I didn't know very well.



I would love to hear about more people who are trying this sort of exchange. If you don't have teammates who pair (or teammates at all) you don't have to miss out on the benefits or pair programming--the discipline and the sharing of new ideas.

Thursday, May 21, 2009

Url patterns for servlet mapping

I came across a baffling problem with my servlet mapping recently for my java web application. In this project we generally use extension-based url patterns for servlet mapping. For example:



<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

This means that every request that comes in that ends in ".html" will get passed into my servlet instead of being handled by Tomcat (who would serve it up like a static file). The problem came up when we could not use extension mapping because we had a few .html files that needed to be served up by Tomcat and the rest were dynamically generated by my servlet. But when I tried to use a path-based url pattern it didn't seem to work as I would expect.



Here is the situation: I know that all .html urls that have the word "library" in the path to need to be sent to my servlet and all other .html requests to be handled by Tomcat, so I tried the following:



<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/library/*</url-pattern>
</servlet-mapping>

My servlet is expecting requests to come in like "/library/index.html", and it worked with the extension url mapping, but with the path url mapping it didn't. It was like nothing was getting passed into my servlet. I did some searching and I didn't find anything in the Java Servlet Specification or on any blogs or forums that explained why path matching would be so different from extension mapping, until I came across this post where PhilipT in the comments explained how tomcat was stripping out the matched part: "So it seems that the Tomcat default servlet (6.0.16 at least) drops the servlet mapping and will try to find the file by using the remaining path." This made me wonder if that always happens with path matching.


I also learned from that post that you can map urls back to tomcat from your servlets web.xml file. In our case we haven't tweaked tomcats configuration so the default servlet is called "default". I let my servlet handle all .html files and I tell tomcat to handle things that come through with the words "static-content" in the path. Since the order of precedence is exact matches, path matches and then extension matches this works exactly as I want it to.



<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static-content/*</url-pattern>
</servlet-mapping>

The only catch with this solution is that you have to remember to put /static-content/ in front of the path to the static content that you want served up by tomcat. It is possibly confusing because there is no "static-content" directory on the server. To give an example, the html files that need to be served by Tomcat are for the fckeditor that we use in our web application. When you want to include a fckeditor on a page you have to tell the javascript where to find the fckeditor home directory. For our project it is a directory called fckeditor sitting in the war directory for our application. Previously we would just say that the home directory was /fckeditor/ and Tomcat would know to find it in <war directory>/fckeditor. Now that we are using path matching we have to tell the fckeditor javascript that its home directory is /static-content/fckeditor/, even though it is still physically on the server at <war directory>/fckeditor

Thursday, April 10, 2008

Scrummity Scrum

As a software developer I find agile/lean practices in general to be a really awesome way to go about making awesome software. This means that you always shoot for the simplest thing that might possibly work and rapidly produce working software that you can show to your client, get feedback on, and improve. Lots of features that seem like great ideas in the beginning end up getting de-prioritized or thrown out all together and other great ideas are added. In the end the client ends up getting software that meets their needs at minimal cost---plus it's a fun way to work. Just saying "let's go lean" doesn't cut it though; the process of building custom software is complex and keeping the clients ideas and feedback organized and up to date so that work can get done effectively and without confusion is a challenge---especially when working on teams. That is where different agile tools come in. One of which is Scrum.

A little while back I completed my Scrum Master training in NYC. I really love it. Scrum is about making everything visible. At my office we have a Scrum board, onto which we pin user stories in different columns, reflecting whether they are to-do, in-progress or done. There is also space for impediments and tasks that the team needs to take on outside of the usual work of producing code. Each day my team gets together to check-in about which stories we worked on and which we intend to work on before the next check-in. As stories are completed throughout the day we walk up to the board and move the index card with the story written on it to the "done" pile. If at any time you don't know what to do, you can always walk up to the Scrum board and pick a task from the to-do pile and start working on it. At the end of each week the team gets together to reflect upon the previous week and every two weeks (our iteration length) we make a plan for the following iteration. Planning entails committing to complete a number of user stories before the next planning session.

Scrum also calls for a "Scrum Master" who runs interference for the team so that (ideally) nothing distracts them from completing the work for the iteration. The SM may also interface with the client to create and prioritize user stories for the upcoming iterations.

Friday, October 26, 2007

Thoughts: "The Outsourced Brain - New York Times"

The Outsourced Brain - New York Times by David Brooks. Read it here.
From the article: "...the magic of the information age is that it allows us to know less. It provides us with external cognitive servants."

I have been thinking a lot about the information age (vs. industrial age) and how technology is extending our minds (as it used to only extend out bodies). This op-ed really catches the essence of the current mind-extending possibilities of technology. Rest assured this is only the beginning... or is it?

Is it just the continuation of a trend that started when the first humans made the first tools?

McLuhan was the first to introduce me to the idea of extensions of ourselves (not personally, of course, but through his book "Understanding Media: the Extensions of Man") I was intrigued by his ideas (example: telephones are extensions of our voices), but it didn't really see technology extending my mind in my everyday life until I became dependent upon my cell phone and google to remember my friends phone numbers and where to find web pages and information that I want.

In the NYTimes op-ed (link above) Brooks claims that this mind-extension is liberating and blissful, but McLuhan often mentions that with extensions of man come amputations. Brooks can no longer navigate without his GPS and he feels zen about it, but what happens when the satellites go down? I am not comfortable with living in a world where I can't function without my tools. To use a historical example: the technology of guns extended mans ability to destroy people/things from afar but it amputated his ability to use a bow and arrow. What if then all the gunpowder ran out? As a pacifist I say all the better, but if people had a need for weapons they'd be screwed. Living in a time of transition from one technology to another this is the risk we face.

I hate to make this argument though because I hear it so often with regard to technology in education. Teachers say things like "why should we bring technology X into the classroom? Shouldn't we just stick with the old way of doing things?" Here is the rub, if you want to extend your mind you sometimes lose (amputate) an older way of doing things. I am sure there is a delicate balance between rushing headlong into adopting new extensions of ourselves and holding steadfast to tired old ways, but it is hard to know where to draw the line, especially within education when we are not only making the decision for ourselves, but for loads of children.

What I need is a good argument to convince educators that some technologies are more beneficial to students than traditional methods, others are not. Considering my argument against Brooks' GPS dependency, maybe I need to first convince myself.

Friday, October 5, 2007

Review of American Prometheus: The Triumph and Tregedy of J. Robert Oppenheimer by Kai Bird and Martin Sherwin.

From beginning to end I was captivated by the story if this enigmatic man, Robert Oppenheimer. He was sometimes arrogant, sometimes naive, and sometimes full of deep wisdom. He was sharp and charismatic to some, though others found him cold. He had a great gift for seeing the big picture and synthesizing ideas, which made him an especially effective leader of the scientists at Los Alamos working on one of the greatest scientific accomplishments of the century, the harnessing of atomic energy and the creation of the atomic bomb. He had to accept responsibility for the terrible destruction that his creation brought to the world but he didn't regret what he had done. At first I didn't understand why, but now I see his wisdom. The science which led to the making of the bomb was being realized by scientists all over the world and it was inevitable that someone was going to make it. In Oppenheimer's case, he felt it was urgent to beat the Nazis to it if they were indeed on track to produce it, which it turns out they really weren't, but he couldn't have known that at the time.


What left me most troubled after reading Oppenheimer's story was not his role in the creation of the bomb, but the way he was treated in the 1950's when his enemies sough to destroy him politically because they didn't agree with his pacifism. Oppenheimer was against the nuclear arms race and especially the creation of the hydrogen bomb, a much more powerful weapon than the atom bomb. The H-bomb couldn't really serve a military purpose, it wasn't even a city destroyer, it would destroy many cities at a time. In Oppenheimer's mind it would be more worthwhile to produce smaller tactical nuclear weapons for combat use, but the republicans in power felt that it would be wiser to instead focus on having the biggest bomb possible, thereby deterring anyone form ever attacking us for fear of total annihilation.


It is true that Oppenheimer had a past worthy of inspection for someone so close to so many national secrets, but despite the fact that no one managed to find him guilty of any crime other than making some "poor decisions" he was still left completely ruined by these accusations. Although the Atomic energy Commission "inquiry" found him totally loyal to America, they decided he was nonetheless a security risk. Why? Because he disagreed about the direction America was headed in foreign policy.


As I read the tactics used by his accusers I was shaken by the realization that nothing they did then couldn't happen today. While I don't want to believe that full scale McCarthy trials could happen in exactly the same way today I think a great scientist or intellectual like Oppenheimer could be taken down privately, the way Oppenheimer was, without justice and in the name of security. This kind of injustice does little to improve security, and even worse, it diminishes the likelihood that we as a society are going to come up with the solutions we need to face tomorrows security challenges because we have disbarred, alienated, or scared off our greatest minds from speaking up when they recognize a problem.


After finishing this book I sat and reflected upon the story and the potential for similar injustices taking place today and I wept. This story must be known by everyone.There is no black and white right and wrong to it, in the end Oppenheimer is not the golden hero, his enemies shamed, instead we are left to reflect upon our past and present actions, as Oppenheimer did his, and accept responsibility for our part in it, whether for good or for evil. Our ability to avoid future disasters depends on our ability to understand this and learn from it.


American Prometheus: The Triumph and Tragedy of J. Robert Oppenheimer by Kai Bird and Martin J. Sherwin. Vintage Books, New York. 2005