Things they never taught in Kindergarten

Things I Don’t know as of 2018

Inspired by Dan Abramov, I wish to make a formal confession about all the tech stuff I still don’t know after coding professionally for almost exactly 20 years. This is on the heels of the tech confession discussion in the #CodeNewbie community and right around my 20th anniversary of becoming a professional programmer. The following is more of a knowledge wish list than a formal confession of how stupid I still am. But know this… I am still stupid and there’s so much obvious stuff that I wish I currently knew. (…or is it know??? For eg. Grammar!) As I get older I realize there are soooo many things they failed to teach me in Kindergarten! Above all, I wish I was better at the classic tech interview leet coding data-structure/algorithm thing and I list that first. My actual skill set is so deep and wide in so many areas but still these other skill sets have eluded me over the years and I remain a newbie even 20 years in…

* Algorithms/Data Structures: I totally suck at interviewing! I can do quick sort and maybe marge sort. I can tell you how to build a hash table, but that’s about it! Many of the interviews I’ve been on seem to require extensive understanding of these topics which infuriate me because I suck at it! I also hardly ever use this knowledge in practice and feel you can get so much value out of other aspects of software development which are never prioritized or even considered during the “tech interview”.

* SSL – SSL might as well stand for Slippery SLope because my knowledge cuts off right after “it is used in combination with http and email protocols (SMTP?)”, and “…port 443 is used for https.” I know I usually have to install a bunch of SSL/crypto dependencies when setting up any server or build system that uses SSL and that these dependencies do some sort of magic hashing and message digesting but that’s ‘bout it!

* CSS/SASS/LESS/Pre/Post processors: I tinkered with CSS a few times here and there but if you ask me about these modern tools or how to do animations I’d be mostly lost.

* GraphQL: I took a course on React full stack which used this tech extensively. I hobbled through the course and finished it but I still don’t know how any of GraphQL works. The course I took had tons of bugs do to version differences, most of which I actually fixed as I took it. At the end, I was no more smarter than I was at the beginning.

* OAuth: I understand the concepts of OAuth, I’ve worked extensively with projects that required it, but I still feel like I need a separate class or set of instructions to come up to speed.

* Ruby/Rails: My Ruby experience has been relegated to a handful of command line Ruby scripts I wrote a few years ago. I am currently working through tutorials to learn Ruby and Rails. I feel like I am sooo overdue.

* Python: I should be shot for adding this one! I’ve actually taken a two week course on it and developed entire solutions with it! I wrote and maintained an entire test framework and suite with Python and gave my Cozmo bot a personality using it a year ago. Somehow, every time I start anything Python related I have to go back to “Hello World”. This is not so with any other programming language from Java to Obj-C to NodeJS/Electron/JavaScript to C++!

* Kotlin: I intended to write a book on Kotlin for Android some years ago but life got in the way of my mastering or spending any time with this technology.

* Real Time streaming: I wrote a few programs trying to master UDP and converted one of them to TCP after realizing how much I didn’t know about UDP. I would absolutely LOVE to become a network programming expert!

* Network Stack: At one point I tried to think about possibly contemplating my writing a DNS server. Don’t ask why! It just seemed cool at the time, never mind the fact that I have zero knowledge of network topology! I know the basics of how computers resolve IP addresses via DNS and DHCP, but I would kill to really understand the low level conversation that happens as clients babble back and forth over the network. I’m talking about reading raw SMB, really understanding how LDAP works, writing my own proxy server, etc.

* Kubernetes: There’s been so much talk about Kubernetes and I feel like I never get to play in any reindeer games!

* CORS/XSS/CSRF tokens: I just did a deep dive on this topic today so I really can’t include it anymore, but only hours prior I couldn’t tell you the difference between these terms or why you would use one and not another.

* OpenGL – I read some blog article many years ago (about a decade now) which illustrated how to do OpenGL-ES on iOS v3 and it was the coolest thing! I got my first black triangle then everything went dark. I haven’t touched OpenGL in any form since.

* DirectX/Metal – You might as well lump in DirectX, Metal and any 3D rendering concept because I suck at all of these. There is the basic 3D rendering APIs on iOS that I used to be really good at but I can’t even remember the name of the API now since it’s been about 10 years. (I think it was Core motion? Core something or other…)

20 years, Going strong!

I just realized that I recently passed my 20 year professional programming anniversary! It was twenty years ago on December 9th when I walked into the happiest day of my life! My daughter had just been born the night prior, and I was finally able to afford the tight 1 bedroom apartment my girlfriend (now wife) and I had been scraping by in! There is so much that had to go right in order for me to type this blog post so blissfully today. I’ve told this story to friends, family, coworkers but it still humbles me to this day. I have to begin with a dramatic scene opener to legitimize everything.

The year was 1998. I was making just above minimum wage at $6.05/hr through a temp agency called Manpower. (I think they still have an office right down the road from where I currently live which gives me flashbacks!) They gave me a multiple-month assignment at a lighting company. Only months prior I had been living in my mother’s basement unemployed with a 40oz of beer each day playing Sega Phantasy Star & other classics. I was not in college, nor had I attended any more than a single semester of community college. I was currently enrolled in a tech school called The Cittone Institute, where I was learning and getting hands-on experience in various programming languages, one of them being RPG. I was also really concerned because my girlfriend was pregnant, Christmas was coming and my temporary assignment at this lighting company was not supposed to last into the following year.

My job was to function as the file-boy. This means any menial task from stuffing envelopes to organizing the mail room was given to me. I was astounded, but bored out of my mind. I was astounded because I always wanted a permanent comfy office job like you see on TV. However I was bored because I wasn’t doing anything cool. I wasn’t in a 3 piece blazer standing at the head of a conference room giving a presentation. I wasn’t in charge of any portfolio. I didn’t even know what a portfolio was aside from how I heard fancy folks on TV talk about them. They would say cool stuff like, “I’m taking over that portfolio…”, or, “I’m the guy in charge! Haven’t you seen my portfolio?”, along with the occasional, “don’t talk to me that way or I’ll bust you upside the head with my portfolio!” I lacked a fancy suit (aside from my one church outfit) and I didn’t have a portfolio.

Times were tough and we were on the WIC program which, I believe is ONE step above food-stamps. This gives you permission to act like you ain’t poor because it’s just government assistance. By day I was constantly applying to any office position that would eventually give me a portfolio and I spent nights learning stuff like VB6, SQL and C. I was also enrolled in a Bible study night program. I had a bit of a hustle going on but still, when I was at work, I was bored out of my mind!

I still remember the nice ladies in the office I worked with. These were your typical clerical workers with various positions ranging from accounts receivable, to data entry, to parts/inventory clerk. Each one of them seemed so important to the company and each one of them appeared to have a life while I was wasting away in the back mail room quietly listening to Hip-hop music on this little FM radio that someone left back there. Occasionally I would get a task like, “pull all the papers out of these folders and sort them in those cabinets”, or “find the 2 1/2×3 1/4 labels for the next parts and inventory instruction manuals.” These ladies were pretty cool though. One, I believe her name was Helen, organized an office collection for our yet-to-be-born child and got us a bunch of gifts. The other, a sistah, was constantly trying to get me involved in her role of the business and treating me like an equal although I lacked the skills/education to be anything more than a file boy.

One day there was a task that sounded like a true need. Actually office work which involved the use of a computer! I believe Helen organized it but the sistah (I honestly can’t recall her name but I always thought she was pretty fly) set me up with my own computer at a desk. I think the women all felt bad watching me occupy space with no meaning. They wanted me to feel at home. I thought this new task was more busy work. I usually would have been upset but this busy work was in the form of something I could actually process! They had an Excel spreadsheet of some 200-500 addresses that they wanted me to type into a Word document filled with labels. The task was intended to occupy me for the remainder of the week or possibly the remainder of my tenure, depending on how inefficiently I operated.

Within 15 minutes I had all of the labels completed and printed which shocked everyone in the office. One of the ladies was constantly double checking my work not sure if I somehow fabricated the labels or took some shortcut. “How in the world are you finished already?”, said another.

I replied, “I used a mail merge” I had just learned Word/Excel data merges the week prior at tech school and this so happened to be the perfect opportunity to practice. It actually took me a couple of tries to get the data imported into Word because I was inexperienced but after the 3rd or 4th take I had it. Everyone in the office was floored as they actually had a need for this rapid sort of data merging. Nobody had heard of it prior and it was something short of a miracle.

That one experience led to my being introduced to the head of data processing, a software engineer by the name of John. John looked EXACTLY like Santa Claus (I am not making this up either) and he took a special interest in me. You see, I just so happened to be fluent in RPG, which was the only programming language they used on his team. His team consisted of himself as manager, one sole programmer-hermit guy, and a lady who would be considered the ops engineer by today’s standards. At first he tried ti get my hired by any of his friends in the industry and scored me an interview with a lady named Nora. The interview never resulted in a job so he eventually scheduled me for a tech interview test. If I were to pass the test I would be hired at the very same company (and maybe even given a portfolio?) The test fell on December 8th.

December 8th, 1998 would be the day that remains forever burned into my memory. I light-footed into the office because I was extremely nervous. My girlfriend had gone into labor the night prior and I was up the entire time wondering if/when I would be a father. Up to this moment I hadn’t actually thought about what fatherhood really was. I was only focused on getting a portfolio. In my mind a portfolio was this magical adult trapper-keeper with laminated pages of awesomeness that was meant to be carried in a briefcase and pulled out during important office meetings where its contents would be mirrored on a task board next to you. This same task board would have been hand colored by your office secretary. If someone were to disagree during one of these important meetings, you could then politely organize a private meeting where the adult trapper keeper could be weaponized against the offender.

I felt like I was only hours away from being blessed with this long time coveted mystical piece of office supply but I could no longer dream of it because somewhere many miles away (my girlfriend lived about an hour’s drive away and was currently in the hospital in her hometown) a tiny replica of me was about to make a dramatic entrance into the world. The task that John gave me was simple. Write a subfile program to display a list of items. Extra credit for being able to drill into an item and get detail. It was the RPG equivalent of a CRUD web app. First butterflies then later bumble bees swarmed in my belly as I stumbled through writing the first “subfile” program which would eventually launch my career. I used the entire day spending most of it on random calls to the hospital checking in on my soon to be family but I finished just prior to 5pm. I turned in my assignment to John who completely understood why I needed to rush off.

Roughly 10 hours later I found myself in the hospital holding what truly was a human clone of me. Family and friends were there and the feeling of uncertainty about my possessing an all powerful binder was completely replaced by the warmth of becoming a father for the first time. I didn’t see binary digits, I had no thoughts of compilation units or office prowess. I only felt love.

The next day I was back at the lighting company and greeted by the HR guy. (There is an entire story I can share about my experience with this HR guy but it’s not relevant.) I was given an offer to become a permanent employee, along with paperwork describing the benefits, my compensation, the company’s mission, and other misc things (excluding an employee handbook which is part of another story involving the HR guy, but again not relevant). All of this information was tucked neatly inside a binder sporting the company’s logo. It wasn’t actually a portfolio but it was thick enough to be weaponized if I were to be caught in the wrong section of town. My compensation jumped dramatically from 6.05/hr to $9/hr and I was RICH! I bragged to my girlfriend that same day while I silently hummed the theme song to “The Jefferson’s” in my head. She was so battle-torn from pregnancy that she heard none of my rambling about my special binder or “moving on up”.

As I look back on this series of events, the only thing that truly tied it all together was my involvement in the Bible study program and constant prayers. There is no other explanation for the string of consecutive miracles that had been all daisy-chained together which eventually landed me in my current role. I tend to exaggerate on this blog while fabricating stories but this story, in its entirety, is 100% accurate and true. It highlights only a fraction of the events that brought me to where I am and if I were to describe some of the others it would most certainly sound like the script to an upcoming Hollywood blockbuster. I wish I had some clear way of explaining but I definitely see the correlation between the Bible, my life in software, my experiences in the military, and my life as a parent.

I’m a guy with a high school education who has been at many of the biggest tech companies working on some of the most prominent projects that most people use all day. Most of what I’ve done I never actually “tried” to do… it just sort of happened.