1. Training Offerings
Ganesh Samarthyam
(CodOps Technologies LLP)
About the Trainer
Ganesh Samarthyam is co-founder of CodeOps Technologies. Earlier, he worked for Siemens
(Corporate Research and Technologies, Bangalore) in “Software Architecture and Development"
team for the last 6+ years. Before Siemens, he worked in Hewlett-Packard’s C++ compiler team,
Bangalore for 4.5 years. He also served as member of ANSI/ISO C++ standardization committee
(JTC1/SC22/WG21) from 2005 to 2007 representing HP. He has Software Engineering Certified
Instructor(SECI) and Professional Software Engineering Master (PSEM) certifications from IEEE.
His recent book is “Refactoring for Software Design Smells: Managing Technical Debt” (Morgan
Kaufmann/Elsevier; November 2014). For more information, visit his websites: http://
www.designsmells.com, http://www.codeops.tech or his LinkedIn page: http://bit.ly/sgganesh.
Trainings Offered
Clean Code Training 2
Advanced Core Java Training 4
Effective Object Oriented Programming and Design 6
SOLID Principles and Design Patterns 8
Refactoring in Practice 10
Refactoring to Java 8 12
Software Architecture and Design 15
CodeOps Technologies LLP 1
4. Advanced Core Java Training
Java is used in more than 3 billion devices today; its use range from web applications to lunar
landers. Excellent skills in core Java is a must for writing high-quality code within tight
deadlines. This training covers advanced features of Java (such as lambda expressions and
generics) in detail as well as best practices for writing high-quality code using these features.
Prerequisite Entry Criteria
Developers with at least 3 years of working experience programming in Java.
Comprehensive Training:
• Discusses all major core Java topics; useful for developers working in both development
and maintenance projects
• Example-driven approach makes the techniques easy to understand and apply
• 3 days training that covers Core Java topics in considerable depth and breadth; includes
best practices for effectively using the advanced Java features in practice
Training Features:
• Introduces important proven best practices for writing dependable code to developers
• Hands-on exercises to help developers internalize the key practices as well as keep
them engaged in the training (participants are expected to bring their own laptops or
use the machines available in the training room).
Curriculum for Advanced Core Java Training
This course covers the following advanced Core Java topics in considerable depth.
• Generics and Collections
• Lambda Built-in Functional Interfaces
• Java Stream API
• Use Java SE 8 Date/Time API
• Java File I/O (NIO.2)
• Java Concurrency
• Persistence/Serialization
• Internationalization
• Design Patterns in Java (examples from JDK)
• Advanced Java Best Practices
CodeOps Technologies LLP 4
6. Effective Object Oriented
Programming and Design
Expertise in software design is key for designing and implementing high-quality enterprise
software systems. Object oriented programming is the mainstream programming paradigm
followed today and is used extensively for creating industrial-strength software. This course
covers how to apply design principles and practices of effective software design creating high-
quality enterprise systems.
Prerequisite Entry Criteria
Developers with working knowledge of Java; knowledge of UML desired (but not mandatory)
Comprehensive Training:
• Covers 20 specific design principles; covers 30 specific techniques and best practices for
effective software design.
• Essential training for designers working in development projects
• Example-driven approach makes the techniques easy to understand and apply
• Case-study approach in which the participants will be asked to create design for
supporting a small feature requirement; the design will be analyzed for code smells and
violation of design principles.
Training Features:
• 3 days of classroom training led by experienced instructor
• Hard-copy of course material; course material is based on the books Oracle Certified
Professional Java Programmer Exam (Apress, 2013), and “60 Tips on Object Oriented
Programming” (Tata-McGraw Hill, 2007) both (co-)authored by the trainer.
• Interactive, example-driven learning that gives a practical exposure on how to create or
improve high-quality designs
Course Contents:
• Day 1:
• Introduction to Object Oriented Programming and Design (2 hours)
• Fundamental OO principles (4 hours)
• Exercises (1 hour)
• Day 2:
• Introduction to code smells and refactoring (1 hour)
• Refactoring for Fowler’s code smells (3 hours)
CodeOps Technologies LLP 6
7. • Best practices and heuristics for effective OO design (2 hours)
• Exercises (1 hour)
• Day 3 (case study):
• Creating design for a small feature requirement from the participant’s project
(1.5 hours)
• Analysis of the designs created by each of the participants for potential code
smells and violations of design principles; includes suggestions for improvement
(5.5 hours).
Key Benefits:
• Developers will know fundamental software engineering principles and how to apply
them
• Developers will know OO best practices and how to apply them in practice
• Developers will know about common code smells and strategies for refactoring the
smells
• Developers will be better equipped for creating effective design solutions (that
provides the basis for high-quality software)
CodeOps Technologies LLP 7
8. SOLID Principles and Design Patterns
When you learn how to apply SOLID principles and design patterns by “discovering” them
through real-world examples and case studies, you’ll remember them forever! By solving
programming problems, you’ll apply principles and patterns in practice by identifying bad
smells and refactor them.
Creating high-quality designs by applying relevant principles and patterns is a key skill of leads
and architects. If you have 3+ years of development experience and want to learn key patterns,
this workshop is certainly for you.
Prerequisites
• Developers with working knowledge of C#/Java; knowledge of UML desired (but not
mandatory). Programming examples and exercises will be provided in C#/Java.
• This is a hands-on session, so please bring your laptops to the session. (If you don't have
a laptop, you can do pair programming with other participants).
• Ensure that Visual Studio (any version that supports C#) or Eclipse (preferably Java 8) is
installed in your machine for solving the problems.
Objectives:
• Help participants understand how to apply SOLID design principles in practice
• Help participants understand how to apply key design patterns in practice
• Help participants understand how principles, patterns, smells, refactoring and technical
debt are related
• Help understand how to identify smells and refactor them; also use relevant tools for
refactoring as needed proactively.
Training Features:
• 1 day classroom session led by experienced instructor
• Interactive, example-driven learning that gives a practical exposure on how to create or
improve high-quality designs; extensive hands-on sessions.
Course Contents:
• Warm-up exercise on SOLID principles and design patterns (10:00am to 10.30am)
• Introduction to SOLID design principles, patterns, technical debt, smells, and refactoring
(10:00am - 10.30am)
• Applying SOLID principles (10:30am to 01:00pm with 15 minutes tea break)
Lunch break (1 hour)
CodeOps Technologies LLP 8
11. • Interactive, hands-on, practical and example-driven training
Key Benefits
• Participants will be armed with in-depth knowledge on code/design smells and
how to refactor them in practice.
• The participants will know specific tools and techniques for detecting design
smells and for refactoring them.
Detailed Course Contents
• Day 1 – First Half (3 hours):
• Introduction to smells and refactoring (0.5 hours)
• An exercise on finding smells from examples (1.0 hour)
• Code-level refactoring (0.3 hours)
• Introduction to design-level refactoring (0.2 hours)
• Applying the abstraction principle (1 hour)
• Assigning unique responsibilities
• Creating coherent abstractions
• Day 1 – Second Half (3.5 hours):
• Tools for design smells detection and refactoring (0.5 hours)
• Group hands-on exercise on running tools on sample code base (1 hour)
• Presentation of results from groups (1 hour)
• Applying encapsulation principle (1 hour)
• Hiding implementation details
• Hiding variations
• Day 2 – First Half (3 hours):
• Applying modularization principle (1 hour)
• Moving features between objects
• Organizing data
• Making method calls simpler
• Group exercise (4 groups) on refactoring smells (1 hour)
• Applying hierarchy principle (1 hour)
• Exercise on refactoring hierarchy smells (15 minutes)
• Dealing with generalization
• Ensuring substitutability
• Creating harmonious hierarchies
• Day 2 – Second Half (3.5 hours):
• Presentation from groups on results on refactoring exercise (1.5 hours)
• Open discussion on exercise results (0.5 hours)
• Big (i.e., large scale) refactoring (0.5 hours)
• Communication and high level refactoring (0.5 hours)
• Summary, key takeaways and wrap-up (0.5 hours)
CodeOps Technologies LLP 11
12. Refactoring to Java 8
Why this training?
The Java 8 release has some of the most important feature addimons to the Java language
and the library. Key features added in Java 8 include lambda funcmons, stream API and date
and mme API. The main benefit of Java 8 features is produc[ve programming: genng work
done more efficiently and effecmvely. The underlying approach is a paradigm shiq from
object oriented programming view supported from the early versions of Java: Java 8
encourages func[onal thinking (i.e., programming in funcmonal programming style). This 2-
day training introduces all the important concepts and features important for leveraging Java
8 features for regular work and improve producmvity. What is more, this training also covers
best pracmces in using Java 8 features.
In this completely hands-on session (extensive set of sample programs will be shared to all
parmcipants), this training introduces all the important concepts and features important for
refactoring Java wriren in earlier versions to exploit Java 8 features. Special feature: Live
demo of refactoring open source legacy code base to show how lambdas and streams can
result in shorter and effecmve code.
Pre-requisites
Developers/leads with working knowledge in Java programming. No prior exposure to Java 8
features required.
Training room setup
Access to lab machines installed with JDK 8.0 version or later.
Training room equipped with projector and whiteboard with marker pens.
Course Outline – 2 days
(This course contents also have a mapping to OCP Java SE 8 cermficamon objecmves).
• Introduc[on to Java 8 and Func[onal Thinking
• Lambda Expressions and Built-in Func[onal Interfaces
o Use the built-in interfaces included in the java.uml.funcmon package such as
Predicate, Consumer, Funcmon, and Supplier
o Develop code that uses primimve versions of funcmonal interfaces
o Develop code that uses binary versions of funcmonal interfaces
o Develop code that uses the UnaryOperator interface
• Collec[ons with Java 8
o Collecmons Streams and Filters
o Iterate using forEach methods of Streams and List
CodeOps Technologies LLP 12
13. o Use Stream API with NIO.2
o Filter a collecmon by using lambda expressions
o Develop code that uses the Opmonal class
• Describe Stream Interface and Stream Pipeline
o Use method references with Streams
o Develop code to extract data from an object using peek() and map() methods
including primimve versions of the map() method
o Search for data by using search methods of the Stream classes including
findFirst, findAny, anyMatch, allMatch, noneMatch
o Develop code that uses Stream data methods and calculamon methods
o Sort a collecmon using Stream API
o Save results to a collecmon using the collect method and group/parmmon data
using the Collectors class
o Use of merge() and flatMap() methods of the Stream API
• Use Java SE 8 Date/Time API
o Create and manage date-based and mme-based events including a combinamon
of date and mme into a single object using LocalDate, LocalTime, LocalDateTime,
Instant, Period, and Duramon
o Work with dates and mmes across mmezones and manage changes resulmng from
daylight savings including Format date and mmes values
o Define and create and manage date-based and mme-based events using Instant,
Period, Duramon, and TemporalUnit
• Java Concurrency
o Use parallel Fork/Join Framework
o Use parallel Streams including reducmon, decomposimon, merging processes,
pipelines and performance.
• Java 8 Best Prac[ces
o Leveraging Java 8 features through funcmonal thinking
o Wrimng concurrent code with parallel streams
o Using Java 8 date/mme API by migramng from legacy Date and Calendar classes
o Design parerns for funcmonal programming
CodeOps Technologies LLP 13
14. • Refactoring to Java 8
o Refactoring to Java 8 lambdas
o Refactoring to streams
o Refactoring in the context of funcmonal interfaces
o Dealing with backward compambility issues
o Refactoring to exploit parallel streams for performance
o Concurrency aspects to keep in mind when refactoring
o Tools for automamc refactoring to Java 8
• Effec[ve Refactoring to Java 8
o Debugging funcmonal programs during refactoring
o Wrimng unit tests for lambda funcmons & streams in the context of refactoring
CodeOps Technologies LLP 14
15. Software Architecture and Design
Through Case Studies, Real-world Examples and
Exercises
Training Overview
Software architecture knowledge and expertise is a key enabler for business success. This
training will cover all the key and foundational topics that every architect should know
including architectural principles, architectural styles, design patterns, Non-Functional
Requirements (NFRs) and constraints, architecture process, and tools for software
architecture.
This practical training covers software architecture through real-world examples and
exercises. Case studies covered are from both industrial and open source projects.
Details of the Training Program
• The training will be conducted by Ganesh Samarthyam, an experienced trainer
and author.
• The training will be for two (2) days and will cover the topics mentioned below.
• The training will be for 8 hours per day (excluding time for breaks, actual training
hours would be 6.5 hours) for these 2 days on the dates and time convenient to
the client.
• A maximum of 25 participants can take part in this training. (Limited number of
participants because this training involves numerous exercises with extensive
discussions with participants).
• Training materials/ handouts will be provided to all the participants.
• Training will be conducted at client premises or at a facility arranged by the
client.
• The client should provide the infrastructure to conduct the training. The
infrastructure would include the training room with projector and white board.
No PCs/laptops are required for conducting this training (exercises are paper-
and-pen based).
Prerequisite Entry Criteria
CodeOps Technologies LLP 15
16. • Only for senior developers or team leads with minimum 4 years of experience.
(This training is not meant for those who are already working as an architect –
rather, this training is for those who are aspiring to become architects).
• Participants are assumed to have experience in software development or
maintenance. Having experience only in QA/testing, configuration management,
DBA etc. is insufficient for participating in this training on software architecture.
Key Benefits
• Participants will get a grounded introduced to software architecture and design,
which will enable to perform well as an architect.
• Participants will know specific tools, techniques, and best practices for creating
effective designs.
Outline of Course Contents
Day 1
• Introduction to software architecture and design (0.5 hours)
• What is software architecture?
• Types of architectures
• The role of architecture in project and business success
• Introduction to design principles, design patterns, and architecture styles
• Design principles and design patterns through exercises (4 hours)
• Introduction to SOLID principles and design patterns (1 hour)
• Creational patterns through exercises (1 hour)
• Structural patterns through exercises (1 hour)
• Behavioural patterns through exercises (1 hour)
• Architecture styles through case studies (2 hours)
• Guiding principles of software architecture and design
• Understanding important architectural styles (such as layered, pipe-and-
filter, client-server, N-tier, MVC, and State-Compute-Control)
• Exercise on understanding architectural styles
• Case study on reference architecture (OpenSAR) for applying
architectural styles
Day 2
• Creating an architecture (2.5 hours)
• Understanding what influences architectures
• The process of architecting in the real-world
• Exercise on creating an architecture
• Realising NFRs (Non Functional Requirements) using Attribute Driven
Design approach
• Exercise on tactics for NFRs
• Quantifying NFRs
• Exercise on quantifying NFRs
CodeOps Technologies LLP 16
17. • Role of constraints
• Reference architectures
• Documenting architectures (viewpoints and perspectives)
• Validating your architectural designs
• Case study & exercise on realizing security requirements (1 hour)
• Evolving architectures (1.5 hours)
• Understanding technical debt
• Refactoring for architectural smells
• Tools for architectural refactoring
• Living as an architect (1 hour)
• Skills required for an architect
• Best practices for living effectively as an architect
• Wrap-up, key take-aways, and Q & A (0. 5 hours)
CodeOps Technologies LLP 17