A great computer scientist

A great computer scientist#

What makes a computer scientist “good” or “bad” is pretty subjective, and my goal here is not to say anything bad about people. Instead, I want to say what makes computer scientists great - beyond just average. What are the traits of the people making startups, doing fascinating research, or simply even those people who are steadfast and enjoyable to work with. The following is a (not comprehensive) guideline that hopefully answers some of these questions.

This section is here to say why we study these different areas and how we can strive to have more a more holistic understanding of the field. We’re not putting anybody down with this. In fact, I encourage you to think of the parts you’re better at. I was never good at the theory.

The Practical#

This is the code part. Can you write code? Okay, that sounds simple, but in software engineering terms, this is obviously really important. People don’t want to hire people who can’t actually code, which is why coding interviews (unfortunately [1]) exist.

I’ve spoken to senior engineers and directors from big companies, and they seem to agree. What elevates a developer (especially in terms of junior/senior roles) is their ability to notice patterns within code and make refactors that make the project better. Better could mean saving people time working on it, helping its longevity, or even improving its architecture.

More abstractly, can you take any problem and implement it? This could look like a backend server, or this could look like a beautiful website. Either way, you’re that person who doesn’t back down from a problem and quite simply, implements it and implements it well! You factor in maintainability, readability, and clarity to all of your code and designs.

The Theory#

The theory part: hear me out, even though I’ll hopefully never have to whip up a mathematical proof on the job site, I think the theory allows you to do three things: communicate, teach, and leverage power.

Communicating: This is the most important part in my opinion. My research advisor (who I would definitely classify as a great computer scientist) was great at this; he would pull out seemingly random analogies from formal language theory, the theory of computation, operating systems, or other broad CS-things. This helped us develop our research so much. Often times, abstract CS ideas could relate well to each other. (e.g. we used formal language theory grammars to help think about how we define a taxonomy for concepts in a curriculum.)

Teaching: Even if you’re never going to touch a proof for the rest of your life, knowing more about systems and things as a whole isn’t going to do you any harm. I think it will do a lot of good; on the same lines of communicating, it will help you communicate and teach more complex ideas to others.

The power: The AI-boom wouldn’t have happened without the theory and the math. Doing cooler and more complex things often needs a slightly deeper understanding than just implementation details of a programming language; this can also be a great reason to know the theory.

The Person#

I saved the best for last: the person could be the most important of all. Even if you know the practical stuff and the theory, you could be a pain to work with. Being a great communicator, friend, and coworker can go a long, long way. I don’t want to stereotype a group I’m definitely apart of, but often, CS people can be thought of as “awkward” or not really personable. The good news: it just takes practice! The more interesting things you do aside from sitting at your computer staring at lines of code, the more you can share with others and the more personable you become [2].

So, be a human. Nobody expects you to be a workaholic (assuming you work at a company that respects your health) and just be a code-producing machine. The overall point I’m making: talk with other people! A great computer scientist knows when to switch off and talk about their life and ask people about theirs.

I’ll have an entire section on mindset and perspectives a little later, but I think it’s also worth mentioning that good computer scientists in my eyes are open-minded and perseverant. How else are we going to keep up with the ever-growing list of programming languages, frameworks, and many changes in the field?