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.
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.
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.