When You Don’t Have an Opinion | CS Pep Talk 002

To the student who feels like their opinionated classmates know way more than they do:

“Okay, Visual Studio? Way better IDE than Eclipse.”

A furrowed brow. “Okay… uh, what about IntelliJ?”

“Eh,” a pause, “IntelliJ’s okay; but VS’s Intelli-Sense is honestly superior.”

What even is that? And I like IntelliJ just fine!

If you understand that conversation, you know vouching for VS over Eclipse or IntelliJ is… frankly, a pretty dumb hill to die on. (Not that you can’t prefer it over another IDE! It does have good Intelli-Sense/that auto-complete function feature.) But unless there’s like, one specific feature you need for your work that’s only in VS, it’s not something you should reasonably go kicking and screaming over.

Unfortunately–and this is something I encounter a lot in undergrads who are just a bit overconfident–conversations like this where someone is way over-opinionated about something tend to happen from time to time; and I remember when, back in my freshman year, stuff like this would really intimidate me. Am I supposed to know all this stuff? Should I have a strong opinion like that?

If I’m being honest, I still feel intimidated sometimes. As I’m writing this, I’m at the end of my sophomore year*, now with two new languages under my belt–C++ and Scala–on top of ones I’ve worked in before–mainly Java and Kotlin–and… while some of my classmates are comparing language pros and cons regularly, I still couldn’t tell you all of the nuances, benefits, or consequences about each language, at least not to the extent other are. C++ has pointers, Scala has Options and lots of lambda functionality, Java’s compiler is infinitely more helpful for debugging than C++’s… but that’s all pretty basic stuff. I realize, though, that for beginners, even little details like that are concepts you’re just not familiar with yet. But hold on to that key word: yet!

One of the things a lot of people find exciting about coding is that, at first, it seems like there’s a right answer and a wrong answer. Your code either works or it doesn’t, and if you find the things that don’t work, you fix them and then it does. It’s like a puzzle – that’s how I describe it when people ask me why I love programming!

But then, one of the things you start to learn as you progress is that… there’s not generally one “right” answer, and there’s a bajillion ways for it to work and still get it ‘wrong’, too. Classmates start explaining ways they did the homework and you think, “wait… I didn’t do anything like that,” or you realize halfway through your implementation that your solution isn’t going to catch a certain edge case and now you’re back at square one, or… you get the point. This is where I hit my first slump, or period of frustration where I could see there were better ways to code things, but my own ability to code them wasn’t quite there yet.

See this graph from artist Marc Dalessio – you can replace “Improvement in Painting” with “Improvement in [just about any sort of technical skill]” and it works just the same. You start to improve, think you’re doing great, then realize how much you have to improve, grow frustrated, work hard, then start to improve again.

marc graph
http://www.marcdalessio.com/self-portraits-over-the-years-2/

All this to say: as your ability to see better solutions increases, so will your ability to determine what makes them better and why – and this is when you start to develop your own opinions about things. You need to understand how hashmaps work before you can explain why you think they’re a better or worse solution; you need to have worked in multiple IDEs for a little while before you can reasonably explain why you prefer one over the other; and you need to be patient with yourself as you’re growing. Don’t let opinionated people make you feel like you’re capable of less for not having an opinion.

Since knowing more generally results in having more opinions, people tend to think that having more opinions automatically means they know more; but that’s simply not the case.

Humans like to feel like they know a lot. Your classmates and co-workers are no exception. The people who are being loud are likely looking for validation of their own knowledge or intelligence; the people who give their opinions condescendingly are pretty much always trying to boost their own feelings of superiority or capability. The right kind of opinion-sharing should be framed like a piece of advice or a teaching moment, not a cry for attention from the sharer.

There are times when having an opinion is important or perhaps expected, like if you’re at an interview and need to explain when you’d want to sacrifice time complexity over space complexity, but most of the time, you don’t need to have explicit preferences – especially when you’re still learning. I’ve learned that “I don’t have enough experience with that yet to say,” is a perfectly valid answer; so is “I think I prefer that one, but I couldn’t tell you why.” And for things like actual code, where there can be objectively better or worse implementations, that’s just another part of the learning process – if you don’t get why one way is better than the other, you’ll get there in time. That’s just an experience thing.

So the next time you hear someone preaching the glories of VS Code, or criticizing someone’s choice of language, or telling you that light themes are the worst… relax. You’re not a worse programmer for not getting it all yet. Opinions will develop with time – or maybe they won’t, and that guy who really likes VS Code just… really likes VS Code. You go, dude.

(But if we’re being honest, if you’re using a light theme… please, man. Repent. Embrace the darkness.)

* small but important disclaimer: I know I’m not far enough along to be making some of the claims about the workplace that I do; any and all claims I make about the industry have been double-checked by people who’ve worked in SWE for a long while.

What Your Degree is Really For | CS Pep Talk 001

To the student programmer who thinks their college degree isn’t going to teach them everything they need to know:

Early Spring semester, my professor surveyed how many of my classmates had landed a summer internship already; there were actually a handful in our group of about 30 students who’d known since before the spring where they were headed that summer–and some of the companies included places like Nike and Microsoft.

Imagine that. Imagine landing a job at a Fortune 500 company right out of college because you landed an internship a summer or two before graduation! (Or, if you’re a self-deprecating Millennial/Gen Z like myself, just imagine landing a job!)

Well–disclaimer number one: you don’t have to land a really fancy internship to find a good job after graduation; and disclaimer number two: it’s not guaranteed or even likely you’ll be working on self-driving cars or IBM’s Watson at your very first development job. But. The fact is we tend to place fields like that–and the jobs they provide–on a pedestal of technological godhood.

Reading about graduates at MIT, Princeton, or Caltech being snapped up by companies like Tesla and Google for their novel research and programming skills is, honestly, a little disheartening. It feels like you have to be a genius, or something close to it, to even understand, let alone land a job in, any field that’s new, complex, or both. And then, if you’re like me, you look at your course requirements for graduation and think, How are classes like Operating Systems or Client-Server Interactions going to help me understand machine learning? Or voice technology? Or programming video game physics? Or any of the things people are working on these days?

Like the words say on the cover of life’s most important textbook–don’t panic. You can put away the course requirements. The fact of the matter is, your college degree is not going to teach you everything you need to know.

What your degree is going to teach you is how to teach yourself.

The internship I worked the summer after my freshman year had a small group of college-age interns working to build a desktop version of some mobile software. Only two of us were right out of our freshman year of college–the rest were juniors, seniors, and even graduates who’d worked internships at places like NASA. It was intimidating, to say the least. The first day on the job, they paired each of us off and gave us a small project to work on for two days, a simple desktop application–but with a list of frameworks and tools to use that none of us had ever heard of before.

Going in, none of us knew anything about the language they wanted us to use–Kotlin–or any of the frameworks–like TornadoFX, RxKotlin, and even the Gradle build tools–so we were all pretty much the same level of confused. The only difference was that the students who’d been in school longer had a better idea of how to look for information and get started.

It was usually little things, like someone thinking to use a hashmap over an array (when I, just a freshman, didn’t even know what a hashmap was!) Sometimes they read an article and understood way more of the concepts the first time through. But rarely did anyone say, “Oh, I’ve worked with this before.” Rather, the more experienced of the interns could say, “Let’s try this” and see it work more times than not–not because they knew more, but because they’d learned to teach themselves using the patterns and intuitions you see all across computer science.

And that’s what your degree is for! It is not for you to walk off campus with the knowledge of every language, framework, and operating system under your belt; it is for you to learn the kind of problem-solving and base-level knowledge that will allow you to understand the new stuff that will inevitably be thrown your way.

Maybe you know this intellectually; I think, to a certain extent, a lot of us do.

But tell that to yourself when you see the poster for that AI research grant your classmate worked on where even the research question doesn’t make sense to you. Remind yourself of that when the kid next to you asks about something you know isn’t in the course curriculum. Think back on it when your professor is explaining a particularly niche concept that you know you won’t need to do the assignment but everyone seems to be following along but you.

You’ve got this. You’re learning how to learn, which means you’re right on track. Specialization and deeper knowledge are fantastic, but most people don’t start diving into those until they’re at least a little bit settled in their career. Some peoples’ brains latch right onto this stuff, and those are the classmates you see breezing through concepts faster than others; the pressure to be the same way is always there, I know, but I promise you:

You’re right where you need to be.

Those deeper concepts will make sense eventually.

Focus on the class, not your peers or the research grants or the industry, and you’ll be just fine.

It’s a little trite, but it’s true: everyone starts somewhere. That means that everyone who understands more than you, at one point, only understood what you do now. They worked their way up from there, which means you can and will, too. So don’t let yourself stay intimidated by internships or video game physics or That One Kid’s open source project. It’s not that you will never understand how to do those things–it’s that you’re building your foundation so that someday, maybe soon, you’ll know just where to start.


An aside to the student who wants to get started down a more specialized path:

If you’re interested in a more specialized field of CS and want to start pursuing it, by all means, don’t let the fact that you haven’t gotten your degree or that you feel underqualified stop you! Imposter Syndrome is your biggest enemy–jump in, and the worst that can happen is you realize you don’t quite know enough yet to be able to pursue your interest efficiently. My point above is that it’s okay to not know enough yet–but don’t let the fear of that stop you from at least trying things out.

Your best resource is going to be your professors. Figure out what you’d like to look into, and then present that to them with the question, “where should I get started with this?” They’ll likely have some great resources for getting started. If they’re not sure, or if the resources they provide don’t prove very helpful, find someone working in your field of interest, reach out, and ask them. It’s a little bit of networking practice, and since it’s for finding resources rather than a job, it’s much less nerve-wracking. LinkedIn is a great way to do this, and your professors might also know recent alumni or colleagues working in the field you’re interested in.

And while I’m no expert, I’ve taught myself some of the basics in a few fields I don’t have any actual coursework in, like web dev and cybersecurity, so I’ve got a few resources for getting started in those areas among others–don’t hesitate to reach out if you want my input through my Contact page or at

ki****************@gm***.com











!

soli deo gloria