SmokinServer is my personal blog where I usually talk about IT/Software Development topics based on my decades of personal and professional experience. My goal is to help teach you about various topics using the knowledge I have gained through hard work and lots of trial and error so you can be more productive and come up with your own smokin solutions to your everyday problems!
I don’t plan on doing “Hello, world” tutorials for various programming languages on SmokinServer. There are already plenty of great resources on the web for that today. Instead I plan on focusing on the real world production level concerns that most tutorials completely ignore, but that are absolutely critical in the real world! I want to focus on the skills that are critical for you to become a great software engineer, regardless of what programming languages you use.
So who am I to tell you how to write software? I’m Mike Kock, just some random programmer who has lived his entire life in the agriculture focused city of Salinas, CA in relatively rural Monterey County. That’s probably not enough is it?
I currently run a software development department of 20 people writing mostly server based applications accessed over the Internet in addition to some mobile apps and also programs that are loaded on customers computers. These applications are used by many thousands of companies every single day. The applications store and use many terabytes of data. So ultimately I have a lot of experience working in a team environment designing applications, using SQL, “big data” databases, distributed and scalable services using VB, C++, C#, NodeJS, and Python, automated pipelines using Jenkins CI/CD, docker, Kubernetes, VM configuration, application deployments, data replication and disaster recovery scenarios.
Ultimately you have to decide for yourself if you should bother listening to me. Everything I talk about is based on my personal experiences which might be much different than yours so always keep that in mind. I will never claim to be all knowing or always right. Instead, I can only provide you with insights I have gained over the years from my experiences and hope they can help you someday. So here is a breakdown of my past experiences that will help explain where my opinions and experiences ultimately come from.
The Early/Mid 1980s
So my introduction to computers started in the early 1980s with a Commodore 64 computer. The system command line interface was a BASIC shell so in order to use the computer you had to learn and use BASIC. So this was my first introduction to computer programming. This started before I was even 10 years old!
The Software Development Gateway Drug - Games
Like all kids, the main thing I used my first computer for was playing video games. At some point this made we want to figure out how make my own games. I started trying to develop my own text based choose your own adventure type games using Commodore 64 BASIC. I never really completed any of these games but they started me on my journey of learning how to develop and debug software.
How times have changed!
The Late 1980s
So when I was in junior high school I got my first IBM PC clone computer. It contained an 8088 CPU and a turbo button that would run it at up to 8MHz! Again I played a lot of games on these computers. Games like Sierra On-Line’s Space Quest and Infocom’s “Hitchhikers Guide to the Galaxy” and “Zork” were favorites. During this time I started teaching myself Pascal using Borland’s excellent all in one IDE Turbo Pascal. All of this was done under MS-DOS making me learn how to use command line interfaces and .BAT file scripts.
During this time I wrote my first real program. It was written in Turbo Pascal for a friend to help him organize his baseball card collection. It even had a text based “GUI” with menus and pop up screens and saved data to disk. All of which I had to write from scratch at the time. But writing those types of libraries and debugging them was a great learning experience! The key to a project like this was not its ultimate success but rather the experience gained by writing a program that will be used by someone else. The quality bar has to rise to a level that allows them to use the program successfully and not constantly call you because of bugs or even worse, lost data!
The Early 1990s
Over the years the motherboard was upgraded to a 286 and later a 386. Graphics were upgraded from EGA to VGA! Much of this was for playing video games like SimCity, Sid Meier’s Civilization, Wing Commander and probably best of all, Id Software’s Doom! Some friends and I started making custom Doom levels and then hooking up our computers using modems so we could play against each other from home! Being able to play a game like Doom against someone else over the phone was revolutionary at the time!
During this time I taught myself C++ using Borland’s Turbo C++ IDE and started learning x86 assembly language. Games like Doom caused me to start learning how to do 3D graphics programming in both C++ and x86 assembler. Doing something as complex as 3D programming in assembly language is brutally difficult. Back then to do 3D graphics you had to write your own line drawing code to figure out which pixels to turn on in the VGA card’s frame buffer memory. At least you could find the algorithms in books but there weren’t readily available libraries to do all that work for you.
Doing all that work in assembly language was a stupid idea, but again, it was a great learning experience. It really taught me the inner workings of a computer and provided me with a ton of debugging skills! When writing assembly language programs in MS-DOS you would constantly make coding mistakes and do stuff like corrupt the operating system code and memory! There wasn’t any memory protection back then!
The Mid 1990s
At this time I was going to Hartnell Junior College and then on to the University of California Santa Cruz (UCSC) where I received a BA in Computer Science. I also wrote my first commercial software with the help of a classmate at Hartnell. We teamed up and created a suite of 5 Windows 3.1 kids games called Farnsworth Ferret’s Fun Pack for Kids which was distributed by Elpin Systems and some other OEMs. While the games were never some great hit, they did provide a couple of thousand dollars a year of extra income for a number of years after we finished them. A great experience overall!
Once I started at UCSC I was exposed to muy first Unix based systems (expensive SGI machines, Sun, etc…). So to allow me to write code at home that would also run on the school computers, I did my first dual boot install of new x86 based operating system called Linux. This led me to start learning about UNIX type systems, more command line utilities, and how to administer a Linux based system. Back then the only option I had for Internet Connectivity was using a dial-up modem to connect to NetCom. At the time on Linux this required me to manually run modem AT commands to do the dial up and enter in commands to a SIP console to login to my account and get Internet access on Linux! But this allowed me to write code at home, FTP it up to my school account when done and do a quick verification test before submitting it to the teacher via the school computer system.
For me college was a little bit of a mixed bag. I didn’t learn a ton on how to be a good software engineer in college because I had already amassed a huge amount of software development experience before going to UCSC. Class programming assignments were usually pretty easy for me and I graduated with highest honors. However, had I not gone to college I might not have met the people that help me write and distribute those kid games and I wouldn’t have been exposed to more theoretical topics like big O notation, graph theory, and state machines. So ultimately it made me a more well rounded developer.
The Late 1990s and Beyond - The Working Years
When I graduated college I could have continued on and gotten my Masters. But at the time I had had enough and I was ready to work in the real world. Everyone in my class had a job lined up a month or more before graduating. It was at the peak of the .com boom and anyone with a pulse could find a job basically. However most of the jobs were in Silicon Valley, about 50 miles north of me. I wasn’t looking forward to living in the Bay Area due to all the people and traffic.
During finals week I finally started looking for a job and stumbled on the only Salinas software development job in the San Jose Mercery News. I sent in my resume and received a call back a few days later. I interviewed the following day and was hired on the spot. I started working the next day joining a team 5 other developers. That was in 1998 and I’m still there now managing the entire department of 20 people.
Over that time I have had the opportunity to write DOS programs in C/C++. Windows applications in C++, VB, C#, IIS, .BAT/.CMD and Powershell scripts. Linux programs in C++, Python, NodeJS, Scala, and BASH scripts. For data I have worked with Excel, flat files, XML, JSON, JET, SQL Server, PostgreSQL, ElasticSearch, and HBase NoSQL databases. I have used logstash and Kibana (ELK stack) for log aggregation. ActiveMQ and Kafka for asynchronous messaging. I setup Jenkins servers and CI/CD pipelines for automating the entire build/test/deployment pipeline for dozens of projects. Used Visual Source Safe, TFS, and Git for source control. Jira/Confluence/BitBucket for general project management. I have created docker images and setup Kubernetes clusters from scratch and deployed them in production as well. Plus countless other technologies and projects.
Anyway, I hope all of your find some useful information here that ultimately helps you out and continues your never ending lifelong journey of learning!