![](https://csdnimg.cn/release/download_crawler_static/10843288/bg10.jpg)
can be regularly retrained as new data comes in. Very sophisticated software systems,
powered by machine learning, are capable of dramatically changing their behavior
without major changes to their code (just to their training data). This trend is only
likely to accelerate as machine learning tools and deployment become easier and
easier.
As the behavior of software-engineered systems changes, the roles of software engi‐
neers will change as well. In some ways, this transformation will be analogous to the
transformation following the development of programming languages. The first com‐
puters were painstakingly programmed. Networks of wires were connected and inter‐
connected. Then punchcards were set up to enable the creation of new programs
without hardware changes to computers. Following the punchcard era, the first
assembly languages were created. Then higher-level languages like Fortran or Lisp.
Succeeding layers of development have created very high-level languages like Python,
with intricate ecosystems of precoded algorithms. Much modern computer science
even relies on autogenerated code. Modern app developers use tools like Android
Studio to autogenerate much of the code they’d like to make. Each successive wave of
simplification has broadened the scope of computer science by lowering barriers to
entry.
Machine learning promises to lower barriers even further; programmers will soon be
able to change the behavior of systems by altering training data, possibly without
writing a single line of code. On the user side, systems built on spoken language and
natural language understanding such as Alexa and Siri will allow nonprogrammers to
perform complex computations. Furthermore, ML powered systems are likely to
become more robust against errors. The capacity to retrain models will mean that
codebases can shrink and that maintainability will increase. In short, machine learn‐
ing is likely to completely upend the role of software engineers. Today’s programmers
will need to understand how machine learning systems learn, and will need to under‐
stand the classes of errors that arise in common machine learning systems. Further‐
more, they will need to understand the design patterns that underlie machine
learning systems (very different in style and form from classical software design pat‐
terns). And, they will need to know enough tensor calculus to understand why a
sophisticated deep architecture may be misbehaving during learning. It’s not an
understatement to say that understanding machine learning (theory and practice)
will become a fundamental skill that every computer scientist and software engineer
will need to understand for the coming decade.
In the remainder of this chapter, we will provide a whirlwind tour of the basics of
modern deep learning. The remainder of this book will go into much greater depth
on all the topics we touch on here.
2 | Chapter 1: Introduction to Deep Learning