GNU Xnee 3.19 (‘Lucia’) released

We are pleased to announce the availability of GNU Xnee 3.19

GNU Xnee is a suite of programs that can record, replay and distribute user actions under the X11 environment. Think of it as a robot that can imitate the job you just did. GNU Xnee can be used to:

  • Automate tests
  • Demonstrate programs
  • Distribute actions
  • Record and replay ‘macro’
  • Retype the content of a file

News in this release:

  • Support for pause/resume/quit when retyping file
  • Defaults to use data display for all X.org with minor version nr >= 3
  • New options:

–record-from-data-display,-rfdd
Record from data display. This option is experimental.

–record-from-control-display,-rfcd
Record from control display. This option is experimental.

Getting the Software

http://ftp.gnu.org/gnu/xnee/xnee-3.19.tar.gz

http://ftp.gnu.org/gnu/xnee/xnee-3.19.tar.gz.sig

or one of the mirror sites as found in:

http://www.gnu.org/prep/ftp.html

Checksums

md5sum:

560e8126950d8d4e7c30fc844d556482 xnee-3.19.tar.gz

cksum:

2693031014 1893109 xnee-3.19.tar.gz

About calling the release “Lucia”

In celebration of the Spanish flamenco guitarist Francisco Gustavo Sánchez Gomes (known as Paco de Lucía).

http://en.wikipedia.org/wiki/Paco_de_lucia

 

Wanted: a strategy for teaching programming to newbies?

What is a good strategy for teaching a programming language to beginners?

I wasn’t a briliant student in any of the years I studied – I was lazy and better in finding records (vinyl) in record stores than actually studying – but I guess I was ok. Anyhow, I was kind of good in math (and history iirc). So I never encountered the problems that I have discovered among some of our students lately. This does not, and I don’t mean to, imply that I am smart and they are stupid. Studying lambda calculus now I appreciate my students’ problems better – so far I suck at lambda calculus so I cant’t be that smart!

Now, as a teacher, at a University I see a lot of frustration among students wanting, or are requested, to learn to program. Are the students stupid or is there something else that is incorrect? I’ve touched the topic before and will do so more in the future. My belief and my experience say the latter. So how do attack the problem of frustrated students? Tell them that they are doing university studies and they should get used to it? Well, to some extent it is true and perhaps important for students to realise, but I don’t think that’s the only way to go. So I want to get a bit deeper into the problems the students encounter. What are the main problems in learning how to program? Listing and discussing the main problems I think we can ask ourselves the question of what  a good strategy is.

Two main problems. One problem stands out, mathematical skills are required. Another one is the complexity of popular languages. I’ll try to go through the two problems below.

Mathematical background
Most languages, or rather the education (lectures, books, …) of it, require a mathematical background. Concepts like function and variable are assumed to be familiar to the reader.

Given the last two courses I’ve been involved in, where programming has been introduced to students with no thorough mathematical background I have understood via my own experience in supervising and listening to students but mostly via chats (not structured as proper interviews) with students that functions and variables are hard to grasp. How tolve this? I see two solutions

  1. Require a mathematical background for the course/program
  2. Try to find other means as a teacher. Be it the course literature, lecturing methods, dedicated tools.

Perhaps (1) is the only one that will work properly and this is used in programs where you end up as a computer science engineer. Doing (1) in a program for Applied IT or something similar where the students should not become cs engineers would perhaps make my life as a teacher easier but I think we will miss a lot of talented students – I don’t believe in a programming gene! I have met a lot of talents in students with no thorough math background. So for me it is interesting to look into (2). Fact is, I have been totally absorbed by this the last couple of weeks. I will write more about this, lots more… but I need to read, think (yes, sometimes I can think!), discuss and probe students a lot more.

Complexity of programming languages:

I have often showed a small piece of code to exemplify how complex a language is. At a conference in January I saw the same code presented by someone else to exemplify my point.. I can interpret this coincident in two ways – either I am clever or I need to study more literature on the subject since this is the canonical example. I’d go for the latter. Anyhow, lets look at the following piece of code;

int x=1;

Trivial isn’t it. Apart from the fact that isn’t if you were to explain everything behind the scenery. I think it would be fairly easy to postpone r-value and l-values and so forth. But if you tech Java, a popular language since the industry uses it, you have to write all the code below to simply output “Hello” on the stdout.

public class LeoSayer {
    public static void main(String args[]) {
        System.out.println("Hello");
    }
}

Now, this is complex. Ok, we can skip using the public keyword in the class. But still, class? static? public? void? main? String? args? []? System? System.out?

Of the code above I think only the println(“Hello”) would be easy to explain. But the rest?

….. As I see it we now have two options of explaining all the extra code:

  1. Still maintain that Java is easy to learn – but this is too hard to explain so just skip it.
  2. Saying Java is complex – so we need to skip it. Just accept.

How about explaining all the code? The students would leave the room before you’d come to the word static!

Note: I have written a small tool, that is too large to fit in the margin, that would remove most of the problems in the Java code above. More on this tool another day.

So clearly Java is not perfect as the first language. Last term, when introducing programming to students, we switched approach a bit. We started off by teaching some of the basic stuff like variable, function and assignment using Python. And later, after two weeks, switch to Java – when introducing Object Orientation. If Object Orientation is the way to go is another question – for me it has never been natural to think OO. Can’t help to state some other questions: Should the University adapt to industry needs? Should Universities teach the best available languages and make the industry adapt? Can we do both? Should Universities even consider the industry needs?

Anyhow, in Python, to output “Hello” you write:

print "Hello"

… using Python you can choose to use it interactively or execute the code via a script. This piece of code was understandably easier for students to understand than the Java counterpart. With Python you can go from procedural style to OO – but I believe Python’s OO syntax is too different from Java’s so I prefer to leave Python before reaching OO.

Apart from students disliking the syntax differences between Python and Java and having to make a switch between the languages we did see an improvement in results. There was actually less frustration in total compared to the year before. Unfortunately the results are not scientifically backed up – so you have to trust me on this one. Even though the students were frustrated about having to learn two languages I noticed that they asked less questions than the year before when we taught only Java. The frustrations they had is something we (read I, me, myself) have to get rid off – if we decide to keep the Python first and then Java strategy.

So after all this random thoughts, it’s almost time to state the question. But first some limits to the question:

  • The students don’t know mathematics
  • We cant assume that the students are willing to die to learn programming – we should perhaps make them want to do so. Using Free Software would be one strategy since you can explore everything you use. But that is a question about motivation. Another time!
  • The students should know Object Orientation and Java after having finished.

Ok, the question:

Can you recommend/propose a strategy when teaching programming?

I will set out on yet another quest trying to find a strategy. This is perhaps a sub task of the book finding quest or perhaps it is the opposite. Any input is welcome, as long as it is constructive….

Understanding my students or why I started learning Haskell, Part III

– Why a new language and why Haskell?

Reason 01: Understanding my students or why I started learning Haskell, Part I

Reason 02: Understanding my students or why I started learning Haskell, Part II

Ok, so it was decided. I, the volunteering Guinea pig, should start the quest for a really good book – not exactly a holy quest for the holy Grail but still (and finally), a quest!!!

Quest:

  1. Find one good book to a limited list of programming languages (Scheme and Haskell).
  2. Use the book to learn the programming language.
  3. Find what’s good and bad about the book – and compile that to a list.

I will cheat and GOTO 3 before I finish (2). ….. I, personally, will use this list later when I will look for books for new courses or when updating existing ones.

Disclaimer (redundant given the text above, but important!):

  • I am NOT looking for the best book for someone already being a programmer.
  • I am looking for a book that explains the language for a newbie. 
  • I totally suck at, among other things, writing manuals – so who am I to complain?

And ….. “I am not looking for a New England”

Searching for a good book

…… with my good eyes open

Scheme documentation

Oh boy, will I get in trouble now.

I started with Guile/Scheme docs but they were somewhat dry and there were some barriers that lowered my motivation. I couldn’t find book that really inspired me to continue reading. I am not saying that there is anything wrong with the books, but I don’t think they were aimed at newbies.

Haskell documentation

I tried some Haskell guides but starting out with “dry mathematical introduction” didn’t really motivate me. And an almost 600 pages long manual is kind of tough to have in front of you.

Heureka, I found Learn You a Haskell which seemed nice. After a while I noticed that I’d been reading and hacking for two hours. Now, that’s a sign of a good book! Perhaps not for programming newbies but nice for me. Ok it’s about time, I am coming out of the terminal/command line closet: I like the graphics!!

The last year I have tried to teach the same way as the book did. Mix theory and practical studies in small increments.

Haskell it is… I will learn Haskell

So this book made the decision easy – I will learn Haskell, since the book will not only learn me Haskell but I hope it will also give me some pedagogical ideas.

Some extra words here. It is crucial for me that the tools for the language (e.g. compilers) are Free Software. Furthermore the language specification should be free. ….. and there should be an emacs-mode for the language!

Result:

These are my findings so far. And this experiment is flawed from start since I am using only one person, furthermore that person is myself. So I am the first to blame myself for not using a scientific approach. Still I will use the results as input for choosing a book for students in the future.

A good book for newbies is imho a book that:

  • Is short enough to feel you can finish it in a couple of days/weeks – certainly doesn’t mean you should master the language after just a few days. 100 is a perhaps bit short and 600 pages is a bit too long. 200-400?
  • Uses Small increments. It’s important the theory and practice/hans-on (and exercises) are show with small increments. Give the user gratification every now and then.
  • Has quite a few examples that the reader can copy and try out herself.
  • As quick as possible, give me what I need to write a small but useful program (play audio, fetch web pages..) and then teach me more. I think it is important to quickly show the reader that the language can be used for something good and useful.
  • Does NOT write your own API and use that throughout the book.
  • Provides some exercises and well commented solutions.
  • Uses a relaxed language. Not a dry/mathematical one. Programming is fun!

For those of you saying that the Haskell book is not fulfilling all of the above. Yes, I agree. It doesn’t. But it’s the best I found and it’s good!

And for those saying “write your own damned book then!” – perhaps I will. Fact is that I secretly have started.

… If you feel there’s something missing in the list above. Please email me (hesa _AT= sandklef.com) with suggestions or write your comments on the blog.

Btw ……. my favorite programming books:

  1. Linux Device Drivers (I liked the 2nd edition best)
  2. The Art of Computer Programming
  3. Expert C Programming: Deep C Secrets
  4. The C Programming Language

Woops lots of C books there! I’ve read some Tannenbaums as well from which I learned a lot, but they’re not among my favorites.

And I really have to bring this paper up:

  • Reflections on Trusting Trust by Ken Thompson

Coming up next: A Good book introducing programming to newbies.