Published: May 1, 2008
By Richard G. Baldwin
Homeschool Programming Notes # 100
Let me introduce myself
After retiring from a successful career in the high-tech world of central Texas, I began a second career as a college professor at Austin Community College in Austin, Texas. During the past fifteen years, I have taught computer programming, (with a major emphasis on object-oriented programming using Java), to literally thousands of college freshmen and sophomore students.
Also during that period, I have published upwards of 600 online computer-programming tutorials on a variety of topics (see Resources) ranging from introductory to advanced. Furthermore, I have made all of my tutorials freely available for online viewing to students and professionals alike on a worldwide basis.
A need for more free online information on computer programming
It has occurred to me that there is a large group of people who need to learn computer programming but who are not well served by the current availability of free online material. I'm speaking of homeschool students and the parents of homeschool students and particularly of those who live in rural and small-town America where access to knowledgeable tutors is probably very limited. I have decided to take it upon myself to see if I can do something to alleviate that need. Only time will tell if I succeed, but I am going to give it a try.
Non-homeschool students are welcome also
If you are not a homeschool student but still want to learn about computer programming, you are welcome to use these tutorials for that purpose. I don't mean to exclude anyone. However, in those cases where it makes a difference, I will assume that the primary audience consists of homeschool students and their parents.
Learning to program computers from scratch
This is the first lesson in a series of lessons that will be designed specifically for homeschool students and their parents. I am going to assume that neither the parents nor their students know anything about computer programming, and will start at the very beginning insofar as computer programming is concerned.
However, I will assume that the parents and the students are generally familiar with a personal computer running the Windows operating system and that they know how to navigate the web. I will also assume that they know how to download, and install software from the web. (If not, they may need to get some assistance from a friend or neighbor from time to time.)
Free tutorials and other resources
It is my intention that these tutorial lessons will be available for online viewing free of charge. Also, I will make every reasonable effort to use only software and other resources that can be downloaded for free from the web. My objective is to help both the homeschool students and their parents to learn how to program computers at little or no cost. Note however that I may occasionally recommend that you go to a used bookstore (or to the web) and purchase a used textbook on a particular topic for reference purposes.
Starting at the beginning
As mentioned above, I will start at the beginning. I believe that it is important that students embark on learning this somewhat difficult topic at an early age in order to alleviate the difficulty that they may encounter in high school. Of course the pace for younger students should be slower than the pace for their older counterparts. In keeping with this philosophy, I will begin the series using a programming language named Scratch (see Resources) that is designed for use by students ages 8 and up.
High school graduation requirements
Over the course of time, I hope to develop and provide course material up to a level that will satisfy at least the minimum computer programming requirements for graduation from a Texas High school. My somewhat loftier goal is to help you prepare your student for the College Board Computer Science Advanced Placement Exam A, but only time will tell if I make it that far before getting sidetracked onto some other project.
Along the way, I will use at least the following three programming languages (see Resources) to help you learn how to program:
Everything that you need to program using these three programming languages is available at no cost on the web.
Why not pick a language and stick with it?
By now, you may be wondering why I don't simply choose a language and stick with it through the entire series of tutorials. That is a good question. If I were to do that, the language would be Java, not just because it is my favorite programming language, but also because it is the standard for teaching computer science in most high schools, colleges, and universities. This is the natural result of the College Board having selected Java for the Advanced Placement exams four or five years ago.
Java is clearly powerful enough to handle everything that we will need to cover in these tutorials. The problem is that until you get really good at programming, Java can be terribly boring. A great deal of programming expertise is required to create interesting and engaging programs with Java whereas it is much easier to create interesting and engaging programs using both Scratch and Alice. Furthermore, Java was never really designed to be a teaching language.
However, even though Scratch and Alice will prove to be very useful early on, we will reach the point where they simply won't have the power needed to satisfy the requirements for graduation from high school.
Let's have some fun in the process
On the other hand, both Scratch and Alice were designed not only to be good teaching languages, they were also designed to make learning to program fun. After all, if you and your student are going to have to learn how to write computer programs in order to graduate from high school, you might as well have a little fun along the way. I suggest that you go to the Scratch home page and click on a few student projects to see what I mean. Just keep in mind that many of the projects that you will find there were written by youngsters and may or may not work according to plan.
One of my favorite Scratch projects is named Son of String Art (hopefully it is still there). If it is still there, you should be able to click on the little yellow shapes in the green buttons at the top of the viewing area and see your shape constructed with strings resembling the string art of the sixties.
Fully interactive operating mode
I don't know how the folks at MIT go about causing Scratch programs to execute in an interactive mode inside your browser, but I suspect that they somehow convert them to Java applets. Note the use of the word interactive in the above statement. What you will see when you select a Scratch project on the MIT website isn't simply a passive embedded video like you might see at YouTube. Instead it is a fully interactive program that allows you to control the program by clicking buttons, etc., provided of course that the program was written to be used in an interactive mode.
I recommend that you also study the other lessons in my extensive collection of online Programming tutorials. You will find a consolidated index at www.DickBaldwin.com.
Appendix A and Appendix B contain disconnected excerpts that I extracted from Texas State documents in an attempt to get a handle on the minimum level of programming knowledge that is required for students to graduate from a Texas high school. By organizing that material, I have come up with the following as the minimum list of items that must be understood by the graduating student:
Won't cover the first three items
I probably won't attempt to cover the first three items in the above list. Instead, I will recommend that you go on the web or go to a used bookstore to purchase and then study any one of hundreds of older textbooks on programming fundamentals that have been published in the past twenty years that cover those items. That material hasn't changed in twenty years so it doesn't need to be a new textbook. Furthermore, that material is generally independent of the programming language being used, so it doesn't even need to be a Java textbook. However, if you are going to purchase a book anyway, you might as well purchase a Java textbook because it may come in handy later.
However, I do plan to cover the remaining items in the above list one or more times in this series of tutorial lessons but not necessarily in the order given.
The first programming language that I will use to help you to learn about computer programming is Scratch (see Resources). Therefore, the first thing that you need to do is to get your computer setup to run Scratch. Go to the Scratch download page (see Resources) to download and install the free Scratch software.
I am assuming that you already know how to do that. I installed Scratch on my Windows XP machine several months ago, and I don't remember exactly what was involved in the installation. However, I don't remember any particular difficulty with either the download or the installation. If you don't know how to download and install the Scratch software, perhaps you can find a friend, relative, or neighbor who can assist in that regard.
Run the tutorials
Once you have Scratch installed on your computer, I recommend that you run every Scratch tutorial that you can find. I have listed several tutorials in Resources. Some are pretty good and some are not so good, but regardless, it would probably be useful for you to work through them all. Pay particular attention to the Scratch intro video from MIT.
I doubt that you will find any Scratch tutorials that cover the programming fundamentals concepts that we will be covering in these tutorials. Most of the available Scratch tutorials tend to ignore the fundamentals and jump immediately into the higher-level features of Scratch such as playing music or viewing an image through a fisheye lens. There's nothing wrong with that. It is those features that are likely to keep today's students engaged long enough to learn the fundamentals and go on to bigger and better things.
Will concentrate on the fundamentals
However, in my tutorials, we will concentrate on the fundamental concepts of computer programming as identified in the earlier list of topics required for graduation from high school. The fundamental concepts are transferable from one programming language to the next, and are required for learning the more advanced aspects of computer science. The higher-level features of Scratch and Alice are not necessarily transferable to other languages. What I mean by this is that just because you know how to compose and play music in Scratch doesn't mean that you know how to compose and play music in some other programming language.
Drag and drop programming
One of the reasons that it will be useful for you to work through the tutorials is to help you gain proficiency in the drag and drop programming paradigm used with Scratch. This is a new programming paradigm that is incorporated in both Scratch and Alice, and it is very different from the paradigm used for old school languages such as C++, C#, and my favorite programming language, Java.
Mechanics are difficult to explain
Although drag and drop programming has major advantages over the old paradigm for the beginning programming student, the mechanics involved are much more difficult to explain in a written tutorial than the mechanics of programming with Java, for example.
With the old school paradigm, all that is necessary to create a program is to:
Advantages and disadvantages
Because everything in old school programming is based on text, it is easy to explain it in a written tutorial. The disadvantage of old school programming insofar as the student is concerned is that the student is required to memorize difficult and sometimes arcane programming syntax, which is often the downfall of many aspiring programming students.
The advantage of drag and drop programming is that the student is not required to memorize programming syntax; at least not in the beginning. That leaves the student free to concentrate on concepts. The disadvantage of drag and drop programming is that the mechanics are very difficult to explain in a written tutorial. It is sort of like trying to explain to someone how to tie his or her shoes in a written tutorial. You almost need to see it done in order to learn how to do it yourself. Many of the available tutorials are video tutorials, which make it possible for you to see how others accomplish drag and drop programming using Scratch. Once you see how it is done, you should have no difficulty doing it yourself.
Run some student projects
As I mentioned earlier, I also recommend that you run some of the student projects just to see what students are doing with Scratch. I'm not aware of any special setup requirements to cause your computer to run the projects in an interactive mode. As I mentioned earlier, I believe that the projects are delivered to your browser as Java applets (or something similar) and most modern browsers are capable of running applets straight out of the box. If you do encounter problems running the student projects, you might consider seeking help on the Scratch forums (see Resources).
In this lesson I introduced you to a new series of computer programming tutorials that are designed specifically for use by homeschool students and their parents. I provided a very brief discussion of three different programming languages that will be used in the tutorials to teach computer programming. I explained why I will be using three different programming languages instead of just one. I summarized the computer programming requirements for high school graduation in the state of Texas under the assumption that most states have similar requirements.
In the next lesson, I will begin the process of helping you to learn about the following computer programming concepts using Scratch:
Those topics are so important that we will most likely visit them again using Alice, and once again using Java.
The following are excerpts from The Texas High School Graduation Requirements (see Resources), which specify that as a minimum, in order to receive a high school diploma in the state of Texas, a student entering Grade 9 in the 2007-2008 school year and thereafter must complete the following:
"(10) Technology applications--one credit, which may be satisfied by:
(A) the following courses in Chapter 126 of this title (relating to Texas Essential Knowledge and Skills for Technology Applications): Computer Science I, Computer Science II, Desktop Publishing, Digital Graphics/Animation, Multimedia, Video Technology, Web Mastering, or Independent Study in Technology Applications;
(B) the following courses in Chapter 120 of this title (relating to the Texas Essential Knowledge and Skills for Business Education): Business Computer Information Systems I or II, Business Computer Programming, Telecommunications and Networking, or Business Image Management and Multimedia; or
(C) the following courses in Chapter 123 of this title (relating to the Texas Essential Knowledge and Skills for Technology Education/Industrial Technology Education): Computer Applications, Technology Systems (modular computer laboratory-based), Communications Graphics (modular computer laboratory-based), or Computer Multimedia and Animation Technology."
The graduation requirements further state:
"(h) College Board advanced placement and International Baccalaureate courses may be substituted for courses required in appropriate areas in all three high school graduation programs. College Board advanced placement and International Baccalaureate courses may be used as electives in all three high school graduation programs."
While these tutorials are not written specifically for Texas students, I will assume that the requirements in Texas are probably representative of the requirements in other states as well and will design these tutorials with that in mind. The highlighted items in the above excerpts are of primary interest in this set of tutorials.
The specifications for Texas Computer Science I (see Resources) are quite large and involve a number of topics in addition to computer programming ("knowledge and appropriate use of operating systems, software applications, and communication and networking components," for example). However, this set of tutorial lessons is designed to concentrate almost entirely on the computer programming aspects of computer science.
In that vein, I have scanned the specifications and have extracted the following disconnected excerpts in an attempt to get a handle on the minimum level of programming knowledge expected of students who successfully complete Texas Computer Science I.
While the disconnected excerpts listed above may appear at this time to be a hodgepodge, I believe that the information contained therein will be useful in understanding the minimum level of computer programming proficiency required for graduation from a Texas high school, and presumably from high schools in other states as well.
The specifications for Texas Computer Science II (see Resources) are also quite large and also involve a number of topics in addition to computer programming. Once again, however, this set of tutorial lessons is designed to concentrate almost entirely on the computer programming aspects of computer science.
I have scanned the specifications and have extracted the following disconnected excerpts in an attempt to get a handle on the level of programming knowledge expected of students who successfully complete Texas Computer Science II.
As should be expected, most of the items in this list are over and above the minimum graduation requirements in the earlier list.
The website for the College Board Computer Science Advanced Placement A exam (see Resources) states the following:
"Computer Science A emphasizes object-oriented programming methodology with an emphasis on problem solving and algorithm development and is meant to be the equivalent of a first-semester course in computer science. It also includes the study of data structures and abstraction, but these topics are not covered to the extent that they are covered in Computer Science AB.
Computer Science A may be appropriate for schools offering an AP Computer Science course for the first time, for those schools whose faculty members have not yet developed sufficient expertise to cover the material in Computer Science AB, or for those schools wishing to offer a choice of courses."
Computer programming at this level of knowledge and proficiency is not required for graduation from Texas High Schools, and presumably is not required for graduation from high school in other states as well. Rather, the advanced placement courses are intended for those students who plan to take College Board exams and place out of the first one or two semesters of computer science when they graduate from high school and enroll in a Computer Science college curriculum. As stated above, Computer Science A is intended to be the equivalent of a first-semester course in computer science.
The College Board website for Computer Science A goes on to state:
"The content of the college-level introductory programming course has evolved significantly over the years. Starting as a treatment merely of language features, it eventually incorporated first the notions of procedures and procedural abstraction, then the use of modules and data abstraction. At most institutions, the current introductory programming course takes an object-oriented approach to programming that is based on encapsulating procedures and data and creating programs with interacting objects. The AP Computer Science courses have evolved to incorporate this approach.
Current offerings of the AP Computer Science Exam require the use of Java. Those sections of the exam that require the reading or writing of actual programs will use Java. The exam will not cover all the features of Java; it will be consistent with the AP Java subset. (See Appendix A.) The AP Java subset can be found in the Computer Science section of AP Central (apcentral.collegeboard.com). Students who study a language other than Java during an AP Computer Science course will need to be prepared to use standard Java, as specified in the AP Java subset, on the AP Computer Science Exams."
The website for College Board Computer Science Advanced Placement AB (see Resources) states:
"Computer Science AB includes all the topics of Computer Science A, as well as a more formal and a more in-depth study of algorithms, data structures, and data abstraction. For example, binary trees are studied in Computer Science AB but not in Computer Science A. The use of recursive data structures and dynamically allocated structures is fundamental to Computer Science AB."
Copyright 2008, Richard G. Baldwin. Reproduction in whole or in part in any form or medium without express written permission from Richard Baldwin is prohibited.
Richard has participated in numerous consulting projects and he frequently provides onsite training at the high-tech companies located in and around Austin, Texas. He is the author of Baldwin's Programming Tutorials, which have gained a worldwide following among experienced and aspiring programmers. He has also published articles in JavaPro magazine.
In addition to his programming expertise, Richard has many years of practical experience in Digital Signal Processing (DSP). His first job after he earned his Bachelor's degree was doing DSP in the Seismic Research Department of Texas Instruments. (TI is still a world leader in DSP.) In the following years, he applied his programming and DSP expertise to other interesting areas including sonar and underwater acoustics.
Richard holds an MSEE degree from Southern Methodist University and has many years of experience in the application of computer technology to real-world problems.