Clean Developer

Jorge Sánchez (xurxodev)
6 min readMar 30, 2017

--

This article is a english translation from my original article in my blog xurxodev.com.

Before you continue reading, I would like you to know that what I tell in this article is a very personal opinion that I have been forming over the years as a programmer, starting there in 2002. It is very possible that you do not have the same opinion so I would like you to share it with your comments of the article.

A little history

In my first company I became as a junior programmer and I stayed for 8 years.

I was fortunate to have a mentor named Pablo Conesa, who taught me very good bases of object oriented programming and good practices. In that company we programmed in Visual Basic 6.

Over time we were discovering new concepts together such as design patterns, testing, scrum, software architecture etc …

Due to situations that happen in the companies he left the company and soon the company was closed for bad economic results.

At first I was pretty lost, in my first company I was a little obsolete in terms of languages and frameworks that had emerged over the years such as .Net and C # for example.

I started to study like crazy and in the following jobs the same situation occurred everytime, my new colleagues knew a lot of things that I did not know. But also it was always fulfilled that as weeks and months I was gaining the confidence of my colleagues because what I knew(that in what I had much experience) could be applied to any language and technology. No matter what .Net, Java, Android, iOS, Web or mobile, the base I had was very useful in every project I was in.

At the same time, it was not particularly difficult for me to learn languages, frameworks, etc. What I am trying to explain is that it is much more difficult and valuable, in my experience, to have a good programming basis than to know a language, framework or technology which is fashionable, because fashions end.

Martin Fowler says that all architectures expire but I think that frameworks expire much faster, JavaScript frameworks is a good example.

Analogy with Clean Architecture

Clean architecture is a software architecture that represents the components divided into layers, the internal layers are the most important, they are the domain of your application, your business logic and the external layers are tools used by your application and to which there is no coupling.

If we make an analogy between what I think about what knowledge is most valuable to a programmer and Clean Architecture principles the idea is quite similar.

If we think of the knowledge that a programmer is acquiring with experience, they can be divided into types of knowledge and these can be seen as layers of circular knowledge as in Clean Architecture.

In the same way, the inner circles are more important and they are the core of our knowledge. As we move in the outer layers that knowledge is less stable and it is easy for us to have to replace it with others over time.

However, the knowledge of the inner circles are longer-lived, useful and they survive languages, technologies, frameworks and why not, fashions.

Basic knowledge

This is the most valuable part that a programmer can have; it is the innermost part of the layers of knowledge, the core, which will provide you with more long-term benefits and this is where I like investing in order to improve and continue to learn, prioritizing it on other outer layers.

This knowledge will allow a programmer to adapt to any language or technology in a much faster way. Because we are realistic, I may like a lot Android but, who tells me that there will always be that platform for me to work on, or who guarantees that I will always have work on that platform?: no one.

I have long bought books that have to do with this part of the knowledge because I am sure they will be very useful for many years and will not become in ornaments on the shelf in a few years.

I bought books about basic programming knowledge because I am sure they will be very useful for many years and will not become in ornaments on the shelf in a few years.

Find here a link of some of the most important books on this part of software knowledge.

Languages

This layer of knowledge is where you can find the languages ​​we use to perform our work but without any library or framework, pure language.

A lack of knowledge of the language with which we work often makes us perform our work worse or resort to frameworks or libraries; this might not be necessary with a better knowledge of the language.

A lack of knowledge of the language with which we work often makes us perform our work worse or resort to frameworks or libraries

I’m not against using libraries, it’s true that you do not have to reinvent the wheel, but I’m not in favor of using third-party libraries or frameworks in a massive way as in JavaScript for example. In many cases with the own language you can get better solutions.

This layer of knowledge is the second most important one. By mixing a good base with a good level of JavaScript, you will be able to manage without problems in the short term with AngularJS, ReactJS, or NodeJS.

No matter if it is front-end or back-end, you have a solid base which is the most difficult, so learning the technology or framework will not cost you too much and you will make a more appropriate use.

Technologies and platforms

This is where the layers of knowledge begin to be a little more volatile and loses importance, in my opinion. It’s easy to see a person starting programming in .Net and then programming on Android or iOS, like me for example.

Technologies and platforms layer is where these knowledge begin to be a little more volatile and are less important.

From this layer is where it begins to be seen that the knowledge that is learned in it are rather tools that we use to do a job.

It is true that there may be programmers like me who usually work with .Net, but occasionally they have worked with Android, iOS, Node.js, so I think that knowledge about platforms, in relation to this concept of circular layers of knowledge, are only tools rather than the main knowledge of a programmer.

Frameworks

This is the layer that I consider less important. For sure that it is important to know angular if you are in a project of this type, but within many years, when you look back, you will remember it as a tool that you didn’t use as the basis of knowledge of your entire career.

They are tools that you use to do a particular job, and it could be better using React rather than use Angular in another project, who knows, or none.

This is why focusing on being an expert in a framework gives you short-term benefits but not long term ones, so, from my point of view, it is a mistake.

Of course you must know React if it is used in your project (and the best you can), but do not make your career depend on React, do not be a React programmer but a programmer with a very good base that uses React or Angular according to the characteristics of the project.

Only four circles?

Like Uncle Bob explains in his famous article on Clean Architecture, there are not only four circles, you can put those you want.

For example you could add another one for project type; in this layer there could be project types such as web applications, desktop or REST API.

Conclusions

In my experience, having a good base is the most important knowledge that you will acquire as a programmer and that will serve you forever.

The platforms and frameworks are volatile knowledge, basic knowledge about programming is more important.

I am not against the specialization in platforms, in fact I follow people who are experts in Android for example but if there is something common in all of them is that the knowledge they have of the innermost layers is very important

It is not my intention to say that you only have to learn basic knowledge, but if I do believe that it should be the central pillar of your knowledge.

It is impossible to know everything but I think that if we have to prioritize, I have clear that the most important thing is to go from internal to external circles, that is my opinion.

Thanks for reading this article! If you liked it, press ‘Recommend’ (the ❤ button) so others can read it too :)

--

--