My Computing History (How I learned to program.)
September 10, 2013
Updated: July 31, 2019
I have had this story up since I started writing this blog in 2012. To the outside, it might seem like I have this programming thing down pretty solid. In reality, it's really taken a lot of work and effort to get to where I am today. I still am learning everyday from my mistakes, friends, colleagues, am always trying to tap into a wealth of materials in which I have been fortunate enough to have access to.
We all have seen and heard these stereotypes that programmers start out as kids who were coding video games, or hacking away on the internet and getting their first programming internship while in high school.
I didn't fall into that stereotype. At most, I tried to be the stereotype. I had the passion for computers as a young child, and I liked playing video games, but that was about it. I had many attempts learning how to program throughout my childhood, and failed on a lot of personal kid-projects. Frankly, programming and any code confused me. I tried many times over to read programming books, copy examples and asked questions in programming forums just to wrap my head around some of the concepts.
Fun fact: I took an AP Computer Science course in high school to which I had no business being in.
My teacher gave me a chance simply due to intense personal interest in the subject. (Thank you, Mr. Lin)
I remember asking him during a fire drill outside of class in frustration: "What's the point of
while loops? I don't get it!". You see, coding didn't make sense at all!
Ultimately, I decided to go to University as an Electrical Engineer in hopes of getting a stable 9-5 job at a Big-Defense-Company. My desire back then was to just have a decent life paying bills, and making a living. Turns out, I was even bad at that.
I am glad I actually did pretty poorly (relatively) as an Electrical Engineering major during my first quarter in Engineering School It was enough to make me do a complete major switch to Computer Science because I naively thought it would be easier. To add to that, I now believe college majors are quite difficult in their own sense.
Who would have thought I would turn out to be Software Engineer? I honestly did not expect it.
The Beginnings (1994 - 2000)
I am passionate about technology. I remember touching my first computer as early as 4 years old. The main reason why I got into computing was because my older sister wanted my younger sister and I to learn some typing skills so that we could be ahead of the curve in school. Looking back at it, that was an incredible move by her.
The PC we ran in summer of 1994 (I was 4!) was pretty modest specification-wise. It was an Intel 486 DX-4 which ran at 100 MHz and 8 MB of RAM. I think the graphics card was a 1 MB Trident ISA VLB SVGA card. We also had a (quad-speed) 4x CD-ROM drive and a MediaVision AudioSpectrum Pro 16 card. It was a pretty awesome machine for playing DOS video games, the prototypical "multimedia" computer of the time.
This PC was so influential to me in so many ways. I had no idea that it would be the foundation for not only my learning, but eventually a passion, career and hobby.
Although I was young, I remember myself vividly typing commands in MS-DOS 6.22 and
making Windows 3.1 crash. It took me many years later to realize that
memmaker didn't really do anything useful -- which I ran religiously
because the application looked cool in DOS,
and Dr. Watson wasn't, well...
a real Doctor.
While splitting my time running random DOS utilities, playing Sim City 2000 and No$GMB (Pokemon Red!), I fiddled around with QuickBASIC 4.5. One day, while randomly surfing the internet, I found qbasic.com which hosted a few BASIC tutorials. The tutorials were written well enough that I wrote a bunch of simple looping programs as a kid. The programs mostly consisted of taking in simple input and then spitting out an output such as the sum of two numbers, or calculating the date of Easter for a specific year. Unfortunately, the tutorials were not extensive enough to explain what I was even typing. So, I didn't really touch anything programming related until about a year later when I was ten years old or so. Most of my interests in computers was just into learning about hardware and hoping to one day build a PC of my own.
Grade School, Building Webpages and First Programming Attempts (2000 - 2003)
2000 was a great year! My parents had finally bought me a computer so that I could use solely for myself! As a 10 year old, this was like getting a house for free! The machine came from Costco and was a Compaq Presario. If I recall correctly, it was a 7000 series. It had a Pentium III 1 GHz CPU, 128 MB of RAM and a huge 60 GB hard drive at the time.
Anyway, what made this era special for me was that I was finally able to get on the internet reliably, and for free too. You see, back in the late 1990s and early 2000s, most households were hooked on 56 Kbps dial-up. At the time, AOL, Earthlink, Prodigy, MSN, etc were all big players in providing internet service. Some ISPs were even brave enough to provide free dial up internet service. This was what some companies like NetZero and Juno provided. Now, I went with the free dial-up internet route. At the time, the limit was only 40 hours each per account. I was using both NetZero and Juno and had about 80 hours to use monthly. Eventually, I became really curious as to how NetZero and Juno implemented their counter in determining usage limits. Thinking back, one would assume it would be per telephone number. But nope, turns out the limit was per account!
So, eventually my 10 year old self figured this out and found a way to exploit the quota and soon enough, I was having unlimited free internet access. This continued on for about 3 years or so until I had jumped on the broadband train and got SBC DSL. Anyway, at the time I felt so happy and so clever at getting myself free dial up internet access that I realized I could do so much more.
I think at about that age, I realized that I was definitely going to be doing something with computers as a career.
What do you get when you put a 10 year old kid, Dragon Ball Z and the internet together? A Dragon Ball Z web page! My first serious step into coding, was creating cheesy Dragon Ball Z fan sites in mostly static HTML. At the time I jumped from web host to web host, from services like Homestead to Geocities. I remember going to Lissa Explains and following the tutorials available on writing HTML markup.
Eventually, my web development interest fizzled out. I think I was about 12 years old, going onto the seventh grade was when my interest in Dragon Ball Z had begun to diminish a bit. Writing static HTML pages was not as fun anymore either. Coincidentally, right about this time, I picked up programming again. I went back to QuickBasic and went through the same tutorials I had found years back. They were easier to understand this time, but still not much theory. I was able to become good enough to write a command line which executed stupid joke "programs" though. For what it was worth, these "programs" were merely subroutines in the same command line program I had created. I remember I had a program that basically just played a guessing game of numbers. The CPU would just basically pick a number from 1-100 and the user would just have to keep guessing until the input had equaled to what the CPU chose.
Overall, I think the best I did was basically a compound interest calculator which I just basically
got the idea from my Algebra book from school. I will still admit here though, at the time
I still didn't really truly knew how some patterns and logic worked in programming.
For example, I still had no idea on how
for/while loops really worked. I just "did 'em".
for/while loop thing would come back to be the greatest annoyance of
all my noob-programming frustrations. More on that in a bit.
With all the tinkering, I just basically wrote the same programs over and over again and
had actually started to think this was what programming was and had the notion in that it was uninteresting.
I eventually stumbled upon Microsoft Visual Studio 6.0 and worked a bit with Visual Basic 6.0 and Visual C++ 6.0 but nothing interesting came out of my efforts. What was different though was that I was able to have a GUI and pretty images around my programs. I had actually gotten good enough to write my own hard coded RPG game with graphics drawn in Microsoft Paint called SomeRPG. It had a silly storyline and was just mostly composed of Windows Forms. The whole program was reminiscent to the old early 1990s Shareware games written in Visual Basic 3.0. I think it was my inspiration due to having a lack of computing power all my life, and not being able to play the latest 3D PC games at the time. I actually contribute this experience to my huge interest in retro gaming and computing.
As far as my grade school academics go, I was considered to be a pretty ambitious and bright student. Working with computers for so long as compared to my peers then allowed me to actually fix some of the computer problems my teachers had. I remember being called up time and time again to fix my teachers' computers in their classrooms. This ranged from old Pentiums running Windows 95/98 to Macintosh G3s and iMacs on OS 9.
Eventually, I went from fixing computer problems at school to helping friends and relatives with their computing problems. I eventually just became known as the computer guy.
You know how they say kids change their minds all the time? I happened to have changed my mind all the time! Since I had became pretty confident at solving computer problems, and I wanted to do something with computers as a career, I was thinking about going into IT hooking up networks and data centers professionally. I liked being the tech guy.
From the PC fixing, to the efforts in programming... all this was actually enough to impress my parents enough so that they were open to letting me build my first PC by myself!
Building My First PC (2003 - 2004)
I went all out on this first build of mine. In 2003, the top of the line PC was a Pentium 4 with 512 MB of DDR RAM, and that was what I got. I made my dad shell out cash for a Pentium 4 2.4 GHz Northwood, a Soyo Socket 478 Motherboard, 512 MB Kingston HyperX DDR memory, 2x 80GB hard drives on RAID, and finally my all time favorite GPU, the ATI All In Wonder 9700 Pro AGP!
All this cost about $2300 total at the time. Pretty insane. Who would trust a kid to handle that much hardware? My parents did, and I'm glad they did.
This system would carry along with me until college. It was eventually upgraded multiple times until it became a Core 2 Q6600 -- to which I have recently retired.
Anyway, with all the computing power, I went through a couple of years just playing video games, downloading and watching anime and not doing many "productive personal growth" things... I was actually just enjoying being a 13 year old kid and just eating junk food and playing video games all the time.
High School (2004 - 2008)
When high school rolled along, I still had this idea that I wanted to be some kind of IT Administrator. I thought it would be pretty simple and wouldn't require much stress to study since I already had some aptitude for it.
Since I also had such a huge ego and was over-confident with all this, my parents pushed me to take the CompTIA A+ Certification test to prove that I actually had the skills for the IT world. I eventually passed, and fairly easily. It also made me realize that maybe I should strive for improving myself. So, I decided to improve in some way. What to improve? Well, at the time did not know much about the UNIX operating system, so I decided to start on that.
Again, I found myself trying to be clever and went on Amazon.com and bought a FreeBSD manual titled FreeBSD Unleashed from Sams. I went through the book and needless to say, found it dull. I thought UNIX was too complicated and felt some parts were purposely overcomplicated. Of course, at the time I didn't understand the whole concept of underlying OS kernel concepts -- all I cared about was having something easy to use and understand!
That is not to say I did not learn anything though. Around this time, I became obsessed with running home servers and even hosted my web pages through an old Pentium 166 box. This experience allowed me to gain some knowledge on how Web applications worked. This was something my 10 year old self would have loved to have experienced.
Around this time, I found myself interested in a cool little machine that came out called the Apple Mac Mini. Yes the original first generation Mac Mini! I persuaded my parents to get me one after much begging. UNIX was actually interesting now!
By the time I was 16, I had decided that maybe it was time to just give programming a chance again. The high school I had attended provided AP Computer Science as a course, so I just signed up for it. It was taught by a man named Michael Lin. I do not name drop often, but I feel like Mr. Lin deserves the mention since he essentially inspired me to not give up.
I was pretty terrible in that class. I knew how to declare and initialize variables, write control statements, loops, and class objects, but I had no clue why I was even doing them. I remember having a fire drill at school one day and I was absolutely venting my frustration at Mr. Lin at not being able to understand how loops worked. In retrospect, I actually really wanted to learn how the computer internally invoked loops... not the "rules" to looping.
I ended up failing the AP test. At this point, I felt like maybe I wasn't meant for programming. I didn't really give up though, as I really did want to prove to myself that I could really learn this stuff.
I spent the summer between 11th and 12th grade of high school picking up a Java book and finally grinded away at all the chapters and learning how to program. I didn't socialize much, nor did I even do extra-curriculars to prepare for college applications like everyone else that summer. All I wanted to do was just program.
I entered Senior year in high school a much different person with a different mindset. I finally understood the material from my previous class, and had decided to enroll in it again to re-take the AP test. At this point in time, I also figured out my learning style from that single summer. I was really good at reading long documentation and actually digesting material first before going "hands-on". It's a learning style I still continue to use to this day.
As it turns out, the efforts were not wasted as that year I had passed the AP test with a 3. Sure, it was not the greatest score in the world, but it was validation of improvement. As college applications came into the picture, I did not really see myself actually doing anything programming related. I figured maybe I just sucked at programming since it took me so much effort to get to where I was at the time. So I decided to just apply to a bunch of colleges as an Electrical Engineering major for UC and Computer Science for Cal Poly SLO.
As acceptance letters came, I narrowed my choices to either UCSB or Cal Poly SLO. Both were highly regarded in the engineering schools list, and were in the general vicinity of each other. I had visited the schools and decided that maybe picking a bigger named school would be better for me in the long run.
College (2008 - 2012)
I'll have to admit, I goofed around in a nerdy way in my first year of College. I was admitted to the UCSB College of Engineering as an engineering student. At this point I thought I had decided that I didn't want to go to programming professionally, and really wanted to be closer to hardware so I could make PC hardware! Unfortunately, I took school too lightly in the beginning by playing too much Basketball, and surfing too much Digg and Reddit, lifting weights, and overall just not being really motivated to study. I did not do too well my first two quarters. So then, I decided to give Computer Science another shot. I also decided to switch because I had read about being able to make video games for a living and programming was a way to that path.
I guess I became a programmer simply because I wanted to make video games.
The first few introductory classes to programming I took in college were easy! I didn't even do much reading and was able to do every single assignment and pass every mid-term and final with an A. This was probably due to the fact that my AP Computer Science material from high school carried over well into college.
Taking those classes really did give a bit of a confidence booster. I felt like I was gifted for this, and had probably just put myself down all along for the unrealistic expectations I put on myself as a kid! By the time I got into studying abstract data structures and efficiency of algorithms, I had begun to think the stuff was too boring and too "hard".
I mean who cares about a "linked list", right? Who cares about why bubble sort and quick sort are such different algorithms when it comes to their worst case efficiency! I run the sort algorithms on my PC and they both seem fast! I want real stuff! I want to make video games! Teach me that instead!
My third year of college was probably the most memorable. I had signed up for a digital image processing course to satisfy a major elective in my program. As it turns out, that DIP class improved my programming skills immensely. I do not know for sure whether it was the heavy use of multi-dimensional arrays that I was working with along with vectorized data structures, but that class kicked my butt and I enjoyed it in a weird way.
The projects were extremely interesting and difficult, but I had come to appreciate a lot about previous computer science concepts I had encountered in my previous courses. I also struggled a bit in the class due to not having as strong of a mathematical background as others, which I attribute to my past tendencies in not paying attention in class. I was able to pass by annoying my TA and not being afraid to ask the questions. Even if it required drilling things down to the most minute detail.
An example of a very important CS concept I finally "learned" in this class was abstraction.
For example, a digitally stored image at its most basic level is a two dimensional array
(width and height) of values (pixels) of 3 element vectors
(R, G, B).
To any average person this may not seem like an important detail, but to myself at the time,
it was when I realized that with the concept of abstraction, we can virtually almost represent any
real world object in a virtual manner.
Not only that, I finally understood the importance of efficiency. I remember I had written a
routine that would iterate over a set of images while applying a filter in some way.
The whole algorithm was like
O(N^5) and took in the order of 10 minutes to process completely!
When I had learned how to profile code, I analyzed my algorithm and eventually cut things down
O(N^2)! I think I can do much better now. :)
Things just started clicking. Sure, these projects took me many nights to finish, but I finally understood efficiency, I understood abstraction, I understood data structures, and I understood what made OOP powerful in certain applications and functional programming in others. Things were just starting to click now. Better late than never!
It was this year I learned by not giving up, and taking my time to learn had its perks. Suddenly, all the Computer Science concepts I had learned in the past which I thought useless, was proving to be actually useful!
At the same time, I was beginning to get a little nervous when it came to deciding what I should be doing after school. I decided maybe it was time I found a job to get some working experience for my resume.
I ended up working as a computer lab consultant just helping out others with computer problems in the various computing facilities in my University. I actually developed a reputation on being a hard-ass when it came to keeping the facilities clean, that I was nicknamed "Mr. Clean".
I did learn quite a bit. I learned patience, dealing with difficult people, and behaving professionally when things didn't go my way.
At the same time, I had attended my school's career fair and was invited to a preliminary interview with Microsoft. I was super excited to know someone like Microsoft would be interested in me, so I accepted.
I remember I was interviewing for an SDET intern position for the summer. The first round question asked was to code a Fibonacci algorithm. I was so nervous that I felt that I might have seemed like I did not know how to program at all in the eyes of the interviewer. I walked out of the interview that day thinking I had bombed completely.
A few days later, I was notified by email that I would be going to Seattle for a second round interview for Microsoft! I'll spare everyone the details on what happened during these second rounds, but I had failed miserably and got stuck in the fail-bus back to the hotel. It was extremely discouraging, but I learned a lot about myself during those 3 days.
Rather than being depressed off of one interview, I decided the only thing I could do to make it up to myself was to just improve more!
First Internship and Final Year of College (2012)
I came into my Senior year of college much improved. I had spent the summer coding as much as I could and reading up on various technology related things. I also came into the school year with a mindset of finally setting in stone, what I would be doing after college. I decided I really did want to become a professional Software Engineer.
Early in the school year, a Bioinformatics Programmer research internship opened up and I had a chance to snatch it up before anyone else could. I spent the year working for Professor Todd Oakley at UCSB writing a bunch of Perl scripts to process large datasets. I used the opportunity to basically learn how to be a better coder. :)
Working for Dr. Oakley was an extremely enriching experience. His problems were HARD. After a few months, I realized this, and things got easier to the point where I ultimately became more confident as a programmer.
First Job (2012 - 2016)
I had a chance to go interview at Yardi Systems during the second half of the last year of my academic career. For this experience, one could say it was essentially "love at first sight". I had interviewed with 5 managers, and through all the interviews I felt extremely comfortable. The first few months of my job, I was essentially thrown into an environment I had never truly been in before. It was quite intimidating, but my manager allowed me to make mistakes and was generally open to me having more freedom. I spent the nights after work just coding even more and improving as much as I could so I become more competent at my job.
I guess those nights were worth it and the hard work paid off as I was promoted the next year to a Senior Software Engineer position. The promotion essentially motivated me to keep learning and growing not only technically, but also within the area of the business line.
My direct Manager, Directors and VPs in which I reported to were all wonderful and allowed me the creative freedom needed to succeed. I had grown much confident in my own abilities as the years went on, and made effort to not only stay extremely knowledgeable but also learn how to share the knowledge to my peers.
During my time as an engineer there, I essentially learned that there was much more to software than just spitting out code. There were many aspects to being successful in software:
- Getting functionality for the client needs is more important than writing the greatest code ever. NO customer, NO sale, and NO money.
- Be patient with everyone you meet, kindness is key.
- Providing enough context in communication through writing and speaking are just as important as being intelligent technically.
- Knowing the line of business and its functions will aid you in writing better code. Knowing what problems you are solving gives a much clearer thought process.
I was at Yardi for about 4 years and ended my career there officially as a Project Manager. Though I was put in the less technical track, I caught myself performing a dual role as a Software Engineer and Project Manager. I was told at times to not worry about the technical problems, and focus on the core business problems. It was then I slowly begun to realize that the non-technical track may not have been for me. I still gave it a chance though. I even relocated to Boise, Idaho to be closer to my team to make the job easier. By the end of it all, I had learned how to design a system and interface it end-to-end which interoperated with third-party/client systems.
For the purposes of career growth and ultimately the desire to solve technical problems through code again, I had decided to pursue other opportunities due to needing a new environment as well as a new project to be challenged with.
I had interviewed around the last 6 months of my career at Yardi. I remember it was eventually down to 2 offers: SpaceX and TSheets. With the former, I would be relocating back to California, and after much discussion with my wife one night due to the strength of the two offers, we had decided going to TSheets was the better option. I did not regret that decision at all.
It was also around this time I had started reading technical books at a higher throughput. I made it a goal to read a a couple of books every month. I averaged anywhere between 1-3 books a month depending on the technical difficulty, concept and length.
Second Job (2016 - 2017)
When I first interviewed at TSheets (now Intuit), I remember getting a phone screen from a lead engineer and was tasked with actually coding not a programming puzzle, but an actual mini-exercise that involved all aspects of web development. The type of problems that would occur on the day-to-day job. The problem was by no means "easy". It was just that it was more in line of what I was already currently doing at my job.
When it came to the on-site interview, I remember sitting in the conference room with J.D. Mullin (Engineering VP) and I was ready to be grilled with some tough programming puzzles.
Contrary to my initial thoughts, the first thing J.D. told me with the friendliest smile on his face, as if he knew what I was thinking. This was along the lines of:
"We're going just have a nice chat about tech and your background. There aren't any tricks to to this interview. No obscure white-board programming problems, just things to test your basic background."
And so, the interview was exactly like he promised it to be. It was simple, and enjoyable. In fact, I felt that I enjoyed it too much and that it was too simple to even be a tech interview! I initially thought that the company may have had a low-hiring bar. I now believe my initial thoughts were naive and completely wrong.
After much thought, and now in this present day where I am more mature as a person and engineer, I am fully now aware of what J.D. was trying to do.
The initial phone screen was already deliberately designed to test my technical ability. In reality, our jobs aren't always about recreating academic algorithms, but rather producing practical code that can drive a product of a business to keep their customers happy.
I pretty much hit the ground running at TSheets. The experience was amazing. It all felt like one huge coding camp. I learned many new things which I could not have picked up at my former job. During this time, I became quite knowledgeable with automated browser UI testing, browser rendering, web performance, and UI/UX concepts.
The great thing about TSheets was that they had a similar concept to Google's 80/20 time. 80% of TSheets time was to complete the current product iteration/sprint while at the end of the sprint, the rest of the 20% of the time could be used to further one's knowledge through either 1) studying, or 2) working on a hobby project. I frequently did a bit of both.
My experience at TSheets also made me appreciate code reviews. Code reviews were taken seriously at the time I was there and agile development was run very well. It made me appreciate development processes even more and realized that the term "agile" is applied loosely at too many organizations. TSheets really took agile seriously and the development culture just moved fast.
I had started reading research papers around this time and started fiddling around more with my passion with computer hardware. It was then I started to learn more about how internet protocols worked and even other things like game console emulation.
Third Job (2017 - 2018)
I had begun to feel home-sick around the end of Winter 2017. Idaho actually had experienced quite a harsh winter. As a result, I had been experiencing SAD (look it up!). I think regardless of this, I would've found my way home eventually. During April of 2017, my wife was also experiencing the same thing and we agreed to pack our bags back to California.
IBM Cloud had given me a position as a Software Engineer specializing in front-end web development. Basically, my experience at TSheets had made me knowledgeable enough that I would be fulfilling a lead role on the web and front-end development of the offering.
This role was quite interesting. It was the first time I was working at such a big company and the culture varied widely across teams. I was lucky to have an amazing team lead who consistently took care of any non-technical issues myself and the team as a whole with politics and decisions. She also entrusted me with many tasks that would be quite important in the delivery of the product. I think I was lucky here.
My time at IBM and work performed there was essentially a cumulative application of everything I hard learned at Yardi and TSheets. As the "expert" web engineer in the team, I was responsible for creating browser UI automation frameworks, front-end components, debugging methods, API, and new pages for the existing internal and external management systems involved in maintaining our offering at the time.
I found that my opinion on things was highly valued due to the knowledge I brought in my role. For the first time in my career, I did not need much ramp up time to get used to the job. In fact, I was able to hit the ground running from day 1.
The above realization was quite a surprise for me. Up until that point, I had always seen myself as the "junior". At IBM Cloud, I felt like I was specifically brought in for my skills to make an immediate impact. That is important for anyone, not just in software to feel in a team.
By also being in a very large company, I also received more exposure to the technical interview process. The opportunity to interview many software engineering candidates lead me to try and make the interviewing process for technical candidates much more friendly and pleasant. This was actually very appreciated as my manager had told me he was supportive in my efforts, and thus became a frequent interviewer for potential contributors in the organization.
All in all, I decided moved on from IBM Cloud simply due to the fact that I found that being on-call for cloud development and support was not for me. I also was interested in working with a team with a background closer to mine so that I could continue to learn and grow technically. Being part of that team was a great experience and leveled up my non-technical skills in various ways. Some noteworthy learning experiences:
- Project Managers are very important. At IBM, they are called "Offering Managers" and are experts in the business domain you are developing for. They are vital to the product's success.
- As with all big companies, you have to be very careful about what you say as it can affect others -- for better or for worse. There are a lot of people with various responsibilities that run the machine, and if you mislead anyone with any statements, make sure to own up to it.
- Your team leads will protect you. They will make sure you get what you need and will shield you away from things you should not be concerned about.
- Always, always, always learn the business domain. Terminology can sometimes be harder than programming itself!
Present Day (2018-2019)
I started a new role at Microsoft, initially as a contributor to consumer Skype. As of 2019, I have moved onto working with the messaging experience for Microsoft Teams, part of the Office 365 family.
The chapter is still new on this one, so watch this section for any updates on my adventures.
Closing Thoughts, Life Lessons, Etc.
Would I consider luck to have been a factor in where I am today? I would have to answer: of course. A wide variety of things happened in my life that essentially placed me in where I am today. I am very lucky in that I have been able to take every opportunity presented to me thus far.
I have been lucky in that:
- Although there were periods of time where I was not in the best family environment, my parents were very supportive of my interests in computers and thus put away their differences to make sure I got what I needed to learn more.
- I naturally have the intense interest in computers and computer hardware. This has made me understand computers at a (relatively) deeper level than most. I would say this has translated well in my software engineering career in understanding machine-related concepts.
- I have been lucky enough to have great jobs that allowed me to push my limits further. My managers and teammates have always been supportive of me and have always been available to help me grow as an engineer.
- There were times where I had to pivot in huge decisions. The first being my major in college. I had no idea how switching to Computer Science would turn out. All I knew was that I needed to come out with a job by the end of it all to pay off the huge student loan debt I would have accrued after the 4 years in college. It obviously became much more than that.
- To add to that, choosing TSheets over SpaceX was extremely risky at the time. I would be giving up an opportunity to work for an extremely innovative company. In retrospect, this decision forked my career in a direction that has benefited me immensely. TSheets was a place where my skills improved vastly in the short period of time I was there.
- My wife, Alexa is extremely supportive of me, my interests and hobbies. She's allowed me to at free-will, pursue any of my career interests, side projects and studying within reason. She understands the nature of the industry and is always by my side when I need the support. (Thank you for that.)
I would not discount hard work, but I am also pragmatic in a a lot of aspects. Would I say that it was also pure hard work with no intelligence involved? Probably not. I have a few disclaimers I should probably make and point out. I do not want anyone to interpret my story as a sort of Cinderella, miracle story. Quite aways from it, in fact. From this story, there are some things I should probably disclose and should probably be known that have probably given me an advantage throughout my journey:
- I am extremely passionate about technology. I've been obsessed with technology and science since a child.
- I was actually considered to be a very bright student throughout grade school, middle school and did very well in high school.
- I have read many, many books throughout my life. Starting when I first was even able to to read as a kindergartener. I've not gone long without actually not reading a book. This makes it easy for me to read documentation.
- I have pretty good memory. Remembering strings of digits and patterns has never been an issue for me. This has proven quite useful in actually writing clean code on paper and on the whiteboard. As a result, my pseudo-code tends to just be whatever programming language I'm currently strong at.
- I found my learning style early on in life and have been using it to my advantage when it comes to studying for things.
Therefore, I cannot say whether or not programming is a skill that is either naturally comes to someone, or someone with gifted intelligence can only acquire, or whether or not one can be great with pure hard work. All I know is that a combination of all has helped me get to where I am today.
There are also some things we can and cannot control. What should I tell a person who does not have a loved one who supports them? Don't love them? No, that's not right. How about a person who grew up in a rural area with no convenient access to technology? Should I then say they should've moved elsewhere with more accessibility to technology? Of course not. There are things out of our control and reach that no matter what we do, we cannot avoid. The best thing I can say here is just give something you are even interested in a shot. Whatever obstacles that may hinder you and your progress, take each failure, write it down, learn from it and start fresh. Be stubborn, fail, learn and repeat. You'll find that maybe you'll fail less. I know I failed less by not giving up.
I think the main thing to take away from all this is that you will never know where your life is going to end up. I had almost trained myself to think that I would never become a great programmer. It was because I refused to completely give up that the simple decision to be stubborn and hope that one day the material would "stick" by just working hard at it actually paid off. As cliche as it sounds, by not giving up, I eventually learned enough about myself, the situation and environment that things were finally able to "click".
I had spent a lot of previous attempts in learning to code always comparing myself to what others would be able to do that I never looked back at my own growth. But after writing all this out, I realized that each time I fell and stood back up, I had actually improved and matured in many ways. However, it was because I was too distracted with failing that I never saw this important detail. I am glad however, that I eventually did given all that time -- even if, unintentionally.
I still have much to learn. We are never better than anyone else -- we are never perfect. We make mistakes and we don't know things that others do. The simple fact is that no matter how far we come, there is always something to learn... either from someone or somewhere. Stay humble and always be willing to empty your glass and let someone else fill it up with something that can potentially be better.
What matters most is if you yourself have improved over the course of time. Always take time to self-reflect and see how far you've come. Respect your progress and respect the pace. That's what matters. Personal growth and self-awareness is what I am now striving for myself, and this is the best advice I can give for anyone who wants to go into software.
I have had a few acquaintances and former co-workers tell me a little about their stories for inspiration. Here are some of the experiences they shared:
We had a 486 PC when I was in high school. I loved working with it, and even installed a super fast 33.6 Kbps modem, complete with onboard COM port switches. The 5.25 floppy disk games were awesome! The Nightmare on Elm Street was my favorite. This is the reason I chose a CIS degree in college.
Installing a 33.6 Kbps modem was a fun challenge. You have to first install the drivers, and then manually set your COM ports by switching the onboard device switches, as well as setting the device settings in Windows to match the same port settings as your switches. As long as the COM port isn't currently used by another device, you are golden! (e.g. never use COM port 2 as that is typically reserved for the mouse)
In college, I found there weren't many other peers who knew how to build or install systems. In fact, most didn't even know what the Windows registry was. However, the dot com bubble started when I was in college and not everyone grew up owning a computer. My career path was Business IT Management, and we were required to take two programming electives. Once I took my first software development class, I was hooked. I loved the challenge! My first program I developed was a monopoly style game written in VB. I chose more electives in software development because you couldn't easily Google your way through it. The best project I completed in school was creating an eCommerce website for a local company.
To be honest, I just love science in general and I took physics, chemistry, and astrology classes just for fun. I chose a software development internship during my senior year and the rest is history!