While working on this website, I debated for a long time what my first blog post should be about. I purposefully don’t have much of a social media presence, so I’m not particularly used to throwing my thoughts into the immense void of the internet. But last summer I decided to finally put in the effort to build a personal site. It was the summer in between my undergrad and grad school, and I knew I probably wouldn’t have much time to work on it until after finishing my Master’s. However I also knew it would take time to come up with a design that I wanted to build, and more intimidatingly, a first blog post. I felt like the first blog post should be about something special, and I assumed the first blog post would set the tone for the rest of them. Most of the future blog posts will be at least somewhat research-driven in their nature, or at least that’s the plan. However as the summer progressed, it became increasingly clear what I had to write about: building things.

So why do I think it’s valuable to write about building things? Well, last summer I had the incredible opportunity to lecture for CS 61a, the first class required for the CS major at Berkeley. Thankfully I wasn’t alone, I had two other amazing instructors to work with as well as a fantastic staff of 45 teaching assistants and tutors. This was important, as we had 720 students and were the first version of the class to ever be taught entirely online. Why we would do such a thing? Well, in case you didn’t check the date of this blog post and do the math, there was a pandemic going on. You would think being one of three instructors to lead the first entirely-online version of a large class during a 5-sigma event of a pandemic would be the most challenging thing I dealt with that summer. Spoiler: it wasn’t. That honor goes to building a pull-up bar. As I taught many new CS students that summer, my experience building that pull-up bar reminded me a lot of my journey over the past few years as a CS student, as well as the process of building this website.

If you’ll allow me to back up a little bit, earlier that summer I had moved to a new apartment. That’s not too atypical in college, largely a nothing-to-see-here event. But what was more unusual was that the RSF, Berkeley’s gym, was closed because of COVID. As a big believer in the need for exercise in a healthy life, I made one of my summer goals be to set up a minimal gym in my new apartment. And for reasons that probably aren’t worth going into in this post, a run-of-the-mill pull-up-bar station wasn’t going to cut it. Unfortunately neither were the pull-up bars you can hang on your door, as my apartment was too old and dilapidated for them to work on the door frames. So instead I decided to buy a pull-up bar that I was happy with and build a stand around it.

In my head, this seemed like a simple enough plan. I basically needed to build an open-ended rectangular prism that could support the pull-up bar, my bodyweight, and some extra free weights I wanted to add for more difficulty. How hard could that possibly be? It was basically just a giant wooden box. Still, I thought it would be good to go through some of the basic principles I had learned about building things as a CS student. So the first step that I took was to draw out a rough design of the schematic I envisioned in my head.

While I thought the schematic seemed reasonable, I hadn’t drawn any free body diagrams or anything to determine the amount of weight it could support. Even if I had, I didn’t really know how to incorporate the strength of materials into a free body diagram. To me it seemed like as long as the pull-up bar was sufficiently attached to the columns, and the columns were grounded by the rectangular base, it should be safe. But I didn’t actually know. So I reached out to a relative in my family who does a bit of amateur woodworking to get some advice.

My relative told me the schematic looked pretty reasonable, recommended a few tweaks, and also suggested what types of screws I should use to drill the pieces of wood together. I didn’t know it at the time, but that choice in screws was ultimately one of the big mistakes I ended up making. While the advice I was given was probably correct in some manner, my inexperience led me to interpreting it in a way that turned into a critical point of failure. Unaware of this, I journeyed on.

The next step that logically made sense to me was to figure out some list of supplies I needed in order to actually build this schematic. That was simple enough, as it just involved finalizing the measurements in my schematic and adding up all of the individual components to get an inventory. Then, since I was new to construction, I added in some wiggle room in the likely event that I made a mistake. A slightly painful trip to Home Depot later, I had all the wood and screws I could ever want. In my head, I was feeling decently confident that I could have the pull-up bar up and usable within a week or two. I basically just had to cut wood and drill a few screws in to connect everything. Shouldn’t be that bad, right?

One of the other pieces of advice my relative had given me was to purchase a box saw, as it allows for fairly precise and accurate angles when cutting wood. It was a decent recommendation, but with the number of cuts I had to make to the wood, having to use a manual saw slowed progress down quite a bit. I was only working on this construction project for an hour or two every day when I wasn’t teaching, and depending on the exact piece of wood, it could easily take an hour to make the cuts I needed. I quickly realized my timeline was quite optimistic, as it ended up taking a few weeks just to cut the wood into the various pieces I ended up needing. Then there was the fact that I was sawing the wood in my studio apartment, which could hardly handle the 10 ft long pieces and made a massive mess that I had to spend 30 minutes everyday cleaning up. It was a pretty horrendous process that dragged on for weeks, and only the beginning of many beginner mistakes.

As I got close to finishing cutting the wood into the appropriate pieces, I decided to use some of the scrap wood to practice drilling the screws in. While I may have used a power tool once or twice in my life, I was really just an expert with the Allen wrench needed for most cookie-cutter furniture assembly. How hard could it be to drill a screw into wood though? I charged my power drill, grabbed a screw, attached the head of the screw to the drill, and tried to drill it in… to no avail. It probably got a few millimeters in but it didn’t seem to want to go in any further. I paused for a moment, tried to understand the problem, then put more of my weight on the drill to drive it in further… it may have gone in like one more millimeter. Tired and confused, I decided to call it a day and try again the next day.

The following day I resolved to not cut any wood and to just focus on learning how to drill. In hindsight I should have watched a YouTube video or read anything on it, but unfortutnately I charged ahead ignorant. For about three hours I tried and failed at getting a single screw into the scrap wood. At this point it was pretty apparent something was going fundamentally wrong, and I noticed that the screw tended to shake quite a bit when I was trying to drill it in. This made it pretty hard to get it to go straight in, so I thought I may somehow have the wrong size drill socket to attach the power drill to the screw. So I spent a few days doing some background reading online to see if that could be the issue.

From what I read online, I was in fact using the correct size socket. But what I had failed to know about was the use of a pilot hole. If you’re assembling pre-constructed furniture, all you need are the screws, the furniture pieces, and a drill. But if you’re constructing furniture from scratch, you need one additional piece: pilot holes. Screws are not meant to be stable enough to be drilled into raw wood, they first need a guiding hole to help stabilize them. This is where pilot holes come in. You first use a drill bit to drill a small hole into the raw wood to serve as a stabilizing entrance that guides the screw. Only then can you actually use the power tool to drill the screw in. Confident I had solved what seemed to be an embarassingly simple problem, I returned to my construction setup in the corner of my studio to try again.

I failed. Again. I couldn’t even drill the pilot hole into the wood. At this point I realized I a) apparently lacked an extremeley basic skill going back to cavemen and b) had no idea what I was doing. So I went back to the instruction manual, where I ended up in a state of amusement and anger. As it turns out, drills have two settings, one for each way you can turn a screw. Effectively, this means that there’s one setting for pulling it out of the wood and one setting for drilling it into the wood. All of this time I had been on the pulling it out setting. No wonder I couldn’t get the screw to go too much past a few millimeters in. Awesome.

Embarassed but hopeful, I chose the correct setting for the drill and successfully drilled my first pilot hole. Before calling it a day, I had to try and see if I could finally achieve the herculean challenge in front of me. So I grabbed a screw, cautiously put it into the pilot hole, and started drilling… still nothing. I checked to make sure I was on the right setting. Yep, and the screw was still shaking way too much to be able to penetrate deep in the wood, so much so that I was worried the screw was going to detach, fly off, and hit something. This left me rather confused, as I thoroughly did not understand how a screw shaking as much as it was could be driven into a piece of wood. Disappointed and all out of enthusiasm, I decided to take a break for a few days and come back to it with a fresh head.

After a few days and feeling antsy to work out, I had regained my motivation to deal with both the task and how stupid I felt not being able to use a drill and a screw. I needed help, so I took a video of what the screw looked like when it was shaking and sent it to my relative.

Courtesy of my relative, the last piece of knowledge arrived. I just needed to drill the pilot holes deeper. Increasing the depth of the pilot hole allowed for more of the screw to be initially slotted into the wood, giving the increased stability that was required to drill it in. Dozens of hours over a few weeks and I had unlocked an achievement most boy scouts probably do at a young age: I could use a power tool to drill a screw into wood.

At this point I don’t know if I was more relieved, exhausted, or embarassed. Whichever it was, I was finally in position to start building the pull-up bar. I had the schematic, the cut pieces of wood, the screws, and knew how to use them together. I started by assembling the wooden support columns, using my newfound brilliant knowledge of how to properly use a screw to fasten the long planks of wood together. Next was attaching the columns to the base. In my head this was just another simple step, but as I prepared to tackle it, I realized a subtle but important issue. The columns were meant stand orthogonal to the base, which was going to be challenging with the supplies I had.

This is where the foreshadowed issue with the screw type comes in. My relative had recommended using lag screws, which was smart because of their strength and ability to work well with wood. However a critical issue was that they don’t go all the way into the wood like a screw with a flat head. Instead, they have a bulky head that juts out, which was not something I was aware of when my relative gave me the advice. In hindsight this was really the one issue that I didn’t adequately think through enough and could have avoided with proper research.

Because of that bulky head, joining the columns orthogonally to the base became a massive issue. I couldn’t do what seemed natural and drive the screws from under the base into the columns to secure the base to the columns, because if I did that, the head of the screws would be sticking out of the bottom of the base. That meant the entire pull-up bar would be resting on a few screw heads instead of the base, leaving it highly unstable. I sat and thought about the problem for a day or two, and ultimately the most practical solution I could think of with my supplies was to try to drill the screw from the columns to the base at a 45 degree angle.

If you think this approach looks hideous and unsafe, you’re not alone. I made sure to test it in a variety of ways and to my surprise, it largely stood up. When I had finally assembled the whole thing, I discovered that it had a bit of a swaying problem, largely because of the 45 degree angled screws. But at the end of the day I was able to get it fully assembled to a degree that didn’t totally mismatch what I had imagined.

Somehow I was able to use it thousands of times without it ever breaking or injuring myself. It helped that I did monthly upkeep on it, especially on those awful angled screws to make sure they were still holding everything upright. To this day I still joke with myself that this project was my real Master’s thesis. There aren’t many things I have tried to do in my life that have been more challenging and tiresome.

If all of this sounds exhausting, this story doesn’t even include many other mistakes I made, which I largely exclude for some attempt at brevity. I spent quite a bit of time angry that I was using the wrong drill bit size because apparently using the same drill bit size as screw size is just way too logical. Another fun mistake was when I thought I broke my power drill when it overheated and stopped working. Heck, just getting the supplies from Home Depot was its own challenge and a pretty sizable headache. And there are probably numerous more stories that I’ve blocked out from my memory for the sake of my sanity.

So why have I taken you on this long, circuitous journey about the struggles of a Berkeley grad student trying to do what seems to be a relatively simple task? Well, I didn’t have much of a background in CS when I came to Berkeley. Growing up, CS was a foreign idea to me that was for all of the brilliant kids in movies or tv shows. Which is funny, because I did well enough in school. But it was hard to imagine CS was for me when it was something I knew so little about. There was one kid in my Spanish class in high school who knew a bit of HTML, and that blew me away. So I didn’t exactly have a ton to go off of, largely just what the media told me. Which, without fail, is basically encapsulated in this scene from The Social Network.

For those of you who haven’t seen it, here’s the gist. Mark Zuckerberg is doing what Mark Zuckerberg does and creating things that are just great for the world (hi Facebook please never hire me). He needs a way to rank women at Harvard, which his friend Eduardo is able to supply. In classic Hollywood fashion, Eduardo has a stroke of genius and writes this fancy-looking math on the window of the dorm. He looks very smart while doing so, especially since he describes it as an algorithm (insert ooooohs and aaaaaahs). Basically every tech movie or tv show I’ve ever watched has some derivative of this scene. Nerd looks like a genius writing math/code on some whiteboard, window, or other non-paper surface. Sometimes there’s epic music playing in the background, other times there’s fun math equations dancing around them in the scene. To the directors’ credit, it works. The characters generally seem to be perceived by the audience as brilliant. Except the entire anatomy of these scenes as some representation of computer science or math is a lie. At least as far as I’m concerned.

Saying that Hollywood over-dramatizes things may not be the most profound statement. However I think the effect it has may be. I don’t actually have numbers on this, but my guess is that many people don’t grow up knowing anyone who programs. Few high schools offer actual classes on it, and while it’s getting better, there’s still a long way to go. The first high school I went to had a “computers” class that was basically learning to use Windows and Office (now it does have AP CS). So I’d venture a guess that the perception of CS that many people, including myself, have growing up is that it’s this thing for really brilliant people in movies or tv shows. So, you know, not me.

That just isn’t true. I don’t really know how else to put it. Computer science is not some ephemeral field full of the select few who can magically see math equations float around their head. It is a set of skills that need to be developed, refined, struggled with, frustrated over, and about every other emotion you can think of. People don’t expect to be able to build a house after assembling a few pieces of IKEA furniture. The same mentality is true with computer science. It takes time to learn how to use the tools to build even the smallest things, be it a wooden box or a Python script that prints “Hello World.” From there you can move to more complex projects, like a simple computer game. Or building a pull-up bar.

You might think I’m oversimplifying it with this analogy. I swear I’m not. For example, I’ve seen many new students get frustrated with trying to learn CS after failing to figure out how to even set up and run a simple file in the language of their choice. That’s totally normal! We always complained that one of the most annoying parts of learning new programming languages at Berkeley was trying to get them to work on our computers. In one particularly fun example of this problem, for the first grad class I took at Berkeley we had to install a Python library called MuJoCo. It doesn’t play well with a ton of personal laptops, including and especially basically all versions of Windows. I spent at least 12 hours just trying to get this one library to install on my laptop, which was thankfully a Mac. Shockingly, from the people I talked with, I semed to be on the lower end of the distribution of the amount of time spent setting it up. I even knew some people who were legitimately considering dropping the class because they couldn’t find a way to get it to work. These are Berkeley grad students mind you. Was it insanely frustrating? Yes. Did it make me want to throw my laptop at the wall at least once? Yeppp.

At a high level, I really don’t see much of a difference between this experience and what I went through trying to figure out how to use a drill correctly. Both involved setting up basic tools to be able to get the job done. In the one case, it involved understanding how to correctly power on a drill, use the correct setting, and know about the necessity of pilot holes. In the other case, it involved figuring out how to correctly install and import a specific pain-in-the-ass Python library to a programming environment so that I could use its functions in my code. I could also draw a pretty direct analog from my experience with the lag screws to numerous cases where I mangled my code because I didn’t understand the advice of someone with more experience in the field than me. Instead of taking the time to fully understand the problem and how to use the tools I had to tackle it, I just wrote additional code to try to awkwardly force it to work in a way that may have worked, but was definitely not ideal.

And guess what? It doesn’t stop with that example. My inspiration for this blog post came from the fact that I went through the same set of struggles with building this website. Web design is a very different skillset than traditional programming, so much so that my experience and degrees were basically useless when working on this site. I went through the same process of thinking I could apply some basic logic and engineering steps to build my perfect website. And I failed. Many times. To go back to the power drill and MuJoCo example, I spent an ungodly number of hours it figuring out how to set up jekyll, ruby, and all of the other requirements needed to build this site. Another highlight was spending over 20 hours trying to figure out how to set up the spacing for the footer in the code for the default jekyll theme for a website, only to realize that it would just be easier to write my own code and fixing the problem a few hours later. Possibly my favorite moment was when I got about 85% of the website complete only to realize that I finally knew enough to want to redesign the whole thing and questioned if any of the code I had written was useful. I could go on with more examples of this, but the length of this blog post is already a little bit out of hand and if I haven’t already conveyed my point yet, I’ve probably failed as a writer.

So I decided to write all of this for a couple of reasons. The first is that relative to many popular academic fields, it seems like exposure to CS comes generally much later in a student’s academic career, if at all. This leaves many people, such as myself, reliant on the perception of CS that is portrayed in the media (usually movies and tv shows). In my experience, the narrative they tend to tell is false. It serves a purpose, much as the genius-silicon-valley-founder narrative serves a purpose, but in doing so it potentially alienates many people from engaging with the field. Even if you try your hand at CS, in the likely event that you hit a roadblock, it’s a lot easier to give up if you don’t fit the mental image of a computer scientist that you hold. From that point of view, your success is basically out of your hands, CS just isn’t for you. That’s a lie. In all reality, it’s much more likely that you are simply suffering from the same type of problem that you would run into if you tried your hand at baking, chemistry, art, construction, or basically anything else in life. Overcoming that challenge is part of learning and growing in that field, but because CS has developed a certain stigma around it, people shy away from confronting the struggle.

Which brings me to my second reason. I write all of this in hopes that if it is ever in the hands of anyone who is new to the field, or really any field, they are encouraged to always keep trying to learn. I’ve studied alongside, taught, and worked with students from quite a diverse set of backgrounds. The most concise piece of advice I would go back and give myself or people I knew starting out would be to treat CS like building a pull-up bar. It’s just another skill you have to develop. Some people will have years of woodworking under their belt, some will have assembled some furniture, and others still may have never even built anything. So try not to compare yourself to others too much, have humility and patience with yourself, ask for help, and don’t be afraid to fail. Learning is just being able to conquer your failures.