uccser/cs-field-guide

View on GitHub
csfieldguide/chapters/content/en/introduction/introduction.md

Summary

Maintainability
Test Coverage
# Introduction

{panel type="teacher-note"}

# Introduction for teachers

The version that you are reading now is the teachers' version, in which chapters are interspersed with information for teachers, like this box.
It will include answers and hints, so this version shouldn't be released to students (although because the material is open-source, a resourceful student may well find the teachers' version).

Because the guide is constantly under revision, we welcome feedback so that we can improve, clarify, and correct the material.
The best way to provide feedback is through the "Feedback" link at the bottom of any page (this can range from a typo to a broad suggestion).

{panel end}

Why is it that people have a love-hate relationship with computers?
Why are some people so fanatical about particular types of computers, while others have been so angry at digital devices that they have been physically violent with them?
And what does this have to do with computer science?
And what is computer science anyway?

I'm glad you asked!
Put simply, computer science is about tools and techniques for designing and building applications that are very fast, have great interfaces, are reliable, secure, helpful — even fun.

A lot of people confuse computer science with {glossary-link term="program"}programming{glossary-link end}.
It has been said that "computer science is no more about computers than astronomy is about telescopes" ([Mike Fellows](http://en.wikiquote.org/wiki/Computer_science)).
Programming is the tool that computer scientists use to bring great ideas to life, but just knowing how to give programmed instructions to a computer isn't enough to create software that delights and empowers people.

For example, computers can perform billions of operations every second, and yet people often complain that they are too slow.
Humans can perceive delays of about one tenth of a second, and if your program takes longer than that to respond it will be regarded as sluggish, jerky or frustrating.
You've got well under a second to delight the user!
If you are searching millions of items of data, or displaying millions of pixels (megapixels), you can't afford to do things the wrong way, and you can't just tell your users that they should buy a faster computer ... they'll probably just buy someone else's faster software instead!

Here's some advice from Fred Wilson, who has invested in many high profile tech companies:

{blockquote source="http://triple-networks.com/2011/12/06/10-golden-principles-of-successful-web-apps/" footer="true"}

First and foremost, we believe that speed is more than a feature. Speed is the most important feature. If your application is slow, people won't use it. I see this more with mainstream users than I do with power users. I think that power users sometimes have a bit of sympathetic eye to the challenges of building really fast web apps, and maybe they're willing to live with it, but when I look at my wife and kids, they're my mainstream view of the world. If something is slow, they're just gone. ... speed is more than a feature. It's a requirement.

- [Fred Wilson](https://en.wikipedia.org/wiki/Fred_Wilson_(financier))

{blockquote end}

A key theme in computer science is working out how to make things run fast, especially if you want to be able to sell your software to the large market of people using old-generation smartphones, or run it in a data centre where you pay by the minute for computing time.
You can't just tell your customers to buy a faster device — you need to deliver efficient software.