Roughly speaking, programmer’s daily work can be divided into three layers: system layer, middleware layer and application layer.

Let’s go from the bottom to the top, layer by layer, and see what each layer is doing.

1

The system layer refers to the operating system, database, compiler, TCP/IP protocol stack, virtual machine, etc. In addition, I include programming languages in this layer.

The programmers who work at this level are basically gods. For example, Linus Torvalds writes Linux, and Bill Joy writes TCP/IP implementations while reading protocols.

Anders, who wrote the Delphi (Object Pascal) compiler using assemblies, and the inventors of various programming languages are not to be listed.

Most of the people on this floor are quietly working to build the world we live in. They hide their skills and names, and rarely speak out, because even if they do speak out, many people don’t understand them, because they are too professional and sophisticated.

People on this level have two characteristics:

(1) I really love computers, otherwise I would not have explored to such a deep level, and can withstand loneliness in this layer of work.

(2) Strong ability. Because the nature of this layer of work requires high performance, high reliability, need to deal with hardware, need to deal with a huge number of details, the average person really can not do.

2

Middleware layer is very interesting, some things the system layer does not want to manage, the application layer can not manage, have to hand over a middleware to do.

Traditional middleware is things like WebLogic, Websphere, JBoss, Tomcat, MQ, if I generalize it, Docker, Elastic Search, Kafka, Spring, Zookeeper, Ngnix, Redis, Dubbo and so on are included. It can also include software and systems that are put out by the company’s technology platform division for trial use by the entire company.

The voice of the person working on this floor will be heard by many people because there are so many users that everyone will understand it.

Programmers pay a lot of attention to this layer. What’s new? What’s new? The preachers came out to write articles and “preach” a lot.

It’s also very rewarding for programmers to work at this level:

(1) Directly involved in development, when you start to work on common components and frameworks, the requirements for technical and abstract capabilities will be much higher than the application layer.

(2) Become an expert in a certain field, such as caching, search, distribution, load balancing, etc.

3

Finally, there is the application layer, which mainly uses the system layer and the middle layer to implement business logic, nicknamed add, delete, change and search.

The vast majority of people work in this floor, especially the students who have just been trained, must stay in this floor for a period of time, but also may stay for a lifetime.

Don’t underestimate this layer, which translates business requirements directly into technical implementations that create value directly.

Unfortunately, students of the application layer need to master the knowledge of the following two layers, not necessarily profound, but need to know the principle.

At this level, the focus is on better and faster implementation of business requirements and subsequent changes, so there are object-oriented design, design patterns, agile development, continuous integration, continuous delivery, DevOps, domain driven development, TDD, Code Review, and other engineering practices.

There are masters on this floor, such as Martin Fowler, author of classic books like Analytic Patterns, Enterprise Application Architecture, and Refactoring, who is particularly good at distilling industry practices into concepts.

Another example is Robert Martin, the master of object-oriented design, whose SOLID principles outlined in his book Agile Software Development: Principles, Patterns and Practices over 10 years ago are still guiding principles in the FIELD of OOD.

In order to do things well at this level, there needs to be a special position responsible for the design of the whole system, this position is: architect.

Architects are generally experienced programmers who have rich practical experience, know the advantages and disadvantages of technologies, and can design appropriate technical solutions according to specific requirements, establish appropriate technical components and connect them to solve problems.

4

The system layer, the middleware layer, the application layer are not superior to each other, each layer has enough things to explore, to create.

If you like to develop something that a lot of programmers can use, consider moving into the middleware layer, such as your company’s technology platform division.

If you really like system level stuff, you have to pick a direction, like database, and dig deep, and there are already companies in the country that are offering you the opportunity to customize the OS, customize the database, customize the JVM.

If you enjoy solving real business problems at the application level, consider becoming an architect.

About old Liu and code farmer turn over

I’m a thread

I’m a Java Class

Object-oriented Bible

TCP/IP daming postman

CPU forrest gump

I am a network card

I’m a router

A story over HTTPs

The pinnacle of programming languages

Java: The Birth of an Empire

JavaScript: A loser’s counterattack