enjoyable_programmin.. - The University of Texas at Dallas

advertisement
An “enjoyable” introduction to
Programming
Dr. Jeyakesavan Veerasamy
The University of Texas at Dallas, USA
Email: jeyv@utdallas.edu
Alice 2.2 Software: www.alice.org
Examples: www.utdallas.edu/~jeyv/alice
What is programming?
• Developing applications & games
• Software is not limited to PC
– most complex systems run software
– smart phones, game devices, even DVD players
Programming …
• is NOT a boring or repetitive activity
• does NOT require you to sit in dark room and
type in computer all day!
• does NOT involve complex Math
• requires logical thinking – technical common
sense
• write minimal code & combine with existing
components to build new applications
• Solve customers’ problems & improves quality
of life for every one.
Why learn programming?
• Software Engineers get great pay!
• Less stressful compared to several other high
paying jobs
• Automation continues…
• Computer touches our lives more & more
every day…
• More component based programming 
always room for simple programs to do large
tasks!
Learning to ride bicycle
• Difficulties for beginners:
• Difficulties for experienced folks:
Learning to ride bicycle
• Difficulties for beginners:
– Learning to balance & go forward together
• Difficulties for experienced folks:
– None.
Solution for beginners
• Training wheels
• Helmet
• Makes learning enjoyable and safe!
• Similar difficulties are there while learning to
program in a computer.
Learning to program:
Difficulties for beginners
Learning to program:
Difficulties for beginners
1. Syntax errors
• struggle for hours to fix syntax errors
• Loose confidence
• Frustrating experience
• Run away & never come back if possible!
2. Logic errors
Not a serious issue.
Difficulties for experienced programmers
Logic errors
Continuous learning
Learning to program
• Most students try to learn syntax and logic
together, waste lot of hours and get confused &
frustrated.
• Indian students resort to memorization of
programs. US students run away from
programming & CS major. Both are NOT good 
• It is possible to do much better!
Solution
• Visual Programming Tools to teach
programming concepts without encountering
syntax errors.
• Focus on the logic first & build confidence.
Free Visual Programming Tools
Tool
Alice 2.2
Provider
Web-site
Scratch
Carnegie Mellon www.alice.org
University, USA
MIT, USA
scratch.mit.edu
Snap!
UCBerkeley, USA byob.berkeley.edu
Lego MindStorm
Lego, USA
Several more…
mindstorms.lego.com
Sample program in Snap 4.0
Program Output
Programming Concepts
A few examples
• Recipe to make your favorite food
• Assembly instructions for a toy
• Coming to college from home
What is common about these activities?
A few examples
• Recipe to make your favorite food
• Assembly instructions for a toy
• Coming to college from home
What is common about these activities?
Sequence
Programming concepts:
Sequence structure
instruction 1;
instruction 2;
instruction 3;
…
A few more examples
• Study at home or play cricket with friends?
• Eat Parotta or Poori?
• Go to Vijay’s movie or Karthik’s movie?
• Go to job or go for higher studies?
What is the common thing here?
A few more examples
• Study at home or play cricket with friends?
• Eat Parotta or Poori?
• Go to Vijay’s movie or Karthik’s movie?
• Go to job or go for higher studies?
What is the common thing here?
Selection
Selection structure
IF condition is true THEN
do this;
ELSE
do that;
ENDIF
A few more examples
• Eat chips from a packet
• Go on a shopping spree with lot of cash!
• Take an exam that has several questions
What is the common thing here?
A few more examples
• Eat chips from a packet
• Go on a shopping spree with lot of cash!
• Take an exam that has several questions
What is the common thing here?
Repetition
Repetition structure
WHILE (more items to process)
process the next item;
ENDWHILE
FOR month = 1 to 12
do monthly processing
ENDFOR
Programming Concepts
• Structures: Sequence, Selection & Repetition
• Foundation for Programming
• Every complex program is only a combination
of these structures.
More things we do…
• Use a box to move lots of things from one
room to another
• Carry a pack of candies to class on your
birthday!
• What is the common thing here?
More things we do…
• Use a box to move lots of things from one
room to another
• Carry a pack of candies to class on your
birthday!
• What is the common thing here?
Collection / Arrays
Arrays
• enable us to store data of similar type
together.
• enables us to handle varying size data.
• Lines of code do not increase with more data!
FOR each item in array
add item to total
ENDFOR
Even more things we do…
• Get phone call when you are driving a car
• Friend knocks on the door when you are
watching a movie
• What is the common thing here?
Even more things we do…
• Get phone call when you are driving a car
• Friend knocks on the door when you are
watching a movie
• What is the common thing here?
Interrupts / events
Event driven programming
• Suspend current processing to process the
event, or process it in parallel.
• “Regular” processing flow & separate
processing routine for each event.
Object Oriented Programming (OOP)
• Models the real-world better
• Concepts learned from the manufactoring
industry
Hands-on Introduction to Alice
It is a good idea to save each
program separately so that you can
go back and review later.
Purpose of Alice
•
•
•
•
Enjoyable introduction to Programming
Natural introduction to OOP
Learning to program with training wheels
Stepping stone to learn more serious
languages (C/C++/Java)
Alice environment
• World
• Gallery
• Scene Setup
– Adding objects
– Working with objects
• Similar to Scene setup in move-making
– Every object needs to be in starting position
Methods & Actions
• You are welcome to play along with me.
• Add one object
– Test out various movements (moves in 6
directions, turns in 4 ways & roll in 4 ways)
• Add one more object
– Test out relative movements
Program #1: Choose your favorite
object from the gallery and test
various methods.
10 minutes?
Our first program!
• Sequence structure
• do a few interesting actions!
Program #2: Make your object do
a few funny actions!
10 minutes?
Program #3
• Introduce multiple objects
• do a few interesting actions!
Program #3: Make your objects
do a few funny actions!
15 minutes?
Program #4
• Use DO TOGETHER structure
• Add realism & sophistication!
Program #4: Use DO TOGETHER to
do multiple things at same time!
15 minutes?
Program #5
• Add Vehicles/Seaplane from local gallery.
• Make it do loop the loop.
• Use DO TOGETHER structure
– seaplane move forward
– seaplane turn backward
– seaplane’s propeller roll right
• Use “style = abruptly” to make the motion
smooth 
Program #5: Use DO TOGETHER to
make the plane do loop the loop!
20 minutes?
Program #6
• Introduce repetition – counted loop
• do a few interesting actions!
Program #6: Make your objects do a
few funny actions multiple times!
10 minutes?
Program #7
• How to do realistic walking?
• Leg & body movements
• Better to do with a human object from
“People/Walking People”
• Write your own methods.
Program #7: Practice human
walking/running animation
15 minutes?
Program #8
• Walking back and forth between 2 points?
• Use 2 objects as end-points.
• What should you do when you get close to
those objects?
Program #8: Practice human
walking/running back & forth.
15 minutes?
Program #9
• Alternate implementation of Program #8 using
IF statement
• Can we use same code for step 1 and step 2?
Program #9: Practice human
walking/running back & forth. Use
variables and decision structure
15 minutes?
Logical thinking
• You have been introduced to several building
blocks – a few more on the way too.
• Now, it is all about putting/using them
together in various combinations.
• I encourage you to think in high level, note
down a few ideas (design), then proceed to
implementation.
• Direct coding is NOT recommended.
Program #10: Lists/Arrays
Arrays cannot expand during run-time, but lists can. Alice
supports more functionality with lists too. In simple
words, lists are more powerful.
• Make a list of your favorite objects (multiple copies of
an object is ok too!)
• Make them do something one at a time.
• Make them do something in random order
• Make them do something in sync.
• You are not limited to these - use your imagination!
Program #10: Group & individual
dance moves!
Use similar objects so that you can
work with the parts too.
15 minutes?
Program #11: Events
• So far, we did everything under “my first
method” or we invoked other methods from
there.
• But when it comes to games or complex apps,
user may press various buttons/items & we
need to respond to each event.
Program #11: We will start with a coach
and a ball. Coach keeps doing some
exercise. We will use key based events to
move the ball to top of his head. Then,
coach should stop exercising and do
something funny.
15 minutes?
Program #12: Frog’s jumping game!
• Swimming pool – moving lilypads – make the
frog to jump on lilypads carefully and reach
other side to win!
• Make the lilypads to move independently back
and forth first. Then, work on the game.
• If the frog jumps and touches the water, it will
sink! I guess this frog does not know to swim 
• Plan and write the pseudocode first, before
coding!
Program #12: Frog jumping
game. Discuss/share ideas with
your neighbour and help each
other to progress …
Move frog 0.7 meters forward when up-arrow is
pressed.
For moving lilypads, use distance (pool width – cricle
width) with bit random speed.
Use vehicle property to stick to lilypad.
High level idea/pseudocode #1
move the frog by 0.7 meters.
IF index is beyond lilypads
declare win!
ELSE
IF frog is close to circles[index]
frog is safe
set vehicle for frog to corresponding circle
ELSE
frog dies! – make frog disappear
display a message
ENDIF
ENDIF
increment index
High level idea/pseudocode #2
move the frog by 0.7 meters.
IF frog is close to “finish” object,
declare win!
ELSE
IF frog is close to any of the moving circles
frog is safe
set vehicle for frog to corresponding circle
ELSE
frog dies! – make frog disappear
display a message
ENDIF
ENDIF
Transition to C/C++/Java
• Most of you have become “mature” Alice
programmers – you can see the limitations of Alice
now.
• Now that your fundamentals are bit strengthened,
this is a great time to get started with C/C++/Java!
• I encourage you to do the following problems in
both languages: Alice and C/C++/Java.
• Time management is crucial – I encourage you to
spend a few hours to solve programming problems
periodically to strengthen your skills.
Transition to C/C++/Java:
Math Practice program
• Display 2 random numbers (limit the range for
each number to 1-100) and ask the user to
multiply manually & input the result. Verify
whether the user input is correct. Repeat it for
10 times, keep track of the score and display it
in the end like this:
Your score: 8 correct, 2 incorrect.
Transition to C/C++/Java:
Guessing Game
• First, guess a number between 1 and 100.
Then, your program should ask you a series of
questions and determine your guess based on
your answers.
Question format: How about NN (<,=,>)?
• Write the high level pseudocode, manually
verify it before proceeding to code.
Pseudocode
initialize low = 1, high = 100
WHILE low < high
mid = (low + high) / 2
ask the user how about mid?
IF user response is <
high = mid-1
ELSE IF user resposne is >
low = mid+1
ELSE IF user response is =
print great!
break;
IF low == great
print “Your guess is” low
ENDIF
Sample run #1 (user input in RED)
Guess a number between 1 and 100 (both inclusive)
and get ready to answer a few questions.
How about 50 (<,=,>)? <
How about 25 (<,=,>)? <
How about 12 (<,=,>)? >
How about 18 (<,=,>)? >
How about 21 (<,=,>)? <
How about 19 (<,=,>)? >
Your guess is 20.
Sample run #2 (user input in RED)
Guess a number between 1 and 100 (both
inclusive) and get ready to answer a few
questions.
How about 50 (<,=,>)? >
How about 75 (<,=,>)? <
How about 62 (<,=,>)? >
How about 68 (<,=,>)? =
Your guess is 68.
Transition to C/C++/Java:
Guessing Game
• Play the reverse game. Computer should guess
a number between 1 and 100. Now, you
should ask questions & determine that
number.
• C/C++: use srand() and rand() to generate
random numbers
• Write the pseudocode, manually verify it
before proceeding to code.
Pseudocode
guess = Generate a random number 1 … 100
Ask for user input
WHILE user input != guess
IF guess < user input
output “<“
ELSE
output “>”
Ask for user input
Output “You guessed it right. Good game!”
Sample run
I have guessed a number.
You can ask questions now.
50
<
25
<
12
>
18
>
21
<
19
>
20
=
Good job!
References
• Alice website: www.alice.org (download Alice 2.2
software)
• Textbook: Learning to Program with Alice by
Wanda Dann, Steve Cooper and Randy Pausch
ISBN: 0-1318-7289-3
• Free Ebook: www.dickbaldwin.com/tocalice.htm
• My Alice examples:
www.utdallas.edu/~jeyv/alice
Download