Understanding The Importance Of Algorithms
Nathaniel Payne, PhD (裴内森)
CEO @ CLD | CTO & Managing Partner @ Dygital9 | Managing Partner @ NOQii & Contivos | Associate Partner @ Btriples | Global Connector | Entrepreneur | PhD (AI)
Over the last year, while teaching in my classes at Simon Fraser University and BCIT and working in analytics, media & technology space at Cymax, I have spent a lot of time thinking about, studying, and optimizing algorithms. It is a personal pursuit and, frankly, a passion that also helps drive my PhD research in machine classification & artificial intelligence at the University of British Columbia. Unfortunately, despite the incredible internal passion I feel for the subject, most of the conversations that I have with curious individuals intrigued by the concept of algorithms start with a simple question - "Why?". Why, for example, as a new developer, should one spend time studying algorithms (or design patterns for that matter) versus other more applied work? Why, is the study of algorithms so central to the larger study of analytics and data. And why do I believe algorithms are so fundamental to many problems that teams in the business world try to tackle?
Before we can talk about why algorithms are important, it is critical that we all start with the same definition of what an algorithm is. There have been some excellent articles written in the Harvard Business Review and Fast Company around how algorithms are changing the world. Even Christopher Steiner's TEDx video titled "Algorithms are taking over the world!" provided interesting insight. And yet, even these excellent resources seem to lack clear definitions that enabled my students to articulate what an algorithm fundamentally is. As Sedgewick & Wayne note in their seminal textbook Algorithms, an algorithm is "a finite, deterministic, and effective problem-solving method suitable for implementation as a computer program. Algorithms are the stuff of computer science." They are the "essential tools in engineering". While algorithms are often tied to and taught using code, it is important to also recognize that an algorithm is not a specific piece of computing code or a method relating to a specific language. On the contrary, an algorithm is a set of logical instructions that we often express in a particular language.
If algorithms are just methods for solving problems, why then, are algorithms so important to our daily lives? Looking holistically, the study of algorithms is important because understanding algorithms in detail allows one to truly plan for and build solutions to some of the most pressing business and technology challenges that exist today. Indeed, without understanding algorithms, one cannot hope to effectively attack the problems being discussed in the worlds of "Big Data", "Intelligent Systems" or the "Internet of Things". Why? Because algorithms allow us to understand and optimize both time and space. Practically, understanding algorithms gives technology teams the ability to reap tremendous time savings from a computational perspective. These time savings enable businesses to do tasks using computers that would otherwise be impossible. Importantly, in a world of connected devices where millions of objects and data points may be collected in near real time, the use of efficient algorithms can make programs and systems run millions of times faster than would otherwise be possible. What's more, these time savings cannot be simply realized by spending more money, adding more people to development teams, or increasing the amount of infrastructure used to support a problem. Rather, the understanding of algorithms can enable system & solution architects to build robust solutions that can scale.
While algorithms alone are compelling, as a practitioner and team leader there is another reason that I believe algorithms are important. This reason relates to the relationship that algorithms have with data structures and - ultimately - data. As Sedgewick & Wayne note, most algorithms that we use today relate to the "organization of data involved in computation". At work and in my research, I organize data for many things including machine learning applications. This organization results in the creation of data structures which are actually by-products or end products of algorithms. While many teams within technology and analytics organizations focus their work on these byproducts, I believe that this focus can be misguided. On the contrary, I believe that our understanding of these by-products - deep understanding - is only possible if we understand the algorithms responsible for generating the data structures & data that we consume. This of course is a challenging endeavor especially if these "algorithms" are unseen. That said, just as a great mathematician is able to understand a complex mathematical system by abstraction, so too can a developer, engineer, business analyst, or senior leader better understand the data and data structures they are working with if they understand the algorithms and systems that created this data.
While there is much more that I plan to say in the coming months, I sincerely hope that this initial introduction serves as a source of inspiration, clarity, and conversation. Moreover, if you decide you want to pursue some reading in this area, feel free to reach out to me directly or pick up one of the many exceptional books on the topic that exist. Without question, there are many amazing textbooks and books that one can read to begin the study of algorithms. Sedgewick & Wayne's book is a wonderful starting point, as is the seminal book "Introduction to Algorithms" by Charles E. Leiserson, Clifford Stein, Ronald Rivest, and Thomas H. Cormen. Each of these books has different approaches and often uses different languages to represent the various algorithms. That said, while I will be doing much of my future work in Python, Java, Scala & R, always remember that there is no one language best suited for the learning of algorithms. Algorithms exist independent of languages. Each of the languages I noted, as well as many others, will allow you to experiment with sorting, searching, graph analysis, and so much more. Indeed, I have seen implementations in many languages of Kruskal’s and Prim’s algorithms for finding minimum spanning trees, as well as Dijkstra’s and the Bellman-Ford algorithms for solving shortest-paths problems. The only thing you need to do is to pick a language and go. Moreover, just as I tell my students and teams, remember that understanding algorithms is a valuable pursuit unto itself that will enable you to deeply understand the tools needed to solve some of the most pressing problems that exist today. Using algorithms, data structures, and data, one can move planes, trains, and automobiles faster, improve crop and resource yields, provide power to millions of people, maintain global communications networks, and birth mind blowing artificial intelligence & connected systems that promise to transform our lives in the years and decades ahead!
创办人40 年大数据人工智能自动绳神经网络在中国及国际大型及国企金融银行供应链优化改革创新投资技术创新策略培训应用, 于货币预算经贸资本市场结构改革及再生能源生物科技供应链优化5G创新防范资产债务泡沫破灭病毒造成景气衰退危机
7 年Understand how the algorithm work, the causes, consequences, of dynamic tracking of algorithm results through dynamic adaptive learning, correction, can improve the algorithm performance
Financial Controller Engineering & Construction
8 年Very much enjoyed reading this, thank you!
eCommerce Expert (Technical) | SEO & Data Analytics
8 年Awesome ! Nathaniel Payne very useful and informative. Appreciated.
Vancouver recruitment consultant specializing in software, IT and digital placements since 2006
8 年Thanks Nathaniel, good one