ProgrammingPro #31: Do programming certifications matter?, Prototypal Inheritance, C# Files Backup
Bite-sized actionable content, practical tutorials, and resources for programmers.
“I see many amazing engineers trip themselves up with imposter syndrome. We are all here trying to build something great, we will all run into issues, and we will all fail. … I think accepting failure, being willing to risk failure, and then overcoming failure is important.”
– Chris Timberlake (2022), In an interview published in DevOps Career Handbook
To be successful as a tech-pro technical know-how is critical, but so is a leadership mindset combined with effective communication, confidence, and resilience in the face of failure. This is what Chris Timberlake, a DevOps pro with a distinguished career working with companies like GitLab, strongly believes. You can read more of his insights including what it means to be a consultant and how he developed his resilient positive mindset in todays Expert Insight section.
But as you know, we have more, and here are my top 5 picks:
Stay awesome!
Divya Anne Selvaraj
Editor-in-Chief
PS: If you want us to find a tutorial for you the next time or give us any feedback, just respond to this email! If you are looking for Python stuff, go here.
🗞️News, 💡Opinions, and 🔎Analysis
🗞️News
Biden Administration issues Executive Order on AI: The order issued this Monday, requires developers to share safety test results with the government, establish safety standards, and prevent AI from creating dangerous biological materials. Read to learn why AI experts believe it's a significant step toward responsible AI adoption.
Cybercrooks amp up attacks via macro-enabled XLL files: These files offer enhanced capabilities and are now the seventh most abused file extension. Read to learn about a recent campaign that used XLL attachments to deploy malware, and how attackers have adapted after Microsoft's move to block VBA macros.
Codefresh releases new dashboard that provides more details on software development life cycle: The new dashboard integrates GitOps and Argo CD projects. Read for more features including a single-screen view for managing environments and applications which eliminates the need to switch between tools.
Fermyon Enables Polyglot Programming via Wasm Update: This development essentially means you don't need every part of an application to be written in the same language. This flexibility can be a game-changer for developers. Read to learn more about how this can be a game changer in combination with the upcoming Spin 2.0.
C++23: Removing garbage collection support: This feature, added in 2008, had little practical use and was rarely implemented. Read to learn how the removal simplifies the standard and doesn't affect existing garbage collectors used in C++ for virtual machines of other languages.
💡Opinions and Analysis🔎
State of Java: Resilience amid licensing changes and security concerns: Java remains a powerhouse in the programming world, with 98% of businesses relying on it. However, Oracle's recent licensing changes have sparked concerns, as 82%of Oracle Java users worry about the new pricing structure. The survey also highlights Java's integration into the cloud, with 90% using it, but cost and security issues persist. Security challenges, like the Log4Shellvulnerability, affect about 80% of respondents. For programmers, this report provides crucial insights into the state of Java and the need to explore alternative solutions. Read the full report for in-depth analysis (registration required) or a more expansive summary here.
Do programming certifications still matter?: Absolutely. However, while certifications streamline hiring and set benchmarks, real-world experience and adaptability are equally important. Read for insights into the balance between certifications and real-world experience and a list of popular certifications to consider to remain competitive.
Mixing C# and Rust -Interop: In this article, the authors introduce 'mycorrhiza,' a Rust library that simplifies Rust/.NET interop, making it look like standard Rust code. Read for examples that show how seamless the interop can be by comparing Rust and C# code for a simple "Hello, World!" program.
A survey on IoT & embedded device firmware security: architecture, extraction techniques, and vulnerability analysis frameworks: Real-world attacks, such as the Mirai botnet and the Reaper malware, have demonstrated the vulnerability of embedded systems. Read this paper for a comprehensive analysis and discover a new vulnerability analysis framework to address existing challenges.
🎓 Tutorials and Guides🤓
Are you a C++ developer struggling with setup and consistency issues?: You may want to take a look at Nix to achieve reproducible environments and swift setup without containers. Read for detailed explanations and code examples for cross-platform consistency and easy compiler switching.
Blazor Unit Testing Tutorial in C#: This tutorial explains how to start Blazor unit testing and introduces tools to simplify the process. Read for practical examples using xUnit and bUnit to test Blazor components; learn how to test repositories and service layers, and discover best practices.
Writing a Simple C# Files Backup Solution for File Server: This article discusses the basics of copying files, handling read and write errors, and proposes an incremental backup strategy. Read to understand the logic for selecting backup drives and backup types and using Windows Task Scheduler to automate the process.
JavaScript – Prototypal Inheritance – Illustrated: This article delves into JavaScript's instance-based approach to inheritance, exploring how objects inherit from others, regardless of creation method. Read to learn how prototype chains are established, and understand the subtle distinctions in method inheritance.
How to Loop Through Arrays in JavaScript: This article covers methods essential for displaying, calculating, filtering, and modifying array elements. Read to learn how to transform and filter data using map and filter, perform calculations with reduce, and check conditions with some and every.
How to use Cypress for End-to-End Testing your React Apps: This article explains Cypress queries, assertions, and actions and provides insights on organizing and running tests efficiently Read to learn how to use this straightforward end-to-end testing framework for troubleshooting web applications.
How to Contribute to Open-Source Projects – Git &GitHub Workflow for Beginners: This guide provides step-by-step instructions, making the process less intimidating for those new to open-source contributions. Read for essential insights on topics like forking, cloning, branching, committing, and resolving merge conflicts.
Salesforce Tutorial - A Complete Guide for Beginners: In this comprehensive Salesforce tutorial for beginners, you'll delve into Salesforce's architecture, including Batch Apex, Force website, AppExchange, Triggers, and Process Builder. Read to understand how Salesforce simplifies application creation and customization.
🔑 Secret Knowledge: Learning Resources🔬
Nobody Understands C++: This article series highlights the misconceptions around C++ and attributes them to old-school developers who learned the language before its 1998 standardization. Read for comparisons between a traditional C-style approach and a modern C++ approach and embrace advanced features.
🔥 9 Open-Source Repos That Will Make Your SaaS Gold: From a Next.js SaaS starter kit to robust security frameworks and real-time GraphQL APIs, these tools can save you time, enhance security, and unlock new possibilities. Read to elevate your SaaS game.
A Convenient Way of Filtering Objects with Objects in C#: This article introduces a free C# library, Oasis.DynamicFilter, which simplifies the process of filtering C# objects with object instances. Read if you are looking for a way to deal with multiple search fields and complex filtering requirements.
Can Rust prevent logic errors?: Rust's expressiveness and type system can help prevent some logic errors, but it's not foolproof. Read for a practical examination of Rust's features, such as its type system, ownership model, and concurrency control, and how they contribute to writing more correct code.
Deploy Rust Code Faster: This article explores how Shuttle simplifies Rust code deployment, removing the need for steep learning curves and freeing you to concentrate on your business logic. Read for a real-world example of deploying Rust services with Shuttle which made provisioning and deployment painless.
Dynamic SQL Template with Golang: This article introduces a library called tqla, pronounced "tequila," which leverages Golang's text/template package to generate dynamic SQL statements securely and with ease. Read to overcome hurdles in creating conditional SQL statements, such as security, performance, and more.
How to Think About Security in Next.js: This article provides in-depth advice for securing Next.js with React Server Components, covering data handling, writes, error management, and the significance of regular audits. Read to choose the right data handling model for your project, protect against data exposure, and more.
🧠 Expert Insight 📚
Here’s an interview with a DevOps architect and consultant from the book The DevOps Career Handbook by John Knight and Nate Swenson.
An Interview with Chris Timberlake
A little bit about Chris as told by his interviewer, Nate: Some people have an impact on you. Chris Timberlake is one of those people for me. From the first time I attended a meeting with him, I could tell he was going to be someone that I was going to be able to soak knowledge from.
This proved true during the time our paths crossed while we worked on an implementation for GitLab together
Q: Thanks, Chris, for agreeing to discuss your DevOps journey with me. Before we get started, can you introduce yourself and the experiences that have led you to where you are now?
A: Thanks for having me, Nate! I started working with computers at a young age – before I was 10 years old. I started out working on GeoCities websites and booting tools for Yahoo Messenger, and then moved into programming video games based on the Half-Life Source Engine. These events were my introduction to programming. I have been addicted ever since. I took a short break to pursue a career in law enforcement. Then, I came back to programming and found myself through a series of events working for Red Hat on massive digital transformations. Now (at the time of the interview), I work at GitLab as a professional services architect, and I help lead digital transformations.
Q: Wait – so you are a technologist and an officer of the law? Impressive! Do you consider yourself a DevOps engineer? Can you explain how you differentiate between a DevOps engineer and a software engineer or are they the same?
A: I do consider myself a DevOps engineer, but I also consider myself a half-decent software engineer and SysAdmin. I move between the separate roles very fluently. Previously, in 2015,I would say that a DevOps engineer was just a software engineer with SysAdmins abilities. However, the DevOps field has grown substantially and evolved with the cloud market. Today, I consider a DevOps engineer its own role. Today, a DevOps engineer is an engineer who handles most of the piping for automation and delivery.
Q: Chris, you have seen many sides of engineering and DevOps. Can you explain the biggest difference between working in DevOps as a consultant versus directly for a company?
A: The biggest takeaway is your role. As a consultant, you must have an entirely different mindset and you have different responsibilities. As a consultant, you are supposed to be a leader of the field, an educator, someone people look up to for answers and to get out of a hairy situation. You also have to coordinate travel, expenses, being on call, and working in different environments – sometimes without the tools necessary. As a consultant, any role you have is much more difficult. For example, as an employee, you do not have to worry so much about ensuring you are on a plane in Atlanta at 6 P.M. to meet a connection in Dallas at 10 P.M. so that you can be at a meeting in San Francisco at 8 A.M.
As an employee, you have far fewer concerns. I think of being a consultant for DevOps as being two distinct roles in one. On the one hand, you are an individual contributing to DevOps engineering. On the other hand, you are a traveling leader or teacher who educates others on the topic.
Q: Thanks, Chris. As a follow-up, question do you think a consulting role is suitable for someone looking to start their career in DevOps or is it a role for experts only?
A: It is suitable for either scenario. It is less about knowledge and more about the determination and ability to remain calm under pressure. As I started my consulting career, I certainly was not an expert on all things. Even today, I am asked about things I am not an expert on. But when faced with uncertainty, I make sure I go out and find those answers for folks. I make sure I educate myself on the subject at hand while keeping a clear mind about the topics. One of the things being a consultant has taught me is that I do not understand a solution or topic unless I can reliably, accurately, and properly argue both for and against that item. Being a consultant can be a stressful job. It is certainly not for everyone. It is less about what you know and more about how you work, being able to handle the stress of the role, and even actually enjoying the role.
Q: Thanks, Chris, I feel our readers will find this particularly useful as they navigate their DevOps career. I would like to switch gears and talk about open source. At least two of the companies you have worked for are considered pioneers in open source software –GitLab and Red Hat. Many would say they are also dominant players in the field of DevOps. Can you share your thoughts on the relationship between open source and DevOps?
A: I mean, it is no secret that the future of software is open source. Historically, many of the DevOps tools and patterns came from open source projects. People would self-organize and work on a project together, then bam – you have a new product that is used by many and even corporations. Some may feel that open source is beneficial because it allows folks to be involved in software who may not otherwise be.
The true power of open source is transparency, collaboration, and, most importantly, open conflict that happens. All these things are key to producing something great. Red Hat is not just a company built on open source; they bring those values into how they work and operate. They allow employees to be themselves and are transparent with those employees about things. Red Hat was able to become the biggest acquired tech company to date at 34 billion dollars. GitLab also takes these values to heart – not just with its software but in the way it works. This resulted in a massive IPO (Initial Public Offering) this year (2022).
Those same values that open source advocates and encourages drove those two companies to their heights and I believe will cement DevOps as a requirement for all software and IT companies in the future. This is because DevOps also encourages and implements those same values.
Q: I could not agree more! Now, going on a tangent to what you said about DevOps values, what do you feel are the most in-demand and desired soft skills for DevOps professionals and those looking to break into the field?
A: I think no matter the role you are in, you should aspire to be a leader. Now, that does not mean you have to be a manager or even lead anything. But having leadership-like attributes will help you in your career goals anywhere. Having effective communication skills is necessary. Clear communication that is informative and receptive cannot go overstated. Having confidence is another important attribute.
Even if you must fake it till you make it. I see many amazing engineers trip themselves up with imposter syndrome. We are all here trying to build something great, we will all run into issues, and we will all fail. Lastly, I think accepting failure, being willing to risk failure, and then overcoming failure is important. Every engineer with strong soft skills has a story of when they failed hard.
Me? I lost 4 million dollars in revenue in an afternoon for a company I was employed by. Being able to iterate and learn from those failures, prevent them from happening, and build something better after a failure is very important. That's because everyone in any career will fail; it is what you do after you fail that is important.
Q: I would be interested to hear more on the story of how you lost $4,000,000 if you can discuss that. What happened and what did you have to do to remediate the situation? Also, were there any repercussions from your employer when this happened, and what was their response?
A: Unfortunately, I cannot. There are privacy concerns. What I will say is what happened; I oversaw the release of some software to a shopping cart. It caused the shopping cart to not entirely break but have a reduction in function. So, we stopped many customers from checking out, but not enough to trip automatic alerts and monitoring.
As for repercussions, absolutely. I had to write a detailed document explaining how everything transpired., digging deep using the 5 Whys method. Then, I had to write a statement to the shareholders of the company as to what happened and assure them it would not happen again. All I will say is that JavaScript is very cool until there is a small syntax error that causes big problems.
Q: I understand. I understand outside of work, your hobbies also include many software-related endeavors. Can you talk about these, and do your endeavors outside of work play into your success at work?
A: Absolutely! I will not say my outside work successes have helped my career. But my failures have! I have done a significant amount of mobile, game, and desktop development, which is a fancy way of saying I have gone down the rabbit hole of finding issues with building toolchains and third-party libraries. It also means I have had experience with many technologies my normal job does not expose me to either.
A good example is when Apple flipped the switch on mobile apps and blocked any apps from being able to compile code on the fly. It broke numerous MongoDB libraries: being able to navigate and resolve this issue was a terrible endeavor that I learned a lot from. I use those lessons learned in my day-to-day work.
Then, there are the more fun rabbit hole projects, such as converting Quake 2 from C into C++ compilers on a weekend. This taught me the inner workings of some of the C and C++ compilers. Not all my projects involve software. I am also a huge car fanatic. Being able to diagnose and problem solve weird electrical issues with a car or engine helps me solve problems at work. These lessons are translated into software.
Q: I will not keep you too much longer, but I have a few more questions for you. What advice do you have to offer to individuals who want to get into the DevOps field?
A: I would say that if you want to be in DevOps, you should spend a lot of time on side projects and build up a lot of knowledge. Your job will not expose you to everything you need to learn; you must be passionate about the field. Build a mobile app, make a video game, and then automate it.
Q: Last question – technology is changing so fast. Can you paint a mental picture of what the DevOps landscape will look like 20 years from now?
A: In the future, I think we will see two things. First, we are going to see a consolidation of companies in DevOps as a fight for sales and market share increases. We have seen a tremendous consolidation over COVID.
With that, we are also going to see a lot of new companies start, where someone has a new process or idea, and they give it as hot and build a company from it. This is similar to how GitLab and many new tech IPOs started. Both of those are near term; 5-10 years out. I could not even guess 20 years out. Everything is moving so quickly that in 20 years we could have wearable VR and Star Trek holograms. Or, those things could be like flying cars, forever just an arm's length away.
No matter what, we are going to see increased transparency, collaboration, and conflict in software and DevOps. No matter what, we will be better off.
Nate: Thanks for your time, Chris, I look forward to the next time we discuss all things DevOps.
DevOps Career Handbook by John Knight and Nate Swenson was published in June 2022. You can get the book here. Also, did you know we have dedicated newsletter for DevOps pros called SysAdminPro? Subscribe to it here.
🛠️ Useful Tools ⚒️
rerun: a platform that offers C++ programmers the ability to log and visualize live streams of multimodal data, aligning with Rust and Python, providing efficiency and consistency for developers in fields like computer vision, robotics, and AR/XR.
FixedStrings: a memory-efficient solution that provides value-type fixed strings in various sizes, such as FixedString8 andFixedString16, designed to optimize memory usage and enhance performance in applications, particularly in hot paths where reducing heap allocations is crucial.
web3j: a lightweight, modular Java and Android library designed for interacting with Smart Contracts and Ethereum nodes, offering a comprehensive set of features including JSON-RPC client API, Ethereum wallet support, and more.
Radius: an open-source project developed by the Microsoft Azure Incubations Team to simplify cloud-native application development, enhance application understanding through an application graph for better visualization, and more.
📢 If your company is interested in reaching an audience of developers, software engineers, and tech decision makers, you may want to advertise with us.
We have an entire range of newsletters with focused content for tech pros. Subscribe to the ones you find the most useful here. Complete ProgrammingPro archives can be found here. Complete PythonPro archives are here.
If you have any feedback, leave your comments below!