Computer science you might (not) want to know, by Andy Andrea

Abstract

One common recommendation for aspiring software developers is to pursue a degree in Computer Science (CS). While CS curricula do often cover practical software development skills, many departments heavily prioritize more academic and theoretical topics. This begs the question: how relevant is a CS degree to the day-to-day work of a professional developer?

We’ll look at a few topics that are often included in the first half of an undergraduate CS curriculum. We’ll examine this information through two lenses: why it can be helpful and why it might not be all that relevant for a typical Rails dev.

Details

Include any pertinent details such as outlines, outcomes or intended audience.

Developers who don’t have any formal academic backgrounds in computer science–especially any junior devs who may be feeling some impostor syndrome–are the foremost intended audience for this talk, though I hope to make it useful for a variety of experience levels and those who may have taken a small number of CS classes or haven’t revisited their CS education in a number of years.

I intend to split the talk into two main sections. In the first section, I’ll go over how numbers are stored and interpreted by computers and programming languages. We’ll start with some comparisons between base 2 and base 10 numbers (in other words, binary versus decimal) and lead into some of the situations in which math appears to break down with our tools like Ruby and JavaScript (e.g. overflows, floating point addition).
The second section of the talk will be an introduction to algorithms. Here, I’ll cover classifications for algorithmic complexity (e.g. Big O notation) and how that might relate to performance of our code. I’ll then cover the binary search algorithm and how it relates to Ruby’s bsearch and the bisect commands that come with RSpec and Git.

At the end of each section, I’ll have two summary slides: “why you might want to know ” and “why you might not want to know ”. For example, knowing about git bisect and the advantages of binary search can be very helpful, but the number of situations in which we’d care about algorithmic complexity of Ruby code in a Rails app more than profiling data is virtually zero.
These summary slides will tie in directly to the main takeaway from this talk: knowledge rooted in computer science can be a really helpful tool in a developer’s tool belt, but it shouldn’t be thought of as some kind of mystical, arcane or unattainable force-multiplier that sets some developers apart from others.

Pitch

Explain why this talk should be considered and what makes you qualified to speak on the topic.

After a coworker mentioned that he was sometimes curious if he was missing out on any helpful skills or context since he didn’t have any background in computer science, I offered to put together a talk for our company-wide training. The presentation was pretty similar to what I outlined above with an additional section on database normalization. I received a lot of feedback afterwards that it was one of the most enjoyable and informative talks to have come out of company training time. I also received some helpful feedback that I’m confident will help make this talk even better than that first presentation.

In addition, I’m a huge proponent for increasing the accessibility of software development as a career and have experience mentoring teens learning how to code with Rails, so I have experience breaking technical topics down into simpler components.

Given the rampancy of impostor syndrome and my personal desire to increase the accessibility of our profession, I think that talks like this can be incredibly helpful. If this proposal is accepted, I truly hope that at least one person will leave my talk not just with new knowledge that can help them in their career but with an increased confidence that they’re not behind some curve or less talented than they would be if they had a computer science degree.

Edit proposal

Submissions

RailsConf 2022 - Accepted [Edit]

Add submission