Algorithms by Complexity — source:

Algorithms, Complexity Analysis and Data Structures matter!

Bassem Dghaidy
Jan 12, 2018 · 5 min read

Every few months we go through the laborious recruitment process of SE Factory students. It’s a multi-staged interview that starts with an online application, followed by an on-site interview, and ends with a relatively difficult technical challenge. Given the hundreds of applicants we receive each cycle, we had to strip down the on-site interview to the bare essentials with a maximum duration of 20 minutes. During these 20 minutes the future 4 months (and possibly more) of a candidates’ life are decided based on a set of questions and responses.

We want to assess potential students for they have been trained on in their undergraduate level so we have design the interview to involve some basic questions about Data Structures, Relational Database Theory and Algorithms. Most of the candidates fail this part of the process and it’s not uncommon for students to get defensive and burp out horrendous statements such as:

“But I know X, Y and Z languages and I’ve never used neither Algorithms nor Data Structures in the projects I’ve done”

“I’ve worked professionally for X months and I’ve never had to implement a LinkedList or a Binary Search Tree or <insert Data Structure name here>”

“I took this course a couple of years ago, I forgot it all…”

“I graduated X months back but this was never part of our Computer Science curriculum”

To make matters worse, our questions are not difficult at all. They’re even quite far from puzzles or whiteboard problem solving, and generally revolve around having a discussion with the candidate to gauge whether they can vocalize the purpose of algorithms and data structures, and describe how a developer can estimate the space and time complexity of an algorithm. What else can one evaluate fresh Computer Science and Engineering graduates, who have not written a single line of code beyond their University projects, on?

The Reality

A number of major technology companies (Google, Amazon, Facebook etc.) rely heavily on solving problems of an algorithmic nature during the interview stage to evaluate candidates. Furthermore, there is huge controversy in the software engineering community about the advantages of using Data Structures / Algorithm / Puzzle questions in the interview process to gauge the abilities of the interviewees.

David Heinemeier Hansson (DHH) is the “creator of Ruby on Rails, Founder & CTO at Basecamp (formerly 37signals), NYT Best-selling author of REWORK and REMOTE, and Le Mans class-winning racing driver.”

However, let’s not confuse the value of these questions during an interview with the importance of these areas in the career of a software engineer!

During the first few years of a software developers’ career (specifically web and mobile developers), one might be forgiven for not building capacity in these theoretical areas. In fact, many of us are explicitly instructed not to re-invent the wheel and just use existing solutions to get the job done. It’s true.

I have never implemented Bubble Sort or traversed a Binary Search Tree during my first 5 years of building software products and yet, as my career advanced I found myself tackling a wider array of problems whose solutions are not readily available on StackOverflow! I’ll explain:

  1. Recently I had to work on transforming data stored in a relational database to a Network visualization with named edges. Good luck solving that problem without having an understanding of Network theory and Trees.

The list goes on…

Sure, packages and libraries abstract a lot of the routine work we do on a day to day basis. However, rarely, but undoubtably, we stumble upon the problem that simply does not have a Googleable / downloadable fix and having a narrow arsenal of tools to pick from renders you hopeless in the face of the challenge.

The Answer

At SE Factory we highly believe in the value of the fundamental topics of Computer Science and how developing an understanding of them helps in uplifting a developer from a mediocre calibre to a high valued asset across the years of service.

As such, we’re introducing a new recurrent program titled “Foundations of Computer Science (FCS)” which spans over a period of 4 weeks 3 days a week (Monday, Wednesday and Friday). During these weeks we will go over the building blocks of programming, Algorithms and Analysis, Data Structures, Object Oriented Programming, Relational Databases as well some selected topics in Filesystems and Networking all in preparation for our flagship Full-Stack Web Development program.

You can review the syllabus here and apply to the upcoming cycles here.

The first cycle of FCS will take place on January 15th 2018.

Thank you Mohammad Skafi for reading a draft of this post

This story is published in The Startup, Medium’s largest entrepreneurship publication followed by 284,454+ people.

Subscribe to receive our top stories here.

The Startup

Medium's largest active publication, followed by +644K people. Follow to join our community.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store