Clean Code – Design Principles Kata

Carlo Bonamico

DATE Thursday 12th of April 2018

LOCATION Rome, Polo Didattico - Piazza Oderico da Pordenone 3

“Software must be Well-Designed”. But what is a “Good” Design? This workshop follows a Kata approach where, starting from a focused but realistic specification, each step addresses a different challenge by applying Design Principles that make applications easier to implement, change & understand. Take a look at the Special Package: “1 Workshop + Conference Ticket”: we offer 15% DISCOUNT on the total price!

Take a look at the Special Package: “1 Workshop + Conference Ticket”: we offer 15% DISCOUNT on the total price!
Click here to know how to obtain these discounts.

LANGUAGE
Italian

LEVEL
Medium

DURATION
The workshop is full-day (8 hours) from 9:00 to 18:00, with one hour lunch break.

CHECK IN 8:30 – 9:00

PRICES
Every 8 hour workshop ticket is fixed: – to 160 € until the 2nd of February; – to 190 € until the 3rd of March; – to 220 € until the 29th of March; – to 250 € until the 11th of April at 5 pm Take a look at the Special Package: “1 Workshop + Conference Ticket”: we offer 15% DISCOUNT on the total price!

Take a look at the Special Package: “1 Workshop + Conference Ticket”: we offer 15% DISCOUNT on the total price!
Click here to know how to obtain these discounts.

CARLO BONAMICO Carlo’s passion for Software began with a C128, then grew with Linux, Java/JavaScript, web & enterprise apps, and now cloud & security. After a PhD and research experience at the University of Genova and the CNIT National TLC Research Consortium, and an exciting time at startup Eptamedia, he’s now a Solution Architect and Senior Trainer at NIS s.r.l.. His personal communication style as an architect and trainer, both technically precise and able to present in an engaging way complex topics to an heterogeneous audience has been appreciated online and at many events from Devoxx to Codemotion.

ABSTRACT
Most developers agree that “Software must be Well-Designed”. But what is a “Good” Design? This workshop presents a core set of Design Principles that will help you make your application easier to implement, change and understand. Starting from a focused but realistic specification, we will practice with a Kata where each step introduces a challenge that can be solved by applying different Principles & Patterns.

TABLE OF CONTENTS
What is Software Design? what is a “good” Design? – up-front vs continuous design – Design vs Agile – Evolutionary vs Emergent Design – Modeling vs Design Why is it important? – the two bottlenecks of Software Development: learning and communication – Essential vs Accidental Complexity Key ideas from Event Storming & Domain Driven Design – Ubiquitous Language – focus on the Domain – “Big Picture” vs local consistency (Bounded Contexts) Key forces in Software Design – Cohesion – Coupling – Impact of Change – fragile vs robust designs The Travel Expenses Kata – what is a Kata? – overview of the Kata – basic requirements Single Responsibility Principle for methods – Primitives vs orchestrators – if you have to do 3 things, make 4 functions – Steps vs Flow LAB: Parsing the Expenses Reimbursement Request Single Responsibility Principle for Classes What is a Responsibility – reason to change – what if… – looks similar vs changes for the same reason LAB: Validating the overall monthly total amount Single Responsibility means splitting … – UI from logic – Logic from persistence – I/O from logic – Sync from Async – Intent from implementation LAB: Generating the Validation Report How to start? – Separation of Concerns in practice: ask yourself questions! – make it smaller – top down vs bottom up – mock steps vs Walking Skeleton LAB: Validating Expense limits per category Reviewing your Design – naming – model out loud – validate with examples – what if this changes? – the Open / Closed Principle LAB: Validating Monthly constraints per category Collaborating with other classes – Prefer Composition to Inheritance – Dependency Injection LAB: Validating Expense limits per day Generalizing the model – making the implicit explicit – Levels of abstraction vs Levels of implementation – breakthroughs – Emergent Design LAB: Making Validation Rules configurable Incremental development and Evolutionary Design – the need for a continuous chain of small, safe steps of design & – how to do everything incrementally – incremental implementation: in-application Mocks & the Walking Skeleton approach – the Expand and Contract pattern How to continue by yourself: references for further learning – improving our design – practice, practice, practice and continuous / daily improvement (Kaizen) – Principles of Package Design – More on TDD: Test-friendly vs Well-designed

TRAINING OBJECTIVES
Through the workshop you will learn to: – understand the basic dynamics of a complex Software system, and key Design concepts such as Cohesion, Coupling, Abstraction and Impact of Change. – apply core Design Principles to improve the structure of your applications – balance the pros & cons of alternative Design choices  

WHO THE WORKSHOP IS DEDICATED TO?
Basically, to all developers! Independently from the language/platform you are developing on, this workshop is for you if: – you are moving from implementing a detailed specification to designing new features and application – you are interested in improving your Software Design approach and skills – you want to develop more robust and maintainable applications with more productivity

PREREQUIREMENTS
– Working knowledge and practical experience in one programming language (you should be able to write/compile/test/debug by yourself a program which reads and parses input and presents output either on the command line or in a simple GUI). – Good knowledge of Object Oriented concepts (Class, Interface, Method, Variable Scope and Visibility) and ability to “read” them from a sketch/diagram – Basic knowledge of HTTP

HARDWARE AND SOFTWARE REQUIREMENTS
– Laptop – Web Browser (Chrome or Firefox) – Text Editor (Sublime, Atom, Visual Studio Code,…) – IDE (Eclipse, NetBeans, Intellij, Visual Studio,.. ) – Pen and Paper

WARNING
Seats are limited.
The workshop will be held only if the minimun number of attendees is reached.

Take a look at the Special Package: “1 Workshop + Conference Ticket”: we offer 15% DISCOUNT on the total price!
Click here to know how to obtain these discounts.

Back to workshops list