Cross training curriculum for developers and systems engineers

Introduction

In modern IT workplaces, work roles and job descriptions have evolved to include responsibility areas which go beyond what traditional roles would have thought of. Whether you are a traditional software developer or systems engineer, expanding your knowledge sphere to areas of the "other side" is always useful and should be sought after to a feasible extent. This article provides a cross training curriculum for developers and systems engineers.

The IT roles nowadays have expanded to include knowledge areas which did not exist in the recent past, including Artificial Intelligence and Cloud Computing. You can find more details about the modern IT roles in a recent presentation I created about IT professional career coaching at:

https://slides.com/stefanoscloud/100mentors#/3

This post provides some thoughts on an ideal cross training curriculum for developers and systems engineers.

Cross training curriculum

Training for systems engineers

Systems and cloud engineers need to have a better understanding of the software application frameworks and stacks they need to support and configure infrastructures for. A typical training curriculum for a systems engineer on software development concepts would look like the following.

  • Introduction to software development tools, frameworks and stacks. This includes how markup languages and programming languages work (both imperative and declarative).
  • Integrated development environments (e.g. Visual Studio and Visual Studio Code) and the software build process (from initial compilation or interpretation to object code to executable code). How does the .NET CLR work? What are the .NET runtime dependencies?
  • Understanding of .NET components and application software architecture diagrams.
  • Types of .NET apps, including mobile, Desktop apps with WPF, WCF, .NET core, C#/C++ CLI apps, etc.
  • Types of API (REST, SOAP, etc). How can we publish and manage an API? How do we ready API documentation?
  • Local and remote debugging techniques.
  • .NET core vs .NET. How can we port an existing application from .NET to .NET core?
  • How can we port a .NET application to a container?
  • Basic algorithm design and code complexity/performance optimization.
  • Understanding of UML class diagrams and object-oriented class/method hierarchy
  • Basic SQL interfacing frameworks (e.g. entity management) and SQL database schema design best practices.
  • How to perform software quality procedures and types of software testing (unit tests, system tests, integration tests, regression tests, stress tests, etc)

Training for software developers

Software developers need to have a good understanding of the underlying infrastructure technologies, on which their code is running. A typical training curriculum for a software developer on infrastructure managed operations concepts would look like the following.

  • Hardware, firmware and operating system concepts
  • Windows Server and Windows client operating system versions and server roles
    • Active Directory and Group Policy
    • Certificate services
    • DNS services
    • DHCP services
    • IIS services
    • Windows roaming profiles and folder redirection
  • Linux administration basics
  • Networking protocols such as TCP/IP, usage of Wireshark for network tracing
  • Subnetting and VLANs
  • Firewalling, routing and switching basic skills
  • VPN protocols
  • Understanding of communication protocols such as RDP
  • E-mail administration and the SMTP protocol
  • Remote Desktop Services policies and profiles
  • Create shares and give permission to shared folders/files (SMB/CIFS protocol)
  • Troubleshooting and tracing basics in Windows, Linux and in the Azure Cloud
  • SQL database concepts
  • Virtualization/hypervisor and container technologies
  • Storage concepts
  • Basic Powershell and Bash concepts and cmdlets
  • Basic Azure Cloud administration skills. How do we deploy code to Azure?
  • Basic Cloudstack administration skills. How do we manage virtual machines via Cloudstack?
  • Non-functional aspects of IT infrastructure (high availability and redundancy, scalability, performance, security, business continuity and disaster recovery, backup and restore, logging, monitoring and alerting)

An alternative training scheme for software developers on systems engineering concepts could look like the following.

  • Hardware, firmware and operating system concepts
  • Windows Server and Windows client operating system versions and server roles (Active Directory and Group Policy, Certificate services, DNS services, DHCP services, IIS services, Windows roaming profiles and folder redirection)
  • Linux administration basics
  • Networking protocols such as TCP/IP, usage of Wireshark for network tracing, subnetting and VLANs
  • Firewalling, routing and switching basic skills
  • VPN protocols
  • Understanding of communication protocols such as RDP
  • E-mail administration and the SMTP protocol
  • Remote Desktop Services policies and profiles
  • Create shares and give permission to shared folders/files (SMB/CIFS protocol)
  • Troubleshooting and tracing basics in Windows, Linux and in the Azure Cloud
  • SQL database concepts
  • Virtualization/hypervisor and container technologies
  • Storage concepts
  • Basic Powershell and Bash concepts and cmdlets
  • Basic Azure Cloud administration skills. How do we deploy code to Azure?
  • Basic Cloudstack administration skills

Devops

On top of the above cross training curriculum, it would be to the benefit of both systems engineers and software developers to immerse themselves into the world of devops, which is a fusion of both worlds. However devops as an IT practice is mostly interested in automating the software development lifecycle, by utilizing on-premises and cloud infrastructure and allowing all software development team members to be more independent and productive. Some basic devops skills should include the following:

  • Code versioning systems (e.g. Github).
  • Microsoft Azure Github services

Creating a cross training lab with zero cost

The following components can be easily built for both systems engineers and software developers to test each other's technologies and advance their skill set in a mutually beneficial way. The below list takes into account that there should be a balance between Microsoft Windows, Linux and Cloud administration skills.

  • Server/PC running Linux Ubuntu LTS (latest LTS) with KVM or ProxMox hypervisor.
  • Windows Server virtual machine (latest version) running Windows Admin Center. This should be sufficient to install various Windows Server roles and server roles services.
  • Pfsense virtual machine. This include the free pfsense installation which covers all networking and security functions of a L7 firewall appliance.
  • Cloudstack management virtual machine working in parallel with the Server/PC running Linux Ubuntu (KVM host). The management of all VMs can be carried out via the Cloudstack management console.
  • Windows 10/11 virtual machine with Cisco Packet Tracer and Wireshark. This machine should also have Starwind iSCSI SAN emulator. This should help try out SAN storage concepts and functions. Moreover, this machine can have the Visual Studio community edition and the Github desktop application.
  • A trial Microsoft Azure subscription (worth $200) would be handy to try out various Azure services and software development on the Cloud (e.g. Azure Functions).
  • Docker and Kubernetes images should also be deployed, to carry out an introduction to container technology concepts.