CS Teaches You to Feel Behind Before You Even Start

A look at how pre-learners, professors, and a strange CS culture turn intro courses into imposter-syndrome factories.

843 words 5 min read Written 5 hours ago

Day 1 of CS: Intro to Computer Programming in a lecture theater of 50+ students. The first question the professor asks the audience: “Does anyone here know octal?”

Of course not! There’s no pre-requisite courses that teach it. This is, after all, the first undergrad course everyone takes so how could anybody know? Anyone except for the IOI bronze medalist sitting in front row to the right. His hand went flying up at Mach 4 speed. Seriously he could’ve injured himself.

After hearing his eloquent explanation of the base-8 system and its real world use cases in Unix file systems, every other regular student has the opportunity to feel dumb and insecure. Most people haven’t even heard of a Unix file system. “Gosh, I should’ve know that!” said most of us. The professor’s facial expression morphs from underhanded to quasi-impressed.

# Octal permissions in Unix
chmod 755 script.sh
# 7 = rwx for owner
# 5 = r-x for group
# 5 = r-x for others

Now the professor takes the liberty of transitioning to the slide that actually explains the octal system. Well, there you go, that was simple. Converting from octal to decimal to binary only involved elementary arithmetic with one or two simple rules. 

Octal number:    754
Place values:    8^2   8^1   8^0
                 64    8     1
                 
7 × 64 = 448
5 × 8  = 40
4 × 1  = 4
-------------------
Decimal:        448 + 40 + 4 = 492

492 / 2 = 246  r0
246 / 2 = 123  r0
123 / 2 = 61   r1
61 / 2  = 30   r1
30 / 2  = 15   r0
15 / 2  = 7    r1
7 / 2   = 3    r1
3 / 2   = 1    r1
1 / 2   = 0    r1
-------------------

(reverse the remainders)
Binary:          111101100

So why did he have to ask if anyone knew it before actually explaining the damn thing? I pondered this during the first 1.5 years of my CS major. It was a recurrent motif. Were CS professors talent scouting, nervous, or just being controlled by simulation operators? It happened at least once per lecture for almost every class.

The downstream effects of this culture stick out like a sore thumb. CS has a warped dopamine signal where the reward stems from pre-learning content and being the first to answer the questions in the lectures and tutorials. The number of people who pre-learned material through programming competitions etc. is insanely high. I don’t blame them, because I did too. It’s important to acknowledge that it defeats the entire point of the class. You should go to the class to learn something new. If you already learned the material why would you attend that class again? If you’re an IOI bronze medalist, what are you doing studying CS? Go learn economics, physics, law, anthropology. The world is your oyster and re-studying CS is choosing to live life on easy mode.

The issue isn’t IOI bronze medalists. The professors play a part too. They encourage this from day 1. The whole system is built to serve and validate the 5% of students who have already taken the course, undermining the learning environment. It’s crazy.

It ends up sucking for the 95% of students who are genuinely trying learn CS for the first time. I don’t think most of them make it over the imposter syndrome hill to emerge victorious on the other side. The gravitational pull from the insecurity and disbelief is too great a force. I’ve spoken to people who work really hard on their assignments for DSA but they lose hope when they see their classmates breeze through, making it look effortless. Well it’s not effortless, it actually took most of those peers a tonne of effort, at an earlier point in life before that class. Let’s not discount the genuine geniuses out there who can grok complex subjects quickly. That’s <1% so most likely the ninjas you see out there flying through the content have programmed before.

I still remember sitting in CS1521, Computer Systems Fundamentals. There was this older girl who sat on the computer next to mine. She was dressed like a real-estate agent which was kind of strange for first year of undergrad. She flew through all the lab problem sets before I could even get my head around the first problem which involved bitwise operations. I can remember every detail to this day because she would cheer on after she completed each question, making sure everyone knew how good she was. I felt pretty dumb. The truth was bitwise logic didn’t intuitively make sense yet. Why do we even want to manipulate arbitrary bits? It wasn’t until 5 weeks later when we were introduced to MIPS assembler that everything clicked. I was very curious about the design of Instruction Set Architectures (ISAs) including all the different opcodes and register allocations. Since MIPS is a 32-bit architecture, to extract the opcode you only needed the first 6 bits. I needed the opcode because I was building a MIPS interpreter that passed it through a lookup table to invoke the right execution logic for that instruction. The cleanest way to extract the opcode was using two bitwise operations.

uint32_t instruction = 0x2AF1002E;
uint32_t opcode = (instruction >> 26) & 0x3F;

The shifting made sense but the 0x3F mask is what made everything really click. If you only want the last 6 bits 0b00111111, that’s the equivalent of 0x3F in hex. Everything else gets zeroed because n & 0 = 0. I just needed a practical example to intuit bitwise operations. Funnily enough, I ended up finding out that the real-estate-agent-looking-girl went to technical school in Singapore before she came to our university. She basically already knew the answers to every lab. Why did she have to cheer on when she had already done these questions before? I guess everyone needs some form of attention.

Ultimately, that’s what CS often feels like. It’s a constant battle against imposter syndrome. It’s not your fault. The professors encourage it, there’s plenty of students studying CS despite already having studied it previously and they tend to be the louder ones looking for that extra validation. Don’t let them get in your head. Stay curious and humble. Enrol in competitive programming competitions and write 10x more code than anyone else because the best way out is through.