Tel: +44 208 715 2645, Mobile: +44 7785 712367,jason.gorman@codemanship.com, www.codemanship.com
Codemanship Master Classes
This 2-day workshop introduces novices to the fundamental practices of TDD, as well
as stretching experienced practitioners with more advanced techniques like Responsibility-driven
Design using Mock Objects. The innovative format focuses on building habits for effective
TDD and works towards creating a personal practice regime that has been successfully
applied at organisations like the BBC and City Index.
Day 1 - We introduce the basic TDD practices, and focus on 13 habits for effective
TDD, and you will get practical, hands-on experience applying all of them through
a series of code “katas” or exercises. You will also get to grips with half-a-dozen
simple refactorings which are essential for keeping your code clean and evolving
your design.
The workshop will conclude with a discussion of how we measure our effectiveness
at TDD, and how we can develop our TDD “muscles” and master these practices through
sustained practice and peer-review.
Workshop requires at least 2 attendees can use the same OO programming language for
pairing. Some basic automated refactoring tools are recommended also
Day 2 - We look at patterns for sustainable TDD, and the use of test doubles like
stubs, fakes and mocks. You will learn about Responsibility-driven Design and the
“Tell, Don’t Ask” style of OO design. In the afternoon, you will design and implement
code using top-down TDD and mock objects to achieve a good OO design.
Over a packed 2 days, you will learn to identify 13 common code “smells” that make
software harder to change and limit your team’s agility, and you will learn to apply
the correct refactorings to eliminate them. You will also learn about good habits
for safe and sustainable refactoring that will form part of your personal refactoring
practice regime.
Day 1 - Through a series of worked examples, you will learn to recognise and refactor
Long Methods, Duplicate Code, Divergent Change & Large Classes, Copy & Paste Inheritance
and Obvious & Subtle Message Chains. We’ll also learn to apply the 9 good refactoring
habits
The workshop will conclude with a discussion of how we measure our effectiveness
at refactoring, and how we can develop our refactoring “muscles” and master these
practices through sustained practice and peer-review. You will put your refactoring
skills to the test with a specially-prepared refactoring “assault course”
All code examples will be in Java and C#. Automated refactoring tools are very highly
recommended
Day 2 - You will learn to recognise and refactor Data Classes, Data Clumps, Long
Parameter Lists, Feature Envy, Inappropriate Intimacy and Switch Statements
OO design principles underpin many aspects of software craftsmanship, including test-driven
design and refactoring. This workshop will help build a bedrock for your everyday
practice by giving you the tools to reason about code and make more informed design
decisions and trade-offs. In this 2-day master class, you will learn the core principles
of OO design and apply them to a series of code quality problems that illustrate
the principles in the most hands-on, practical way possible.
Day 1 - You will learn the goals of OO design and about dependency analysis, which
will be your foundation for understanding OO design. Through practical exercises,
you will learn to apply OO design principles including Simple Design, Don’t Repeat
Yourself, “Tell, Don’t Ask”, and S.O.L.I.D. (Single Responsibility, Open-Closed,
Liskov Substitution, Interface Segregation & Dependency Inversion)
The workshop will conclude with a discussion of how we measure our effectiveness
at OO design, and how we can develop our OO design “muscles” and master these practices
through sustained practice and peer-review.
All code examples will be in Java and C#. Automated refactoring tools are very highly
recommended
Day 2 - You will learn more OO class design principles including the Law of Demeter
and the Reused Abstractions principle. You will also learn to apply package design
principles that apply to large-scale component-based software and to Service-Oriented
Architectures
Expert training in core disciplines of software craftsmanship, delivered on site
for up to 16 developers.
Training customers include the BBC, Caplin Systems, HESA, Channel 4, Goldman Sachs,
Siemens, Autoquake, Pinesoft, 7Digital, Collinson Latitude, Rabobank, Canal Digital,
Cap Group & City Index.
Email jason.gorman@codemanship.com for details.
A common misconception in Agile teams is that being Agile means doing no up-front
design. On the contrary, Agile pioneers like Kent Beck and Martin Fowler recommend
“just enough” up-front design. Too many teams leap straight from a user story or
an acceptance test into writing code without taking a bit of time to think about
and plan their implementation designs. And very many Agile teams come unstuck on
the lack of communication and co-ordination over design and architecture with their
team-mates. Visual modelling can help enormously in these respects, but has gained
a reputation for being about Big Design Up-Front. This unique training workshop addresses
the need for some design and some visualisation without falling into the traps of
too much design up-front and not enough.
In this 2-day workshop, participants will form into a single team (or two teams,
if numbers allow), who will work to design and implement working software on a simple
software application built on a technology stack and using tools with which they
are familiar.
Their goal will be to take pre-agreed user stories and acceptance tests and follow
a simple but effective design process, learning and applying a subset of the Unified
Modeling Language which will allow to visualise and communicate their designs clearly
and succinctly.
Participants will learn to take design sketches and use them as the basis for test-driven
development, implementing working features and integrating them into a shared code
base.
Teams must all work in the same object oriented programming language., with a preference
for either Java or C# A version control and build automation system must be in place
before the workshop begins. The training room must have ample space to put flipchart
paper up on walls/windows etc. This workshop cannot be run in a small room.
Day 1:
Participants will get a crash course in the 20% of UML notation that most developers
use 95% of the time. They will learn how to draw class diagrams to model both problem
domains and technical object oriented and component-based solutions. They will learn
how to use sequence diagrams to model key interactions between collaborating objects
in the execution of a scenario. They will learn how to model program flow using activity
diagrams, and to model event-driven logic using state charts. They will also learn
how to visualise high-level system and physical deployment architectures using UML
packages and component diagrams.
On day one, participants will form one or more teams and be introduced to the project
they will be working on and its requirements.
Over the two days, they will work in pairs on different user requirements for the
same software, learning how to use visual modelling to plan and co-ordinate design
within an Agile team, and building a sense for how much design is “just enough”.
Day 2:
Participants will continue with their project, and also be introduced so some useful
advanced UML concepts. They will learn about how UML can be extended for domain-specific
applications like database modelling. They will also gain experience modelling other
people’s code in UML to help them understand it. They will explore alternatives to
UML for modelling, in particular tools like Class-Responsibility-Collaboration (CRC)
cards. Finally, they will explore ways of using UML diagrams to highlight design
problems, which may allow them to spot issues earlier in development. Complementary
techniques for modelling the user experience will also be covered.
TDD Master Class - July 23-24 SOLD OUT