I don't know about you, but I don't spend a lot of time thinking about my old tools. Old vacations, past holidays with the family, childhood, sure. My first hammer, my first shovel... not so much.
Still, a trip down memory lane once in awhile is fun, isn't it?
Caution: This will be long and largely personal. Maybe you can relate to some of it, maybe it'll be hair-pulling boring. You have been warned!
It's amazing how far technology has come, and how the pace of change only increases. We usually take our kids to the McKinley Museum a couple times a year. As in President McKinley. Thankfully it's not just a museum full of stuffed anamatronics. I mean there's a couple, but there are entire areas dedicated to history, nature, dinosaurs, and science too. If you're in Ohio, it's a great way to spend an afternoon.
Sometimes there are special exhibits too. Last year, they had an exhibit called "What's that, Mom?". It should've been called "If you drove your kids here to see this, grab an AARP brochure on your way out". I got to explain how we all thought Atari was the coolest thing since... Pong? Oh, that was Atari too?
My first exposure to any sort of programming was about the same time the Gameboy came out. My Dad got an 8086 computer for me to play with. It had a couple of floppy disk drives and a 4-color monitor. He eventually procured a 10MB hard drive (woah!), installed Windows 3.1 on it, and I discovered QBasic. All I had to go on was the built-in help system. We had a connection to CompuServe, but there weren't a lot of resources out there yet.
A few years later, my parents found a TRS-80 at a garage sale or something (the image at the top of this post), and I had my first portable device to create simple BASIC-style programs. I can't fathom how I tolerated it now, but I thought it was the coolest thing. Used to take it with me when we visited relatives. While the adults were talking, I was typing sample programs from a thick manual it came with, line by line on that single-line display. I don't remember what any of them did, but it was awesome. 🤣
Once I got into highschool, I picked up a graphing calculator. Now that really blew my mind. Once again, it supported a BASIC style language, which I used to create some simple little apps. I remember creating a periodic table app, where you could click on elements to see details. I didn't get as far with it as I'd hoped.
What I really admired were the kids who learned assembly language and wrote full-blown LOZ and Super Mario clones for the calculator. I even remember frequenting a site called ticalc.org, which I haven't thought of in at least 15 years, and I'm completely blown away that it still exists, is active, and actually looks pretty much the same! As you can see in this vid of a Tetris port, if you knew how to write in assembly, you could create some amazing stuff.
I just read an article this week about a guy who started programming as a teenager, and what drove him was creating bots for his favorite games. For me, it was the Legend of Zelda. I'll never forget that opening scene in "A Link to the Past", when you step outside the house and the game starts. This wasn't the first game I'd had, but it was the first that really felt epic - I wanted to tell people about it.
I was in college. I didn't start on a programming track right away, but once I did it was whatever colleges were teaching at the time. There was a lot of Java, which at least is still relevant, although I had a couple classes that used RPG IV of all things.
Looking back, I realize now just how little the traditional college environment had to offer someone in the programming field - and I don't think much has changed. What I've discovered over the years is that there's so much more to programming than merely learning a language, yet that's all they focused on. Well, that and prerequisites like accounting... it made little sense. I definitely gained some good theoretical practice, but most professors, though well-meaning, are out of touch with the latest practices. How can they not be, when they're working full time teaching and developing curriculums, and are not "in the thick of it"? I think I'd recommend finding a good guild, or whatever you call them, and opting for several months of focused training, especially if they employ teachers who are still actively developing too. But I digress..
I earned an Associate's Degree, and got my first IT job as a help desk tech for a small company. I could've just stayed there. There were only 3 of us in "IT", and my supervisor had been there about 10 years at the time and as far as I know still is. But after a couple years I had learned all I could learn and so... I started applying for other jobs.
I ended up at a large insurance carrier, again on a help desk. One of the best moves I made was taking advantage of their tuition reimbursement policy, which allowed me to slowly hack away at a Bachelor of Science Degree. Whether that sort of thing leads directly to a good job - then or now - is a point of debate. But it kept me focused on learning programming - something I didn't get to do much of at work. And I truly think that when I applied for my first real programming job a few years later, it showed my employer that at least I could set a goal and stick with it.
There was an entire floor for the developers at this company (3000 in IT, 30000 employees overall!), and they mostly used C#. So once I started my BSc degree, I applied for the academic version of probably the first VS .NET product. It cost $100. I remember getting this huge package in the mail that looked like this, with at least half a dozen CDs and a huge manual. It was like Christmas.
I started teaching myself the wonderful world of WinForms, which would serve me well later on. Even now, if someone needed a simple desktop app to automate a few tasks, I'd consider WinForms. It won't win any beauty contests but it's incredibly quick to spin up a new project and get moving, which is more than I can say for other frameworks.
When I had applied for tuition reimbursement, I met with the CIO for 15 minutes to explain my goals. That was a requirement, and an intimidating one at that. I think he was late to our meeting because he had just flown in from somewhere and was coming back from the airport. As it turned out, he was easy to talk to. The one thing I remember him telling me was to bring back what I learned to the company and make it better. Well, I tried.
After I graduated, I tried getting a job at the same company for about a year, but they had slowed down the hiring process since I'd started a few years before. I interviewed with several managers, but most departments seemed less inclined to bring on junior devs versus hiring experienced devs who could hit the ground running.
Late 00s / 2010s
So I started sending out applications, and got my first programming job. It took awhile, and there were a few rejections - and ones I rejected, like the "CEO" in his early twenties, whose company was funded by his father, and who wasn't sure what the medical plan was 😳- but I ended up working on a small team developing and maintaining a strictly internal WinForms app. It was a great feeling to get my foot in the door, and here's where I think having the BSc degree gave me a leg up. They gave me a laptop to use for work, but I took advantage of that opportunity by using it to learn more at home too.
I remember about 3 or 4 months had gone by when one day it suddenly hit me - I was a "programmer" in title, not just playing around with a few side projects hoping for an actual career. My first programming classes had been about 6 years before, and I'd finally "made it"... or at least, the first step.
It was a good company, and they were never late with paychecks, but it could've easily been a dead-end. The dev-turned-manager wasn't strong in either area, but thought he was. The app I stepped into had little in the way of "best practices" - tightly coupled code, no automated tests, a god class, connected to a database with 10000 line stored procedures via non-parameterized queries, and all committed to a SourceSafe vcs - if you never used SS, it sucked. And I knew no better!
I think that's why it's so important we share knowledge with each other, in whatever format each of us is comfortable with - and that we be open to accepting that knowledge.
I spent my first two weeks reading through code (!) at the behest of a team "lead" who was let go shortly after the manager found out he didn't really know how to lead or fulfill project requirements. I ran into a bit of luck though - or maybe it ran into me. I really believe I would've learned and maybe even defended all kinds of horrible habits, if it weren't for the fact that the company started hiring more devs. I was fortunate to work with a whole array of people the nearly 8 years I spent there - some for a year, some nearly the whole time I was there. I'd say there were upwards of two dozen devs who came through the doors before I left.
There were some real characters. The report writer "expert" who kept a "Crystal Reports for Dummies" book on his desk and answered calls for his DJ service all day. The dev who freaked out when he moved Trunk into a branch in Subversion and our automated builds were all failing. The dev who ranted (loudly) about "hate chicken" when our CEO bought Chick-fil-a for everyone. The contractor who (re)implemented the entire stack used on a side project at least once a week.. for nearly a year. I could write a whole post about some of the personalities... but they could say a fair amount about me too, so I'll stop here. 😏
Thanks to a lot of knowledgeable people, I became fluent in C#, learned about Subversion, unit testing, integration testing, and automated builds and testing. I attended my first user group (which I didn't even realize was a thing until a coworker mentioned it, and boy was that first code-kata pair-programming thing new and strange), my first conference (Codemash), and OSS and paying it forward. I provided my first answer on Stack Overflow, started sharing code on GitHub, and wrote my first blog post.
I wished I had taken the opportunity to learn more while I was there too. We had a team lead who knew enough about the Scrum/Agile process to try implementing some of it, but I didn't understand it at the time and wasn't really on board. There were opportunities to get into web development that I passed on because it was outside my comfort level or personalities clashed. I rarely spoke up to improve processes, even though one dev liked to remind us that as devs we had more influence than we realized. And although I liked C# alot (and still do), I wish I'd gotten familiar with one or two other languages.
But the path is unmarked, foggy, crooked when moving forward - and crystal clear when looking behind. You can't fault yourself too badly for acting on the limited perspective you had once upon a time.
I made a calculated move a couple years ago. Our field changes quickly, with a lot of people changing jobs (to gain new perspective, learn new skills, make more money - the reasons vary) as often as every 3-5 years. I was working on the same internal app, mostly in maintenance mode and with no end in site, and had been doing it for nearly 8 years.
For me, it was time to discover what else was out there.
I was already attending a user group called Akron Code Club, hosted by a telephony company using a myriad of languages and technologies. I applied to several jobs, but this was the one that paid off and I've been there the last couple of years. No place is perfect (and no employee is perfect 😳), but it's worked out so far. The learning curve was steep, but I'm glad I made the move and have stuck it out.
The last 2 years were like my first 5 or 6 at the last company. I moved from Subversion to Git and GitHub. I moved from TeamCity to Travis and Jenkins. I've gotten comfortable with Erlang, and familiar with Ruby and Java - they tend to use whatever language is required for a particular job here. I've gotten my feet wet with VMs running on Amazon, and this week was Docker containers. I helped write an API, wrote a post about what I've learned, and eventually started experimenting with other APIs. I got confident enough to participate in Hacktoberfest and have done it for the last 3 years.
I wrote my first Chrome extension, and since published a handful of them to the store, including:
- Hide Comments Everywhere
Aims to do just that, hiding comments that are all too often full of vitriol.
- Generate Links for Headers
Generates links for headers that have an ID assigned to them, similar to what GitHub does.
And then what?
And that's it.. for now. If you made it this far, that's amazing. I really don't think anyone will read this other than me. It's nice to reflect on how much I've accomplished, especially in my last 10 years as a professional dev, and I'd encourage you to do the same!
It's so easy to shortchange yourself. Reflect on your accomplishments. Maybe even write a post about your own journey. You never know who you might inspire!