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

 

Talking about licenses in Gothenburg tomorrow

Tomorrow (April 23) Rikard Fröberg and I will talk a bit about licenses. We will focus on how you can use FOSS (Free and Open Source Software) in your biz or projects.

After our talk you can see a presentation on the new Beaglebone.

More info (Swedish) here: https://www.eventbrite.com/e/hackafton-den-234-hos-pelagicore-beaglebone-black-och-licenser-tickets-11218566033

Search less and find more (knowledge)

No, it’s not my usual ramblings on me sucking more less. I don’t think I ever will suck more less than I do. Tried it – have given up. This time I will talk about search engines, old way teachers and lazy students. Guess this addresses most programming education but I will use my experience from teaching university students. So in short, this post will be about exercises for university students. Hopefully you can provide some clever thoughts and/or experiences. Please do so (see below)

Ok, let me start with an example Java exercise:

Write a method that takes a date as an argument and converts it to a string representing a date in the format 1996-04-22.

It’s not a Nobel prize exercise and I am not claiming it’s a perfect one but let’s focus on the purpose and solution of the exercise.

Purpose:

The students should read about the Date and some DateFormat class. This way the students get to know the Date class and get familiar with a DateFormat class. It’s not unlikely that the students also will learn about the String class.

Old way solution:

This is how I (as a member of the Old Farts Club) would have solved it back in the good old days – apart from the fact that Java wasn’t invented in the good old days. I would have read about the Date class and a DateFormat class. The latter class I would stumble on while reading about Date. I would have gained some knowledge about Date and gotten familiar with a DateFormat class. I would also have learned about exceptions. I would have fulfilled the purpose of the exercise. Man, I am so terrific.

BTW: Old ways is a great album by Neil Young. Go listen to it. Now!!!

New way solution or perhaps No way solution:

The students of today – man I sound as if come from the 1700 hundreds – will most likely solve by entering a search string into a big search engine: “convert string to date in java yyyy mm dd”.  Ok, let’s try it with some search engines:

All three links give me a direct answer to the exercise. And we can safely assume the students will find the solution too. But the students will not read about either of the classes (Date and some DateFormat). Purpose of the exercise will not be fulfilled.

So this leaves us with the topic of today: The larch… sorry, the Problem with exercises:

The exercises we (teachers) write are not solved by the students the way we want them to be solved.

This is because, either:

The students are lazy.
The teachers are lazy.

I would say that both are true. But fixing one will not solve anything. We need to tackle both problem. As I ramble on right now I see two groups of solutions:

Lazy teachers – exercises and tests

Teachers have to put a bit more effort in writing exercises. Here are some of the things I have in mind about exercises.

  • Better and more exercises that in a more fine grained way increase the knowledge curve. With better here I mean to state smaller problems that makes it useless to use search engines.
  • Tests for the students to make it possible for them to self check if they’re doing alright and can proceed to the next chapter.
  • Better sync with theory. When I learn stuff I prefer theory first and exercises after. It seems to students of today don’t think like me.

Lazy students – learn students how to study

We (apparently) need to teach the students how to study. Yes, I do mean how to read a book. In some cases I’ve gotten really loud and what I believe them to think rightful sighs over having to read one simple page. So in some rare cases, one page is considered much to read. Perhaps even too much to read. I know that sometimes I am not very eager to read one page and most likely will sigh – but still, I think the way a student look at the amount of work that needs to be done in order to gain knowledge have decreased the last years. And it is decreasing.

  • Read – yes, I really do think we need to learn the students how to take time to read literature. And to do this with no social apps, no email, no music (not even Bach or Black Sabbath), no chat, no browser, … no nothing. Only the book – be it pdf or a paper book. Oh yes, what about Flipped classroom. Students still need to read the literature when using Flipped classroom.
  • Take notes. This is good if the student later on wants to ask the teacher. The student should read the notes to get reminded about the important stuff.
  • Read again. Are you kidding me? No, I am not. Read the chapter again (at least).
  • Do the exercises. Also teach the students how to make small variations of the exercises – that is exercise even more than there are exercises.

Before we proceed, I feel I need to give an example of a discussion I’ve had quite a few times:

- Why haven’t you showed us concept A, and why doesn’t the book teach us about A?

- I have showed it to you two times during lectures and the book talks about it on two pages and those pages are in the list of pages to study.

- Well, I don’t think that the book is clear.

- What in the book is not clear?

Usually the discussion ends here. I ask them if they’ve read the book and they admit they haven’t. Ok, time to put the blame on the student? No, too easy. Again, teachers and students need to relearn. What was it Clint Eastwood said in that movie, “Improvise, adapt and overcome”?

Here’s what I think work best:

  • Try to sneak in some coming topics in the last exercises. This way I hope to get more attention during coming lecture (be it normal lecture or flipped classroom).
  • Write lots of exercises – even variations on a theme (I am thinking about Haydn here).
  • Provide well documented solutions – perhaps even step-by-step videos.
  • Interesting problems – sorting bank accounts in alphabetical order is <beep> boring.

Wanted: Your input

I am quite sure, fact is I am 100% sure, you have opinions (you better, you better, you bet) and most likely have better solutions than I do, so comment away. I will compile all input on all education related blog posts later on. So

  • What is a good exercise?
  • How do you get a good progression in your exercises?
  • How do you mix theory and practice?

 

Future ramblings will (most likely) be about:

  • So when do we learn the univ students to study? Is it the really the universities that should teach the students how to study?
  • Ignoring, letting go of or helping “weaker students”?
  • What’s the purpose of a school system anyway? – who’s “the customer”? Academia, industry, public service, humans, …..?

 

Education. Nevermind – what was it anyway, pt II

This post is a follow up to: Education. Nevermind – what was it anyway, pt I

Why another rant? – I really dunno. Guess I feel like writing :)

On exercises and supervision:
This is in my opinion much more important than lectures. Make sure that there’s enough resources for the students during supervision. Waiting 30 minutes to get help is not something that helps or motivates the students.

Make the exercises progress towards the goal. If you make too many exercises few students will complain. If you make too few, most students will complain. I did too few in my last course it seems. Shame on me.

Don’t point out beginner’s mistakes. Discuss the mistakes instead an propose other solutions.

Encourage:

It must be frustrating for a student to see other students learn at a speed much higher than yours. But in some, or perhaps most, cases it’s not true. If student starts the course already knowing parts of it is easy for student without this knowledge to think that he/she is slow, stupid or whatever. In this case we can point out that all students, well most students – there are some wizards, follow the same learning progression and the starting point is the thing that differs. This can be proved by the “weaker” students that often are doing great on the re-exams. That is: they do good results – just a bit later.

Another thing I’ve found to be good is to, during supervision, make the student think about if she would have thought she could write the code you’re looking at? Usually the answer is no followed by a smile. Help them realise that they actually make progress.

Motivate:

Why should they learn to program? Motivating why to know how to program is needed in programs such as Applied IT but probably not needed in Computer Science programs. Give the students some simple examples of problems they can solve by writing programs.

Try to come up with programming exercises that relate to the student’s reality. Sorting bank accounts in order is not fun. It really isn’t. I have created these exercises myself. Shame on me (again!).

Conclusion:

So, given that education is about the student acquiring knowledge my job is to help them doing that. How do I do this:

  • Lectures – leave the old way. Try flipped classroom.
  • Exercises and supervision – spend time here, this is where you can lift students. Focus on:
    • Encourage the students to keep struggling
    • Motivate the students to keep struggling

Next week I will dive into how search engines are used as a study companion while we (teachers) keep thinking that the book is the tool used by the students.

Education. Nevermind – what was it anyway, pt I

What is education and how do we educate?

Lately I have been questioning not only myself, which is something I always do, but more importantly I have questioned more or less everything about education. I believe that a Kill Yer Idols strategy when reviewing situations in life is good. By applying this approach, which in this case translates into not fearing to question EVERYTHING, I found that the books on programming are really hard for newbies (I’d go as far and say some of them are totally useless) – some books were hard for me with my 15+ years experience as a programmer. I have also questioned the choice of programming language, the task of finding the best language remains. I have also ranted about finding a strategy.

Nevermind (What Was It Anyway) – Sonic Youth, NYC Ghosts & Flowers, 2000

So what will I shamelessly, pointlessly and in the usual chaotic style ramble on about today? First I need to find the meaning of the word education. Or perhaps I need to find my own interpretation of the word. So this post’s quest is about finding a good, and in sync with today’s students view, interpretation of education. And with that as a basis discuss the teaching forms (lectures and supervision) and how to best use them to reach the goals (students acquiring knowledge).

What is education?

What does Wikipedia have to say about education?

Education in its general sense is a form of learning in which the knowledge, skills, and habits of a group of people are transferred from one generation to the next through teaching, training, or research. Education frequently takes place under the guidance of others, but may also be autodidactic. Any experience that has a formative effect on the way one thinks, feels, or acts may be considered educational. Education is commonly divided into stages such as preschool, primary school, secondary school and then college, university or apprenticeship.

Ok, let us sum this up:

Knowledge, skills, and habits are transferred through teaching,
training, or research taking place under the guidance of others,
but may also be autodidactic.

This leaves pretty much room for me as a teacher. I am avoiding the word lecturer since that word seems to imply that we are talking about lectures. I can do a lot of things to make the students learn, or acquire knowledge. I can motivate students to learn for themselves. I can stand in front of the class and talk for hours about some topics. I can ask students to read for themselves and remind them that they’re now doing university studies and all complaints are void. For me the important and interesting thing in the definition of education is the word transfer, or perhaps if we rewrite it as acquired which is what the students do. I will try to focus on the student perspective by looking at “acquiring knowledge“.

Information is not knowledge. Knowledge is not wisdom. Wisdom is not truth. Truth is not beauty. Beauty is not love. Love is not music. Music is the best” – Frank Zappa

Some random questions to get my brain started:

  • Who is the education for?
  • What is/are the teacher’s preferred way to educate?
  • What is/are the students’s preferred way to get knowledge?
  • Are the modern search engines today destroying our students?

Oh my Emacs… so many words and nothing said yet. Sorry, I guess more words will come and an equal amount of stupidities.

On lectures

Lets start of by looking at the usual way of teaching, lectures. For how long are the students paying attention to you (the teacher)? I’d say roughly about 10 minutes, which is about what research finds. When you see some students really focusing on their laptops, they’re not paying attention to you or the subject. They’re playing games. Just walk behind students in a room when you’re not lecturing and see for yourself. I have noticed that by using some techniques you can extend the attention window quite a bit. The techniques include:

  • Interactive coding – write code from scratch “on stage”. Even if you make a mistake it’s good, since the students pay more attention to you – they want to spot more errors. Writing the code “in front of a live audience” makes it easier for the students to ask questions.
  • Walk around and make gestures – don’t stand still.
  • Change your voice – run the commands below[0] for an idea how boring a teacher can be.
  • Distract them – this is easily done for me since my brain usually wanders off in different tangents all the bleeding time. What ever you do to confuse them wakes them up and you can get their attention again for some more 10 minutes.
  • Use the white board – don’t overuse presentation programs.
  • Show some passion.

By using the techniques above I think, I do not have proper backing here, based on my experience that I can transfer more knowledge to the students than I would otherwise. But still, I don’t believe that old fashioned lectures is the best way. In some courses I sucked and in others I sucked less. And I think that I’ve done a good job in some of them. I once held a course where I didn’t get enough time from my department to give the course – in this case I think that the lectures weren’t as good as I liked them to be .. sorry guys. In some courses I have gotten quite good reviews as a teacher, yeah I also find that hard to believe. But applying the Kill Yer Idols strategy here and really question myself as a teacher – given that a teacher should make sure that the students acquire knowledge –  I must say that the students’ results were NOT better or worse when I got better (or worse) reviews.

Does this mean that no matter how crappy the teacher is the students will always get the same results?

No, but the quality of the teacher’s lectures is in my opinion exaggerated.

So there is something spooky with lecturing. The reason is, as stated above, that the students aren’t paying attention and if a student looses focus for a minute the remaining lecture may in the worst case be useless.

So why do we keep on lecturing?

I don’t know. I really don’t know. It’s easier for us teachers to give lectures I guess – we just do our thing in front of the students for 90 minutes and then we can go back to our offices and read articles. It’s the way we’ve always done it.

I tried out flipped classroom in the last term, as I mentioned before in the unlikely case that you’ve stumbled upon my blog before.

Flip teaching’ or a flipped classroom is a form of blended
learning in which students learn new content online by watching
video lectures, usually at home, and what used to be homework
(assigned problems) is now done in class with teachers offering
more personalized guidance and interaction with students, instead
of lecturing.” Wikipedia on Flipped Classroom

I made some video recording of some of my lectures. The students liked the videos. I really disliked making them videos – listening to sound of your own voice is one thing but hearing yourself saying unrelated or stupid things was hard at the beginning – but that’s how my brain works so I better get used to it. Perhaps it is my Gothenburgian heritage that seem to make me do unintentional crappy jokes on the fly. It takes time to prepare a lecture. This time is increased a lot when creating videos so Flipped classroom isn’t exactly making things easier for teachers – unless the goal of the teacher is to help the student acquire knowledge ;) . Another time I will write about my findings when recording them videos. All I can say right now is that I used (no surprise I guess) only free software (used GNU Xnee to retype the code for me).

So the students liked the videos. But did we get a good discussion going?

To be honest, no!

I will read more about flipped classroom and think about what can be done. But at least the students could look at a video over and over again and ask question about the subject at the lecture.

Does flipped classroom make the student acquire more knowledge?

Yes, I believe so.

One problem though. I’ve noticed that with Flipped classroom, compared to normal lectures, you can’t, for obvious reasons, adapt the lecture to your class. When lecturing the old fashioned way you can adapt and repeat based on the looks on the students’ faces etc. I miss this in Flipped classroom.

Flipped classroom is good. But for some students it is just one way of lowering the barrier to acquire knowledge themselves. If a student have lost confidence I don’t believe classical lectures or Flipped classroom will help them.

Conclusions (so far):

I believe Flipped classroom is better then normal lectures, given that the goal is for students to acquire knowledge.

Lectures and/or flipped classroom will not help students who have lost confidence in themselves.

There are other ways for a teacher to help the students acquire knowledge. I believe that the best ways to help the students are:

  • Encourage and help them appreciate themselves
  • Motivate

When to use these ways? More on this in the next blog post which will be on exercises and supervision.

[0] Assuming you’re on a GNU/Linux computer (or similar):

curl http://en.wikipedia.org/wiki/Education -o edu.html
html2text -o edu.txt edu.html
festival --tts -b edu.txt

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….