Wednesday, April 29, 2009

Notes on seven habits of highly effective people

To be rather than to seem.

This quote illustrates the importance of self-reflection. What others think matter little if you know.

Circle of Concern and Circle of Influence

The circle of concern are things that affect you but that you can do nothing about, such as the weather, stock market, etc. The circle of influence is things that affect you, that you can do something about. Don’t worry about the first kind.

Important or Urgent

What is important to most people, family, friends, etc., is often neglected because urgent matters take their place. Make up you mind on what is important to you and make sure that matters that are less important, however urgent, don’t let you neglect them.

Organize Weekly

A smaller time period will force you to only prioritize crisis. The week is a time period that is large enough to give you time for all important things, yet small enough, to give a sense of perspective for what the big things are.

Monday, April 27, 2009

Notes on Pragmatic Thinking and Learning

Andy Hunt has written a good book on thinking and learning. It contains light reading about how our minds work. Here are some gems from it. This is by no means a review of the book it is just my notes on things that I had not heard before or felt I needed to remind myself of.

Always consider the context.

Nothing happens out of context. Nothing! There is no objective truth.

Learn by synthesis as well as by analysis.

This is learning by doing instead of by studying. Instead of dissecting a frog, try to build one, to figure out how it works.

Every read is a write!

This has to do with our thinking and it means is that every thought we think affect our brains and thus all the rest of our thoughts. No wonder thinking positively has profound effects on us.

Our brain works in two modes, linear and holistic.

To take advantage of the holistic part we need to defocus and allow the “back” of our brain to do its work. The R-mode as the holistic part is called cannot verbalize its thoughts and we are therefore forced to use the L-mode to be able to talk about the ideas that R-mode may have come up with. Beware that details may be lost in the process.

Are you making a logical argument, an emotional one or just a familiar one?

It is an interesting question to ponder every time you get into an argument.

SQ3R – Scan, Question, Read, Recite, Review

To get the most out of a book, use SQ3R.

It is by logic we prove; it is by intuition we discover. —Henri PoincarĂ©

It is important to acknowledge that the seed to our knowledge have nothing to do with logic at all.

You got to be careful if you don’t know where you’re going, because you might not get there. —Yogi Berra

Set goals!

SMART – Specific, Measurable, Achievable, Relevant, Time-boxed

Goals that are not SMART are visions, important in the large, but they need to be complemented with SMART goals.

Documenting is as important as documentation.

Writing documentation brings out problems and clarifies what the code or product is supposed to do. The insights from this process may greatly improve it.

Establish rules of engagement to manage interruptions.

Since context-switching is very expensive it is very important for teams to have clear rules for when, where and why anyone can be disturbed.

Thursday, April 23, 2009

Does a Dog Have Buddha Nature?

A Zen monk approached a cow in an attempt to understand the concept of Buddha nature. As he started to speak he noticed a dog wandering, and asked Does a dog have Buddha nature?

Almost before the monk could finish asking the question, the cow said, “Mu!”

Thursday, April 16, 2009

Developer Summit 2009, day 2

A Technical Drilldown into “All Things M” by Brian Loesgen

M is a new modelling language that allows you to create domain specific languages or DSLs.

M today consists of three parts
  • MSchema is a language for defining domain models.
  • MGrammar is the language for defining DSLs.
  • MGraph a data graph consumed by a runtime.

IntellliPad is an editor that understands MSchema and MGrammar. It allows you to define schemas and grammars and view them as graphs. The editor grammar is defined in itself. It seems to be very cool.

The specifications are open and it is possible to implement them for other platforms.

RESTful Enterprise Integration with Atom and AtomPub by Ian Robinson

Atom is the specification of the format.

AtomPub is an application protocol for editing Web resources using HTTP transfer of atom-formatted representation.

Ian demonstrated RESTBucks application that used an event-driven architecture that communicated via rest. Out of three different implementation options, point-to-point, bus and having the consumer pull the events the latter was chosen.

The product management system published the service by publishing an Atom feed. The client the pulls this feed to get the updates. The feed represents an event-stream. The feed contains a link to a previous feed-archive and the archive is immutable and therefore cacheable. An atom-entry represents an event.

Leonard Richardsson’s Web Service Maturity Heuristics

  • Divide and conquer to spread complexity around with URIs.
  • Do the same things in the same way to reduce complexity with uniform interface.
  • Describe special behavior in a standrad way to make complexity learnable with hypermedia.

Taylorism och massproduktion by Marcus Ahnve

In the past man has been first; in the future systems must be first.

Taylor wrote a book about principles of how to get more work done. This was done by having management define the work to be done and then someone else has to do it.

Look out for:

  • Division of labor
  • Best Practice
  • Standardized work
  • Grouping of skills

Leaderful Moves for Managing Team Promises by Deborah Hartmann Preuss

What does your team really care about? Do you know? Do they?

Refactoring Books

Here is a list of the books mentioned in my talk on Large Scale Refactoring.

Refactoring: Improving the Design of Existing Code is the original book written by Martin Fowler. It is a must have to anyone doing object-oriented programming.

Refactoring to Patterns is a very good book written by Joshua Kerievsky. This book is one of the best books I have read on patterns. It shows how some smells in code can be removed by refactoring them into design patterns.

Refactoring Databases: Evolutionary Database Design is a superb book that deals with refactoring databases. If you do any work with databases, you have to read this book.

Refactoring in Large Software Projects is a book about how to refactor large software systems. It is an OK book, but very far from the other refactoring books mentioned above.

The Mythical Man-Month by Fred Brooks is the classic, more than 30 years old, dealing with problems in software development. It is well worth reading. You can also listen to his talk at OOPSLA 2007, which is very, very good.

Developer Summit 2009, day 1

Who do You Trust? Beware of your Brain by Linda Rising

In The Robbers’ Cave Experiment two groups of 12 year old boys were transported separately to a boy scout camp. In the first phase the groups formed identities by giving themselves a name, evolving rules, leadership, etc. In the end of phase 1 the groups became aware of each other. The reactions were strong. This is our swimming hole, they, whom they had never seen were given bad names.

In phase 2 the staff scheduled competitions and nice prizes were given to encourage competition. War broke out! The boys collected weapons and fights erupted.

I phase 3 the staff experimented to resolve the conflicts. The boys watched movies and had fun together. The conflicts could not be resolved.

Finally, the staff had the boys do projects together that were important to all of them. They had to work together to remove a tree that was dangerous to all of them. This pulled the groups together.

Blue-eyes vs. Brown was another experiment where a teacher told her students that brown-eyed children were smarter than blue-eyed children. The blue-eyed children were given collars to make everyone aware that they were not as smart. During the course of that day the children started treating the other group, whom they had known all their lives, badly.

Stereotyping is the act of labelling people.

Managers divide employees into winners and losers as early as 3 weeks after starting to work with them.

We forgive our behavior but not others’. The solution to avoiding conflicts with others is to give them the excuse that you would use for yourselves in the same situation.

When people are stereotyped and told that they are not as good as someone else the prophesy is usually fulfilled.

Since stereotypes are prophetic, the #1 rule for good management: Catch them doing something right.

In the Strange Phone Conversation experiment, men where given a photo and a bio and then had to call her. The men that thought they talked to attractive, smart women, influenced the conversation so much that when the women’s part of the conversation was given to other men and there was a correlation between the expectations of the first group and the impressions of the other.

The key to collaboration can be summed up with: I want to know what you think?

Deception and Estimation: How We Fool Ourselves by Linda Rising

Lisa’s message is: we naturally deceive ourselves and others, constantly!

Smarter people are better at deception, because they can create better “rational” explanations.

We cannot estimate! The only solution is experimenting.

Lean by Scott Bellware

In Scrum we make a plan at the beginning of the Sprint and try to estimate what we can fit into the time-box.

In Lean in contrast you don’t have a time-box instead you have just work. The goal is to eliminate waste. The waste in this case is the planning in the beginning and the work that does not fit into the time-box. This means that we have multiple plans, the release plan does not have to the same pace as the development plan, which does not have to have the same pace as the planning plan.

The Kanban is the glue and it is filled with work items that are produced by the planning process.

Cloud Computing a la Microsoft by Robert Folkesson

Windows Azure is Microsoft’s take on cloud computing. The session was just a demonstration of a new Visual Studio project type for cloud computing. The usual demonstration of point-and-click programming. It would be interesting to see it in work with command-line tools and continuous integration.

The one interesting thing mentioned was that all the different services provided by the Azure cloud are RESTful.

Can I deploy a local cloud? No!

Can I deploy the application with command-line tools or have my continuous integration server deploy the application. Yes

Good Test, Better Code by Scott Bellware

Scott talked about a BDD like framework called Machine Specification or mspec. He also mentioned the BDD goals of tests as documentation and design as well as test.

Specify the experience and not the implementation

Readable Code is not as important as Scannable code.

He also talked a bit of DDD and mentioned that Entities should not have dependencies and that services could. He also said that primary dependencies, like a data access service, should be injected into the constructor and that secondary dependencies, like a logger, should be injected with setters. I can agree with that, its not too controversial.