A TechRepublic reader named Aaron emailed me and posed excellent questions; here's an excerpt from his email:
"I manage a small IT department and all my skills are self-taught. At times I struggle with complex business initiatives and I believe if I had some programming skills I would be more adept at handling the initiatives. Can you recommend a programming language? Is formal education the best path or have you found that programming can be self-taught?"
I'm sure a lot of other readers are curious about programming language choices, so I decided to respond to Aaron's email with this post.
Learning programming skills
First and foremost, I absolutely believe that programming can be self-taught. In my experience, if someone can run a network or a server, they have the aptitude to handle programming. That said, not everyone does well with teaching themselves development, so if you are struggling to learn it, there is no shame in going to a community college or a technical institute to take classes. A four-year university will not be a good choice, since the curriculum is aimed at different goals than what you see at community colleges and technical institutes.
I handle a wide variety of roles in my job, including those of a small IT department, and I can tell you that adding programming skills to the mix is extremely important to getting things done. Programming is not mandatory for this type of position, but it is a big help. Some of the ways that learning programming can help you include:
- Task automation
- Better able to understand the underpinnings of applications for troubleshooting purposes
- Can perform or assist with application development as needed
- Programming can be leveraged to ease the use of certain applications (for example, Excel macros).
- Many system administration tasks are shortcuts to various scripts and APIs and can be enhanced with programming skills.
The world of IT is divided into two major camps -- Windows and *Nix -- and each one has a different set of skills to learn. Let's look at each one and see what programming skills are common in each, and how they can help an IT manager.
If you are running a Windows machine or network, PowerShell is the most important programming skill to learn. PowerShell is a runtime shell based on the .NET system, which is designed to take the traditional shell tasks and methods (like piping and redirection) and use .NET to manage it.
I am very impressed by PowerShell, particularly the object model that makes piping coherent. Many of the management GUIs in Windows Server applications are just shortcuts to creating PowerShell scripts and running them, and there are many things now that you cannot do (or cannot do easily) without PowerShell.
To write PowerShell scripts and "cmdlets," you need to learn a .NET language. I recommend C# at this point. While VB.NET may have a more "obvious" syntax, C#'s syntax is not difficult to learn. More importantly, it seems like fewer and fewer learning resources, examples, etc. are available in VB.NET, which makes learning it more of a challenge. I think it's worth spending the extra hour (at most) learning the C# syntax because you'll get better mileage out of this choice. In addition, most .NET applications seem to be written in C# now, so your skills will be applicable to other projects.
After PowerShell, I would get familiar with ASP.NET MVC, which is quickly replacing the difficult-to-learn WebForms system for new projects. ASP.NET MVC will allow you to write line-of-business Web applications. For internal application development, I suggest taking a look at the OutSystems Agile Platform; it dovetails nicely with your existing Active Directory infrastructure, and for a reasonable licensing fee, you will get an environment that will let you create great internal-use applications with much less effort than ASP.NET MVC will.
In terms of native or desktop applications, that environment is very much in flux right now given some of the recent Windows 8 announcements, and I do not feel this is a good time for a beginner to jump into desktop Windows development without more information on Windows 8 being available.
The C programming language is the foundation of the *Nix family of operating systems, and you cannot go wrong by learning it. Unfortunately, C is a tricky language to write quality code in, and even simple C applications can cause big problems when written incorrectly. Even if you do not learn C, you should get familiar with "make" and "makefiles," which are the basis for so much of what happens when working on *Nix systems.
If you do not feel comfortable learning C, I suggest learning a C-like language (good choices are Python, Ruby, and Perl) that can also be used to manage a *Nix system. Many critical and common system utilities are written in those languages, and all three have a wealth of support and are easy to learn and forgiving to the new developer. Once you've learned one of the C-like languages, the others can be picked up too. In addition, knowing one will make it easier to learn how to write scripts in any of the common *Nix shells like bash.
Furthermore, it is easy to write Web applications in all of them (although Perl Web applications are pretty outdated). I recommend Python + Django or Ruby + Rails as a one-two combination for having a great system administration language and Web development framework. And you can write applications for desktop environments as well. You cannot go wrong with either Python or Ruby.
Java is a possibility for Web development, but frankly, I find the Java ecosystem confusing, and it is not a great language for handling system administration tasks. Why learn multiple languages if you don't have to?
I hope this helps! I'm sure TechRepublic readers will offer great suggestions in the comments section too.
Justin James is the Lead Architect for Conigent.