SCNA The path to craftsmanship as a software developer and more.

Well, I am attempting my first live-blogging session.  I am at the Software Craftsman North America conference in Chicago.

Here are my notes, I’ll refine them later and and plan on updating them as I go.

Updated 2009-08-27.  I added bookmark links to the different sessions. Still plan on editing some of this to make it more readable.

Here’ are the sessions I attended and took notes for:

4:30PM – Craftsmanship Under Pressure, Uncle Bob Martin

CD sent to him.  Macintosh 128 screen.

Let’s talk about the Universe Ends.  Where does it go?  How does it end?

-Heat Death.  Entropy always increases.  Comes out of hawking radiation.  All the heat disappears.  Universe rate of expansion is increase. Kinetic energy is increase.  Conservation of energy.  How can kinetic energy increase if energy is conserved?  Dark Energy.

Dark Energy is not mysterious.  It’s negative energy.  Cards.  What is the mass of the cards?  Its the energy content.  As it grows into potential energy grows.  The mass measurable as the cards lift up.  Take all the rocks floating around in space into the Earth.  Earth weighs less than the sum of the parts, becasue potential enery.  The earth weighs less .  It went into E = mc2.  — Where it is a negative energy.  — Enough of that.

Professionalism.  Abandon all hope.  ARe you a professional?  What is a professional?  How do we define the term?  This is the craftsmanship conference.  Professional vs. Craftsman?  A professional has a different connotation.  Not always the same.  Professional carries a note of responsbility.  A professional is always responsible to someone.  What is a professional?

Defined (at least one aspect)  AS someone who is cool under pressure.

What is pressure?  Why do we feel pressure?  What is a big definition?  People want things from us?  What we want to do code?  We want to code, we don’t care what we code.  they don’t care what we care.  They want somehting else.  In order for us to practice us our art, we have to make promises.

Pressure is the fear we will break those promises.  The commitments that were made on behalf without our input, we will miss.

Ugly truth, we have to make commitments.  You are going to have to make commitments.  You can just waive the agile flag.  We have to make commitments.  We have to eat.  YOu can waive the agile flag or the xp flag.  When you make commitments, you will be under pressure.

How do you manage pressure?

-Under commit, over deliver

-Drink (from audience) LOL.  Uncle Bob:

Learn the trick, always commit to less, and over deliver.  YOur boss or customers. YOu will make your committments and more.  One little bit of strategy:  Technique:

HOw do you estimate?  “badly”  from audience.  We must estimate.  Add 10, multiple 3, goes to the next unit (day, week, month, year, century).  PLanning poker, etc.

Notion:  don’t provide a number.  Give several numbers.  Give a mean and a standard deviation.  We will be done:  the mean is Jan 12, standard deviation of three weeks.  60% chance to fill three week window.

Estimate means Guess.  crowd LOL.

1950’s purt techniques.  forget the diagrams.  the interesting part is the estimation mechanism.  Assign it three numbers.  Estimate Best case (incredibly)  Then do the worst case, if everyone is destroyed in the reborn a century later.  Then the nominal case.  Everything goes about the normal way.  It will take.  With the three numbers, look up purt.  Calculation will give you a mean and a standard deviation.  you add them all up the probabilistic variables.   We are then get a nice spread.  Spread should be pretty wide.  Give the measurement of what you don’t know.  AS we go back, we can narrow it through the different iterations, we have a better estimate of deviation and mean.

In the problem, In almost every case, you are always on the wrong side of the mean.  Even if you iterate, move the mean, move the mean, you will be on the wrong side of the mean.

What do you do?  Manage the expectations down.  —Reaction of most developers:  as the pressure mounts, we rush.  Everyone wants us to rush.  Think about it, very carefully.  is there some way to go faster.  Deliver less.  Work more.  Decrease Quality.

If you rush, Rushing really means, you have to leave something out.  Something you were doing before, you have to leave.  YOu can not write code faster.  You can not increase the rate of typing.  Something has to disappear.  Work more hours, recreate time goes down.  Deliver less, fEatures goes.  Dropping Disciplines, quality decreases.  AS you rush, caring disappears.  When you rush, you are careless.

A professional does not rush.  a professional can move the mean in the correct direction.  We can drop features or scope, but not by reducing quality.  Sometimes, you just have to buy the debt.  Code is not money.  There is no bank you can borrow code from. Technical Debt is a silly notion.  We’re not in debt.  We’re just made a mess.  A mess slows us down.  WE can not go fast by slowing down.

As soon as you go down the dark path, forever will it dominate your destiny.  You can not rush, and think you’ll go back to the code where you dropped exception tests, if tests, analysis.  YOu will respond to bugs, but you will not go back.  you will always be rushing.

So, stay professional, No Rushing.

Principles:

If we are principles:  Principles of Professionalism or Craftsmanship.  Borrowed from doctors.

First, Do no Harm.

First, Do no harm to your code, to the code’s behavior, to the structure, to the customer, to the client, to the product.

Use the powers that you have for good not evil.  Use the powers for defense not attack.  You should know.  QA should find nothing.  If you work your code correctly, they should find nothing.  Our expectation should be no harm.  If QA finds bugs, we’ve harmed the system.

How do we prevent doing harm to function of our code?  How do we know if it works?

Tests:  Unit Tests, Coverage Test, Regression Test.

Every line of code, should be test with another line of code. Every function should have a new test function.  a 1 to 1 ratio.  wE do not manually test code.  We automate those tests.  Tester in Development.  We can apply this as do no harm.  Uncle Bob school of programming:  TDD is critical.

Do no harm to the structure of the software.  Just because it works, doesn’t mean that it doesn’t connasence needs to be properly tuned.  We must be able to make changes to software without exorbitant costs.  No software that lives, stays the same.  The software changes over time. The customers evolve, the purpose evolves over time. The software is doing things utterly different things than the original deployed.

How do you make something easy to change?  DRY, Clean, Simple, TDD.  HOw do you make software easy to change?  YOu change it.  WE design it in small bits.  Force us to make constantly changes.  If it is difficult to change, then we change it.  Changeable software is something that has been change.  Mercifully refactor the software.  We keep changing it.  The very act of refactoring is what makes the system flexible.  The very act of changing is what makes it flexible.

If we are going to change it, we must test it.  Try to attain 90% to 100% tests.  There is no outsourced QA.  1000’s of users,  the tests keep users.

Leave it better than you found it.  (Boyscout rule).  When you check out code, always check in code that is better.  Never check it in dirty.  If you have tests, if you clean it.  You can keep it flexible.  YOu will have done no harm.

Can you do your unit tests after?  Sometimes, it can be done that way. testing GUI’s can be done afterwards.

The time between the code and the test, should be very very small, should be hopefully negative.  (write the test first).  How do you know if you when your tests are done?  When all the tests are done?  What the user smiles?  When people in the back to be smiling (QA, Business Analytsts)?  Automated Acceptance tests.  If you ship a product, because you say, i think we are done, you have lost.

NO HARM.

When are you most likly to harm the system?

When you are under pressure, rushed.  So, the professional:  sits back and will not stop refactoring, will not stop testing, and will have to lose something else.  Is it acceptable to work overtime?  Of course, if it is a small time frame?  a week.  60 hours a week for two months, you are entering the not caring, tired, careless mindset.  What do you make at this point?  Too late.  What do you change?  Cut Scope.  —Professionals know how to have uncomfortable discussions.  They understand it, and they understand the constraints, you will take some lashes.  Move the Date.  — Miss the date, Have the discussion early about the date being missing.  Have it as early as you possibly can.

Kent once said:  when I am feel pressure, I slow down.  I focus even more on my disciplines and be even more careful, write more tests, because of the temptation.

Principle #2 Work Ethic

Not just coding for our own joy.  We will work for our employer and deliver value to our employer.  People focus on how the software is written, beautiful, pretty, clean code.  The temptation is there on the technical.  Deliver value to our customer.  How much time should we devote to our employer or customer?  As much as you are paying for.  40 hours a week.  That’s kind of the number.  Those 40 hours a week is the work ethic.  That’s the property of the employer.  What about learning time?  Employer is not responsible for buying books, sending you to conference.  That’s your responsibility.  Cory Foy – The core of craftsmanship is developers taking responsbility for your own career.  You are absolving your employer to guide your career path.  They don’t buy yoru books, training time, conferences.  YOu should set aside 20 hours a week to work for yourself.  — If you didn’t buy into this, you are not a professional and not in the right career.

Should the doctor go buy books on his own dime, extra hours, going to conferences on his own dime?  If they do that, then we need to do that.

Work Ethic under pressure.  What do we do as the pressure mounts?  40 hours.  Professionals do not abandon their ethic.  You carefully manage your overtime.  If you putting in 50 to 60 hours, then you are losing

Principle:  Know your Field:  Software Developers.    (SOLID)  Mike Feathers.  HOw many do you know the 21 design patterns?  Do you know your field?  If I pull out a doctor?  Can you write down the major bones of the body?  Even if the doctor was a psychiatrist, we would expect.  We should know several languages, static type langugag,e dynamic language, functional language, logical language.  (fourth, everyone should learn fourth)  Structure and interpretation of computer programs book,  Must go buy that.  The lectures are all online. You can see the original authrors, you should know your field, this stuff of software developers.  WE associate the waterfall method.  It was a godsend during the 1960’s and 1970’s.  it added structure to projects, and it kind of worked.  Things in waterfall that still are valuable.  It’s not all evil.  How many do you know:  Book: structure design –  Meiler pages jones book.  Book:  STructure systems analysis.  What decisions got us here.  go back and learn the field to help you know what is next and

Data flow diagram.  Ainse Schneiderman chart.  UML diagram.  Functional decomposition (structured systems analysis).  David Parnise, Accepted testings, 20 years ago (or more) use tables to describes systems.  How many of you can write Fundamental algorithm write it down. quicksar?

Principle:  Continuous Learning.  Professionals have a tendency to never stop learning.  Much more beyond that.  WE live to learn.  wE love to learn.  its a passion.  It’s a passion.  We practice software due to learn.  There is a correlation between software development and musician.  It is over-represented by musicians.   Jugglers are over represented in the software development group.

Different kinds of learning all important.

READ.  Read books, blogs, articles, twitter.  Read all the time.  Constantly reading.  Doing Lunch and Learns.  Do them all the time.  Pick something strange.  It could be something that was completely different.  clojure.  Learn clojure.  Don’t do anything, fiddle with it.  Step outside your comfort zone.  Leave your comfort zone and broaden it.  How many java, ruby, c, smalltalk programmers?  Learn lots of languages.  We’re not java programmers, we’re not ruby programmers.  We are programmers. Imagine artists that purposely chose horrible media to practice their craft.

Video described APL of the words for the game program.  Runs the tests.  Within 5 to 10 minutes, conway’s game of life.  The expressive power in the APL language must be enormous.

Principle:  Practice.   How do we practice?  Musicians. Most of the time, practice is spent at home, spent doing little parts, scales, etudes, backwards, forwards, exercises.  to make them better.  Doctors practice.  You practices.  How do we practice as an industry?  WE haven’t really developed.  We’ve begun.  Kota around the coding around the dojo.  Coding dojo dot org.  Learn some pratice algorithms.  Write the algorhtims.  for the list reversal.  do the bowling game.  Do these pratices.  Game of Life.  TDD as if you meant it.  three or 4 hour.

Martial artists, muscians, athletes, doctors, lawyers.  They all partice.  So should we.

Question:  if we are doctors, who hold oursleves responsible instead of AMA, BAR Associations. Hopefully, we don’t need the big groups.  Maybe we  Create small groups, reference groups, tell the truth about each other.

Question:  why learn quick sort.  It helps and you know your carft.  know your domain.

3:00PM – Test-Driven Learning, Getting out of the Shu box, Bobby Norton

DRW Training Group.  Bobby Norton

How can we make accessible as possible?  By using a learning test approach instead of throwing the pick axe book.  Let’s look at some Ruby code.  I didn’t started at the top.

Starting at the top:  Metaprogramming Ruby.

Starting level one down. “How long will it take me to master aikido?”  Answer:  “How long do you have to live?”

Book:  Mastery:  The keys to success and Long-term fulfillment, George Leonard.

Start at the lowest level.  Path to mastery.  Ho

Know there stuff really well in their own world.  Theemes:  Practice

Pratice isn’t just a verb.  It’s a noun.  Its an accumulation of practice is a results of work.  Practice is something you have.  Something you are.

The Long Road:  The master and the master’s path are one.  So, there is a mastery curve.  Series of plateuas with learning.  happening at new context.  New languages, new companies, new projects.  — The Andy Hunt Pragmatic Learning book.  The Dreyfus model.  Bobby Norton’s impelementation:

People tend to over emphasis their own learning.

Shu Stage:
Novice – Advanced Beginner:  Follow rules and recipes.  Learning foundations.  Advanced Beginners:  applying practices.   together.

Ha Stage:
Competent developers:  troubleshoot on their own, Can solve problems they haven’t faced before.  Not inventing new frameworks.

Proficient:  Can reflect on their performance

Ri Stage:
Expert:  Continually looks for better ways of doing things, Advances the state of the practice, works from intuition, not from reason, doesn’t need rules.  How would you advance the practice of software craftsmanship?

Repeated study is not enough.

Science, Feb 2008.  Critical Importance of Retrieval for Learning,  Karpicke and Roediger.

Keep the pair in the study session and drop from the testing.  Or Drop from the Study session, keep testing session.  Clearly show, testing is not passive.  It’s active thinking which reinforces the learning and more engaged rather than plain repetition.

How you practice is very important more so than just practicing?  Practice means repeated testing and recall, not merely repeated study.

Seeing working code doesn’t lead to mastery. “Search-driven development”  and cookbook programming without testing or without reflection results in career novices.

Reading code does not make one a master.  How much code can you write, from memory?  That’s the real test following instructions from the test?

How can you move from Shu to Ha more quickly implemented?  Recreate the Karpicke and Roediger study in software.

Enter the Shu Box:

http://www.github.com/bobbyno/shubox

Similar generator

shubox learn_ruby

spits out a sandbox, that can be used to learn ruby.  Use the Pick Axe book.  API documentation:  Look at the api, A test driven learning.

rake

tree .

mate .

The idea is to give someone new to ruby to learn about it.  both the built-in libraries and new classes.  Create a bunch of empty testing declarations.  Set some goals for youself.  Arrays of strings.  ranges, Call the API’s, The idea is to drop dead simple test driven learning.  We now have our own knowledge repository.  We can save this sandbox.  Check in to git or svn to see that repository of test driven learning code.  Experiments.  Exploratory tests.  It’s not just ruby.  We could use this a different language.  Try to revisit the test in a week to see if you can re-do it in a week.  Code it from memory.  Often times, unit tests are pushed at the back of the book instead of pushing it in the front of the page.  The idea is to build a new generators.  Java/ruby generator.

Comments from the Students:

Gave you these 9 questions.  Know way to know the way to solve how to solve the questions.  Reinforcing the how to solve the problem.  Can you go back without referencing documentation?  Wise person knows where to find the right answer.  Know what you need to know or master essential skills.

Barriers of entry for students?  with multi-languages?  Is it difficult?

shutting down for battery saving.


2:45PM – The Business of Craftsmanship, Kevin Taylor, Micah Martin, and Carl Erickson

Kevin Taylor, Obtiva
Micah Martin, 8th Light
Carl Erickson, Atomic Object

First up.  Kevin Taylor.  Obtiva.  started as an Extreme Programming Shop.  When Dave Hoover onboard, Dave brought on apprenticeship.  Professionalism, Passion, Learning.

Micah Martin, 8th Light.  3 years.  Consultant to help companies to teach people to write code.  Started 8th light structured, He was a martial artist.  Followed philosphies. Constatntly learing about the craft of martial artist.  Jujitsu.  Wanted to do software as a way to practice from martial arts.  When you study martial arts, you study from a master.  Learn from them everyday for years, then you try different martial arts from different masters.  Hire apprentices that are devoted.

Carl Erickson, Atomic Object, started summer 2001.  24 people.  Started with Extreme Programming practices.  University software development was ineffective.  All of the stuff that needs to be done right that is independent of technology and domain.  User Experience is not extended.  Pride in craft, learning through doing.

Questions:  Caring about the craft, continuously improvement.  How do you continuously learn new technology as a return on investment?  Micah says learning is critical, lunch and learns, send to workshops.  Carl states that you rotate clients, rotate types of technology.  There is a struggle between utilization and fun time for employees.  Kevin looks for people who already learning who are passionate about technology.  As far as conferences, standing policies, with experiments, journeyman swaps.  Instead of setting them to a conference, send them to a different company with mutual swap.  Chicago Tribune ran a program, swapped two employees.

Questions:  How beneficial was that to the business?  Why do it?  Kevin.  cross-pollinate.  Is the side conversations that make fun and learn.  Micah sent someone to obtiva.  Lost money on the deal, but that was a good investment on the project.

Question:  Craftsmanship, How do you sell clients with apprentices working on projects?  Fake until you make it.  Built a company.  Carl, then said that as you go, they got busy, the apprenticeship, you need to find a journey or master. A model that makes a master or journey attach them personal responsiblity apprenticeship.  Micah doesn’t charge clients for apprenticeships.  Clients were easy sell.  Kevin @obtiva said these tips:  it has to be structured.  If no ownership from the master/journeyman with an apprentice.  There is not a value.  The second step is hire the appropriate apprenticeships.  Often times, the apprentices have been in the program that is hired out.

Question:  Apprenticeship, How does someone senior in one area branching into a junior area?  Kevin – Obtiva states:  No matter where you are in your career you can be an apprentice.  To be successful, you need to let go of your pride.  Surrender your pride so you can learn from the master.  How is apprenticeships different from intern?  Apprenticeship is part of the team.  Apprenticeship is more like a junior developer.  What’s more of the potential versus credentials?  Look for diamonds in the rough that obtiva can be polished.  Junior developer is ready to hit the ground running with tasks ready to run.

Question:  How / When is an apprenticeship a failure or success?  Micah:  Evaluated:  not getting results.  Carl says we’ve had about 25 or so apprenticeship.

Question:  Use Apprenticeship, as a community outreach, to open a development world?  Academic is a good thing to do for the students even if they are not hired.  Even the ones that are not worthy, they go away happy.  Micah, learning.

Question:  Directed learning:  How is it different from paired programming?  Is the directions?  Joel on Software, the stack of books for the internship.  What is more formal? There is making coffee (joke).  Carl:  Given apprenticeship reading and writing assignments.  Bring it together.  Try to experience the embedded, web, work.  Micah:  tries

Question:  Shop that isn’t shy about software craftsman.  How do you compete with other shops?  What’s the face to your clients?  Kevin says:    I love outsourcing to India, because they often come back to the U.S. looking for work here.  It’s more of a team dynamic.  Micah:  a lot of a their clients come from failed projects.  Craftsman gives them competitive advantage.

Question:  Do you do work offsite?  Carl:  do everything in-house if we can.  One of the reasons the apprenticeship program works well.  Does the master then review the work.  What’s the ratio of Masters to apprenticeship?  How much does non-billable time to master?  No permanent pairing.  One Mentor for each apprentice.  It’s the mentor’s job.  Carl:  someone is mainly responsible.  The transition of someone out of apprenticeship.

2:00PM – What if Bacteria Designed Computers? , Ward Cunningham

@wardcunningham

What challenge is?  What can I show you that is new?  Playing microprocessors.  Multi-processors out of microprocessors.  New Way to programming, even if the old way is programming is good.  This is different.

Inspired by Biology.  Any cell has a bio-layer.  Receptors that receive signals and then mechanical shift and catalyze a reaction.  One receptor will then trigger a signaling cascade.  Instead of wires.  It does it by chemical concentrations in fluids.  Wired up little computers with simple.  Signals on the outside of the wall.  Computers will work on receptors.

Graceful motion of motors of a flag waving.

Cybords.  All the chips are the same, just different programs.  Powered by batteries.  Any parts can use electricity.  Wires are prototype.

Bynase.  Invented his own protocol.  Example.

send noise. :   while true  if value < random pulse low else pulse high wait for some micro second.

receive noise:    result = 0  for 100 times if input is high result = result + 1

In tenth of second, I can pass large values into kinetic art.

Want to work quickly.  One Day Projects.  Construction Technique:  Skin wire twice the bare wire you need, then slide the insulation.

Very interesting slideshow on the soldering of light, magnet, 8 pins, Have more good fortune to Build small, because 8 pins come together.

How to show three pins to show numbers to make interesting puzzles to solve.

He has open sourced arduino’s.  Recommends reading Science magazine.  article, March 2008.  Pulse generator.  blinking LED.  Chemical reaction of dynamics, engineered circuit of concentrations of a biological inspirations.

Question:  How similar to Fluent interfaces?  Not sure.  But from explanation, the cascading nature of biology sounds similar to fluent interfaces.

Question:  How to find the chips for a buck?  digikey.  Dorkbot.  Build out of radio shack parts.

—Second,  Why do it?  For the experience.  Love XP programming.  When you are resource poor, its not about algorithms.  Created a new assembly technologys  Codosome-2:    Java program, models adar programs.  Bring Agile development and TDD with junit, applications that run on a $1 part.  that simulates the code out to the part.  Not running java.  Build model, test it run it java.  Then burn onto the part.  He reinvted Lisp into java.  Refactor into intellij to simulate the part of the sync pules.  Instead of writing output bits.  Its just writes to printscreen.  Then, he converts it to the bits of the piece.

—Next?  Mu-fourth Prototype.  Wiki for building programs for these minimal hex code.

11:30AM – Grand Unified Theory of Software Design, Jim Weirich

@jimweirich Edgecase LLC   Slides Jim Weirich

Caring about your code.  Technical Interviews over the phone to come up with level of technical knowledge.  Looks for passion.

What do you look for in a good design?  What criteria do you use between design a and design b.  —Most answers are ummm?  Articulate the design.

Starts to talk about Light, Electricity, Magnetism.   electromagnetic waves in Maxwell’s equations.  Advising people not to go into Physics in 1800’s.  Everything is figured out.  Crowd LOL’s.  We have a good understanding of matter.  Describes the matter.  1 in 3000 particles tended bounce in radically different angles.  Totally unexpected.  Matter as not perfect.  Raisins in the oatmeal.  Description of Atom.  Proton surrounded electron cloud.  More forces Strong Nuclear force, Weak Nuclear force, Gravity, Electromagnetism.  Can’t we combine them into a single theory?  Search for this theory:  Grand Unified Field Theory of combine the four forces.  The Goal of Physics.

Back to “What do you look for in a good design?”  Simplicity.  No surprises.  Readability.  Satisfy Functional Requirements.  Good collaboration between implementation.  Beauty, Flexibility, Reusability, Sensibility.  Separation of concerns.  Some principles:  SOLID, Law of Demeter, DRY, Small methods, Design by Contracts.  Way more forces.  Is there an overall theory that brings these principles.  What atoms are underlying all good software designs?

Sheldon Jordan.

Control Coupling

Sheldon, Would drop by books.  Coupling and Cohesion.  Types of Coupling:  Less Coupling (good) no coupling  vs. More Coupling (bad)  Content Coupling.  Control Coupling.  Method has a “flag” parameter.  The flag controls which algorithm to use.  Symptoms:  Method has an or in it.  Example:  Array.instance_methods  (returns the list of instance methods).   Control Coupling – Examples:  Include the superclasses?  Array.instances_methods(true)  Array.instances_methods(false)

Failed to extend well to Objected Oriented solutions.

Connascence

What every programming should know about object-oriented design, By: Meilir Page-Jones   1996.  — Third section got into what is a good design. Connascence. Two pieces of software share connascence when changes in one requires a corresponding change in the other.

CoN -Connascence of Name. Agreement between the name of the definition of the name of method. Locality is important.  Rule of Locality.  Modules/Classes vs external.

CoP -Connascence of position.  Order of elements matter. Small number not a problem.  Large number.  A solution is convert a Connascence of Position to Connascenceo f Name.

CoN < CoP  Rule of Degree convert High degrees of Connascence to weaker forms of Connascence.  Convert.  Rails work.  Finders takes keyword arguments.

CoM -Connascence of Meaning. Example:  Method of Value 1 or Value of 2.  If “1” then given, If “2” then not given.  Must be consistent.  Easier solution is convert CoM to CoN.  Use Constants.

Contraneascence. Mutual Exclusive values.  example:  XML Class library – Node class.  Graphing Library.  Node class.   Namespaces to help avoid name conflicts.  No answer in ruby.  Selector Namespaces.

Connascence of Algorithm — Example of DRY:  or using remote library.  Oops, I missed this, checking email.

CoT – Connascence of Timing. Racing of Timing.  Mutual Exclusion.  Lock Threads.  Transactions.

CoE – Connascence of  Execution. Example:  swapping of lines of execution.  Orders of execution are required.

CoI – Connascence of Identity.   —Two copies of an object in memory.  Two different instances that are synchronized.  Objects that you are operating is important.  Rails doesn’t offer identity mapping.

CoV – Connascence of Value  — Values are related within class.  Constraint programming.  example:  Rectangle.

Lots of Rules of Connascence

Static vs. Dynamic Connascence

Summary:  Connascence can possibly be the start of a Unified Theory of Software Development.  This slide is on gituhub.

10:45AM – Demonstrating Responsibility:  The Mindset of an Agile Leader Craftsmanship, Christopher Avery

@ChristopherAver

ChristopherAvery.com Slides:

Technology Transfer.  How to move from basic research to application.  Rapid High Technology.  Relationships between everyone and facilitating from basic research to industrial strength.

Accidental Expert.  Shared Responsibility.  When a team really clicks, or any relationship, There is a felt shared ownership of the outcome of the project.  If shared responsibility is not there, We’re not sharing, helping, trusting.  If the shared responsibility,

His Career has been how to teach smart people to learn  shared responsibility?

What is personal responsiblity and how does it work?  How the Mind works.  Background processing that goes on behind the scenes.  something we don’t normally pay attention to.

Quote:  No problem can be solved from the same level of consciousness that created it. –Albert Einstein.

We create our own problems.  We usually live in our intellectual mind.

The Leadership Gift – Unlocking your minds power to.

How you respond to a problem.  What happens when things go wrong?  When things are going really good.  we don’t ask ourselves: Who did this to me?

Estimates to 100’s to 1000’s times a day does your mental process goes on.

  • Step 1:  Trigger.  Problem – Anxiety,  Uh-oh, Crap, Doh!  we’ve got a problem.
  • Step 2:  Lay Blame. (Attribution process).  The first step:  mind offers an answer.  it’s not my fault.  its someone else.  There’s nothing we can do to fix it, because its someone else.  The problem stays, until the other changes.  This is merely a mental state that is transient.  It comes everytime something goes wrong.  —Where’s my keys.  First thought?  Who took my keys?  The milk is empty in the fridge, Who emptied the cartoon?  Who did this to me?
    –Its not resourceful.  You can either get stuck there at blame or get off of it (blame)!
  • Step 3:  Justify. Story, nothing to do.  Victim of circumstances beyond my control.  Cause effect scenario.  Come up with excuses.  The reason we blame and justify is because we’re human.  There is nothing wrong with this process.  This the way our ego protects ourselves.  It’s not a resourceful state of mind.  Its a coping state of mind.  Research says:  our emotional mind.  The smarter you are the better stories you weave why there is nothing they can do with this problem.
  • Step 4:  Shame. I must have done this to myself.  You feel bad.  “I’m stupid.  I’m a dumby.” Negative self-talk.  It’s a transient state.  We can get off of this state.  We should spend very little time.  The personal shame says that we’re something wrong with me.  The assumption says if you think there is something wrong with you, there is nothing wrong with you.  You’re human.  Normal conditions for everyone.
  • Step 5:  Obligation. You have to do this.  You are required to go to meetings, paperwork, some thing you have to do.   Shame and obligation gets things done.  It’s barely adequate to get it done.  Want to vs. Have to mode.  Barely adequate to get a pass.  These are all coping states of mind.
  • Step 6:  Responsibility.  We feel resourceful.  We feel at cause.  On top of our tasks.  a sense of ownership.  We don’t get to responsibility until we get through these paths.
  • Other Steps:
    • Quit: when shame and obligation are too big.  you just check out or just quit.  When you are on your conference call, you are just not getting what you want.  you don’t know how to check in.  So, you simply check out.  if you have highly engaged customers.  Will predict profitability, stock price, — To get Highly engaged customers is to get Highly engaged employees.  Engages.  5 point lickert scales.  20 employees will 5.  50% will do 3 to 4 (show up for paycheck).  25% are checked out employees not engaged in there business.
    • Denial:  Blissfully ignorant of the problem.

Growth only happens in the space between the Obligation and the Responsibility.  Refuse to blame, Refuse to justify, you Refused to Shame and beat yourself.  Learning and growth happens at Responsibility.How to

3 keys to Responsibility (Tool)

  • Intention – The Winning Key
    Intend for the rest of your life, Get to a position of responsibility.
  • Awareness – The Change Key
    Simply aware of when you are in Blame, What language are you using?  What is it like to be you in each of your mental states.  Catch yourself)  Copy of the poser.  Wallet Card.  Hang the poster.  Figure out your
  • Confront – The Truth Key
    Admit, that you are stuck in your own perspective.  It is a point of view.  Face yourself.  What is true that you are not saying.  10,000 times more difficult than the first two keys.  We avoid this like the plague.  This is where the real growth lies.  When you are willing to do this, you can create positive anxiety.  Pertubation (spelling?)   See things in more complex.

Growing anxiety vs.  Coping Anxiety.  Growing.

Every upset is an opportunity to learn.

See Results slide.

10:00AM – “There and Back again”  (Staying technical throughout your career), Dave Astels

“How to Mix your Metaphors”

Twitter@dastels  –   dastels at engineryard.com

The tweet of SCNA presenters looks like Software Jedi.  Themed  Sta Wars intro.  Excellent theme.

“Then you were asked to lead a team.  …. this is the path to the dark side”

Coders who love to code.

Managers who love to manager.

Don’t Mix them Up!   Do what you love.  Stay Technical.

In and out of Technical Roles.  There and back and again.

Overview of Dave Astels Career

(TDD Book)

Big Financial Client, Money grab.

Not Fun to work at Google, Internet Search Giant.

Craftsman – Understand the Fine Details & Big Picture.

Craftsmanship, builds people up via Apprenticeship, Journeyman, Master

Mentoring:

Skills need:  Mad Technical Skills & Mad People Skills.  Uses Obi Wan Kenobi Wan:  helps with resistant programmers and clients

So what do I do to stay technical?

  • Stay Current:  Tons of books, Pick your area.  Ruby and Rails.  its hard to stay up.
  • Side Projects:  Know your day job that you really know well.
  • Form a community:  that you are growing inside of.  Be the worst person in the band, that you can learn from the community.  People better than you and worse than you.
  • Open Source:  Find mentors, learn code.
  • Go to Conferences:  Learn alot, Speak at conferences, Networking.  activities in the halls thats what makes or breaks a conference.  Hang out in the lobby to talk to peer groups.
  • Learn New Languages:  Pragmatic Dave:  Learn a new language every year.  Learn something totally outside your comfort zone.  Even if you dont’ apply it.  It helps you think about programming from a new perspective.  C3P0
  • Deep Technology Dives:  Know what are doing inside and out.
  • Seek a mentor.  Want someone to learn from.  Be the worst person on the team.  It could be someone you work with, Remote pairing, Code Reviews in Open Source.
  • Be a mentor:  The process of explaining something enhances or solidifies.  It also helps when the mentoree pushes back.
  • Learn to say no:  Trend of companies (enterprisey).  You’ve been here 5 years.  Do your code.
  • Change Jobs as Required:  Give what you can, Get what you can.  Move on when you feel its time to move on.  If you are good, it doesn’t matter about the economy.  Don’t be afraid to change.  If you are stagnating, Look for another opportunity.
  • Change your Organization or change YOUR organization
  • Resistance is not futile:  If you want to code, the code.  We need more patinent coders.
  • What would you rather be doing?  -Chad Fowler  (Passionate Programmer Book plug)

Questions:

Why did you leave google?

I wasn’t being as technical as he wanted to be.  He couldn’t use ruby.  Read post.  what would you rather be doing?

Who are your mentors?
Kent Beck.  Ward Cunningham.  Pete Code?  Aslak? Dave Hoovers, Obie Fernandez.  Team at Thoughtworks.

Who are your mentees?
Presumptions, taught Dave hoovers Coaching on teams.

Language of the year?
–Brushing up on Ruby skills.  Merb project.  Data mapper.  Haskell or Clojure.

09:00am –  “Opening Keynote: Swimming Upstream, Sprouting Legs, and Running Free”, Ken Auer

sidenote: I showed up late.  So, I missed the first 20 minutes.  Chicago Rainy weather traffic weather, but it was worth talking to my son and daughter this morning for five minutes longer.

Old Gaurd:  Using Smalltalk in real applications when others say they can’t do it. The Old Guard saying “you can’t”.

Visonary:  Reaching out and going out  for the Ideal so much, that miss the boat on the end goal.

Pioneer:  Considers himself as a pioneer.

Interesting side take:  Is that In the Bible? — slides include picutres from freefoto.com In his career he starts reading the bible.   Thinking to himself: By what standard are we to live?

1983 – 1988: Kent Beck, Ward Cunningham, talks about Design Patterns. These have a clue. Career advice. Listen to Ward and implement.

Reed Philips: Talks about how to provide value for the customer. The customer matters. He valued his employees more than customers.

Sam Adams: Any idea you had given to the cosmic cube, and only implements the good stuff. equating that to coding in smalltalk. Write code in front of people, you don’t have to perfectly in front of the customer. Make it Run, Make it Right.

Lynn Fogwell: Began his adventures in Pair programming,

Josh Mcdowell: Examine evidence of Christ historically.

Tim Bunn & Donald Dickens: Elders: What does the bible say?
Go back to the bible says. Actually follow what the bible. Many churches and people do not do that.

Dave Thomas: Object Technology International: Smalltalk, lets have it run everything from watch to a mainframe.

————–
Training Upstream

-Train other people to implement. Not impressed by college educated gradutes except Carleton University and UIUC.

Has learned more by code reading, reviews, mentors & pair programming.

One week classes weren’t enough.

implemented: Smalltalk apprentice programs: 2-3 “apprentices” worked with 1 mentor. Learned while working on their own project. One week training class

—–

Hope changed my life: (daughter)

Learned to Question: college education, government’s role, traditional church views, Mainstream worldviews.

What does God have to say about it?
Training in the ministry, not for the ministry.

Realized: MY responsibility to train my daughter vs. External Teacher. What do we do? I was brought in the stream. How do I teach differently?

Greek Model education: Take out of them regular environment doing it with 30 people at a time. Make it kind of work for everybody. Versus Homeschool which is individualized.

Old Test Culture: Duerotnomy 6:

Family Time is BIG. No conflict between education, work. Family Time is integrated into everything.  Children learn at Parents work.

Vs.

Modern American Culture:  Family Time is an after thought.  Work is separate. Education is separate
Go to School at Night
Don’t bring Kids to work.
Work? and Spiritual?
Family Time is not central.

——

Striking Out on my Own.

“Professional Business people” – Turned a company that had zero turnover into High turnover that “make a profit, lazy people”.

1996 – 1997: bought computer at home. Create a more integrated life. A great buyout opportunity from KSC… waited. waited. –Deal fell through. “Your kidding” I wish I was. —-

Got Advice:
Four Metrics: (to measure your success of business, only one is about money)

* $tandard of Living
* Time for Family / Ministry (30 hours / week of work)
* Travel <= 12 Days / Quarter
* Work w/Innovators (Entrepreneurs & Intrapreneurs) in close teams.

How did it do?

—More money than before. Met his metrics. However, not How do I get the close teams things happening?

Apprenticeship Experiment:

— Bring up classroom-trained High Schoolers. Realize doesn’t work who don’t know how to teach themselves without motivation:

-Motivation / character
-Willingness desire to server
-Ability to Learn
-Fundamentals of Programming

———–
XP Experiment:

Software Studio: OOPSLA

Find Perfect Apprentice: Any homeschoolers looking for programming?

1999 – Opporunity: XP progroject. Lots of Training. Performance issues. Classroom, Explain, how collection worked under the seems: Taught entire data structures course in one hour and everyone got it.

————–
Continuous Learning

— Idustrial Revolution: We let the technology decide how we’re going to live.

pre-industrial resolution looked like Time.

TRY IT: Make it Happen:

Change the culture: One Step, one person.


String of apprentices.

When It Gets Tough: What do you do? Swimming up stream:

Examine your motives. If they are wrong, fix them. If they are right, keep at it. Fight through it. Take a step back in one direction, to go forward in another.

Role Model Studios: Work together as a family.

rolemodelstudios.com

Built a house that worked towards integrated home.

12 year old. 15 year old apprenticeship. Running Free on Rails. —

(Introduction to programming) (white belt)

Learn to Program (yellow belt):

I don’t believe we Came out of the mire, but we need to!

Other Notes from other Attendees:  http://www.somethingunimportant.com/

One thought on “SCNA The path to craftsmanship as a software developer and more.

  1. john

    i mistakenly came across your blog while searching for something else.but found this post useful hence decided to drop a line.very well done.i dont completely agree with you but still a good agrument.

Comments are closed.