Computer Science Principles
The Foundational Concepts of Computer Science
Kevin Hare
with a foreword by Pindar Van Arman
Yellow Dart Publishing
Copyright 2022 by Yellow Dart Publishing
All rights reserved. This book or any portion thereof
may not be reproduced or used in any manner whatsoever
without the express written permission of the publisher
except for the use of brief quotations in a book review.
4th Edition
All inquiries should be addressed to:
Yellow Dart Publishing
info@apcompsciprinciples.com
Microsoft product screenshots used with permission from Microsoft
Adobe product screenshots reprinted with permission from Adobe Systems Incorporated.
Adobe , Adobe Dreamweaver , and Adobe Photoshop are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.
Google and the Google logo are registered trademarks of Google Inc., used with permission
ISBN: 978-1-7345549-5-3
Foreword
I envy readers of this computer science textbook. It's not like the textbook I started out with. That book was filled with exercises that resembled math problems. Algorithms were described along with demonstrations of the most efficient way to use them. We were then challenged to solve these problems in the most efficient way possible. It's not that these exercises weren't fun, but they were very rigid and usually had a single correct answer. This put creative types like me at a disadvantage. I wanted to experiment with software and try different approaches, even if they were not the best approaches. The textbook I remember was not designed for that. It emphasized efficiency over creativity.
But this textbook is different. Computer science is a creative field, and this textbook's approach celebrates this creativity. This textbook will put you well on your way to understanding how to use modern software applications, what makes them work, and how you can improve on them to write your own applications.
As an artist, I think this creative approach is the most interesting way to tackle any problem.
My art is a little unusual. I design creative algorithms then have several custom robots use these algorithms to create paintings, one brushstroke at a time. These AI generated paintings are a record of both how far I have come in the discipline of computational creativity, and how far artificial intelligence in general has developed.
My most recent painting robot project is called CloudPainter, and it can paint some wonderful paintings. I named it CloudPainter not because every new computer-related thing needs to have the word cloud in it, but because I want my latest robots to be able to look into the clouds and be inspired by them to create their artwork. We humans might notice that a cloud resembles a dragon and use that as inspiration to let our imaginations run wild. I wanted my robots to be able to do the exact same thing. I wanted them to imagine the images they painted.
We have had some success toward that goal. While my earliest robots were relatively simple machines that dipped a brush in paint and dragged the brush around a canvas, my most recent robots use dozens of artificial intelligence algorithms, a handful of deep-learning neural networks, and continuous feedback loops to paint with increasing creative autonomy.
Exactly how far has their creativity come?
Famed New York magazine art critic Jerry Saltz recently reviewed one of my robotic paintings. Speaking of the Portrait of Elle Reeve, he began it doesnt look like this was made by a computer. He then paused and continued, That doesnt make it any good. It sounds like a bad review, but I loved it. A couple years ago, no one even considered our paintings to be art. Now people at least think they're bad art. That's progress!
To make a portrait that didnt look like a computer made it, my robots used all their creative abilities to re-imagine Elle Reeves face in an abstract impressionist style then painted it based on strokes modeled from a famous Picasso.
Jerry Saltz admission that this painting could have been done by a human hand was a major milestone in my artistic career. As I mentioned, few have even acknowledged my art as art. Some looked at my painting robots and called them over-engineered printers. Other naysayers complained that our paintings were little more than images run through the equivalent of a Photoshop filter.
Beyond the robots and their paintings, people often took offense at the very idea of what I was trying to do, which was to create artistic robots. For many it was a grotesque attempt to mimic the very essence of what makes us human. My attempts threatened and worried people. I remember one exhibition where an artist pulled me over and said I dont know whether to be impressed or disgusted with your work.
Over the years, however, there also have been many who understood exactly what I was trying to accomplish. The author of this book, Kevin Hare, was one of them. We first met while teaching in Washington, DC. Kevin was a computer science teacher. I taught art. My friendship with Kevin was unexpected. Our classrooms were on opposite sides of campus, and one would think that there would be little overlap in our curriculum. As we got to know each other, however, it quickly became apparent that we were on similar wavelengths. We both realized the creative power of software. We had many conversations where we discussed the similarities between our creative processes. Both of us realized just how similar writing code was to making art.
As I read this book, I was reminded of many things he shared with me about the creative aspects of computer design. You will find it in his style as well as in the exercises he provides. This book does not just ask you to complete a task for the sake of completing it. It challenges you to have fun with the code to do things that you are interested in.
His concern for keeping your interest can even be seen in the order in which he covers the material. The book begins by introducing the basics, as would be expected, but then it does something unusual. The second unit goes right into the creative side of software by exploring photo editing. As an artist, this made perfect sense to me. It even mirrored my own journey into computer science. The first programs I used were photo editing tools like Photoshop. As I needed these tools to do more than they were capable of, I found myself writing my own. This got me started in computer science and eventually led to my AI robots.
The truly fun part of computer science is learning how to use code to be better at the things you love. Kevin Hare understands this perfectly and goes out of his way to teach you things that have interesting practical applications.
At its core, software is a tool that helps us do things much more efficiently. Simple programs like word processors let us write more words per minute. Spreadsheets let us do complex accounting and analysis. More complex programs like Photoshop and Garage Band help us make art and compose music. Those of us who take the time to understand and master these tools have a great advantage over those who do not.
Do you like playing an instrument? Unit seven will help you make a website for your band. Enjoy making art, like I do? Creative applications are discussed in multiple units, beginning with unit two. Want to make billions of dollars creating the hot new crypto-currency? Look no further than unit five's discussion of cryptography.
Regardless of your interest, this book will get you started on the path to writing software that helps you excel. Making yourself better at whatever you want to be better at has never been easier.
Pindar Van Arman
Creator, CloudPainter
Next page