Difference between revisions of "Applying Object Design with Programming: Thinking in Objects, Agile Modeling, and TDD"

(New page: == Overview == 5 days. <br> <br> Developing in Java, C#, or C++ is not really about a new object-oriented (OO) programming language; it is about ''thinking in objects'' -- a different way ...)
 
 
(11 intermediate revisions by the same user not shown)
Line 3: Line 3:
 
<br>
 
<br>
 
<br>
 
<br>
Developing in Java, C#, or C++ is not really about a new object-oriented (OO) programming language; it is about ''thinking in objects'' -- a different way to design software. This high-impact and hands-on course on skillful software analysis, design, and development is aimed at developers looking for solid OO programming skills and the ability to "think in objects". It is based on OO-industry leader Craig Larman’s extensive experience coaching and applying agile modeling and development (both objected-oriented and non-OO)  for decades.
+
'''Developing in Java, C#, C++, Python, or Ruby is not really about a new object-oriented (OO) programming language; it is about ''thinking in objects'' -- a different way to design software.''' This high-impact and hands-on course on skillful OO software analysis, design, and development is aimed at developers looking for solid OO programming skills and the ability to "think in objects".  
 
<br>
 
<br>
 
<br>
 
<br>
Is programming good and modeling bad? Or vice versa? This course goes beyond unsophisticated false dichotomies and shows developers how to apply ''both'' agile modeling and OO programming, combined with test-driven development (TDD) into a useful, efficient set of techniques.
+
'''Who is the author of this course, and their experience?''' This hands-on course is based on OO-industry leader Craig Larman’s extensive experience coaching and applying OO development for decades; Craig is the author of the world's most popular text on OO analysis and design, an industry and university standard text translated to 17 languages, used worldwide.
 
+
<br>
 
+
<br>
How can we effectively apply modeling in an agile value-adding practical approach, and how can it be integrated with programming and automated tests to create great software? And how to can we design software with technical agility to enable business agility? Finally, what are the overarching principles to the design of elegant, understandable, and extensible systems?
+
'''What are the key, core principles of object design or thinking in objects?''' How to apply them? In this course, developers learn these principles and apply them repeatedly, during agile modeling and during OO programming.
 +
<br>
 +
<br>
 +
'''Is programming good and modeling bad? Or vice versa?''' This course goes beyond unsophisticated ''false dichotomies'' and shows developers how to apply ''both'' agile modeling and OO programming, combined with test-driven development (TDD) into a useful, efficient set of techniques.
 +
<br>
 +
<br>
 +
'''How else to encourage thinking in objects?''' Humans are ''visual'' creatures. Using large whiteboard areas for agile modeling, to enhance OO thinking skills, is a powerful and fast educational tool to strengthen an object ''perspective''.
 +
<br>
 +
<br>
 +
'''How to support ''team''-based development in which people learn from each other and align on a common design, versus individual isolated development?''' Although the main purpose of large-whiteboard agile modeling in this course is as a learning tool to enhance thinking in objects, also, via hands-on agile modeling in small teams people learn to design together and learn together ''as a team''.
 +
<br>
 +
<br>
 +
'''How can TDD be combined with agile modeling, to build quality in?''' TDD is a powerful technique to design and develop so that we ''build quality in'' by writing an automated test first (before the code), rather than last. This approach ''drives'' development to create highly-cohesive, low-coupled objects that support testability and dependency injection. ''Building quality in'' starts with hands-on mastery of solid object design principles, and is enhanced with team-based agile modeling, and with TDD. In this course, people learn to combine agile modeling and TDD in a way that they find useful, fast, and fun.
 
<br>
 
<br>
 
<br>
 
<br>
In this intensive hands-on seminar you will find the answer these questions. There is a little lecture time, but the majority of the time is spent in high-value-education small modeling teams at the whiteboards while the coach rotates and works with each team, coaching the case studies while applying agile modeling, principles and patterns. And time programming in Java while the coach helps you implement your systems, while you learn the powerful practice of test-driven development (TDD) with refactoring.  
+
'''What language?''' The hands-on programming work can be in Java, C#, C++, Python, or Ruby. Ideally, all the students in one delivery of the course use the same language, because the learning, speed, tools, and issues related to each language are unique.  
 
<br>
 
<br>
 
<br>
 
<br>
The course involves multiple iterations of several case studies, in which the teams go through repeating cycles of agile modeling and development in Java combined with unit TDD. On each cycle, the coach gradually introduces more principles and techniques to build software with agility.
+
The course involves multiple iterations of a case study, in which the teams go through repeating cycles of agile modeling and OO development combined with TDD. On each cycle, the coach gradually introduces more principles and techniques to build software with agility.
 
<br>
 
<br>
 
<br>
 
<br>
Line 26: Line 38:
  
 
== Audience ==
 
== Audience ==
Developers
+
Developers. Because agile model is especially good for a ''whole team together'', it is desirable if the majority of a team tasks this course together, to learn and apply a new common behavior.
 
 
== Level==
 
Intermediate: This course introduces concepts and techniques that the attendee will apply during the workshop.  
 
  
  
Line 38: Line 47:
 
== Objectives ==
 
== Objectives ==
 
Upon completion of this course, students should be able to:
 
Upon completion of this course, students should be able to:
* think and design with high-cohesion low-coupled objects
+
* think in objects and design object systems with the GRASP principles
* implement solid object designs in well-crafted Java  
+
* create ''well-crafted clean code'' in Java, C#, C++, etc, that expresses good object design and OO programming
* apply core Java libraries
+
* learn to think in objects via visualization with agile modeling
* apply frequently used Java idioms
+
* design better object-oriented systems with 2 or 3 "gang of four" design patterns
* design with core principles and patterns that enable software with agility
+
* identify goals with user stories and/or use case names
* do agile modeling
+
* learn with system-sequence diagrams
* do unit test-driven development
+
* learn with a domain model
* apply basic refactorings and refactoring tools in Java
+
* apply acceptance TDD
* transform agile models into code and tests
+
* create and collaborate on designs to "think in objects" with activity diagrams, communication diagrams, and design class diagrams
* take a problem through requirements analysis, design, automated tests, and well-crafted software in the context of an iterative and agile process
+
* evolve models into code, via TDD
 +
* create code with unit TDD
 +
* know the use and misuse of mock objects
 +
* design the connection between a UI and domain-logic layer to maintain a separation of concerns
 +
* refactor code to remove "code smells" and create really ''clean code''
 +
* learn and collaborate with simple UML
 +
 
  
  

Latest revision as of 11:30, 30 October 2011

Overview

5 days.

Developing in Java, C#, C++, Python, or Ruby is not really about a new object-oriented (OO) programming language; it is about thinking in objects -- a different way to design software. This high-impact and hands-on course on skillful OO software analysis, design, and development is aimed at developers looking for solid OO programming skills and the ability to "think in objects".

Who is the author of this course, and their experience? This hands-on course is based on OO-industry leader Craig Larman’s extensive experience coaching and applying OO development for decades; Craig is the author of the world's most popular text on OO analysis and design, an industry and university standard text translated to 17 languages, used worldwide.

What are the key, core principles of object design or thinking in objects? How to apply them? In this course, developers learn these principles and apply them repeatedly, during agile modeling and during OO programming.

Is programming good and modeling bad? Or vice versa? This course goes beyond unsophisticated false dichotomies and shows developers how to apply both agile modeling and OO programming, combined with test-driven development (TDD) into a useful, efficient set of techniques.

How else to encourage thinking in objects? Humans are visual creatures. Using large whiteboard areas for agile modeling, to enhance OO thinking skills, is a powerful and fast educational tool to strengthen an object perspective.

How to support team-based development in which people learn from each other and align on a common design, versus individual isolated development? Although the main purpose of large-whiteboard agile modeling in this course is as a learning tool to enhance thinking in objects, also, via hands-on agile modeling in small teams people learn to design together and learn together as a team.

How can TDD be combined with agile modeling, to build quality in? TDD is a powerful technique to design and develop so that we build quality in by writing an automated test first (before the code), rather than last. This approach drives development to create highly-cohesive, low-coupled objects that support testability and dependency injection. Building quality in starts with hands-on mastery of solid object design principles, and is enhanced with team-based agile modeling, and with TDD. In this course, people learn to combine agile modeling and TDD in a way that they find useful, fast, and fun.

What language? The hands-on programming work can be in Java, C#, C++, Python, or Ruby. Ideally, all the students in one delivery of the course use the same language, because the learning, speed, tools, and issues related to each language are unique.

The course involves multiple iterations of a case study, in which the teams go through repeating cycles of agile modeling and OO development combined with TDD. On each cycle, the coach gradually introduces more principles and techniques to build software with agility.

We apply a variety of education techniques established over 20 years of coaching and mentoring to maximize the learning, value, and fun, including buzz groups, multi-modal learning, pair work, and lots of hands-on practice.


Methods of Education

Discussion, presentation, Q&A, workshop exercises


Audience

Developers. Because agile model is especially good for a whole team together, it is desirable if the majority of a team tasks this course together, to learn and apply a new common behavior.


Prerequisites

Familiarity with a programming language


Objectives

Upon completion of this course, students should be able to:

  • think in objects and design object systems with the GRASP principles
  • create well-crafted clean code in Java, C#, C++, etc, that expresses good object design and OO programming
  • learn to think in objects via visualization with agile modeling
  • design better object-oriented systems with 2 or 3 "gang of four" design patterns
  • identify goals with user stories and/or use case names
  • learn with system-sequence diagrams
  • learn with a domain model
  • apply acceptance TDD
  • create and collaborate on designs to "think in objects" with activity diagrams, communication diagrams, and design class diagrams
  • evolve models into code, via TDD
  • create code with unit TDD
  • know the use and misuse of mock objects
  • design the connection between a UI and domain-logic layer to maintain a separation of concerns
  • refactor code to remove "code smells" and create really clean code
  • learn and collaborate with simple UML


Related Courses

After:


Maximum Participants

16


Environment - Room, Tools, Texts

Course Environment - Workshop Style2