Many DevOps/SRE/Platform Engineers, despite possessing extensive knowledge and familiarity with a variety of programming languages, often refrain from identifying as coders. This phenomenon may seem perplexing, given their technical expertise. Is there a way to shift this perspective? I propose a 5-step plan to guide any DevOps/SRE/Platform Engineer on their path to embracing their potential as proficient programmers.
Step 1: Unearth Your Passion: Solving Problems that Matter to You
DevOps/SRE/Platform Engineers often exhibit a tendency to comprehensively explore tools, striving for a deep understanding that empowers them to solve potential problems rather than simply applying solutions. This enthusiastic pursuit of knowledge frequently leads to a broad but surface-level familiarity with many languages, epitomized by the ubiquitous 'hello_world' exercises. To deepen this proficiency, one effective strategy is to identify a genuine problem, one you encounter in your own work or interests, and apply your skills to solve it. Aim for practical, tangible outcomes rather than abstract, theoretical mastery.
Step 2: The Power of Persistence: Embracing a Language Wholeheartedly
DevOps/SRE/Platform Engineers are often praised for their ability to adapt quickly to various programming languages. However, this skill can sometimes lead to a premature transition from one language to another before a deep understanding of any particular one is achieved. To truly master a language, it's essential to choose one and persistently engage with it, even in the face of obstacles. Try to resist the temptation of shifting to a new language merely because it's currently popular. An effective strategy to support this learning process is to create a multitude of small programs that exercise different facets of the language. Saving these programs in a source control repository will enable you to review and track your progress over time.
Step 3: Beyond Scripting: Recognizing the Depths of Programming
For DevOps/SRE/Platform Engineers, scripting often comes as second nature, acting as a powerful mechanism for linking disparate tools together. However, it's important to distinguish between scripting and programming, as the latter involves a broader scope of tasks and complexities. This differentiation tends to become clearer when one starts programming in a non-shell language, where the challenges and the depth of understanding required go beyond the customary tasks associated with scripting.
Step 4: The Art of Leveraging: Using Modules and Libraries Isn't Cheating
Leveraging modules and libraries in your code is far from any form of short-cut or dishonesty. Rather, it exemplifies smart and efficient coding practices. These pre-existing pieces of code are akin to building blocks that you can assemble to effectively achieve your objectives. So, feel empowered to use them confidently, as they are vital tools in your programming toolbox.
Step 5: You Are Your Own Benchmark: Ignoring the Noise and Coding Your Way
A significant obstacle to coding can often be the apprehension about potential criticism or the fear of making mistakes. However, the key is to maintain focus on your primary goal: creating functional programs. Place your emphasis on solving problems effectively and efficiently, rather than conforming strictly to a particular coding style or syntax. After all, the utility and effectiveness of your code is the paramount consideration. As your confidence and skill grow, adherence to common practices and style will come naturally.