Welcome to the Computer and Information Technology program 26-Jul-16

advertisement
Welcome to the Computer and
Information Technology program
http://www.cis.upenn.edu/~matuszek
26-Jul-16
Who am I?





David Matuszek (muh-TOOZ-ik)
I prefer “Dave,” or maybe “Dr. Dave”
I’m the director of the MCIT program
I’m here to teach, not to do research
My most important courses are CIT 591 and CIT 594
Who are you?

Most of you are in the new MCIT program. You are
here because:





You are extremely bright
You do not have a BA or BS in computer science
A few of you are in Bioinformatics
The rest of you are in other programs
You have a very wide range of backgrounds
What is this course?

This is a beginning programming course


The primary audience is MCIT students


The language we are using is Java 2
This is the first of six required MCIT courses
It is also a service course for other students who need to
learn to program


CIT 591 replaces CIS 500 in this role
If I can lure you into computing, I will!
Why are you here?

There are two good reasons for getting into computer
science:



The job market is (usually) very good
Computer programming can be extremely satisfying and
enjoyable
Which of these is more important?

Money is a necessity


Being rich isn’t a necessity (but it sure is nice)
You spend about 1/4 of your adult life working

It’s important to find work that you enjoy
What are you getting yourself into?

Programming is intellectually challenging

It can be tremendous fun…


…if you like that sort of thing!
Lifelong learning is essential



The technology is constantly changing
We cannot teach you all you need to know
We can point you in the right direction and give you a good,
hard push--but the rest is up to you!
Programming can be fun

Programming is puzzle-solving



Very little is mechanical, routine work
You always have to be thinking
If you like solving puzzles, there’s a good chance you
will like programming



Some puzzles are hard
You need a tolerance for frustration
Solving hard puzzles can be very satisfying
Computer Science

Computer science is the study of



If we really understand how to do something, we can
write a program to do it


what we can do with computers
how we can best do it
We do a lot of things without really understanding how we
do them
Computer science is all about how to do things
CIT 591 is a programming course


Programming is teaching the computer how to do
something
Programming, like woodworking, is a craft



To master a craft, you need both knowledge and experience
Even a poor woodworker can produce a useable chair
A master craftsman can produce a chair that is strong,
comfortable, and beautiful
Beauty in computer science

Programs can be beautiful or ugly


I am not speaking metaphorically
Usually,




Blind people can’t appreciate fine paintings
Deaf people can’t appreciate good music
Non-mathematicians can’t appreciate elegant proofs
Non-programmers can’t appreciate the beauty in programs
(but can often feel the lack of it!)
Basic esthetics

People have different tastes in music, but…




A two-year old pounding on a piano is not making music
Very few musicians disagree on what notes make up a
“chord,” or a “chord progression”
People have different tastes in programming, but
many values are held in common
Programming is an art as well as a craft
Elegance




Powerful software can do everything you want to
do--for example, Microsoft Word
Complex software is hard to learn and hard to use-for example, Microsoft Word
More power usually means more complexity
Elegant software somehow manages to be both
simple and powerful
Elegance in mathematics





In school, the mathematician Johann Carl Friedrich
Gauss was told to add up the numbers from 1 to 100
Gauss realized that 1 + 100 = 101,
2 + 99 = 101, 3 + 98 = 101, and so on
There are fifty such pairs
The answer must be 50 x 101, or 5050
This is elegant: it saves work, and it’s easy to
understand
Beauty in programming

Outer beauty in programs consists of:




Doing a job the way the user wants it done
Providing a simple, intuitive set of controls
Working reliably, without crashes or glitches
Inner beauty in programs consists of:



Simple, elegant, efficient solutions to problems
Code that is easy to read, understand, and modify
Good commenting and coding style
Elegance in programming

Consider the following problem:




You are given a stack of cards, allegedly containing the
numbers 1 through 100...
…but there are only 99 cards
How do you determine which card is missing?
One solution:


Go through all the cards looking for 1, then do it again
looking for 2, etc.
Is there a better way?
Elegance, again

Suppose you are given a deck of 51 playing cards



How do you decide which card is missing?
Can you adapt Gauss’s solution to this problem?
Suppose you are given one thousand decks, each
missing one (not all the same) card


For each deck, you want to find which card is missing
Would the large number of decks change the way you solve
the problem?
What CIT 591 and 594 are about

You need to learn the craft of programming




In CIT 591 we study programming



How to design and write programs that work
How to write clear code and documentation
This is a skill, and it requires a lot of practice
You learn a language (Java 2) and some basic skills
You learn how to use the language to tell the computer how to do things
In CIT 594 we concentrate more on computer science


Remember what I said: If you really understand how to do something, you
can write a program to do it
Computer science is all about how to do things
Out with the old, in with the new

Geometry is about 2300 years old





It’s all based on straight lines and circles
These were viewed as idealizations of nature
There are no straight lines or circles in nature
Didn’t anybody notice?
Benoit Mandelbrot developed fractal geometry starting
in about 1977

Even in a 2300 year old subject, things change!
Changes in computer science

Computer science is only about 55 years old




It’s changing much faster than geometry!
Java is about seven years old
We will be covering Java features that didn’t exist this time
last year
Change is rapid and accelerating






Dominant language of the 1990s: C++
Dominant language of early 2000s: Java
Dominant company: IBM to Microsoft to ?
First GUI: Macintosh, 1984
First web browser: Mosaic, 1992
Web pages: HTML to DHTML to XML
What’s ahead?


Half-life of CS knowledge: about 5 years
Typical length of career: about 40 years



What does this tell you?
Nobody expected: personal computers, graphical
user interfaces, the mouse, the World Wide Web, the
popularity of Java, the ascendance of XML, etc.
There is only one safe prediction:

You will be taken by surprise!
Maybe you should learn accounting instead?

What can we possibly teach you that will do you any
good five years from now?



Many underlying programming concepts and mathematical
foundations don’t change
Programming paradigms change slowly
Each new language you learn will be easier to learn than the
previous one, because most of the ideas in it will be familiar
But more importantly...

The attitude you need doesn’t change


Always be prepared to learn
Take pride in your work, but-



Realize that your work is not, and can never be, perfect
Learn to welcome corrections and criticisms as helping you to
perfect your work; do not take them personally
Seek out and fix problems, don’t avoid them
Be responsive to the realities of the situation
A little problem
A 4 M 9





I know: each of the above cards has a letter on one side
and a number on the other
My theory is: if a card has a vowel on one side, it has
an even number on the other
I want to test my theory, but...
I want to turn over as few cards as possible
Which cards must I turn over ?
Answer to the cards problem

Theory: If vowel, then even

A
4 M 9
2
K 8
need
don’t
need
E
don’t need
need

You have to look for
things that show you are
wrong, not things that
show you are right!
This is part of what I mean
by “attitude”
Small projects

You can build a doghouse in a few hours




You don’t need a blueprint
The materials don’t cost much
A little knowledge of tools is enough
Imperfections are no big deal
Medium-sized projects

You can build a house in a year or so





You really do need blueprints
Excess materials mean wasted money
House building requires more skills: plumbing, bricklaying, electrical
work, carpentry, etc.
Imperfections matter: you don’t want a leaky roof!
It’s easier if you aren’t doing it all by yourself
Large projects

You cannot build a skyscraper by yourself





It’s just too much work for one person
You don’t have the money
You don’t have all the skills
Imperfections could be costly or even fatal
Skyscrapers can only be built by a team


Communication is essential
A “paper trail” is essential
What does that mean for CS?



What can we ask you to build in your classes?
What will be expected of you in industry?
We teach skyscraper-level skills, but



we ask you to apply those skills to doghouses
it’s silly, but what alternative do we have?
It’s up to you: When you leave here,


will you be able to build skyscrapers?
or will you just be very good at building doghouses?
Why am I here?

My personal goals are

For the MCIT students:




For the non-MCIT students:



get everybody through this program
with the skills and attitudes you need to succeed
into a career that you will enjoy
give you a solid understanding of basic programming
try to lure you into learning more about the field
For the program:

Produce really competent graduates that reflect well on the
MCIT program
Academia vs. industry

In industry, the focus is on getting things done



Your manager doesn’t want duplication of effort—two or
more programmers doing the same thing
If it helps get the job done, getting programs from somewhere
else—legally—is fine
Here, the emphasis is on learning how to do things



We want duplication of effort
We want you to all be learning the same things
We want you to do all the work
The Rules

You may:




You may not:





work together on the same program
copy another’s code, or allow your code to be copied
lend your code to someone else, or leave it lying around where someone
else may copy it
use any code from textbooks or the Web without my permission
Penalty for first offense:



discuss the assignments with one another
help others debug their work
use, without attribution, anything I post to the Web
You will be reported to the Office of Student Conduct
You will receive an F in the course
If you think you may have accidentally broken a rule, come and talk to
me about it
Group assignments



The preceding rules apply to individual assignments
This semester, some of the assignments will be done in pairs—
you and another student working on the same problem
The same rules apply, except that you and your partner will be
treated as a single individual



You and your partner will work on the same code, and together will turn in
a single program
You may not copy code from, or lend code to, any other pair
We will discuss pair programming in substantially more detail later in the
course
How to get a good grade in here

Start your assignments early!



Test your programs thoroughly





One or two simple tests are not enough
We will do thorough testing, even if you don’t!
Read the assignments carefully


Programming takes a lot of time
It’s not easy to predict how long a program will take
Do what is assigned, not “something like” what is assigned
Learn to use your tools (BlueJ, JUnit, etc.)
Use comments and good style right from the beginning, not as a
last-minute addition
To prepare for tests, review and understand the lectures
The End
He who works with his hands is a laborer.
He who works with his hands and his head is a
craftsman.
He who works with his hands and his head and his
heart is an artist.
-- St. Francis of Assisi
Download