Minimal list of the things every software professional should know
Tags: designpatterns, solid, softwareprofessional, softwareengineering
Published: 2020-10-07 18:20:02

---
title: Minimal list of the things every software professional should know
published: true
description: A minimal list of the things every software professional should be conversant with extracted from The Clean Coder book.
tags: #designpatterns #solid #softwareprofessional #softwareengineering
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/p3yebw0uwpwjf3ds0u7p.jpeg
---
As a software professional, I see a lot of programmers being evaluated about their techniques and not about their knowledge or, in other words, about **what** and not about **how** they code.

I have ever being a true believer that if you know the principles you can deduce the techniques from it. Doesn't matter the language because the grammar of each programming language is similar to the other, so it's just the matter to just the syntax and refines the grammar, but you still must know how to be a good writer. And this is what Uncle Bob teaches us. When we are coding, we are **writing** code.

Please, take a look at this excerpt from [The Clean Coder](https://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073) book where [Uncle Bob](https://en.wikipedia.org/wiki/Robert_C._Martin) says out loud exactly what I think about *how to become a good software professional* and where I (and you) should put the effort to accomplish that goal:

## 1. Design patterns.
You ought to be able to describe all 24 patterns in the [Gang of Four book](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) and have a working knowledge of many of the patterns in the [POSA books](https://www.amazon.com/Pattern-Oriented-Software-Architecture-System-Patterns/dp/0471958697).

## 2. Design principles.
You should know the [SOLID principles](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_3) and have a good understanding of the component principles.

## 3. Methods.
You should understand XP, Scrum, Lean, Kanban, Waterfall, Structured Analysis, and Structured Design.

## 4. Disciplines.
You should practice TDD, Object-Oriented design, Structured Programming, Continuous Integration, and Pair Programming.

## 5. Artifacts.
You should know how to use: UML, DFDs, Structure Charts, Petri Nets, State Transition Diagrams and Tables, flow charts, and decision tables.

---
Besides that *"small"* list about the minimal of what we need to know as a software professional, Uncle Bob adds: continuous learning, practicing, collaboration, mentoring, domain knowing, employer shoes, and humility.

## Bonus.
If I can add something to Uncle Bob's list, I suggest you learn about [Refactoring](https://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Signature/dp/0134757599/ref=sr_1_1). The majority of the time which we spend on projects is doing refactoring of previous code. So, master this discipline will add more XP to you as a software professional, increasing your value in the market.

**Do you have anything to add to this list?** Please, comment below.

___
Photo by [olia danilevich](https://www.instagram.com/danilevich_olia/) from [Pexels](https://www.pexels.com/photo/man-using-3-computers-4974914/).