Preface¶
The Need of Integration¶
There are hundreds of books about software engineering, softwawre development, programming, software testing … There are also many books on artificial intelligence, machine learning, and related topics. Why do we write this book? Why should you spend time reading this book? How is this book different from any other book? We write this book because we think there is a need. Existing books are independent of each other. Instead, this book resides at the intersection of three topics: (1) software engineering, (2) machine learning, and (3) programming.
Few software engineering books show programs. Some machine learning books do show programs that implementing the algorithms but never explain how to manage the software. Few programming books talk about machine learning. As these fields become increasingly important and deeply intertwined, a book that integrates these topics becomes essential.
This is that book.
Why is it necessary to have a book that covers all three topics (software engineering, programming, and machine learning) simultaneously? Existing university education is strucuted into majors: accounting, biology, computer science, electrical engineering, literature, mathematics, music, statistics, theatre, and so on. Each major has a curriculum and students take sequences of courses building their expertise in the particular field. Each course focuses on a specific topic. It is expected that a student would become an expert in the field after taking a series of courses. This approach, however, often lead to the situations where students “can see trees but overlook forests” because they cannot “connect the dots”. This is understandable because each course focuses on depth (i.e., “trees”) without teaching how to see forests. This traditional approach is no longer valid becasue rapid technology progresses make integration necessary. Multidisciplinary projects are everywhere. Engineers needs to be aware of the social impacts, as well as legal booundaries, of technologies.
Is there a need for a book, any book, on any subject since almost everything is now available on the Internet? Any book becomes obsolete at the moment when it is published. The difference between books and the Internet is that (good) books can provide systematic approaches to learning. The Internet is excellent for looking up answers of specific questions. However, in many cases, asking the right questions requires deep understanding of the topics. This creates a circular problem: Without deep understanding, it is difficult to ask meaningful questions and find useful answers on the Internet. Without useful answers, it is difficult to learn and acquire deep understanding to ask the right questions.
Principles in Writing this Book¶
Research shows that “learning from mistakes” is essential in understanding and mastering any concept or skill. However, few books talk about common mistakes, how to recognize, correct, or prevent mistakes. Most books follow the same flow: describing a problem followed by a solution. As a result, most readers do not recognize mistakes and do not know how to prevent mistakes. This book is different from most books. We set a few principles when writing this book:
This book includes many common mistakes, why they are wrong, how to detect and prevent them.
This book emphasizes actions. Readers are asked to do things because doing is the best way to learn.
This book is not a dictionary nor an encyclopedia. It is intended to provide readers with actionable knowledge so that they can learn enough basic skills and look up additional information on the Internet.
This book provides good ways to solve common problems. The book does not intend to explain all possible ways solving all possible problems. Many useful solutions are available online; the problem is to have the right skills of asking the right questions for finding the information.
This book aims to provide intuitive explanation of the concepts so that readers can understand the concepts. When a choice must be made between ease of understanding and efficiency, this book selects the former (ease of understanding). Thus, readers are advised that many solutions presented in this book can be improved and become more efficient.
Audience and Expected Background¶
This book is written for sophomore students in science, technology, engineering, or mathematics (STEM), assuming that they know algebra and calculus. Readers should have already solved some problems using computer programs. This book does not explain how to install software packages because there already many books on those topics. This book uses free tools. Everything mentioned in this book is free of charge.
Open-Source Book¶
We decide to make this book open-source: readers can see the Latex source making this book. Doing so allows us to release the book as it is being written. Please be advise that this book is work-in-progress and mistakes are possible (in fact, likely).
About the Authors¶
Yung-Hsiang Lu is a professor at the School of Electrical and Computer Engineering in Purdue University, West Lafayette, Indiana, U.S.A. He is an ACM (Association for Computing Machinery) Distinguished Scientist and ACM Distinguished Speaker. Dr. Lu and three Purdue students founded a technology company called Perceive Inc. Perceive Inc. uses video analytics to improve shopping experience in physical stores. Perceive Inc. receives two Small Business Innovation Research (SBIR-1 and SBIR-2) grants from the National Science Foundation. Dr. Lu has published one book, “Intermediate C Programming” (CRC Press, ISBN: 9781498711630). He received the Ph.D. degree from the Department of Electrical Engineering in Stanford University, California, U.S.A.
George K. Thiruvathukal is a Professor of Computer Science at Loyola University Chicago. He is also a visiting professor at Argonne National Laboratory. He has published two books about software engineering: “Codename Revolution The Nintendo Wii Platform” (MIT Press, ISBN: 9780262016803) and “Software Engineering for Science” (CRC Press, ISBN: 9781498743853). Dr. Thiruvathukal is active promoting engineering education to wide audience and has given multiple interviews in television news. He received the Ph.D. degree from the department of Computer Sciene in Illinois Institute of Technology, Illinois, U.S.A.