Special Delivery Two, the Essential Skills to Become a Dev Ops Engineer ( Below)

Special Delivery Two, The Essential Skills to Become a DevOps Engineer (Below) #

Hello, I am Shi Xuefeng. In the previous lecture, I introduced the specific responsibilities of a DevOps engineer and the three essential soft skills for a DevOps engineer, which are communication skills, empathy, and learning ability. Now that we have this understanding, let’s take a look at the “main event” today: the essential hard skills for a DevOps engineer and the learning path required.

Essential Hard Skills for DevOps Engineers #

Hard skills refer to a person’s technical abilities. Soft skills are usually “understood but not easily expressed,” but technical skills themselves are more specific, and the level of technical expertise is relatively easier to measure. In a company, if technical personnel want to get promoted, the key is to rely on their technical skills.

The IT industry covers a wide range of technical fields, and new technologies have emerged in recent years. To master any technology from beginner to expert requires a lot of time and effort. So, when facing so many technologies, it can be a difficult task to decide where to start. For those of you who want to become DevOps engineers, or even DevOps experts, what core technologies must you master?

1. Coding Skills

In this day and age, coding skills can be said to be the most important hard skill. It goes without saying in the IT industry. For example, there are DevOps developers in operations, testing also has testing developers, and even product managers need to understand coding in order to communicate smoothly with their development colleagues.

For the construction of the tool platform itself, coding skills are naturally of utmost importance. This is not only about implementing the tool platform through coding but also about understanding the entire development process. The users of these platforms spend more time dealing with code than with people. If you cannot understand their daily work methods, then how can the tool platform you create truly solve the team’s problems?

The coding skills mentioned here include two aspects: scripting language proficiency and high-level language programming proficiency.

  • Scripting language proficiency. This is naturally familiar to operations engineers, with various VIM, Emacs, Shell, and Python being a piece of cake. For developers, the difficulty lies not in the syntax itself but in understanding the related operating systems and commands. After all, scripting languages are a fast means of automation and pursue efficient development that is simple and easy to use.
  • High-level language programming proficiency. You need to master at least one high-level language, whether it’s Java, Python, Ruby, or PHP. In fact, the language is just a tool, so don’t agonize over which language to choose. The only requirement is that you can use it to solve practical problems, such as supporting the development of tool platforms for mobile or web applications. To write good code, not just usable code, you also need to have knowledge of common development frameworks and patterns. This is a relatively long process and cannot be achieved by just “mastering XX language in 21 days.” Understanding and being able to write good code are totally different.

Writing good code requires constant improvement and refinement. Rather than saying that writing good code is a skill, it is more of a belief. Our team’s internal communication group is called “WBC Team,” which stands for “Write Better Code”—this is actually our team’s self-motivation. In the daily development process, we continue to discover and summarize better implementation methods, share them internally, and learn from each other to continuously improve our coding skills. I have excerpted part of our recent experience in optimizing pipeline scripts, which you can refer to. In fact, everyone can summarize their own coding experiences.

2. Automation Skills

In terms of automation skills, you first need to establish a comprehensive understanding of Continuous Integration and Continuous Delivery (CI/CD). Because CI/CD can be said to be the core practice in the field of DevOps engineering. Currently, most companies are focusing on building the capability of continuous delivery of software, especially through pipelines, which are often equated with DevOps platforms.

Next, in order to achieve end-to-end automation, you need to be proficient in using the typical tools at each key point of CI/CD and understand their design principles.

On the one hand, many companies are embracing and participating in open source, and the maturity of open source tools is very high. They are gradually replacing commercial tools and becoming mainstream solutions. Using open source tools directly or developing on top of them is the most cost-effective way in the field of automation. Therefore, Git for version control, Gitlab for code hosting, Jenkins for CI, Sonar for code scanning, Ansible for automation configuration management, Docker and K8S in the container domain, and other frequently used tools are the first targets for you to learn. On the other hand, whether it’s open source tools or self-developed tools, the integration of tools is also an important factor in automation. Therefore, in order to understand the implementation of open source tools, one must be able to both attack and defend. With the support of tools, CI/CD will be more proficient, whether through encapsulation or self-development.

Regarding the DevOps tool landscape, I’ll share with you a version of the DevOps maturity model from the Institute of Information Technology, for your reference. It is worth noting that the focus should be on quality, not quantity of tools. In fact, there are common design thoughts and ideals behind these tools. By mastering individual tools, one can achieve a broader understanding.

3. IT Fundamentals

I have always believed that operations is a highly respected profession and also the origin of DevOps. If you don’t come from an operations background, then you need to focus on mastering the basic concepts of operations. At the very least, you should understand basic knowledge of the Linux operating system, including common system commands, as well as basic networking and routing protocols, etc. After all, for developers, they are used to working with graphical interfaces based on an IDE (Integrated Development Environment). For example, if you were to ask an iOS developer how to build and debug using the command line or how to automate project configuration with code, they might not be able to answer.

Furthermore, as infrastructure-as-code technologies mature, you need to be able to understand configuration information, as well as application automation building, running and deployment methods, and even be able to modify environment and application configurations independently in order to achieve what we call “development-ops”. Although in most companies, operational capabilities are usually provided to the outside world through an operations platform, a basic understanding of operations concepts is still necessary.

4. Container Cloud Capabilities

Cloud computing has brought revolutionary changes to software development and deployment. In the future, companies will gradually migrate to the cloud, and cloud-based software development will become the mainstream. Container technology is naturally suited for DevOps, and Kubernetes can be said to be the Linux of the cloud era. The entire ecosystem built around Kubernetes provides great convenience for application cloudization.

Therefore, you also need to be familiar with and master container technology, represented by Docker, as well as the container orchestration standard, Kubernetes. In the era of cloud computing, the application development and deployment methods based on container technology are knowledge that every DevOps engineer must understand.

5. Business and Process Abilities

At any time, the goal of DevOps is to serve the business objectives. DevOps itself is not a rigid set of practices, but represents a force for change. Therefore, strengthening understanding of the business helps identify key areas for DevOps improvement, while a process-oriented mindset helps break through bottlenecks and take a holistic view.

Many times, what enterprises need is not just a single tool, but a whole set of solutions associated with the tools, and the most important part of that is the business process.

For DevOps engineers, they should have the ability to identify bottlenecks in the current process and understand what an optimized process should look like. This is also one of the bottlenecks that limits the expansion of engineer capabilities.

For example, when developing a DevOps platform tool, you may think that the most suitable team to handle it is the development team because they have the strongest coding skills. But in reality, the design of the DevOps platform is often led by a team that is most familiar with the internal development process of the enterprise. Because the work of a DevOps engineer should be closely tied to the business and focused on a global delivery perspective, configuration management, quality management, project management, and technical operations teams are usually more involved in similar roles. After all, only when the direction is correct, can everything done be considered an addition.

Learning Path #

So, is there a universal learning path to become a DevOps engineer? In fact, this question is not an easy one to answer, just like whether there is a universal improvement path for implementing DevOps in a company.

From the previous competency model, it can be seen that DevOps engineers are particularly suitable for the requirements of this era. They possess multiple skills and are typical full-stack engineers or “jack-of-all-trades”. Only in this way can they fully bridge the cognitive gap between different roles and become the jack of all trades within the team.

Based on past experience in implementing DevOps within the company and the current industry trends, I have a few suggestions for you:

1. Strengthen your coding skills

The future world is a software-driven world. The necessary skills we used to talk about, such as foreign languages and driving, can now be replaced by software. Programming skills will soon become the next essential skill, and even the “New Generation Artificial Intelligence Development Plan” released by the State Council of China mentions the popularization of programming education in primary and secondary schools.

However, there is more than just a small gap between writing usable code and writing good code. You might say that artificial intelligence will do all the programming in the future, but where does artificial intelligence come from? Who trains and annotates the artificial intelligence? Therefore, the more fundamental the skill, the less likely it is to become outdated, such as mathematics, core programming concepts, data structures, and the ability to understand and model the world based on code.

So, if you have just started learning code, I suggest setting a goal for yourself to specialize and strengthen your coding skills, spending at least 1 year to go from a beginner to an experienced coder. This is crucial for your future development in the IT industry.

Let me share a small tip with you. You can learn and apply code based on mature open-source software, such as lightweight automation operation and maintenance platforms like Adminset, which can already solve most problems for small and medium-sized companies. Code proficiency is not just about mastering syntax and frameworks, but more importantly, designing data and business processes based on scenarios and implementing them through code. After all, learning based on real-world application scenarios is the most efficient way.

2. Cultivate core skills in cross-functional areas

I believe that after several years of work, you already have the basic skills required for your current position, which is the foundation of your current livelihood. On top of these skills, gradually developing cross-domain and cross-disciplinary abilities, especially those core skills, will give you the highest return on investment.

For example, if you are a software development engineer, congratulations, you are already on the path of coding. Next, mastering operation and maintenance skills should be your next goal. Among these goals, operating systems, automated deployment, and cloud capabilities are the cross-domain skills you should prioritize developing, as they are core to operations and provide the best starting point for understanding operations. Conversely, if you are in the operations industry, core coding skills should be your goal, in addition to commonly used scripts.

In fact, our daily work is inseparable from cross-disciplinary knowledge. For example, why do operations deploy so many instances every day? What is the calling relationship between each instance? Asking “why” more often often yields new insights.

Moreover, when dealing with cross-disciplinary areas, in addition to core skills, you should also spend time understanding the commonly used tools. There is plenty of information available online, so getting started quickly should not be difficult.

3. Core concepts of DevOps and business thinking

If you don’t understand what DevOps is, how can you become a DevOps engineer? Therefore, you need to have an understanding of core concepts in DevOps, such as lean and agile, continuous delivery, and many more practices. Of course, if you subscribe to this column, I will guide you through this stage and you can quickly move on to the next phase and practice in real situations.

The implementation of DevOps in companies is a trend, and perhaps your team will also be involved. So, in addition to doing your own job well, you can also participate more and think more. Observe the process of promotion, what roles are involved, and what the overall progress and plans of the project are. Practicing and filling in gaps in real-world scenarios is indispensable for accumulating experience. Many times, it’s not that we don’t have opportunities to learn, but we simply don’t want to see them.

In addition, if you feel far from the business side at the moment, you can try to understand some major business goals and communicate with the upstream and downstream teams in your team to see where their current focus is. Since the goals of the business require close collaboration of the entire team, every team member is a part of it, and they also reflect the goals of the business.

4. Subtle development of soft skills

Skills such as communication, empathy, self-drive, learning ability, and proactiveness are shining points for anyone in any profession. Many habits that are innate or developed since childhood require long-term training to be effective.

Many times, IT professionals are perceived as not good at expressing themselves, and combined with the influence of Eastern culture, they tend to be more reticent, which can be potential obstacles to communication and expression. At this time, you should try to seize the existing opportunities, such as participating in internal team book sharing sessions, signing up for internal lecturer training in the company, and so on. Even if the content you share at the beginning is less than 1% of what you have in mind, it is still a good starting point. My advice is six words: practice diligently, summarize more. Just like DevOps, continuous improvement and continuous feedback are essential for building self-confidence.

Summary #

To summarize, in these two lectures, I introduced three key responsibilities that DevOps Engineers should focus on: tool and platform development, process implementation, and technical research and pilot projects. Additionally, I distilled eight core competency models from a practical perspective, consisting of three soft skills and five technical skills, and provided four suggestions for improving DevOps core competencies. To facilitate your review and understanding, I created a mind map to summarize the content of these two lectures, which you can refer to.

Finally, I want to emphasize that just like DevOps does not have a clear definition, there are no specific constraints on the skills of DevOps Engineers. Therefore, you should always maintain curiosity, continue learning, and develop your own competency framework. By accumulating experience through practice, you can gain an advantage in intense competition.

Reflection Question #

Regarding the content of the past two lectures, which aspect of your skills do you think needs improvement? Do you have any tips for quickly improving your skills?

Please write down your thoughts and answers in the comment section. Let’s discuss and learn together. If you find this article helpful, feel free to share it with your friends.