Training program - Object Oriented Programming Basics
Executive summary
Software developers find themselves under constant pressure to learn new technologies and tools, but most are struggling with this task, produce bad or mediocre code, and miss out on career advancement opportinities and the economic benefits they would bring.
At CODEXCITE, we believe one of the main reasons for this is the fact that programming is mainly taught nowadays by teaching specific frameworks or tools, and by focusing on "quick win" scenarios. This results in developers that
- don't really understand the underlying concepts,
- don't have the necessary vocabulary to communicate effectively,
- rely heavily on modifying existing code snippets they don't fully grasp in order to get the job done.
To validate this hypothesis, CODEXCITE executed an exploratory phase focused on evaluating junior, mid level and senior developers. This phase included defining the essential base skills required for a developer, assessing the current levels, and designing a training program focused on improving them.
To mitigate this problem, CODEXCITE is proposing a training program that focuses on building and strenghtening the base knowledge and skills of the developers, allowing them to learn new technologies and tools in an accelerated manner, and as a result to grow their value exponentially.
Initial evaluation conclusions
There are some urgent gaps in knowledge that apply to the grand majority of the evaluated developers, for issues that appear daily when working with OOP or C#. Examples include:
- Structs vs. Classes and Value types vs. Reference types
- Access modifiers (private / protected / internal are a mystery)
- Generics
- Virtual methods and overriding them
- IDisposable and Dispose()
- Asynchronous programming
- Delegates and events
Most evaluated developers do not really understand the tools they are using day-to-day when writing code and rely on “copy-paste programming” to get the job done. The result is unmaintainable and buggy code.
An essential requirement for a senior developer is to have strong Patterns & Practices skills. All of the evaluated junior developers and some of the senior developers are missing those skills.
Training program
Based on the conversations and evaluations held with junior and senior developers, we designed the following training program:
- small groups - you are front an center, not lost in the crowd,
- self study - get the information at you own pace and using the medium that works best for you (text, video, etc.),
- practical sessions - focus on applying the skills you learned with the mentor's help,
- the mentor is there to give you the extra edge - be aware of the best practices to follow and the pitfalls to avoid
- evaluated before and after - measure your growth objectively.
Module 1: C# fundamentals
This module focuses on the fundamentals of C# programming, making sure the developers have ample understading of the tools at their disposal, tools they use daily in their career.
Objective:
At the end of the module, the developers should:
- have the correct vocabulary - use the right words to identify the c# topics and understand their usage
- have a good understading of the inner workings of C# and how the elements fit together
- be aware of best practices and pitfalls
Module structure
Each week the developers will receive the topics to be covered and they should read the referenced documentation in order to familiarize themselves or to refresh their knowledge.
Weekly, there will be 8 hours of online interactive session(s) consisting of:
- developers take turns to present and explain the topics to the other participants
- developers ask questions about the topics, about the things they are struggling to understand
- mentor explains lesser-known details, how things work, or pitfalls to look out for
- developers write code for the practical exercises, with mentor guidance
- there will be greater focus on the topics that the developers are struggling with
The developers can also receive answers or guidance from the mentor at any time during the week, by asking questions using a shared communication channel (a Slack channel, for example).
The module ends with a re-evaluation of the participants' skills, using the same model as the initial skills evaluation. The report will be delivered to the client.
Practical exercises
Each topic will be illustrated with snippets of code programmed live the participating developers. The examples will be kept to the point in order to avoid confusing the developers with collateral issues.
1.1 Week 1
1.2 Week 2
1.3 Week 3
1.4 Week 4
- Type dynamic
- Attributes
- Reflection
- LINQ
- Dispose - unmanaged resources
- Asynchronous programming
- Async return types
Module 2: Patterns and Practices
This module builds on the knowledge of the previous one to "go up one level", to the code design level.
The purpose is to give the developers the skills required to design and implement solutions to real-world requirements and to refactor existing code in order to make it easier to understand and to maintain.
Objective:
At the end of the module, the developers should:
- understand the OOP and SOLID principles and how to apply them when writing code
- have a general knowledge of the common patterns used in OOP, when to use them and when NOT to use them
- understand the most common "code smells" and how to mitigate them bay using refactoring
- understand how to use TDD to improve the quality of their code
- have a structured approach to "learn from mistakes"
- understand how they can apply functional programming principles to improve the quality of their code
Module structure
Each week the developers will receive the topics to be covered and they should read the referenced documentation in order to familiarize themselves or to refresh their knowledge.
Weekly, there will be 8 hours of online interactive session(s) consisting of:
- developers take turns to present and explain the topics to the other participants
- developers ask questions about the topics, about the things they are struggling to understand
- mentor explains lesser-known details, how things work, or pitfalls to look out for
- developers write code for the practical exercises, with mentor guidance
- there will be greater focus on the practical side in this module, in applying the patterns and practices to the created code
- the exercise will be continued over the 4 weeks of the module, adding to and refactoring the previous code
The developers can also receive answers or guidance from the mentor at any time during the week, by asking questions using a shared communication channel (a Slack channel, for example).
The module ends with a re-evaluation of the participants' skills, using the same model as the initial skills evaluation. The report will be delivered to the client.
Practical exercise
Apply the C# fundamentals, patterns and practices to develop a logging library similar to Serilog. Requirements:
- Write simple text messages to a file.
- Write simple text messages to console.
- Write simple text messages to one or more outputs.
- Be able to configure the output selection.
- Have different levels of log events (Verbose to Critical)
- Write structured event data to output.
- Configure output templates for event data serialization.
- Write to log asyncronously.
- Have an API for third party output writers.
- Have an enricher that adds Thread information to the log
- Have an enricher that adds Exception information to the log
- Have an enricher that adds properties from a context collection to the log
- Have an API for third party enrichers.
2.1 Week 1
- OOP Principles
- Abstraction
- Encapsulation
- Inheritance
- Polymorphism
- DRY and KISS
- SOLID
- Single Responsibility Principle
- Open Closed Principle
- Liskov Substitution Principle
- Interface Segregation Principle
- Dependency Inversion Principle
2.2 Week 2
- Design Patterns
2.3 Week 3
- Test Driven Development
- Refactoring
2.4 Week 4
- Error Handling
- Dealing with errors, defects and mistakes
- Functional programming principles
- Pure functions
- Immutability
- Referential transparency
- Functions as first-class entities
- Higher order functions
- Disciplined state
Pricing and payment
Please contact sales at office@codexcite.com for a quote.