The most frustrating and often daunting aspect of Computer Science is how much it forces its students to embrace a spirit of finding out on their own. The do it yourself spirit.

For veterans who have embraced this mindset, it is also the most rewarding aspect.

In four years of teaching introductory CS classes, this DIY mentality is what differentiates Computer Science from most other fields. Whether you’re learning a new programming language or debugging a nefarious issue, you are instantly transported to a world of uncertainty, where you carefully prod and poke your way to sanity. New students hate debugging because it makes you question your fundamental assumptions and, more importantly, verify each and every one through basic tests.

Unlike in an English essay where you may be able to “bullshit” your way through, if the program doesn’t compile, it simply does not compile.

There is very little room for error.

Distrubingly, there seems to be a trend in most colleges that reinforces this cycle of non-learning. You learn memorize something in class, and then are tested on it in that night’s homework. But between the textbook and the class notes, 100% of the information you need to solve the problem is given to you.

You merely have to piece it together.

Computer science is far more freeing, and for novices, daunting.

Here’s a problem. Go figure it out. That’s it.

Learning happens through the assignments, and not in the classroom. You aren’t given all the information you need because part of the education is how to properly learn and discover the information you need.

Look at the documentation; test your hypotheses on an interpreter. Run and re-run your programs and observe the output. And yes - occasionally, take a break, step away from the keyboard, and think long and hard about what kinds of things you can do to actually test/debug your code.

It’s a marked deviation away from the standard “here is your homework busywork, now go”, and off students rush without pausing.

That’s not to say that other fields don’t cause the same sorts of contemplation; they can, when done correctly. But in my own experience, CS mandated actual thought from the very beginning, and students were complaining not because it was difficult, but because the course made them think.

In other words, you will not survive in a CS course by cruising on auto-pilot like you might in many other fields.

But why should disciples of computer science confine these valuable lessons to the computer? Learning about new fields, getting an aptitude for “getting one’s hands dirty”, and engaging new problems even in the face of great uncertainty are the hallmarks of great hackers 1.

So in the DIY hacker spirit, I’ve decided to give it a go and get my own hands dirty, starting with the apartment in which I live.

I’ve been having a leaky toilet for quite some time, and, knowing nothing about toilets, I was very hesitant. Given that this is a one-bedroom one-bathroom flat, the stakes (should I mess up and leave the toilet in an inoperable state,) are quite high.

Diagnosing the problem itself was difficult; it became obvious over the course of several days (and many rolls of paper towels) that the toilet was leaking dirty water, which made the situation all the more urgent.

Basic research suggested one of four possible explanations:

  1. Crack in the porcelein of the toilet. Solution: replace the toilet. Seemed the most expensive of the options.

  2. Toilet is not bolted down to the floor properly, so water is seeping out before it goes into the sewer pipe. Solution: simply screw the toilet down properly. The cheapest of the options.

  3. The wax seal connecting the toilet to the sewer pipe is simply not functioning properly anymore. Solution: Get a new wax seal. $4 at Home Depot.

  4. The flange is broken. This is the worst case scenario of having to replace a new flange - certainly the most labor intensive.

Having put paper towles all along the toilet, I was pretty certain it wasn’t a crack in the procelein. And I wobbled the toilet fairly rigorously, and I was glad to say it was wobble-free.

So that left solution 3 or 4.

Certainly the most daunting, since I had no idea about toilets. But I plunged ahead with my trusty friend Google.

In fact, to impress upon you how little I knew, I didn’t even have a tool kit. So after a quick run to Home Depot and buying a standard tool kit, I took off the lid of the toilet and started on removing it completely.

Luckily, there are plenty of guides on how to remove a toilet. Start with turning off the water to the toilet and then draining the toilet completely. Most of the water can be disposed of with a simply flush, but the rest will have to be removed manually. I found a large sponge to be easiest, but anything works. Once that was done, I simply took off the knuts and yanked the toilet off and placed it on top of paper towels I had arranged.

Here’s what we have right after removing the toilet. That dark ring of liquid is where the dirty water had been leaking. I decided at this point that I needed gloves; so another quick trip to the local Target where I bought lots of cleaning supplies, including gloves.

We can see a standard six inch sewer pipe along with the wax ring surrounding it (no, don’t worry - I thought it was poop, too). I was actually fairly surprised at how clean the overall system was. Sure, there was messy wax everywhere, but once I had cleaned up the dirty water that had leaked, there was hardly any smell at all.

Most guides mentioned to put a cloth loosely in the sewer pipe so no gases escaped, but I really didn’t smell anything at all.

Next step is to remove the wax (or as much as you can). Most plumbers / guides on YouTube seem to have a super cool flat knife sort of contraption, but I just used the back end of an old dirty spoon. However you do it, get as much out as you can.

Another view of the post wax-removal stage.

Then simply pop the wax ring (often times surrounded by a rubber or plastic gasket) out.

Another view of the gasket. (Yay gloves!)

All we have left here is the flange and the raw sewer pipe.

In retrospect, I didn’t clean the wax nearly as well as I should have. The flange was covered in dirty and wax and other stuff, likely fecal waste, but I couldn’t see where the screws were at all. Most flanges have five screw bolts that you remove in case of replacing a flange.

Luckily for me, the flange was totally intact. I had a classic cask iron flange, and there were no cracks as far as I could tell. So I went back to Home Depot and got a new wax ring. My decision process was the following:

a. If I’m right, I’ve saved myself a ton of effort (needlessly replacing a flange) and I can test whether the wax ring was the issue. Plus, I really had to pee :)

b. If I’m wrong, I just wasted $4 buying a new wax ring. That’s not too expensive of a waste on a plausible theory, so why not.

Another view of the gasket on the floor (for scale). You can see the paper towels I had use to soak up the dirty leaking water; by this point they had actually become semi-glued to the floor (so gross!).

And it turned out that was the case! Bought a new wax ring, put the toilet back on top, screwed it super tightly and wiggle free, and flushed it 21 times (sorry California drought!) to ensure that we are totally leak free!

And then proceeded to cancel my plumbing appointment for the next day, saving $320 (minus the $4 I spent on the gasket). I won’t count the cleaning supplies because I needed them anyways, and I’ll use them for many other purposes, but if I did, I suppose my real savings is down to $250.

All in all, not a bad way to spend a Friday. And now I know a lot more about toilets!