I took the sub-headline from the UK's Institution of Civil Engineers' website, hope they don't mind. But if you switch "Civil engineering" to "Software engineering", it could be something like:
Software engineering is everything you use to make your life easier, more enjoyable and safer. It’s about roads and mobile phones, computers, youtube, self-driving cars, railways, hospitals, smart houses, rocket launches, water and power supply and much more, much more. The kinds of things we take for granted but would find life very hard to live without.
What about that? Does it make sense?
I like to compare Software Engineering with Civil engineering when persuading developers to follow good software engineering practices.
Did you know that 111 Billion is the estimated number of lines of code produced per day, according to a report quoted on Ciber Security Ventures?
Potentially, there are also millions of bugs produced every day. But it's ok if we have a few bugs, as long as it does not bring the business down. And that's why we have support working 24/7, right?
There's no right or wrong answer. It depends.
But, what is that Software Engineers can learn from Civil Engineers?
Bridges? Yes, bridges and patterns of bridges.
In the study material for Computer Science Course, from the University of Cape Town, the professor introduces the concept of a catalogue of bridge patterns, from where an architect can choose one to build a bridge.
They don't use the catalogue of patterns to build bridges only but to build schools, hospitals, dams, railways, and much more - pretty much everything.
In their working lives architects “solve” these problems over and over again, in slightly different ways and under different circumstances. However, the basic precepts of good dwelling design remains the same, and they are different from the precepts of good office block design, or good hotel design or good hospital design.
In Software Engineering, we also have patterns to build software. For example, we use an adapter when we want to connect two systems that have incompatible interfaces.
We also use the "Bridge" pattern when we want to decouple the interfaces from the implementation. We use a "Façade" when we want to provide a unified interface to a set of interfaces in a subsystem. We use an "Observer" pattern when we want multiple subsystems to be notified about changes from other subsystems.
From 111 Billion lines of code produced every day, I bet most part is solving the same problems in general. It's like doing different types of bridges (as in civil engineering) in different places with different circumstances.
Software developers also have a vast catalogue of patterns that they apply every day.
For example, in a micro-services architecture, developers apply patterns such as Registries, Proxys, Gateways, Sagas, CQRS, Circuit Breaker, Access Tokens and other patterns at a high level of abstraction. They take these patterns from a catalogue of design patterns for micro-services.
When implementing each box, developers will use different catalogues, depending on the language and tech stack they use to implement the system.
If they use an Object-Oriented language, then they might pick patterns from a catalogue of design patterns for Object-Oriented languages. The book Elements of Reusable Object-Oriented Software is one of these catalogues.
One core function of a Software Developer is to grow their mental schema about software development. Design Patterns are a great way to improve your team's mental schema in object-oriented programming.
That's why I want to share with you the material used to help software developers in Object-Oriented Design Patterns, as I did with basics of Object-Oriented Programming, Object-Oriented Design Principles and Programmer Testing.
If you want, you can use the slides as templates for your internal training.
The material is from the longest module in the whole training and has five slide decks and 20 exercises.
In this module about Object-Oriented Design Patterns, the following is included:
- Introduction to Design Patterns - Click here to download PDF file or here to download PPTX
- How to select the right Design Pattern - Click here to download PDF file or here to download PPTX
- Creational Design Patterns - Click here to download PDF file or here to download PPTX
- Behavioural Design Patterns - Click here to download PDF file or here to download PPTX
- Structural Design Patterns - Click here to download PDF file or here to download PPTX
If you want, you can also download all the 20 exercises in a zip file. Files inside the archive are in PDF and DOCX format.
Click here to download the ZIP file with the exercises.
You should receive an email from me shortly with all the links.
If you don't see my email in your inbox in the next 5 minutes, then check for the spam folder for my email from email@example.com
Thank you again for your interest in my material.
Can I send you all the training material to your email?
Good software developers keep their cognitive muscles sharp by life-long learning.
Why not use all my material and customise it to your software development teams training programs?
If you give me your best email, here's what I will send you to your email:
- A link to a shared Google Drive folder with all the material in editable format
- A link to a zip file with all the material in editable format
The editable training material has the following templates:
Why do I want your email?
You're probably involved somehow with software development, and you care about the skills and competences of your development teams.
That's why I think it might be a good idea to have an informal chat about what your pain points might be and see if I can help.
My name is Joao Pereira, director and principal engineer at Yule Technologies, LTD.
I build software commercially for more than 18 years, and while working in a myriad of roles in multiple projects across different industries, I learned a bit about this industry.
I'll build your ideas. I'm very hands-on and code a lot, mainly in Java and distributed systems. I'm formally certified and have experience in Agile Methodologies and more waterfall' ish ones, like PMP from the Project Management Institute and have led multiple development teams during my career.
Will you let me send you all training material and get in touch?
- This email is not valid.
- Name seems odd.