If you asked me three years ago to reverse a string in Python, I’d stare at you with a blank expression. I’d then probably ask you to repeat the question, explain what a string is, and give myself a pat on the back for knowing that Python was something called a “programming language.”
If you asked me that same question today, I would ask you whether I had to fulfill any specific time and/or space complexities, and then I would proceed by either using a Python shortcut (string[::-1]) or a divide and conquer algorithm.
Going into college, I was set on majoring in Economics.
Why do consumers buy certain products over others? What caused banks to default in 2009? These were just a few of the many questions I had hoped could be answered before I started college in 2013. I had an idealistic dream of starting my own company (part of me still hopes that I will someday) and the more realistic dream of following my brother’s footsteps and becoming an options trader.
Majoring in Computer Science was somewhat of a whim. Computer Science just happened to constantly pop up in my conversations.
Several of my freshman math classmates were majoring in Computer Science and would talk about their CS classes frequently. My dad frequently read articles on Forbes and The Wall Street Journal that expressed the job market’s high demand for software engineers. At the end of our phone calls, he would push me to consider majoring in CS.
He would always see me drawing away on my Wacom tablet, and it was common for me to fix the home computer while my brother was away at college. I had also always been into PC gaming -- in elementary and middle school, I would spend Friday afternoons on Cartoon Network's website (browsing the Teen Titans and Billy and Mandy pages to look for any new games), miniclip.com, and addictinggames.com. In high school, with my brother's influence, I began to casually play Blizzard games (WoW, Starcraft, and eventually D3).
I thought, "Why not? It can't hurt to try." Despite my love for technology, I assumed I would take a CS class and pretty quickly realize the major wasn't for me. Most of the people I knew who had majored or were majoring in CS seemed naturally intelligent. I knew I wasn't a fast learner, and I would have to work harder than others in order to do well in school.
My first CS class was not easy by any means, and I definitely struggled. Not having written a line of code prior to college, I quickly felt intimidated and like an imposter in my first CS class. The fact that I was one of three girls in a class of more than 20 students didn't help.
"Maybe it's not for you," my brother would tell me on the phone after I explained how I felt. Yeah, maybe, I thought. But it didn't feel right to give up. And I didn't.
Computer Science is hard, don’t get me wrong (scroll to the bottom of this post to read my thoughts from 2014). I would pull all-nighters and barely finish assignments. Sometimes I wouldn't finish everything. I would get frustrated at myself for not working harder and for not grasping the material immediately.
However, with time and effort came acceptance. Yes, Computer Science comes naturally to some people who have machines as brains. But with the right amount of work and an optimistic attitude, anyone can learn to code. I may sound idealistic, but I think success and mastery in a subject is brought about by working ahead and never giving up, even if you can’t completely solve the problem.
To me, every problem was a test of willpower. The process did seem like a game -- can you finish this game before the timer (the homework deadline) runs out? Every function I wrote seemed like unlocking another level. Debugging was like fighting the boss at the end of the level.
It was fun, and it felt empowering to know that I actually built something. Suddenly, every piece of technology became a puzzle instead of magic. I began to deconstruct every program I used and wonder what technologies were being used.
Through my CS classes, I have met some of my closest friends, learned how to build and design, and learned to persist, to be patient, to work on things little by little. CS has helped me with my other classes -- it has helped me step through problems in my math and physics classes. I now find ways to modularize the problem into subtasks. If something is incorrect, I pick at the problem from multiple directions, trying to find the error and trying other approaches.
At the end of the day, I love creating, and I love solving problems, even if doing so takes me longer than others. It's empowering. You look back and think, wow, I can't believe I just built that.
Check out these dramatic thoughts from 2014 ----->
> "Day 2 of Comp Sci: Watching high school kids kick my butt at coding was actually pretty funny!"
> "Sometimes coding makes me want to throw my laptop aside and run for the woods because let’s face it, technology is a whole bunch of gibberish to those who have hardly been exposed to it. Let’s renounce the technological revolution and embrace Thoreau. Yeah, right. Who am I kidding? That feeling of implementing my own program and witnessing it in action is really one of the greatest feelings I’ve experienced. Yes, it’s unbelievably frustrating to implement some programs, but man, when they work, they work.""
> "And I thought check-expect style tests were bad in Racket… Tries implementing array check-it tests in C and finishes after 4 hours"
> "But based on stackoverflow’s posts about random move algorithms and based on how difficult it is to deal with ppm files (look at me noobing it up – I’m sure GIMP is actually not that hard to work with, but WHY do I have to deal with GIMP instead of Photoshop/Illustrator?!!! I want my beautiful jpeg and png files back! Plus GIMP takes forever to load – apparently it doesn’t even open on some people’s laptops. Also, when will I learn about GUI development?! One week isn’t enough to cover these essential details! Sigh or Comp sci.), I’m pretty sure making a video game would take forever."
> "Things I'm not used to:
- the weather in Chicago
- drinking coffee and tea sporadically and whenever I want to
- getting a small cup whenever I ask for a Macchiato (I never learn)
- RECURSION (CURSE YOU, RECURSION!)
- tackling lab problems right after a 2 hour lecture (5 straight hours of comp sci is deathly)"
> "The thing about comp sci is that it’s not exactly a field in itself – it builds upon other subjects; I’m pretty sure it could build off of any subject actually. This sense of breadth is what I find so fascinating about it. I’m always drawing connections."
> "Then there’s another dude who not only pays attention to lecture but also looks up code for writing RPGs, and I’m just like, 'Who are you, and why can you multitask so well? Teach me the ways of the master, sensei.' And then there’s a high school student who can finish quizzes and labs in half the amount of time that it takes plebeians like me to."
> "I know I have a tendency to bemoan the petty grievances of my daily life. My Computer Science class is no exception. Don’t get me wrong, I am enjoying the class, and I think it’s moving at a great pace. I’m just barely holding onto the 151 train as it speeds across pattern-matching, lambdas, list-sorting, and recursion. God, recursion is EVERYWHERE!"
> "I don’t even know what this class is anymore. I feel like my professor is speaking another language, quite literally. You know it’s bad when you work on a problem with three other people for 4 hours straight and still can’t figure it out. I think it’s awesome that I’m learning all this new material that is applicable, but at the same time, I feel super overwhelmed."
> "I really feel like writing programs is an art, though I’m sure in a few days, I’ll be eating my words. We talked about style today in class, and I was like, you can’t be serious… but I guess that style matters, especially when other people are viewing your code and attempting to decipher it. And while we’re not covering web development, I know style is a huge component in CSS."
> "Today I realized how people can spend literally hours, I mean hours upon hours, coding. Before, I thought it was crazy how people could stare at their computer screens while running their minds and hands for up to 10+ hours, but now I realize that that is the reality of the realm of computer science. It is literally limitless, and it is forever expanding. I feel like it’s so easy to forget details, and the only way to keep up is to keep on coding and developing your skills."
> "Blindly downloading XMing…What is an X11 environment?! Will figure this stuff out when I get back home"