The ABCs of Development
Taking a Step Back
Earlier this year, I quit my cushiony job to be with my family. My stepdad needed multiple surgeries and needed me to take him to many different appointments. My mom also needed to see many doctors. I think I’ve spent more time in hospitals than my own home the past couple of months. But after a rough 2018, everything seems to be looking up in 2019. My family is getting stronger as the days go by.
However, in that time, I was able to take a step back and be able to look at my work from a bird’s eye view. I was able to self reflect on what I want to do going forward. I learned many things around helping my family.
Why I Got Into CS
In my third year of college, I was faced with a choice: Continue on with Chemistry/Biochemistry or switch to Computer Science (and eventually tacking on Pure Mathematics) and do something I actually really enjoy doing. But what did I enjoy exactly?
I enjoyed creating. I enjoyed being in the act of creating something from nothing. It felt like a different type of art. It felt like something I can call my own. It was one of the few things that got me into the psychological state of ‘flow’.
Mind you, this was during a Intro to Computer Science course (in Python). I had never even thought about computer science before. I did a brief stint in trying to figure out how the old pinball games on those old (and now defunct) Compaq computers worked but never to think about it again.
In high school, I faced a self identity crisis. I loved photography but everywhere I went it seemed like everyone was set in becoming a doctor or a businessperson or something along those lines. Pretty much all things I wasn’t interested in but was afraid that if I didn’t do any of those, I’d become a failure in life. I wanted to bring my family out of poverty and it seemed like the only way to do that was becoming a doctor.
Facing another self identity crisis in my second semester of my second year of college, already having declared chemistry as my major, I started browsing the course catalog when I should have been studying for an Organic Chemistry I midterm.
Psychology seemed interesting, specifically neuroscience (and it’s kind of funny since I read a ton of papers and books on these topics now) but then I saw Computer Science. I read the description and thought it seemed really cool. Flashbacks of pinball and MySpace and Tumblr themes flitted through my head as I quickly applied to be in the course. But not having the faith to fully commit, I just did the typical next semester Chemistry courses in addition to the Intro to CS course.
The first half of the next semester was pretty much me committing all my time to the Intro to CS course. I pretty much ignored everything else. All I cared about was trying to solve problems and trying to create new things.
It felt like being in photography again except the text editor was my camera and each file or module were individual shots and the overall program was the theme of the shots.
I know that sounds really cheesy and possibly unlike most other photographer’s experiences but that’s how it felt.
I remember one of the projects was to create a card game with a traditional deck of cards. The extra credit was to make it GUI based. Having no experience in programming other than changing style tags in HTML and selectors in CSS, I spent actual days researching how to get it to work. I willingly lost sleep just so I can learn some more.
My final project was to create a game so I went with Snake but instead of the typical Snake you’d find on one of those old Nokias, I went all out with the design. I made the snake’s body out of disco balls and the snake’s food disco balls as well. I wish I still had the source code and screenshots because it was actually so bad looking but I didn’t care; I was having so much fun.
“What hackers and painters have in common is that they’re both makers.” — Paul Graham, Hackers and Painters
I took the plunge and bothered the head of the department to get me into the next level computer science courses. The following semester (second semester of third year) I declared the major (and the semester after that, I tacked on the Math degree as well).
There’s a whole story between my first soiree with CS and graduation but that will be saved for another time because I’m not even at the point where I’m explaining what the most empowering thing for developers is (the title of the post).
I graduated after I went to work actually because I had finished all the requirements in the Fall Semester of 2015 but my friends were graduating in the Spring Semester of 2016. I started work on February 2016.
After I started work, I had lost all contact with what made me love computer science. Before I continue, let me preface this with the fact that I’m not at all bashing my previous work place. They provided me an awesome opportunity for which I am forever grateful. This is more of me losing my way.
I had just barely won a battle with depression but something still felt off. I felt like I was unable to create anymore. I went through the degrees so quickly (2 years) because of finances that I thought I didn’t retain enough to create anymore. I also thought that I didn’t have enough time to explore what I wanted to do short and long term. Computer science is so broad that I was able to get a taste of many different subfields but didn’t have enough time to choose a path. For the next 2.5 years, I battled with lethargy thinking I wasn’t good enough to create anymore and that all I’d be good for is just “feature programming”.
Feature programming is a term I used to describe a lot of the intro work junior devs do typically in the first ever job. You program small to medium sized features in a monster sized codebase never really getting to the point of understanding what’s going on.
Bring it Back to Recent History
I had joined a new team on September 2017 where I was to actually do some work I was really into. On my previous team, I was a “query master”. I had only worked with our internal databases and that’s about it; Some Java, HTML, CSS here and there but mostly Oracle SQL and an internal language that interfaced our database. In this new team, I would be working with C++, KDB, Lua and some other interesting technologies (Aside from Haskell, C++ was my favorite language in college). This was also around the time that my stepdad’s health was breaking down so I had a lot to deal with at home.
But nonetheless, I was trying hard to recapture the spark I had when I was in college. It felt really good to get back into the programming I wanted to be in. Within the first week of joining that team, I created a very useful program (albeit in Python) for our quants from scratch; something I hadn’t done in quite some time.
And I was knocking out projects left and right for a few more months after that until it started getting tougher at home. My stepdad works construction and he needed to get his pacemaker battery replaced and he had a limp for 30+ years because of an accident when he was in his twenties. He was unable to do anything with his right leg that it actually atrophied to about half the size of his strong leg. It was determined that he needed total hip replacement. My mom wasn’t doing so hot either because she had really bad back problems. This was also around the time that I was informed that I would have to go to another team since the current team was downsizing.
Sometimes you have to do what’s best for your family. Had I continued working full time while trying to help them, he wouldn’t have gotten his surgery in his a timely manner. In addition, we wouldn’t have been able to identify all the underlying issues he had to even get the surgery.
I made the decision to not go to another team and just leave the job to help my parents get on the mend and do whatever they need of me.
From July to Today
I had enough money saved up for a bit and I was able to score a contracting job with Lightning Capital, a hedge fund for blockchain assets. I was always super interested in Bitcoin and all things crypto that, while I didn’t create anything, I learned how to invest in all asset classes while at my previous job. I also read a lot about the blockchain since it’s a technology-first space.
I had met the hedge fund manager through a friend. He reached out to me because he was impressed with my knowledge of the blockchain space. We got to discussing algorithms and I told him I had an idea for a trading bot that he might like.
I hadn’t created something like that before. I started to wonder if I bit off more than I can chew. A full trading bot? I had created some crazy things in some of my college classes but nothing like a full stack application that some client depended on. How would I be able to pull this off? Little frontend experience, little API creation experience, little data science experience.
Bit by bit, of course.
Bit by bit is a play on Anne Lamott’s Bird by Bird. She explains a story that her child had a bird report to do but waited until last minute and was freaking out about finishing it. Her child asks how would they be able to do it and Lamott responds with “Bird by Bird”.
Of course, in my sense, it was more like block of code by block of code but bit by bit sounds cooler.
I went back to ole reliable, Python. Python is great for prototyping and it also has Numpy and Pandas, the defacto libraries for data science.
I finished a prototype version that just ran on my command line and sent signals (what to buy and sell) by email in an accumulated month of time. I quickly realized we needed a lot more than this for an effective bot.
I started filtering data from the API into Excel in specific ways/calculations for him to examine; I started to maintain an (in memory) database (SQLite); I even started creating a frontend dashboard. This was all for a version 2 of the bot. It was almost like having a full time job again but I wasn’t working full time hours because I was always in a hospital. So I just made a little progress here and there whenever I had the time and updated him accordingly.
The version 2 of the bot took another 2 months to “finish”. I wrap it in quotes because it wasn’t really finished because the frontend wasn’t connected yet (still isn’t) and there were a lot of tweaks to be had for him and there were a lot of performance issues (Python is known for this).
Then he wanted to see how my algorithm would fare in the past. In finance speak, this is called backtesting or what I like to call, “Going back in time and running my algorithm in the past as if it were today”. By this point I had realized how much better I am getting at programming. I longed to recapture the goodness and spark from college and I think I am getting there.
The ABCs of Development: Always Be Creating or Always Be Coding. It doesn’t matter if you don’t have much experience. Do what you know, and learn more to make it better over time. If we were trying to be perfect all the time, we’d never get anything done.
This is the one thing I should have done and didn’t. I was so afraid of being perfect or doing it “wrong” because of external pressures whether from school or industry.
“I tended to just spew out code that was hopelessly broken, and gradually beat it into shape… For a long time I felt bad about this, just as once I felt bad that I didn’t hold my pencil the way they taught me to in elementary school. If I had only looked over at the other makers, the painters, or the architects, I would have realized that there was a name for what I was doing: sketching. As far as I can tell, the way they taught me to program in college was all wrong. You should figure out programs as you’re writing them, just as writers and painters and architects do.” — Paul Graham, Hackers and Painters
The first two iterations of my codebase was something out of horror movies but I was able to beat a lot of it into shape in the third iteration. I created a simulations module that is able to run any algorithm I create in the past. After running the algorithms in past time frames that the hedge fund manager provided to me, he examined it and was really impressed with the results.
Fast forward to now, I am thinking about how to use operating systems concepts to make the bot run faster; I am also thinking about creating another bot that uses sentiment analysis; I am also creating a presentation using D3.js to present the findings of the first bot. It’s all really fun and awesome.
But That’s Not All
I mentioned earlier that I also created a dashboard (in React) that’s not finished. I was able to teach myself intro web development and have since been able to create my own landing page from scratch and started on a passion project that I will reveal at a later date that I’ve been wanting to do for almost 10 years. I am going to release some of the projects I’ve been working on later on this week.
The point is even while all the family issues were going on, in the little time I had, I was able to sneak in time to study new things, start creating again and take a step back rediscover myself so speak. I know that sounds very cliche but that’s what happened.
I was able to note a lot of the things I learned along the way so in the coming weeks, I will neurotically and sporadically release a lot of my notes in blog form for anyone who would like to read about the journey.
Figuring Out What I Want To Do
I want to create. I will learn whatever I need to learn if it involves flexing the creative, and problem solving muscles. I want to help people who first enter this field to learn and create whatever they want. I want to share the things I learn and the things I create.
But What’s the Most Empowering Thing
Oh right, the title of this post.
The most empowering thing for developers is being able to create something from your brain, your heart and/or your soul; to be able to take an idea and execute on it and see it work. It doesn’t have to be perfect. It most likely never will be because there will be something new to add or something to maintenance. But it’s empowering to take your ABCs (Always Be Creating and/or Always Coding) and turn it into a beautiful work of art.