This really does feel like the first git commit when creating a fresh repository.
Just like any new software/side project, we’re about to find out if this is nothing but a quick thunderstorm of inspiration that has rained down on me on a – rather sunny – Saturday afternoon, or something that I’ll actually commit to long-term.
So let’s start this thing.
I am a full time iOS Developer at a medical tech startup in Orange County. I’ve been with this company since I graduated high school in 2016. Since then, I’ve picked up school part time as a Computer Science student taking night/online classes while I’ve been working full time.
How the heck am I doing what I’m doing
I’m a self-taught programmer. I know that the phrase “self-taught” strikes fear into the hearts of many hiring managers everywhere, but it’s true. At the age of 8, I learned some basic HTML/CSS from my father – who is also a professional software developer. At age 13 he told me I should play around with the iOS SDK. This is when people were camping outside malls to get the iPhone 4, and when Xcode made you do UI work in Nib files outside of the Xcode editor. Also there was no Swift, and every developer was responsible for manually handling memory (Thank you ARC!).
Nevertheless, I fell in love. Programming is fun. You write some stuff down, it makes things happen on a screen – BOOM! instant gratification. It’s important to note that my dad was a huge inspiration and guide along the way – and he remains one of my biggest mentors today. He taught me to not only write code, but to release software. Publish publish publish. He would come home from work everyday and expect that I had apps pushed to the app store.
I felt like the karate kid. Wax on, wax off. Write a basic app, push it to the app store. I didn’t know how code signing worked. I knew that you had to do tableView.dataSource = <someObject> and tableView.delegate = <someObject> to make the UITableViewControllers work but I didn’t know why. I would express these frustrations to my dad over and over again, but he said it didn’t matter if I could only comprehend 15% of what I was doing.
I was building muscle memory.
Before I knew it, my hands were just typing away and I could write certain components in my sleep. I had no idea what NSURLSession was doing behind the scenes but I knew once I called dataTask.Resume(), something would happen.
After some time, I started to understand some of the iOS blogs I was reading. Hell, I could even start understanding some of the Apple Developer Documentation – which may come as a surprise to most iOS Developers. I became a really good iOS Developer, but I was a bad computer scientist.
I could tell you how to fetch some data from an API, parse the JSON, display it on a UITableViewController, press a certain UITableViewCell, and maybe fetch some more data from another API to show some information on a separate UIViewController. But I wouldn’t be able to tell you – using Big O notation – the time/space complexity it took for the code I wrote to accomplish some of those tasks. I also wouldn’t be able to traverse ANY tree data structure. I probably also wouldn’t have been able to tell you how memory management works. Forget that, I probably didn’t even know how HTTP worked. I probably thought TCP/IP was a cell phone company. It was all just voodoo magic that just worked in a black box.
This is where I realized that even If I wanted to continue working as an iOS Developer, I needed to fill some gaps in my knowledge. I had no choice but to start going to school to purse my Computer Science degree, so that’s where I’m at today. I still learn computer science fundamentals from other online resources – just like how I taught myself iOS Development. However, I have to submit to the fact that school gives me a nice structure to build my foundation of core Computer Science principles.
At this point you’re probably saying – “Come on Faisal. You’ve got it flipped. You’d be way better off going to school full time and working part time.”
Maybe you’re right. A lot of my friends have taken this traditional route and are doing really well. One of my friends has just recently graduated from UCI and has signed an offer for one of the “Big 4” tech giants in Seattle. Meanwhile, I’m only half way done with school.
But actually, I’m pretty happy with the way things are going. I’ll let you in on a little secret – I hate school. I really do hate how education is structured in the United States. It’s the reason that I still defer to teaching myself Computer Science concepts online.
Working is just way more fun. Honestly. I get to solve new problems every day for 8 hours and get to do it again the very next day. I get to talk to brilliant people everyday and learn for them – their successes, their failures, what they wished they could have done at my age. It’s pretty awesome – truly an opportunity of a lifetime that I am sincerely forever grateful for.
But best of all, I get to see how a company scales from the inside. When I was hired, there were about 15 of us. The company now has over 80 employees, with an office about 15x bigger than our first. Due to the growth, I’ve come into contact with more team members that are able to teach me more things that I wouldn’t have picked up myself. I’m also able to learn what makes a talented developer amazing, and what makes a not-so-talented developer less amazing. Spoiler alert: It usually boils down to habits and their frame of mind.
Basically, I learn the most at the office. However, the path to filling the gaps in my knowledge will never end. So that leaves me here. I’ll learn, implement, hopefully succeed in some places, and undoubtedly fail in many others.
It’s all good, I’m just here to learn.