"In the world ye shall have tribulation: but be of good cheer; I have overcome the world." –John 16:33

San Pedro Garza Garcia

Tag: Java

How to teach computer programming to kids (Part 8) CSC 116 Introduction to Computing – Java at NCSU

Day 614 of 1000

This is the eight in a series of posts on how we taught our children to program, what we did wrong and how we think we could have done better.  You can see the introductory post and index to the series by clicking here.

[Previous post]
[Next post]

Kelly and Christian both took the “Programming 101” class at North Carolina State University this semester for science majors.  We all agreed that it was badly done.  Part of the problem was with the disparity in knowledge of the students coming into the class, but a lot of it had to do with the structure and operating rules of the class.  This seems to be a typical problem for many, if not most, introductory college programming classes.  Here is the course description:

CSC 116 Introduction to Computing – Java UNITS: 3 – Offered in Fall Spring Summer
Corequisite: (E115 or PAMS 100) and (MA 121 or MA 131 or MA 141)
An introductory course in computing in Java. Emphasis on algorithm development and problem solving. Careful and methodical development of Java applications and applets from specifications; documentation and style; appropriate use of control structures; classes and methods; data types and data abstraction; object-oriented programming and design; graphical user interface design.

First, let’s talk about the disparity of knowledge of the kids entering the class.  Kelly and Christian are a classic example.  Kelly, as is described in a previous post in this series, had virtually no programming experience before she took the class.  The University required her to take a one-hour course on how to log into a University computer and use a Linux environment, how to make a PowerPoint presentation, and a bunch of politically correct goofiness.  In other words, she started the Java class with zero programming knowledge.  Christian, on the other hand, already had more knowledge about programming in C/C++, C#, Python and PHP than would be taught in the course.  So, while Christian was bored out of his gourd, Kelly struggled to learn about data types, loops, if-else statements, classes and objects, and all the rudimentary building blocks needed to program.

Meanwhile, the operating rules of the class prevented her from getting help from her brother, Google, me, or anyone who had deep knowledge of these programming topics other than the course instructor and the less than capable TA’s for the class.  Whose bonehead idea was it to make those operating rules?  I get that the student who takes the class needs to understand the material on their own and it is important to do their own work, but it is ridiculous to forbid the use of tools and resources that will allow the student to learn the material more thoroughly.  I am sure many students ignored these rules, but Kelly worked mightly to do the class according to the operating rules.  Those rules were a great hinderance to the learning process for Kelly.  For Christian, it did not matter, he already knew everything.

There has to be a way to do some kind of triage before assigning kids to a class like this.  There has to be a better way of teach the beginning programmers.  I will talk about what we would do to prepare our kids for these classes if we had to do it over, but I do not know what to do about the college classes themselves.  I am not sure what to do about the college level introductory courses themselves.  What I do know is that I have hired lots of programmers during my career and I rarely, if ever, hire programmers that have Computer Science degrees.  Partly that is because of the type of programming we do in my field (robotics and machine vision), because it seems like the CS majors are best suited for database, gui, and internet programming.  Partly, it is because I have seen too much of the kind of nonsense like the course desribed here that goes for college level programming instruction.

Figuring out how to program Android phones

Day 584 of 1000

Yesterday I wrote about a series I plan to write on how Christian learned to program during homeschool.  My buddy, Conrad wrote a comment about how he was interested in programming Android phones.  That very same day, another friend and I went to lunch to talk about a little Android programming project.  I have always used Eclipse to program Java in the past, but my friend pointed me to about a free, open source IDE for Java called Intellij IDEA Community.  I downloaded it, installed it, and had my first application up and running in an emulator in short order.  I will see how long it takes me to figure out how to get it running on my Samsung S III.  I think I am going to move over to that environment for awhile to see what I think.  My plan is to port BleAx to a cell phone and this might help me kill two birds with one stone.

Intellij IDEA Community edition

Computer programming for kids – a new series of posts

Day 583 of 1000

It is my daughter, Kelly’s, birthday today.  She is now a 19 year old Statistics major at North Carolina State University and is taking her first two formal programming classes, Statistical programming with SAS and Java.  She has also programmed with the R statistical programming language.  She enjoys programming a great deal, but is a little frustrated with her Java class.  Kelly is not frustrated with the material; she enjoys that.  She is frustrated because I taught a lot of programming to Christian, but virtually none to Kelly.

She said, “Dad, why did you teach Christian how to program and not me?”

I said, “Because you enjoyed other stuff like art and crafts and Christian wanted to know how to program his Palm Pilot.”

She said, “You should have taught me, too.  I need to know how to program now and I am having to learn it from scratch.”

“You really have to have something you want to do with programming or it is really boring,” I replied.

“You made us do Mavis Beacon Typing 15 minutes every day for two years and we didn’t have any real use for it until years later.  It was really boaring at the time, but got A LOT out of being able to type faster and better than everyone else.  We are really glad you made us do that.”

All this was true.  I think I failed Kelly in this.  Christian learned how to program on his own, but I bought him the learning materials, made computers available to him, and vmade a program of study that was both systematic and and integrated part of his homeschool curricula.  The reason we did all this for Christian was because he had something he wanted to accomplish. I should have thought to teach them both how to program whether they wanted to or not.  The program we put together for Chrisian has given him a huge leg up both in class and with work opportunities.  Any student who plans to get a hard (STEM) degree, would benefit from such a study program.  I am just sorry I did not do this for Kelly.

I have decided that, when I finish my current series on Why not skip high school?, I will write a series on how we taught Christian to program.  I will link to that series from this post as soon as it is started.

Working on Java with Kelly

Day 513 of 1000

Both Kelly and Christian have a class in the Java programming language this semester.  Christian has done a significant amount of programming already, so for him, the class it is more of a nuisance class than anything else.  Kelly has really only programmed in the R and SAS statistical programming languages.  She has never learned a general purpose programming language like Java or C++.  Shame on me.  She struggled with her first assignment and the teacher had made some draconian admonishments about not getting any help, so she did not want me to she her what to do.  That would have been OK if the teacher would have explained the stuff in any way that makes any sense.

So, I helped her with her first assignment.  I did none of the typing, but we walked through the programming assignment step by step, then went through another in-depth explanation of exactly what went on in the program as it ran.  I LOVED it.  Kelly has a knack for programming and picks stuff up fast, so it was fun.  The other thing that is an issue is that she has to write and run the programs over an SSH link from a Linux computer.  That stinks.  It would not be so bad if we had the computer set up right, but we do not and I will not be able to help much until I return from Arizona.  Right now, the way I help her is by cutting and pasting the code snippets into a gmail chat session and talking through it over the phone.

We have a different plan going forward.  I am going to show Kelly how to do several things.

  1. Install Skype in Linux so we can share desktops and talk while Kelly is programming.
  2. Install the Oracle JDK (Java Development Kit) so Kelly can develop and run Java programs on her computer before she SSH’s in to do it on the NCSU computer.
  3. Install Eclipse so Kelly will have an IDE for Java program development.

As for myself, I installed the above stuff in Windows last night at the Prescott Valley Public Library so I could run programs as I helped Kelly.  Now, I have to think about how I am going to do the new Android GaugeCam application, in Java or C/C++.  I will probably stick with C/C++ because I will be able to reuse a bunch of libraries, but Eclipse looks like a great development environment for developing for Android.

Powered by WordPress & Theme by Anders Norén