Why I’m teaching myself Computer Science
This is where I lived during 2012’s super storm, Hurricane Sandy.
I watched the city of Far Rockaway, NY burn to the ground from the window of my tenement apartment building in a pitch black power outage. All I was thinking was, “Damn, they better not have that f**king parade in the city tomorrow”. I had no idea that the amber glow outside my house was a fire eating the entire neighborhood in the 120 mph wind and rain as dense as a waterfall. I had no idea that half of NYC was underwater. I was in my house, alone in the dark, thinking about the Halloween parade.
That was the catalyst.
My whole life upended, jobless, homeless, I moved back in with my parents in Harlem. That was the day I decided to learn to code. Since my apartment would be without power for at least a month after that, I took the opportunity to start coding. It was the first thing I ever tried really hard at.
I read the book Learn Python the Hard Way (amazing book, really recommend it if you’re just starting to code). And I did every one of Bucky’s android tutorials on thenewboston. After 3 months (or so) I built my first app and put it on the Play Store.
I started an internship, worked as a developer building iOS and android apps. Learned and started working as a backend Ruby on Rails dev. Years of coding and it was super fun.
And I felt like an impostor during all of it.
I never felt like a real developer. Even as a full-stack jack of all trades dev. Even though I never had a problem at work that I couldn’t solve. I always felt like there was more information deeper in the stack that was stopping me from truly understanding what was happening. That was slowing me down.
I always told myself, “One day I’ll learn math and then I’ll be good”
I said things like, I need to learn math, comp sci, bla bla bla and I’ll finally be good. But I never did cause that would be hard and I was busy playing League of Legends.
Then I quit coding and moved to Japan and started studying Japanese full time. Got married and became an English teacher. Teaching English is one of my biggest regrets in life. It’s a hard job and you need a passion for it. So I went back to my true passion and made my first app in over 5 years.
It was a blast making this app. I used to make iOS stuff during the Obj-C days. I never liked Obj-C because the syntax is ugly and it’s hard to read with all of the C code interlaced any and everywhere. Swift is a godsend. And Swift UI is pure sex. I love it love it love it.
But my code…
Here is some app-critical code for getting the sub-parts of a kanji, called a radical, from several places in the app. It’s bad code. The whole app is spaghetti code. Noodle after soggy noodle. My head started to hurt just trying to keep all the hacks together in my mind. I was planning on releasing this app and then job hunting. Instead I’m going to bite the bullet and use it to finally kill the impostor.
Teaching myself Computer Science
I learned to code, I learned to speak Japanese. So focusing on the confidence I get from those 2 big wins I will start the next hardest thing in my life. The purpose of this blog piece is mainly to write to myself and to carefully organize a game plan. If it sounds good enough to share with other people, it’s good enough.
1. Getting Organized
The human brain is amazing, but it’s bad at storing arbitrary data. The greatest invention of all humankind was written language because it gives us a new datastore, easily accessible, mutable, and can be shared. The most important step (and the one I’m the most afraid of) is to augment my brain and have an organized system for tracking what to learn and what I did learn.
I’m going to use trello cause that’s what I always use.
2. Where to start
I want to learn computer science. But what does that even mean? Reading a book? Learning a couple algorithms and then doing some drills? Following a universities curriculum? I think any approach is good and I chose to follow the Open Source Society University curriculum.
The OSSU curriculum is a complete education in computer science using online materials. It’s not merely for career training or professional development. It’s for those who want a proper, well-rounded grounding in concepts fundamental to all computing disciplines, and for those who have the discipline, will, and (most importantly!) good habits to obtain this education largely on their own, but with support from a worldwide community of fellow learners.
The main courses I want to take are the Core Math, Core Systems, Core Theory, and Core Applications. I’m going to skip Core Programming and CS Tools.
Study 8 hours a day and you could finish in about 6 months. Not saying that I’d learn all this in just 6 months but I could learn the core fundamentals that I’ve been missing.
3. What I’ve been missing
My main goal doing all this is to do what every self taught programmer dreads the most. Learn math. I’ve always put myself in the “can’t do math” category. Now that I’m older I see that it just isn’t possible to do the things I want to do in my mind without finally learning how to do mafs. I’ve always secretly felt like an idiot (and I probably am an idiot as you can discern by reading my blog posts) because I couldn’t do math.
Interestingly, “math” doesn’t come up much while you’re coding day to day. What I mean is that, you can get the job done with basic arithmetic. I always got the computer to do the math for me. At the end of the day, computers are math, code is math. If you don’t know math, you can’t be great. Personally, I want to make games and when I tried to make my own game this year this was the result…
SOOO I’m really excited to finally learn calculus and linear algebra.
4. Awake in the middle of the night in a cold sweat, asphyxiated with terror and dread at what you are doing.
I tend to make big goals and have big dreams without them ever coming to fruition. I’ve tried to make apps and businesses and blah blah plan countless times during the last 10 years. I don’t have a good track record. So if I told someone I know that I was going to do this, they probably tell me not to quit my job and not to do it full time. But that’s exactly what I did. I don’t have a successful track record. But I have gotten better and smarter and stronger every year. I KNOW that I can do this and that this is they way. Don’t think about your failures, think about your wins and see it happening. Visualize the future and it becomes reality. One strange thing that I’ve noticed about life is that I’ve predicted every major step in my life. I saw myself being a programmer all the way back when I worked at Dunkin’ Donuts. I saw myself living in Japan and learning Japanese to I could finally watch anime without subtitles level . And now I see myself mastering fundamental mathematics and algorithms so I can make 200 grand a year and have the ability to do what I know I’m put on earth to do. Open a game studio and make video games.
If you read all this, thank you. It’s a selfish piece entirely about myself but I hope that someone who is in the same boat as me finds it a little bit helpful.
Thank you for reading. 読んでくれてありがとう。