First Programming Project
Sunday December 30, 2018 2:07pm EST
I first learned about programming way back in middle school. Until then, computers were just those things in the classroom that I played games on when the teacher allowed me to. We didn't have them at home, yet. Even then, when we first brought home a machine, I pretty much just used whatever programs I had or found. It never occurred to me that I could make my own.
I'd discovered QBasic at some point and started messing around with that, but for years, I never really looked any deeper than what that offered. Even then, I just puttered around with it and didn't learn much beyond how to do a simple guess the number exercise. Honestly, I just didn't have a reason to look deeper into just the concept of programming.
Over the past few years I've had to teach myself a few new skills at work, with absolutely no training aside from what I could pick up just Googling. A little over 3 years ago I was working on a project that was being done manually via web portals. I discovered that some of these tasks (Essentially migrating the entire organization to 365 hosted Exchange and some other services) could be done via Powershell. Well, I thought to myself, what the fuck is Powershell? Yeah, I was that unaware of how things worked.
I Googled how to do these tasks via Powershell, finding myself diving into Technet and MSDN forums, etc. Once I was able to wrap my completely uninitiated brain around the way this scripting language worked, I was able to make progress and found myself with a nice little collection of single-use scripts for specific tasks either on single objects or in batches for multiple actions. The turning point in me just monkeying other people's scripts and being able to come up with my own ideas was when I finally groked the object-orientated nature of the language. I'd never really understood the concept until then. A whole new world opened up after that.
My day to day tasks were greatly accelerated just by being able to take a list of users to work on, and passing it to my little individual scripts and doing in seconds what would take hours via the official 365 Admin portal. The boss took notice and was happy with the progress I made in automating the project and asked if there was any way to make it easy for someone else to take over as a backup should it come up.
My mind instantly went to a GUI of some kind where I could package up the tasks into related functions via a tabbed interface. Of course, I had zero clue how to even start on something like this. To Google I went. I installed Visual Studio, used it to draw out some windows, and built a tabbed form with the older Windows Forms framework and about a month later, I'd converted a folder of individual .ps1 files to a point and click GUI interface.
This was the first taste I'd ever had of coming up with a project goal and following it through to completion in the world of programming. Granted, it was just a simple box and button interface with a scripting language behind it, but it got the job done. Little by little I updated the program and the final form included every single task I'd be running individually as single task scripts.
I'd gotten a taste and I wanted more. I looked for other tasks I could automate away via script and happened upon the process for onboarding and offboarding employee accounts in Active Directory. With the migration to 365, there were a few extra steps. The current process was for the Helpdesk to create the AD account, and then forward a ticket to the Admin team to handle creating the e-mail account and a few other provisioning tasks within 365.
I rolled up my sleeves and created a multi-part script that scanned AD for new accounts and provisioned everything needed. I did the same for removing accounts for employees that were terminated or otherwise separated. The tasks were somewhat complex for my level of proficiency, and I'm sure there were many "better" ways to do them, but I made it work. We added the scripts to a task server and scheduled them to run overnight. Everything was right with the world. Later on, after I had left for another employer, I was told by the people who took over maintenance on the tasks that what I had written was tight and elegant and just beautiful.
At my next job, I ran into some other tasks that while not a daily thing, were done often enough that automation would help immensely. The in house preferences were to write any custom tools with php and connect to Microsoft SQL DBs. This was all new to me, but I trudged ahead the same way I did before, Googling when I needed to and adapting bits and pieces of scripts I found online to fit my needs. I eventually left that job after a year and a half and went back to my previous employer and have taken over my old maintenance tasks again and have had the chance to create new programs to facilitate my day to day needs.