Sorry, this page is no longer available
Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Lauro Fialho Müller
  • Learn the SOLID principles and how they can improve the design of your code

  • Learn 20 code smells and anti-patterns against best software design practices

  • Learn how to write code that is easy to maintain, extend, and change

  • Explore practical examples in a variety of applications

  • Benefit from deep dives and detailed discussions around best practices in the software engineering industry

A STEP-BY-

Read more
  • Learn the SOLID principles and how they can improve the design of your code

  • Learn 20 code smells and anti-patterns against best software design practices

  • Learn how to write code that is easy to maintain, extend, and change

  • Explore practical examples in a variety of applications

  • Benefit from deep dives and detailed discussions around best practices in the software engineering industry

A STEP-BY-

  • 6 hours of high-quality, straight-to-the-point videos

  • Self-paced course: take as much time as you need to complete the course

  • Lifetime access: access does not expire. Ever.

  • 30-day money-back guarantee: try the course without risks. No questions asked

  • Certificate of completion: receive a solid proof of completion and differentiate yourself

WHY THIS COURSE?

  • Focus on the fundamental principles of software design: Information Hiding, Encapsulation, Abstraction, and Polymorphism.

  • Detailed and easy to follow discussion on 5 SOLID principles: Single Responsibility principle, Open-Close principle, Liskov Substitution principle, Interface Segregation principle, and Dependency Inversion principle.

  • 20 code smells distilled and thoroughly explained: learn many different ways we can fix our code, making it more robust and easier to work with.

At the end of this course, you will have acquired not only knowledge about the principles of great software development, but also practical insight into how to reason about the design of your system and how to improve it.

WHY LEARN SOLID 

Excelling in software development goes far beyond writing code. The code we write must not only achieve its intended functionality, but it must also be easy to maintain, extend, and change. When our code is not well designed, it starts to show several symptoms called code smells. It is crucial to be fully aware of them to immediately address the underlying causes when we come across bad code.

To develop this awareness, this course discusses the most important principles for designing and developing systems that comply with programming best practices. The contents are based on my learnings from multiple years of coding experience, as well as on several books and resources from seasoned developers in the industry.

I’m looking forward to taking this journey with you.

Course thumbnail credits: macrovector - freepik

Enroll now

What's inside

Learning objectives

  • Apply the fundamental principles of good software design: encapsulation, abstraction, polymorphism, among others.
  • Understand the solid principles of software engineering and how to use them to design better code
  • Acquire practical skills to improve the quality and the design of
  • Learn how to fix the most common pitfalls of object oriented programming
  • Learn how to design highly maintainable, extensible, and easy-to-change code

Syllabus

Introduction
This section discusses the most important principles of software design, as well as 5 concepts for designing better systems known as the SOLID principles.
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Explores SOLID principles, which are essential for designing robust and maintainable software, making it highly relevant for developers aiming to improve their coding practices
Focuses on practical examples and code walkthroughs, providing developers with hands-on experience in identifying and resolving common code smells in various applications
Covers a comprehensive list of 20 code smells, offering developers a detailed understanding of anti-patterns and how to refactor code for better design and readability
Teaches how to write code that is easy to maintain, extend, and change, which are critical skills for developers working on long-term projects or in collaborative environments
Examines topics such as 'Repeated Switches' and 'Primitive Obsession', which are common issues that developers face, especially when working with legacy codebases
Requires familiarity with object-oriented programming concepts, which may pose a challenge for learners without prior experience in software development or related fields

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Practical insights into clean code principles

According to learners, this course offers a largely positive introduction to writing cleaner, more maintainable code. Students praise the clear explanations of complex topics like the SOLID principles and various code smells. Many found the practical examples and code demos particularly helpful for understanding how to identify and fix issues in real codebases. While primarily geared towards OOP languages (often using examples in C# or Java), learners found the concepts broadly applicable across different programming languages, although some translation effort might be needed. It is considered a good starting point for those new to the topic, providing a solid foundation, though some felt it could benefit from deeper dives into complex refactoring techniques.
Examples use a specific programming language.
"Examples are primarily in C# (or Java depending on version), which is great if you use it, but requires translation otherwise."
"Be aware, the demos are mainly in one OOP language, so you might need to adapt to yours."
"I had to adapt the examples to Python, but the underlying principles were clear enough to apply."
Excellent starting point for the topic.
"This course is a fantastic introduction to clean code practices and identifying code smells."
"Perfect for getting started with code smells and SOLID principles if you're new to them."
"Provides a solid foundation for further learning in software design principles."
Gets straight to the point.
"Loved that it was straight to the point, no filler content."
"Concise lectures covering important topics without being overly long."
"Efficient use of time, packed with information on clean code principles."
Learn to spot common code issues.
"Now I can identify many common code smells in my own projects and understand why they are bad."
"Knowing these smells is the first step to writing cleaner code, and this course covers 20 of them."
"Great overview of 20 common anti-patterns and why you should get rid of them."
Provides clear understanding of core concepts.
"The explanation of SOLID principles was very clear and easy to follow, finally making sense of them."
"Helped me finally understand what SOLID means in practice and how to apply it to my designs."
"Provides a solid foundation on the SOLID principles, which is essential for good software design."
Helpful code demos show issues and solutions.
"The code examples are clear and show how to apply the principles effectively."
"I really appreciated seeing the 'before' and 'after' code for each smell. It makes the concepts concrete."
"Practical examples make it easy to understand how to identify and fix issues in real-world code."
Focuses more on theory than practice.
"It's great for identifying smells, but doesn't go deep into complex refactoring techniques on how to fix them."
"Wish there were more hands-on refactoring exercises or case studies."
"More theory on identifying smells than practical step-by-step guides on refactoring complex code."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Clean Code: 20 Code Smells and How to Get Rid of Them with these activities:
Review SOLID Principles
Reinforce your understanding of SOLID principles before diving into code smells. A solid grasp of these principles is crucial for recognizing and refactoring code smells effectively.
Browse courses on SOLID Principles
Show steps
  • Read articles or watch videos explaining each SOLID principle.
  • Summarize each principle in your own words.
  • Find examples of each principle in existing codebases.
Read 'Clean Code: A Handbook of Agile Software Craftsmanship'
Supplement the course material with insights from a widely respected book on clean coding. This book provides a comprehensive guide to writing maintainable and readable code.
View CLEAN CODE on Amazon
Show steps
  • Read the book, focusing on chapters related to code smells and refactoring.
  • Take notes on key concepts and examples.
  • Relate the book's content to the course modules.
Code Smell Review Session
Learn from others and reinforce your knowledge by reviewing code together. Discussing code smells with peers can provide new perspectives and insights.
Show steps
  • Find a study partner or group from the course.
  • Share code snippets containing potential code smells.
  • Discuss the identified code smells and propose refactoring solutions.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Blog Post: My Top 3 Code Smells
Solidify your understanding by explaining your favorite code smells. Writing about these concepts will force you to think critically and articulate your knowledge.
Show steps
  • Choose three code smells from the course.
  • Write a blog post explaining each code smell, its impact, and how to fix it.
  • Include code examples to illustrate each point.
  • Publish your blog post on a platform like Medium or your personal website.
Refactor Open Source Code
Apply the learned code smell detection and refactoring techniques to real-world code. This hands-on experience will solidify your understanding and improve your practical skills.
Show steps
  • Find an open-source project on GitHub.
  • Identify code smells using the techniques learned in the course.
  • Refactor the code to remove the identified code smells.
  • Submit a pull request with your refactored code.
Read 'Refactoring: Improving the Design of Existing Code'
Deepen your understanding of refactoring techniques with a classic book on the subject. This book provides a comprehensive catalog of refactorings and their applications.
View Melania on Amazon
Show steps
  • Read the book, focusing on refactorings relevant to the code smells covered in the course.
  • Practice applying the refactorings to code examples.
  • Compare the book's refactorings with the solutions presented in the course.
Code Smell Detector Tool
Create a tool that automatically detects code smells in a codebase. This project will require you to apply your knowledge of code smells and programming principles in a practical and challenging way.
Show steps
  • Choose a programming language and development environment.
  • Design the architecture of your code smell detector tool.
  • Implement the code smell detection algorithms.
  • Test your tool on various codebases.

Career center

Learners who complete Clean Code: 20 Code Smells and How to Get Rid of Them will develop knowledge and skills that may be useful to these careers:
Software Engineer
A software engineer designs, develops, tests, and maintains software applications. This course emphasizing clean code and SOLID principles directly helps a software engineer write more maintainable, extensible, and robust code. The course's focus on identifying and eliminating code smells, such as 'Long Parameter List' and 'Data Clumps,' provides practical skills for improving code quality. Understanding these principles and practices is invaluable for any software engineer aiming to produce high-quality software, especially in collaborative environments where code readability and maintainability are paramount.
Software Developer
A software developer focuses on the coding and implementation aspects of software creation. This course is directly relevant to a software developer by teaching how to write clean, efficient, and well-structured code. The course's detailed explanations of the SOLID principles and the identification of 20 code smells provide a software developer with the tools to avoid common pitfalls and create more maintainable and robust applications. By learning to address issues like 'Primitive Obsession' and 'Shotgun Surgery,' a software developer can significantly improve the quality and scalability of their code.
Application Developer
An application developer specializes in creating software applications for various platforms. This course helps an application developer produce high-quality, maintainable code. The course's emphasis on the SOLID principles and code smell identification, such as how to get rid of 'Repeated Switches' or 'Unclear/Confusing Names,' directly contributes to writing code that is easier to understand, debug, and extend. The practical examples and detailed discussions in this course can greatly improve an application developer's ability to create robust and scalable applications.
Full-Stack Developer
A full stack developer works on both the frontend and backend of web applications. This course is highly valuable for a full stack developer, as it covers principles and practices applicable to both frontend and backend code. The course's discussion of SOLID principles and code smells, such as how to resolve 'Middle-Man' classes or avoid 'Mutable Data', provides a full stack developer with a holistic understanding of how to write clean, maintainable, and scalable code across the entire application stack. This ensures consistency and quality throughout the project.
Code Reviewer
A code reviewer examines code written by other developers to identify potential issues and ensure code quality. This course directly equips a code reviewer with the knowledge to identify code smells and ensure adherence to SOLID principles as explained in the syllabus. Recognizing and addressing issues like 'Feature Envy' or 'Unnecessary Exceptions' are critical skills for a code reviewer. The course's practical examples and detailed discussions provide a solid foundation for making informed judgments about code quality.
Backend Developer
A backend developer works on the server-side logic and databases that power applications. This course provides a backend developer with the knowledge and skills to write cleaner, more efficient, and scalable code. The SOLID principles discussed in the course, along with the identification and remediation of code smells like 'Divergent Change' and 'Shallow Modules,' are crucial for developing robust and maintainable backend systems. By understanding these principles, a backend developer will be better equipped to design and implement complex systems that are easy to maintain and extend.
Technical Lead
A technical lead guides a team of developers and ensures the quality of the code. This course can significantly enhance a technical lead's ability to mentor and direct their team towards writing cleaner, more maintainable code. By mastering the SOLID principles and learning to identify and address code smells like 'Shotgun Surgery' or 'Knowledge Duplication,' a technical lead can enforce coding standards and best practices. This leads to a more cohesive and efficient development process, resulting in higher-quality software.
Frontend Developer
A frontend developer focuses on the user interface and user experience of web applications. Although often associated with visual design, a frontend developer also needs to write clean and maintainable code. This course can help frontend developers apply SOLID principles and avoid code smells in their JavaScript or other frontend code, leading to more robust and maintainable user interfaces. Understanding concepts such as fixing 'Large Interfaces' or avoiding 'Speculative Generality' ensures that the frontend code remains manageable and scalable as the application evolves.
Software Architect
A software architect designs the high-level structure and components of software systems. This course helps a software architect make informed decisions about code quality and maintainability. Understanding the SOLID principles and being able to recognize and address code smells such as 'Refused Bequest' or 'Alternative Classes with Different Interfaces' is crucial for designing systems that are robust, scalable, and easy to evolve. The insights provided by this course enable a software architect to guide development teams in creating high-quality software.
Software Consultant
A software consultant advises organizations on how to improve their software development processes and code quality. This course provides a software consultant with valuable insights into best practices and common pitfalls in software design. Understanding the SOLID principles and being able to identify and recommend solutions for code smells like 'Multitaskers' or 'Long Parameter List' is essential for providing effective guidance. The course's comprehensive coverage of these topics enables a consultant to offer actionable advice to improve software development workflows.
Quality Assurance Engineer
A quality assurance engineer tests software to ensure it meets quality standards and identifies defects. While not directly coding, a quality assurance engineer benefits from understanding the principles of clean code. This course may help them better understand the underlying code and identify potential issues related to maintainability and extensibility. Recognizing code smells like 'Uninformative Comments' or 'Loops' can assist a quality assurance engineer in creating more effective test cases and providing more insightful feedback to developers.
DevOps Engineer
A DevOps engineer focuses on automating and streamlining the software development lifecycle. While not always directly involved in writing application code, a DevOps engineer benefits from understanding the principles of clean code. This course may help them appreciate the importance of maintainable and testable code in creating efficient deployment pipelines. Recognizing code smells like 'Primitive Obsession' or 'Shallow Modules' can inform their decisions about automation and infrastructure design, leading to a more robust and reliable system.
Data Engineer
A data engineer designs, builds, and maintains data pipelines and infrastructure. Data engineers write code to transform and move data. This course may provide data engineers with insights into writing cleaner, more maintainable, and scalable code. Understanding concepts such as addressing 'Data Clumps' or avoiding 'Speculative Generality' can help data engineers build more robust and efficient data pipelines, leading to improved data quality and reliability.
Data Scientist
A data scientist analyzes and interprets complex data to identify trends and insights. While data science often involves statistical analysis and modeling, data scientists also write code. This course may be helpful for data scientists who want to improve the quality and maintainability of their code. Recognizing code smells like 'Divergent Change' or 'Knowledge Duplication' can enable a data scientist to write more organized and efficient code, especially when collaborating on team projects.
Database Administrator
A database administrator manages and maintains databases, ensuring their performance, security, and availability. While primarily focused on database systems, a database administrator sometimes writes scripts or code to automate tasks or perform data manipulation. This course may offer some value by providing a foundation in writing cleaner and more maintainable scripts. Recognizing code smells like 'Unclear Names' or 'Unnecessary Exceptions' might helps a database administrator write more effective automation scripts.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Clean Code: 20 Code Smells and How to Get Rid of Them.
Foundational text on writing clean, maintainable code. It directly aligns with the course's focus on code smells and SOLID principles, providing in-depth explanations and practical examples. It serves as an excellent reference for understanding the principles discussed in the course and applying them to real-world projects. This book is widely considered a must-read for software developers.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser