Hello
Hi. I'm Philip East and this is CS 1130 Visual Basic Programming. One thing you'll want to know about me is that I'm hard of hearing. I hope to get that worked on soon. If you need to contact me try one of the following (and speak up :-)
- Office is around the corner, ITTC 315
- Phone number is 3-2939
- email is east@cs.uni.edu
- UNI web page is at cs.uni.edu/~east and from there you can click to get to my VB page [ display my UNI page, then course page ]
- Questions?, comments? wonderings?
For the next few days, it would be helpful if you said your name (clearly & loudly—I'm hard of hearing) so I can get to know you and be more likely to get you class participation credit
Pair-Programming
For much of the course it will be okay if you use pair-programming. Pair-programming involves one person serving as the driver and one person serving as the navigator. Then, every so often, they swap roles. The driver does all the typing, program execution, etc. The navigator watches closely to make sure the driver is doing what's needed. They work together to decide what to do.
That means you'll need a partner. So, look around. Introduce yourselves. Be thinking about who you might like to partner up with. If you have a friend in the class that might make for a good partnership or it might end up hurting your friendship because programming partners need to be willing to say things like "you're wrong", "that won't work", ...
At the beginning of next class period, we will identify partners and create a seating chart. Partners will sit side by side. Be aware that the big tables have power (if you are using your own computer) and the middle tables do not.
Questions?, comments? wonderings?
Let's Get Started
The university catalog say this course is to address
Programming using the language Visual BASIC. Broad coverage of language syntax, programming practice, and programming problems appropriate to the novice or end-user programmer using a personal computer.
- So, So, you must be here to learn to program, right? (Why are you here?) [discuss responses]
- What do you know about programming?
- What do you wonder about programming?
- What is programming?
So, back to our earlier question (What is programming?). To me, programming is the development of a set of instructions that allow the computer to independently carry out a set of instructions. Typically, those instructions will produce some needed information or supervise some activity. Have you ever run a computer program? What did it do?
So, What does developing a set of computer instructions entail? [note/discuss any responses] One can certainly just jump in and write out some instructions and have the computer do them. For some very simple tasks that will work. But, my experience (and research that has been conducted) leads me to the conclusion that programming (done reasonably) consists of:
- Deciding precisely what the program should accomplish
- Determining what that will entail — what the computer needs to do
- Producing a plan or algorithm that will accomplish the desired activity
- Translating the plan/algorithm into code
- Testing and revising the program code until it works (this may require changing the plan or even revising why you believe the program needs to do)
Only the last two of these tasks involve writing/producing code. Most of the problem solving required in programming should occur before any thought is given to coding.
Some people think programming is hard. Its not, or at least it is no harder than writing a research paper or designing and carrying out a science experiment or most any other activity that involves problem solving. Learning to program might be a little harder but that is because the learner has to learn a new kind of problem solving and how to convert the solution to a programming language which they don't know yet. It is somewhat like learning to write a new kind of poetry in a foreign language. You have to learn the poetry part and the foreign language.
Visual Basic uses a graphical user interface so some of it will seem/be familiar. Hopefully, we'll make the rest of it understandable for you.
Questions?, comments? wonderings?
Course Activity/Syllabus
[ display course syllabus for discussion below ]
Hopefully you all read the syllabus. Any questions? Comments? [scroll through projected version of the syllabus] I think most students want to know the following about the course:
- What get's graded?
- What do I have to do?
- [Discuss responses & expectations]
Course Success
We have a shared goal in this course—to be successful. For me, that means you learn a lot (mostly what I wanted you to learn :-) For you, ... What?
What can you do to enhance the likelihood or degree of your success?
- Attend class and think/question during presentations and discussion. (What is being said? Do I understand/does it make sense? Do I agree? ...)
- Ask questions when you don't understand/agree.
- Persist when I am too dense to see your point.
- Do all the assignments to the best of your ability.
- Seek help when you have difficulty on the assignments. (e-mail, office hours, classmates, ...)
- Try stuff beyond what is assigned or what you already know.
- Think about assignments from the teacher's standpoint, e.g., it's goals, why/how it is useful, how it could be adapted, ...
- Wonder about programming. (e.g., how is it similar to or different from other intellectual activity)
- Be curious.
- anything else?
What can I do to enhance the likelihood or degree of your success? [note and discuss suggestions]
Roll and Initial Seating Chart
Good day. I will be taking roll in the class and using a seating chart to make that process easier while I learn to match names and faces. So, please pick a place you'd like sit. Also, be aware that I will encourage you to work in pairs for much of the course, so maybe you'll also want to sit by someone that you know or think will help you learn. Note that, if you plan to use your own laptop in the course the two small center tables do not have power to them—the others do.
Take roll and prepare initial seating chart.
Any questions, comments, or wonderings before we proceed?
Course Goal and Strategy
My goal for this course is to help you become professionals who can program, but not professional programmers. As noted earlier, programming is the act of producing a set of instructions for the computer to carry out.
So, how will I/we go about getting you to learn programming? How will it be different from the programming courses for computer science majors? I think this course will be different from major courses in several ways.
- Focus on tasks & problems
Most programming courses focus on the features of the programming language being learned. I will try to have the main focus be on tasks or problems that we wish to develop instructions for. Or in our poety & language example, we will try to focus more on learning the poetry rather that the foreign language. Okay?
I will provide practice/learning activities that provide a number of examples of tasks or problems that will (we think/hope) help you (your brain) generalize to programming situations you might encounter in your life. You can help this generalization process by trying to think of additional examples that are similar to what you see in class in the learning activity.
- Use a just-in-time approach to introducing programming language features
I will try to introduce elements of the programming language only when they are needed to accomplish some task we are trying to write instructions for. We computer scientists sometimes think certain things about programming are cool and that students might share our appreciation for those cool things. Well, usually students don't and talking about them merely adds to the burden of learning. Sometimes it may look like we are just looking a language features but the goal is to always have the primary focus be on problems/tasks.
Of course, in order to do anything in a new or foreign language, you have to know or understand the basics of the language—words and how to put them together. So, the early part of the course will necessarily be have a lot of that kind of stuff.
- Use mastery- (actually competency-) based learning
I want not to penalize (grade wise) anyone who doesn't get it at first. So, we will have quizzes over the major elements of the course, but, if you "fail" the first one (or 2nd or 3rd, etc.) your grade will be affected in a very small way. The quizzes will be called competency demonstrations and if I think you get it you will pass. If I don't think you get it, you will fail but be able to do the quiz/competency demo over with only a very tiny deduction (to discourage people from trying to learn by taking the quizzes rather than doing the homework). I found out that in England they think of this as "driving tests", you keep doing it until you pass.
You won't be able to do it forever and you need to pass the 2nd demo before retakes of the 3rd, 4th, or 5th ones but I think it comes close to meeting the ideal of mastery learning. Comments? Wonderings?
- Use Why can't you write this code? as a problem solving aid
Often programming courses are similar to doing math word problems. The teacher shows you an example or two and then gives you homework that involves a bunch of similar problems. But, they don't really tell you how to go about doing it. You are expected to see and understand how that is done. Stephen Hughes and I have devised a question that can guide the problem solving process when you have difficulty writing programs. I will try to remember to use it consistently in the class and encourage you to use it yourself. (I'll share it with you shortly.)
(Actually, there is no reason CS major courses can't use these strategies. They just don't, yet.)
Dr. Hughes and I believe that you already know how to solve problems. You do it all the time. But, you don't know how to convert that solution that you have in your head or on paper into instructions for the computer. An example should illustrate this.
A Sample Problem
Suppose I take a deck of cards, shuffle them, and remove one without showing it to anyone. The problem in this case is to determine the missing card.
Please pick a person or two near you as a partner and talk over how you each would solve this problem. I'll give you a few minutes to do so. Pairs/groups discuss solutions. [After 3-5 minutes bring focus back to class.]
Disucussion
- Who wants to share a solution?
[Accept a solution and write it on the board.]
- Who had a different solution?
[Accept the solution and write it on the board.]
- Any other solution/approach?
[Accept and discuss the solution.] Comments? Which is the best solution? Why? (As far as we are concerned the best solution is the one that you can understand)
[Probably] These solutions need to be a little more precise for us to think of them as solutions that we can use for programming. Solutions to programming problems need to be unambiguous and to clearly indicate actions that happen depending on something and actions that get repeated. So, I will translate these solutions to what we call pseudocode. [Produce translations to the problems on the board.] Questions? Comments? Wonderings
Is there anything in my solution translation that you do not understand? [Note and respond to any issues.]
and
for each card examine it place it in a pile by rank for each pile determine the pile's count of cards if the count is not 4 record the rank & stop further counting with the identified pile search the pile for a spade if spade was missing record suit as spades else search the pile for a diamond if diamond was missing record suit as diamonds else search the pile for a club if club was missing record suit as clubs else record sut as hearts report the rank and suit of the missing card
and (my favorite process which illustrates that sometimes you do not have the computer solve the problem like a human would)
prepare a checkoff list for each card for each card examine the card check off the appropriate item on the checkoff list for each item on the checkoff list if the item is not checked off report the rank and suit of the card stop further processing
The solutions you see above are "algorithms" (step by step directions) that can be translated into a programming language. They are, I believe, readily understood by most people. Again, anything here you do not understand? [Address any issues.]
The fact that you understand all or nearly all of what you see here suggests that you already understand all or most of the concepts involved in programming. You just need to learn:
- Problem representation
Computers can recognize or work on numbers (integers and reals) and strings or collections of numbers and strings (characters). In some cases (such as Visual Basic), they can also recognize forms and controls in/on them. A big part of programming is to represent the problems we are working on using only numbers and strings.
Not only do you need to represent the problem using numbers and strings, you also need to be able to think about the problem in terms of variables (which will be a big part of Unit II).
- Actions the computer can carry out
- Acceptable ways of organizing the actions
- Specifics of the programming language being used
Next Time
- We will introduce Visual Studio and I'll demonstrate its use
- If you are using your own computer, you need to get Visual Studio on it (look in Chapter 1 of the text).