Showing posts with label scheme. Show all posts
Showing posts with label scheme. Show all posts

Saturday, June 18, 2011

SICP -- Starting with the P2PU study group

We have finally started with the SICP study group and I'm delighted to put some time into it. For once, I will focus all my effort and free time to work through and enjoy this fantastic book.

The goal of the group is to finish one section every second week, which gives us 6 weeks for the first chapter. Some people might think that 6 weeks is a lot but to be honest, at least for me, with a full time job, a part time PhD to work on, and all the normal social commitments, it's not that much time. So let's get cracking!

I decided to go back a re-watch the first bunch of MIT SICP lectures as it's been a while since I got around to see them first. I always have this funny and a bit weird feeling when I start watching one because for a moment I feel like I am watching an 80's sitcom or something similar. I'm probably just being silly but it always makes me smile!

The lecture series starts with Harold Abelson ranting a bit about the term Computer Science not being a very good one when it's not a real science, or even about computers. I do agree with him but if you want to know more about the subject you will have to watch it for yourself.

More interesting are his comments about the distinction between declarative or descriptive knowledge and imperative or procedural knowledge. Procedural knowledge or 'Know-How' can be directly applied to a task, whilst declarative knowledge tells us about truth. His example for this is the fact that the square root of a number can be expressed in the form of a mathematic equation(descriptive), compared to a way or algorithm to finding that square root through approximation (imperative).

He also explains that although you can learn most of the LISP language (its rules anyway!) in a short lecture, that does not make you a good user of the language. He compares it to learning the rules of chess and being a good chess player; you need the rules to play, but the rules do not make you any good at it. So you need to embed yourself in the context and the experience, and the techniques to do so are the topic of the course.

In Abelson's words, programming is all about managing complexity, and the techniques in this course will allow you to do so.

The lectures are divided into three main topics which do not correspond to the five sections of my book (my edition is from 1996), but that can be easily correlated, or so I think.

The parts discussed in the lectures are:
    - Black-box Abstraction: I guess this will be chapters 1 and 2, building abstractions with procedures/data.
   - Conventional Interfaces: I'd say this is chapter 3: Modularity, Objects, and State.
   - Metalinguistic Abstractions: This is chapter 4, of the same title.

The fifth chapter of the book about Register Machines does not seem to be in the lectures, but I couldn't tell right now cause I have yet to watch them all.

And that is all for now. I will spend another couple of hours later this evening working through the book and preparing the meeting for tomorrow Sunday at 7pm GMT, 3pm EST. Meetings happen on the #sicp channel on freenode IRC and everybody is welcome!!!

Monday, April 25, 2011

SICP Study group at P2PU

As mentioned in a previous post, I have decided to learn JavaScript in a serious and deep way, and after following Douglas Crockford's advice on reading the little schemer, it's time for Structure and Interpretation of Computer Programs, also known as SICP.

Due to low numbers in the Anglo-Celt SICP Study Group, we have decided to open the group to the world through the Peer to Peer University (P2PU).

The course is still in draft but so far I've had great feedback from some of the core P2PU community members and I'm hoping that it will go ahead. You can see the draft of the course here: SICP Study group.

[UPDATE]: The course has been moved to the new P2PU site and it is now hosted here and open for application.

As usual, this is a peer to peer, community based effort, and everybody is welcome, even those of you that have read the book already. Assuming the role of mentor can be a fantastic experience, especially in terms of communication and other soft skills that are so important in our field.

To join the course all you need is the motivation to read the book and participate actively in the group, writing blog posts about what you are learning and experiencing, and be willing to share your solutions through github.

As in the previous course, I expect to use Open Wonderland for some of the meetings, but the course can be followed in an asynchronous manner too. If you are interested head to the course and apply (once it's open), or give us a shout if you have any questions!

Monday, April 11, 2011

about JavaScript, Scheme and History

I've been doing a bit of JavaScript lately and I am shockingly enjoying it. I thought it was going to be a nightmare and a lot of copy+paste but after a good amount of reading and watching talks, I started to like the language. I've been collating bits an pieces of information in the ossdev-ireland wiki, mainly focusing it towards developers that only have to deal with the language in small doses.

Ossdev.org is a place to share experiences that overlap the different open source groups in Ireland. JavaScript and MongoDB are the two topics that seem to be gathering more interest so far, but it's been less that one week since the wiki was installed, so hopefully more topics will start being worked on soon.
The Irish Penguin is the one to blame for all this sharing craziness, and I hope more people get on board in the next couple of weeks.

As usual, following on links and references in talks and tutorials takes you to a thousand other talks and tutorials that you will never have the time to read and watch. I would recommend the fantastic series on Javascript by Douglas Crockford. I especially enjoyed Part I: the early years, cause although it does not contain any code, it is a great lecture in history of computing, and I totally agree that that is an area that we don't handle very well in the profession.

During that talk, Crockford recommends the little schemer as a book that will change the way you think about programming, so I had to get my hands on a copy of it. I have to say that it was a bit difficult to get started with it, because although it seems to be a book targeting children, there is no explanation whatsoever on how to start with the language itself. A bit more digging on the net and I finally downloaded DrScheme, and got it running. Although the site points to a newer version, namely Racket, DrScheme still exists as a package in Ubuntu systems, so that's what I'm using for now.
So this is my first scheme listing ever:

(define atom?
  (lambda (x)
    (and  (not (pair? x)) (not (null? x)))))
(define lat?
    (lambda (l)
      (cond
        ((null? l) #t)
        ((atom? (car l)) (lat? (cdr l)))
        (else #f))))

(lat? '(chunky bacon))
(lat? '(chunky (bacon)))

The first call to lat? returns true, and the second false. Let's see how long I can keep up with the parenthesis madness... the plan is to follow on to SICP, but I will have to finish this one first!