DEV Community

Kelsey Low
Kelsey Low

Posted on

Beyond Bootcamp: Importance of Algorithms

While the growing popularity of coding bootcamps has resulted in countless eager new developers entering the job market every day, it’s also becoming increasingly difficult for an entry level engineer to stand out. As a bootcamp graduate myself, in my experience this method of training excels at teaching juniors how to learn quickly and comprehensively, hone problem solving skills and techniques, and develop solution-oriented perseverance. However, in the sprint to build a foundational working knowledge of how to construct programs, certain aspects of computer science and theology are often given less time and significance. It is not because these tenets are not of value, but because they are often complex and time consuming to fully understand.

One such subject that fully embodies this challenge within a bootcamp curriculum is understanding algorithms. All programmers, from the most naive new developer to the most experienced engineer, encounter algorithms. In this new age of accelerated learning through coding camps, this can be a difficult concept to dive into. Though fundamental to computer programming, bootcamps often skirt around the subject, exposing students to algorithms through metaphor and direct application. However they often chose not to expand on the necessity of algorithms in computing overall. As a new developer, taking the initiative to dive into this subject can help deepen your understanding of how and why programmers approach problems certain ways. The ability to show and discuss algorithmic concepts with confidence is also a valuable way to stand out from the crowd of new coders.

Algorithms Explained

At the most basic level, algorithms are purely a method for solving a problem. They consist of techniques or procedures that, when implemented step-by-step, will facilitate problem solving. This is exactly why algorithms are one of the most fundamental aspects of computing - After all, what is computing besides solving a series of problems?

When a user visits Amazon and a series of recommended products appear, this is the result of machine learning algorithms. When Google Maps shows a user the best route to their destination, this is the result of Dijkstra’s algorithm, which finds the shortest path between nodes in a graph. Ancestry composition uses sophisticated algorithms to calculate genetic health risks. Virtual assistant technology, such as Alexa, uses natural language and machine learning algorithms to recognize speech and learn user patterns. The list of problems that algorithms solve goes on and on.

Fundamental Learning

Given the examples above, it’s clear to see that algorithms can require very complex thinking. The good news is that there are many brilliant minds who thrive on this type of problem solving, and who create libraries and frameworks that can be applied in countless applications. These provide excellent tools that keep other developers from constantly reinventing the wheel. Leveraging the powerful and often well-tested algorithms that exist in numerous libraries is not only a great time-saver, but a practical way to work efficiently, enhance your application’s performance, and expand your own knowledge.

When it comes to general learning, there are a plethora of excellent resources for diving into algorithms. A great starting point is to ensure a strong understanding of data structures (arrays, binary trees, hash tables, stacks, queues, heaps, etc.) and math and logic (set theory, regular expressions, bitwise operations, permutations, combinations, etc.). In addition, flushing out computer architecture, such as how data is represented in computer, will help with growing into the more complex concepts.

There are many excellent resources available, from books (the classic Introduction to Algorithms) to forums (TopCoder), coding challenges (HackerRank) to online courses (MIT OpenCourseWare Introduction to Algorithms). Regardless of which avenue you choose, putting in the time and effort to deepen your understanding of algorithms will not only benefit your job search, it will expand your fundamental knowledge of computing and serve as a strong base for a successful career in software development.

Top comments (3)

Collapse
 
steelwolf180 profile image
Max Ong Zong Bao • Edited

I got to disagree with you on that unless there is a need for a job interview or your building a bleeding edge technology I won't be touching on it much.

I would learn it for the sake as part of my mental model, on how I could think of ways to tackle a problem.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

As someone who trains interns to transition from college to career, I have to disagree with your disagreement. ;)

Abstractions are there to save us typing, not to save us thinking. Getting that backwards leads to a lot of the bugs and performance issues we see today, many of which were unheard of in the 80s and early 90s. For example, why wouldn't you use Java's sorting algorithm on something implemented as a linked list? Answer: it's because Java's sorting algorithm is Dual Pivot Quick Sort, which like all Quick Sort algorithms, is an unstable sorting algorithm, meaning it may move elements that are already in the correct position, leading to significant performance overhead. Unless you had some idea what DPQS and linked lists were, and that Java's sorting algorithm was DPQS, you might make exactly this mistake.

You need to understand algorithms and data structures, even if you don't implement them yourself. A competent programmer knows what they can use, but an excellent programmer knows what should be used in a particular situation, and why. That knowledge will impact coding decisions in any language, and is the deciding factor in making software stable, performant, and ultimately maintainable.

Collapse
 
steelwolf180 profile image
Max Ong Zong Bao

I think we are on the same page on it. As I had mentioned in my previous comments.

I learn it as part of my mental model on how Io tackle problems. Meaning I'm treating it as a toolkit that I can draw from in the perspective of algorithms on how to tackle a problem.

Not for the sake of just passing a interview test which anyone can game it if you had prepared well. Which is why websites like leetcode and a few coding competition platforms focus on it.