programming - the Department of Computer and Information Science

Download Report

Transcript programming - the Department of Computer and Information Science

Welcome to the Computer and
Information Technology program
http://www.cis.upenn.edu/~matuszek
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
I’m new here myself
My most important courses are CIT 591 and
CIT 594
Who are you?
• 70% 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 language we are using is Java 2
• The primary audience is MCIT students
– 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
– You spend about 1/4 of your adult life working
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
– what we can do with computers
– how we can best do it
• If we really understand how to do something,
we can write a program to do it
• We do a lot of things without knowing 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, 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 and understand
– 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
– Would this change the way you solve the problem?
What CIT 591 and 594 are about
• You need to learn the craft of 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
• In CIT 591 you will learn programming
– A language (Java 2) and some basic skills
• In CIT 594 you will concentrate more on
computer science
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
– Things change!
Changes in computer science
• Computer science is only about 55 years old
• Change is rapid and accelerating
–
–
–
–
–
Dominant language of the 1990s: C++
Dominant language of early 2000s: Java
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, 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 4 M 9
A little problem
• 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:
• get everybody through this program
• with the skills and attitudes you need to succeed
• into a career that you will enjoy
– For the non-MCIT students:
• give you a solid understanding of basic programming
• try to lure you into learning more about the field
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