A high school junior’s journey from Google Drive for git to coding addiction
Approximately 365 days ago, I sat around thinking, “How can I get better at programming? How can I learn more? How do I learn?” Growing up in the heart of Silicon Valley, I saw people who were building mind-blowing projects, and I wanted to be able to do that too.
And that 365th day ago, I read up on many articles on the #100DaysOfCode challenge, where people committed to coding for an hour a day, every day, for 100 days. Naturally, I was amazed — where did these people get the motivation? Whenever I had time, I would convince myself that I should go sleep or magically find something else to do. I was frankly amazed by the dedication that came from these people. For the next couple weeks, I entertained the thought of participating in the challenge. And on the 26th day of December, in 2016, I took my first step as well as my first #gitcommit towards where I am today.
I set some guidelines for myself, which were a bit modified from what other people have set. For the most part, I haven’t been great at time management, so I didn’t think simply setting a timer and starting would give me the necessary push. I also didn’t think that it was feasible for me, a struggling high school junior with sports and other hobbies, to impose very strict guidelines when I needed to focus on school the most.
Rule 1: Commit to GitHub every day with a meaningful change.
For someone who had never used GitHub before, this was a huge change. Although there was mixed feelings regarding the removal of GitHub streaks, I found that they were actually very beneficial to keeping up my motivation. For a better visual of my progress, I found that using Naramsim’s extension was very useful.
Rule 2: No excuses.
It’s easy to make excuses.
I’ll do it later.
I could do that if I tried.
But the truth is, you’re not trying, and that “later” will never come. I knew that although I wasn’t the best at time management, if I was going to commit to a long-term resolution like this, I needed to scrap any excuses. That meant that even if I had a test or vacation, I would still make just a little time to get a something done on my projects.
Frankly, I probably learned less than what you were expecting. From the time frame, maybe you expected me to come out a machine-learning-backend-android-ios-prodigy whiz, or something along the lines of that. Without ado, here’s a recap of what I’ve been doing for the past year!
iOS App Development
I came in with a broken understanding of Xcode and Swift 2.1, after leaving Make School’s Summer Academy for Game Development. Despite having prior experience, building apps and learning storyboard was a completely different jam for me, since the difference between SpriteKit Scenes and Storyboard was drastic.
However, after my persistence creating multiple projects, I’m happy to say that it has become my go-to frontend platform for hackathons and side projects.
EmergencyBot (GunnHacks 3.0): Multiple Dates, Day 73
If you’ve looked at both the Devpost and the GitHub project, they’re very different, and I assure you, this was on purpose. When I went to my first actual hackathon, I had went over a couple iOS tutorials, but had no idea what was an API or Flask was. Naturally, being quite lost, I got a couple of ideas from a friend, and the rest of my team thought it sounded exciting. From this experience, I learned that it was a bad idea to just start working on something without coordinating with your team and get frustrated alone. It’s probably a given now, but as a near first-time hackathon attendee, I can forgive myself for that.
EmergencyBot is a SMS text messenger bot that allows a user to hold an emergency button down while walking alone at night, which when let go, messages your emergency contacts with a custom message that you are in danger. I wanted to create an app that would allow people to feel like they had some sort of safety net when they might be going into dangerous situations, such as walking home late from a class or going to a new place alone. Thus, I made an iOS application that contains a emergency button, an averaged programmatic delay to determine how long you would need to let go of the button to send a message, functions to edit and add emergency contacts, and group message sending to mitigate any possible false alarms.
Babysitter (Multiple Submissions): Day 41
After my prior disappointing performance at trying to build an iOS application, I was honestly pretty discouraged. When I attended this hackathon, it was my second try, and I unfortunately disappointed my friends again, only able to figure out how storyboard worked and Firebase authentication. After this, I decided that I seriously try to figure out iOS development.
Releaf (Internship): Day 48
Repository GitHub. Built with Swift 3 and Firebase.
You might be thinking, how did this girl suddenly go from being incompetent at iOS development to landing a full-blown internship a week later. To be honest, I ask myself the same thing, but I happened to get lucky after I familiarized myself with iOS development. I demonstrated my aptitude for learning on the job, and from this job I became quite proficient in iOS development and became more aware of how an external perspective would change my projects.
The original web application for Releaf was created by two Stanford graduate students to provide a support group for any topics of concern, similar to smaller private Facebook groups. Common posts include anonymous postings of everyday problems, academic topics, parenting topics, and psychological problems. It is both a web application and an iPhone application, which allows more people to participate.
I ended up being the third employee, contributing from when the first iteration was completed and the founders were looking for new perspectives. From there, I helped them review the next couple iterations and helped brainstorm for ideas relating to both design and product development. During my internship, I was advised by a designer and created the application from the ground up, making several adjustments to match the progressive ideas of the founders.
NOTE: I was granted full permission to open source the code for the application.
UV Radiation Detector (LAHacks 2017): Day 97
I’m notorious for hating the sun, and people who meet me quickly find that I have some quirks that are a result of that fear. I came up with this idea as a joke with my friend while I was trying to avoid the glaring sun on our way to Los Angeles, and we eventually sort-of made work.
This application takes your location to find the UV index, and analyzes a picture of yourself to find your approximate skin tone. It then calculates the user’s rate of vitamin D production as well as their optimal daily vitamin D intake through their weight and skin tone. Using the iPhone’s ambient light sensor, accelerometer, and signal strength, we makeshiftedly determined how much UV exposure the user would receive.
Pick Up Three: Day 195
Repository GitHub. Built with Swift 3 and Firebase.
A long time ago, back at GunnHacks 3.0, I was interested in building this idea, but as time passed, I never really got to making it. Eventually, I decided to build it as a fun break from my work. Following the conclusion of my internship at Releaf, I decided to take what I learned about design and user experience to try and build a quality product on my own.
Pick Up Three is an app for iPhone which servers as a social network solely for sharing and creating pick up lines. Users are able to request pick up lines with three specific keywords, so the resulting pick up line will be specially catered towards their special needs.
The whole idea of this app was pretty ridiculous, but I’m glad I made it.
I first got interested in coding because of HTML, which is kind of embarrassing, since it’s just a markup language. More importantly, I liked the feeling of making real projects and solving problems, which made web development an ideal choice for a beginner like myself to get started learning how to use GitHub, managing DNS providers, among other basic topics.
PalyHacks Promotional Site 2017: Day -84
Technically I’m not supposed to include this, but I did work on this website quite a lot during my 2017 year as well. I decided to organize an international hackathon called PalyHacks, which became partnered with WeChat.
In my opinion, it’s honestly quite a nice first website, and I have a certain fondness for it. Even though I used so much inline CSS. And had terrible indentation.
School Club Website: Day 1
Honestly, although the code for this project was rather messy, I also have a certain fondness for it. I spent a lot of time trying to learn what type of colors meshed well together, as well as how I could make the user experience slightly better. Some of my first exposure of Firebase came from this experiment, as well as a sense of how to manage user privileges and DNS providers.
I’m also very thankful for MLH and Domain.com for the free promotion codes.
Personal Website: Day 35
Most people I know have a personal website, whether they are in tech fields or not. I decided to make my own, and went with a minimalistic design with links to my resume and other helpful links.
Teens Exploring Code Promotional Site 2018: Day 68
I’ve joined this local hackathon as its lead organizer, and as part of that, I revamped the website for a new season. It’s a work in progress!
EdgeHacks Promotional Site 2018: Day 132
If you haven’t quite figured it out yet, I enjoy organizing hackathons!
Hackathon Manager, AKA Procurator (GunnHacks 4.0): Day 288
If you made it here, you probably heard about how I didn’t do so great at the last GunnHacks. I wanted to make a project that used some skills I had developed over the past years. For a while, I had been working with Swift, I decided to make a utility-type web application instead.
In case if it hasn’t become apparent, I enjoy organizing hackathons, but with leading one, there’s a lot of logistical and collaborative tasks that need to be done. Managing attendee and mentor registration, judging, and setting deadlines are some of the few tasks that I ended up having multiple Typeforms and Google Sheets for.
Hackathon Manager allows future hackathon organizers to keep track of hardware inventory, milestones, project scoring, and attendees in one web application. All tasks needed to organize a hackathon can be performed inside the web application, from sending emails to registering hacker applications.
The web applications contains features such as email sending, tracking progress on tasks, scheduling events, registering users, project scoring, and project ranking.
Like most hackathon projects, this fizzed out for a while, but I decided I wanted to make it functional and more usable. As of today, I’ve accomplished both of those goals, and from running a single shell script, you can generate a full user portal for your event or hackathon. Although it’s mainly complete, it is still missing a few features I would really like to add, so it’s still a work in progress!
Check out the informational website for a more in depth review of what the project is and how it works!
PalyHacks Promotional Site 2018: Day 364
I’m still working on this one, but our hackathon is coming back for 2018! I recreated the home page with the new design after going through nearly a hundred iterations when I worked on the advertisements and banners for last years hackathon.
I had a couple small projects I worked on that are still being worked on, or were just small ideas. I also learned to use MySQL from my dual enrollment at a college, but mostly stuck with classwork.
.dotfiles: Day 37
Repository GitHub. Built using Shell.
.debugcleaner.sh: Like some other developers, I had a phase where I left print statements in my code from debugging. This practice resulted in my side project’s code looking rather shoddy, with statements like console.log(“ASDFDSA”) and print(“hi”) scattered throughout. As a result, I created a script to delete all the print statements for various languages throughout my code.
.apiremove.sh: API keys are frequently committed, and sometimes people don’t use .gitignores because they don’t know about them or they become too lazy. To solve that problem, this script commits your code while searching your code for your keys and replacing them with filler text.
.mysql-simple-output.sh: The title of this script is a little misleading, since I meant to use it for a different purpose, but essentially this script allows you to log into the MySQL Command Line Client from any location in your computer. I created it because I kept forgetting the correct file paths from where I could login, so this proved very helpful.
VR Everywhere (AT&T Shape Hackathon): Day 196
Repository GitHub. Built using Python, Unity3D (not uploaded on GitHub), Arduino, IBM BlueMix.
It’s a little bit difficult to self-demo this project, since half of the code wasn’t uploaded onto GitHub. Essentially, we wanted to bring Virtual Reality into a more accessible and reachable tool. By spinning a phone around and stitching pictures together, we meant to create a 360-degree view of the view, with subtitled voice iterations using IBM’s Speech-To-Text Framework.
Twitch Music: Day 308
Repository GitHub. Built using Python, AnimeLyrics.
Streamers often have to multitask to communicate with their fans, and one of those many tasks is managing their background music. I am currently working on Twitch Music, which scrapes the current Twitch chat of a streamer and plays the youtube songs sent in the chat. If the streamer wants to sing alone, it uses the AnimeLyrics module to retrieve the lyrics for that song.
AnimeLyrics: Day 310
Originally, when I was building Twitch Music, I couldn’t find a suitable module I could retrieve lyrics from, so I just decided to make my own. I also figured that this might be nice for other developers to use, if they also have some use to retrieve lyrics for songs.
Feel free to check the documentation on the GitHub repository for information on use!
League Voice (Riot Games Hackathon 2017): Day 317
League Voice is a Google Assistant reference tool that would consolidate frequently-referenced info that’s both provided by endpoints (ie. champ win rate, build order, runes) and not (ie. champ ability damage per skill rank). We provide support for many utterances with the use case of cutting out navigating to sites like op.gg and the lolwikia before or during a match.
Here’s a quick summary of what skills and tools I learned to use.
Firebase (Cloud Functions, Database), API.AI (formerly Dialogflow)
Do I regret spending so much time on projects? A little.
I learned a lot about why I enjoy coding, and how to focus on what is important. I let go of some unhealthy relationships, and rebuilt bridges. I also met a lot of new people by branching out, and trained myself to push my boundaries.
My only quibble with what I originally proposed for my rules were that even though I expressed my desire for no excuses, that clearly didn’t work out. By the end of the year, I lost almost a full month of time I should have spent working, according to my original standards.
In the first month, I had already broken my resolution twice because of school work piling up and sleep becoming a number one priority. Like most New Year’s resolutions, I figured that I would just fail and give up on this venture altogether.
February to May
I had pretty much adjusted to the new lifestyle that revolved around extremely efficient time management. At the same time, I had started school sports, which meant I would not get home until roughly 6 or 7 PM every day. To juggle my internship, schoolwork, and sports, I quit video gaming and began focusing on my overall health, which was one of the best decisions I made this year. As a result, somehow my streak lasted through junior year finals, which ended up being 45 days: the longest of the year.
June to August
Around the beginning of June, I had more days of off-time. At that time, I was on a family vacation in Asia, and naturally, the time difference was difficult to make time for. It was also difficult to balance enjoying the trip to the max while also worrying about progressing on projects. Around then, I came to the realization that the way I was approaching my goals was simply not a sustainable habit to develop. I let go of my resolution a little more, which was the key to being able to get more time in for the people I cared about.
For the last two weeks of June, July, and first two weeks of August, I was interning part-time at a startup called Flipword, while still working remotely on Releaf’s application once I got home. However, with both of these internships, I was learning on the job, which meant I had to put in extra work to compensate for my lack of knowledge. That meant from 12:00 PM to around 5:00 PM, I would be working in-person, then I would get home to work a couple hours on tasks I wasn’t able to finish in the hacker house until late at night. I would then get some work in on Releaf, which ended up contributing to my daily commits. However, because the timeframe I would begin to work on Releaf would often be late, I would be unable to complete a new feature before slipping off to sleep, which contributed to many blank spaces within the summer.
September to mid-December
With my poor decision making of procrastinating standardized testing taking a toll on me, I took my resolution more loosely and ended up with many blank days. At the same time, college application season rolled around, which made my life more busy.
It’s the end of the journey.
Ultimately, I learned a couple key lessons from this process.
1) The GitHub contributions chart really is a dumb way to judge a person’s work.
For some who attempt the #100DaysOfCode challenge, they end up with a flawless contribution chart. However, there is also a reason that so many people drop out midway — that sort of lifestyle, especially for those with full-time jobs, is difficult to sustain. Even for just a full-time student, I could not even get to a hundred day streak.
Though, if you’re looking to compete in a similar challenge, I do recommend the chrome extension I mentioned earlier.
2) Take care of yourself. Hobbies are important, but your health is also important.
I think that many who attempt this challenge, like me, are youths who are still learning skills. With hackathons becoming the new “craze,” it’s easy to forget this one thing. Health doesn’t just mean your physical health, but also your mental health. With challenges like these, you might feel that you just want to take a break. And that’s all right. Taking a break for life, and for people who matter to you is just as beneficial as a couple more days spent coding.
Though, it is kind of ironic that I’m writing this at 2:00 AM.
I hope you enjoyed hearing my story. Please leave a 👏 if you did, and good night.