Software CraftsmanshipMeeting #1http://www.flickr.com/photos/renfield/17375998/in/set-388814/
Why?Enjoying Codinghttp://www.flickr.com/photos/declanjewell/2687934126/
Why?Enjoying Constructinghttp://www.flickr.com/photos/cibomahto/2133046342/
Why?Something Missinghttp://www.flickr.com/photos/ceanandjen/2442627144/
Why?Time to Markethttp://www.flickr.com/photos/aarongeller/360135019/
Why?Fire Extinguishinghttp://www.flickr.com/photos/thenationalguard/4443666692/
Why?Enjoying Constructing?http://www.flickr.com/photos/wwworks/2475349116/in/photostream/
Why?No Mentor, no Coachhttp://www.flickr.com/photos/dirkhansen/3235465927/
Software Craftsmanship GroupSoftware Craftsmanship in Israel
http://www.linkedin.com/groups?gid=25784491st Meeting of the Software Craftsmanship GroupIntroduce Software Craftsmanship GroupObjectivesSoftware Craftsmanship ManifestoWhat is “Software Craftsmanship”?PrinciplesHands OnCode KataThere shall be code!!!
How?Long Journeyhttp://www.flickr.com/photos/philliecasablanca/2052728068/
What?Craftsmenhttp://www.flickr.com/photos/34094515@N00/2554591721/
Software CraftsmanshipPrincipleshttp://www.flickr.com/photos/renfield/351556388/in/photostream/
ChaosWreckagehttp://www.flickr.com/photos/bobjagendorf/4122137519/
Software CraftsmanshipAgile Manifestohttp://agilemanifesto.org/Manifesto:That is, while there is value in the items on the right, we value the items on the left more.
Software Craftsmanship“The Book of Five Rings” talks about mastership in martial arts.Surprising, but:“People usually think that all warriors think about is being ready to die…”“The martial way of life practiced by warriors is based on excelling in anything and everything.”
Software Craftsmanship“The Book of Five Rings” talks about mastership in martial arts by comparing a master warier to master carpenter.Master Carpenter has:A duty to understand in state and local lawsA knowledge of different measurements, designs and all sort of structuresA knowledge of the materials being used for a constructionA knowledge of different tools of workAn essential habit to “sharpen” the tools and exercise on small scale the habits of his work
Software CraftsmanshipSoftware Craftsmanship Manifestohttp://manifesto.softwarecraftsmanship.org/Manifesto:>comprehensive documentation> following a plan> processes & tools> contract negotiationThat is, in pursuit of the items on the left we have found the items on the right to be indispensable
Software CraftsmanshipHow?Short IterationsReadable Code (OOP Best Practices)Test Driven Development (TDD), Unit Testing & Acceptance TestsIterative Design (SOLID & OOD Best Practices)RefactoringAutomatic Builds / Continuous IntegrationAutomate Every Possible ProcessIDE & ToolsCode Reviews / Pair Programming Apprenticing Exercising Deliberate PracticeLearning TechniquesCode KatasProductive PartnershipWell-craftedSteadily adding valueCommunity of Professionals
Short IterationsProductive PartnershipReally Listenhttp://www.flickr.com/photos/renneville/3358544222/in/set-72157612666319208/
Short IterationsProductive PartnershipEstablish Trusthttp://www.flickr.com/photos/pagedooley/1303402061/In God We Trust, All Others Pay Cash
Readable CodeWell-CraftedNewspaper ParadigmThe code should be written as a newspapers’ articleRereadDraftshttp://www.flickr.com/photos/blackcustard/81680010/
TDDWell-CraftedValidate Expectationshttp://www.flickr.com/photos/nyuhuhuu/4442144329/Safety Net
Iterative DesignWell-CraftedSteadily adding valueSoftware Development isn’t a Jenga gamehttp://www.lostechies.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/SOLID_5F00_6EC97F9C.jpg
RefactoringRefactoring(Noun) – A change made to internal structure of software to make it easier to understand and modifywithout changing its observable behavior.(Verb) – to structuresoftware by applying a series of refactorings without changing its observable behaviorWell-CraftedSteadily adding value
RefactoringWell-CraftedSteadily adding valueRefactoring in nutshell is a method to adjust changes, reuse the code that was developed in previous iterations and add new functionality to existing code without “breaking” software's external behavior
Continuous IntegrationWhat is Continuous Integration?Integrates source code and runs unit tests after each commit of code to the source repositoryNear-immediate feedback to the developer from the authoritative source, the system itselfWell-CraftedCommunity of Professionals
Continuous IntegrationWell-CraftedCommunity of ProfessionalsContinuous IntegrationContinuous Integration builds don’t need durable build products to be beneficial. They are a way for a developer to have a conversation with the system to gain reassurance that they have done their partDaily BuildsDaily builds generate deliverables. They result in something tangible: something for QA to test, something for product managers to review, and something to reassure team members that they are in fact building a product. Because of the external audience, the daily build is a formal event, a mini-milestone that your team should hit without fail. Breaking the daily build is something that generates blame and often consequences, such as becoming the build mother or being awarded a dunce capUse them BOTH
IDE & ToolsCommunity of ProfessionalsThere is a time and situation in which the tools are appropriate
Code Review – Important ObservationCommunity of ProfessionalsTime Restrictionshttp://www.flickr.com/photos/mike-bensalem/3023717032/
Code Review – Psychological Barrier - ICommunity of ProfessionalsHard to concentrateFocusing for more than a few dozens of minuteswithout any recessionis hardly possiblehttp://www.flickr.com/photos/txd/2681183845/
Code Review – Psychological Barrier - IICommunity of ProfessionalsHard to understandTo read and to interpretsomebody else’s logic (code)http://www.flickr.com/photos/dhammza/91435718/
Effective Code ReviewCommunity of ProfessionalsHow?Descriptive AbstractFocusTop-Down OverviewBottom-Up ReviewRead & Communicate“Drive” the code“Understand” the codeSearch for: Code SmellsViolations of OOD and OOPViolations of Code ConventionsComprehension
Pair ProgrammingCommunity of Professionalshttp://www.flickr.com/photos/pokerbrit/3468717396/
RolesDriverTypes commands or writes the codeExplains actions takenConsults NavigatorNavigatorWatches & navigates the driverAsk questionsConsults DriverCommunity of Professionals
ApprenticingCommunity of Professionalshttp://www.flickr.com/photos/mikaelmiettinen/3326060843/
ApprenticingCommunity of ProfessionalsDefine a RoadmapExecuteExplain Loudly and ThoroughlyGive ExamplesAsk for the Opinion+Supervise Projects+Point to Educational Materials
ExercisingCommunity of Professionalshttp://www.flickr.com/photos/deerwooduk/1690299732/
ExercisingCommunity of ProfessionalsDeliberate PracticeMusicians (Craftsmen)Open Source ProjectsLearning TechniquesPodcastswww.reversim.comwww.se-radio.comhttp://softwarecraftsmanship.libsyn.com/index.php. . .Blogs... BooksRead at least 2-3 books each yearLanguagesPrinciplesBreakable ToysWrite your own projects (probably supervised)
Code KataKataA Japanese word describing detailed choreographed patterns of movements practiced either solo or in pairs.Most commonly known for the presence in the martial arts.Code KataWas first introduced by Dave Thomas (http://www.codekata.com/)Practice of the same methods, solutions and activities to a perfection. Practice of the same problem, tackling it each time from a different angle or with a different solutionCommunity of Professionals
Software CraftsmanshipHow?Short IterationsReadable Code (OOP Best Practices)Test Driven Development (TDD), Unit Testing & Acceptance TestsIterative Design (SOLID & OOD Best Practices)RefactoringAutomatic Builds / Continuous IntegrationAutomate Every Possible ProcessIDE & ToolsCode Reviews / Pair Programming Apprenticing Exercising Deliberate PracticeLearning TechniquesCode KatasProductive PartnershipWell-craftedSteadily adding valueCommunity of Professionals
Next Meetings of the Software Craftsmanship Group – A SkeletonGatheringDescriptive Presentation (~1h)Hands OnCode ReviewsPair ProgrammingCode Kata
Contact Infohttp://www.linkedin.com/groups?gid=2578449
http://www.irefactor.net

Software Craftsmanship - 1 Meeting

Editor's Notes

  • #3 Always enjoyed coding.“Piece of the mind” when writing a “well” piece of code.You probably understand a “well” piece of code, because when you see such one you recognize it.
  • #4 Moreover, enjoyed even more to construct things and to see them connecting together.
  • #5 But, something was missing: It’s like having you breakfast's cornflakes with a milk, just without the cornflakes.It’s a feeling / struggle
  • #6 When “entering” a real job the “Time to Market” presence confused all the perception of the software engineering.Though it was always wrapped with a real beautiful context (like the watch here) the purpose still was to constraint almost any action to a very limited time.Well it pays the bills – what we need here is something working, not a well crafted == beautiful softwareThe problem is that the business mistakes and calls a well crafted software as a beautiful software.a) In some places, like the web a non “beautiful” site actually means less revenuesb) In most of the other places, the “internal beauty” is the one that really importantIt’s similar to buying a hardware tools – you don’t need your hammer to be beautiful – just robust, easy to work with and long living.
  • #7 Needless to say, that I found myself doing somebody else job…
  • #8 Did I say, enjoying constructing? Most of the time I did crate a “lego”, though I am not sure I succeeded in combining it.
  • #9 But most importantly – I couldn’t find a mentor that could teach and instruct me.The “Manager” as a mentor?“Let’s bust their heads” and we will for sure succeedNext, most of the people decide on their own promotion - after 2 years the people start calling themselves “Consultants”Finally, technical people are promoted to be managers, but don’t know how to motivate and drive Or politicians are promoted to be managers, but they don’t know the technical staffHow many Systems did you see during your lives?How many architectures, designs and truly successful solutions did you apply?How technical you are? Even if you do know how to apply an architecture, without coding each day and solving day to day problems you will have only a very superficial overview. A mentor is needed. Once who teaches Once who cares Once who doesn’t blame
  • #10 If we combine together, time to market + understanding of what is the good practices, patterns and solutions and having mentors  this will drive the Group I wanted to establish
  • #11 This meeting’s objectives are to layout the future meetings that will allow us to become Software Craftsman.Therefore, the current meeting will be short and won’t be the rule.There shell be code!We will review the Software Craftsmanship Manifesto and discuss what does it mean in general terms.We will finish with a Code Kata (more in the future)
  • #12 In order to be truly great in our profession – there is a real need of hard and long work
  • #13 The purpose is to make us craftsmen – ones that really understand in the software construction process, ones that give the best values to the customers, ones that will build the best “product” based on customer’s need
  • #17 There is a book called “The book of Five Rings”.The book is taught in the Business Schools in US. (Explain why)What is surprising, though, that the book starts by:“People usually think that all warriors think about is being ready to die… The martial way of life practiced by warriors is based on excelling others in anything and everything.”
  • #18 There is a book called “The book of Five Rings”.The book is taught in the Business Schools in US. (Explain why)What is surprising, though, that the book starts by:“People usually think that all warriors think about is being ready to die… The martial way of life practiced by warriors is based on excelling others in anything and everything.”
  • #20 During our meetings we will dive deeper in each and every item.
  • #22 One step after anotherYour clients also your managers, proving them that it is possible to meet deadlines but also quality builds the trust for the future.Visibility – be visible on what you are doing.
  • #25 Jenga - During the game, players take turns to remove a block from a tower and balance it on top, creating a taller and increasingly unstable structure as the game progresses.
  • #42 During our meetings we will dive deeper in each and every item.
  • #43 This meeting’s objectives are to layout the future meetings that will allow us to become Software Craftsman.Therefore, the current meeting will be short and won’t be the rule.There shell be code!We will review the Software Craftsmanship Manifesto and discuss what does it mean in general terms.We will finish with a Code Kata (more in the future)