Software Engineering and Science: An Interactive Textbook with Applications to Astronomy💻⌨️🔭📡📈📉
All of the content of this book is available for FREE online at the following links or by visiting For convenience, it is additionally provided in a Kindle and printable format with a download/printing fee.

Author: Dr. Christine Corbett Moran, NSF Astronomy & Astrophysics Postdoctoral Fellow, Caltech
Intent: This course is designed to be completed, bootcamp style, in 4 weeks as preparation for doing real world projects with the python programming language using modern software engineering techniques. The final projects are designed to be approached by teams of 4-5 for a period of two weeks. The course requires 20-40 hours of work per week for 6 weeks to complete in its entirety. 
Acknowledgements:  Dr. Christine Corbett Moran’s work on this book was supported by the NSF Astronomy and Astrophysics Postdoctoral Fellowship under award AST-1501208. Several course students and instructors provided many helpful comments including David “Nico” Moore, Annie Fanelli, Cristal Diaz, Andrea Cova and others! Dr. Sebastian Kiehlmann contributed the instructions for installing Anaconda incorporated into the textbook. Aybuke Turker contributed the section on asking good questions. Dr. Jameson Graef Rollins was a guest lecturer and also contributed to code standardization.

Chapter 1: Earth 🌎🛰🌍 

About This Course

Let’s dive right in. We’re going to learn Software Engineering while learning astronomy all at once. Sound hard? It is. It will be. 

But we hope it will be more rewarding than learning either on their own, in an isolated world, because we’ll be able to apply what we’ve learned right away. I’ll try not to be too wordy, because where we’ll really do most of the learning is by doing not by reading

NotebookProblems and Chapter Exercises
Each chapter is accompanied by a file called ChapterNumber_ChapterName.ipynb which is a Jupyter Notebook. For example this chapter’s file is Chapter1_Earth.ipynb ( Anytime you see a NotebookProblem referenced in the textbook, you have the knowledge to attempt it. 

Chapter Exercises are specified inline in the book, and can be solved with the help of an interpreter, python console, or bash console. Text serving as part of an exercise is indented for clarity.

The course also has an accompanying series of video lectures which will be linked as they are generated right in the textbook itself. 

What is Software Engineering?
Software engineers build and design ways of using computers to help them solve real world problems. They work in teams and interact with other software engineers, with users, and with entrepreneurs to define the problems and come up with the solutions. 

Software engineers can work in the fields of medicine, biology, ecology, music, art, consumer products, finance, and more. To learn software engineering, we need to become familiar with computer programming, with collaborating with teams, with reading other people's code, as well as brainstorming solutions. 

Software engineering skills aren't dependent upon a specific computer language nor are they dependent on using a particular set of tools, though in this course we will learn the fundamentals of one particular set to work on our collaborative projects and learning process. Most of the time we’ll be working with Python and we’ll just give a small taste of other tools so that you can choose good jumping off points for learning more.

You might hear older software engineers rattle off a list of tools they are familiar with that seems overwhelmingly long. It takes so long for us to learn one set during this course, how do they manage? Software engineers often get to learn new skills as they choose the best tools for the job or problem at hand and for the companies they are employed at or found. The great thing is that software engineers get to learn on the job, and that each new tool learned, whether it is a computer language, an operating system, or a development environment, is largely familiar given their basic skills; just like switching between one browser to another or learning a language or dialect close to one which one already knows, one only needs to learn a few differences in order to adjust.

That's why for this course we're picking a few tools to get familiar with all the basics of software engineering. With these tools you'll have the foundation to approach any problem in software engineering. Don’t get overwhelmed. If you have learned how to speak English (which you must have if you are reading this), you can learn these tools with time and practice.

What is Space, Astronomy and Astrophysics?
Astronomy and astrophysics studies celestial objects and phenomena and incorporate knowledge of physics, chemistry, mathematics and in recent years computer science and programming to try to understand them. Space Exploration incorporates data, experiments and endeavors of humans taken in space. In this textbook we use Space to refer to all of the above. Subjects which fall under the umbrella include studying galaxies, our own Earth, the origins of the universe, planets, stars, asteroids, man-made satellites, human space exploration, and more 

What is a project based approach?
For each chapter we’ll have a series of core concepts we want to learn. Rather than just telling you about these concepts we’ll work on a small project to illustrate the concepts with real world code. This way of learning to code is similar to the way many programmers learn, on the job. Each chapter contains one Space theme, four core computer science topics and four guided explorations of the theme. The theme and computer science concepts change but the explorations follow the same steps. 

Each chapter you will be guided through the following exploration steps over 10 NoteBook Problems:
  1. Downloading and learning to use an existing group of code (called a module) which explores the chapter theme.
  1. Using or annotating portions of the program which illustrate chapter topics.
  1. Making simple modifications to the program illustrate mastery of chapter topics.
  1. A Capstone Problem: writing your own programs using both the module and all chapter topics demonstrating a real world application of the theme
In addition there are exercises scattered throughout each chapter to facilitate topic mastery. As we move through the course, a variety of lecture videos will be created. 

What is a collaborative textbook?