Showing posts with label apprenticeship. Show all posts
Showing posts with label apprenticeship. Show all posts

Saturday, December 31, 2011

bye 2011

it's the end of the year, an absolutely fantastic one, which in my case it's been focused on learning, especially with others.

I started the year attending more local meetups than ever, and it has proved a fantastic source of experience and learnings. I have enjoyed very much the local Irish and Dublin groups, and all the other stuff we have organised such as hacking evenings and code retreats.

Probably the most intense experience of the year were the code retreats. Participating, organising, or facilitating, it's an experience that I wouldn't let pass you given a chance if you have not experienced it yet.
I also have to mention the great time I had attending the TDD courses in Madrid for XPWeek. Carlos is a fantastic coach and the courses were really enjoyable.

It has also been a great year 'online' with all the projects we've done with Open Wonderland, and I'm hoping to have more time for it in the new year.

The most important event of the year, personally, was leaving work a couple of weeks ago. After four fantastic years working for TCD I have decided to take a break, focus on my PhD for a couple of months, and see what life has in store for me after that.

Hope you all have a fantastic 2012!

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!!!

Friday, June 17, 2011

learn, laugh and move on!

There's been a lot going on lately and as a professional procrastinator I couldn't let go the chance of putting off writing a new blog post, but with things going back to normal (hopefully!) it's about time for a bit of reflection.

It's been a very social few weeks, ending May with a double bill: The software craftsmanship conference in Bletchley Park, and a coding day with the chaps of codingday.org here in Dublin.

What can I say about scuk11? it was a great day with fantastic sessions and I got to meet a great bunch of Spaniards in red t-shirts. Happy faces all over... yeah, the bar was already open!

The Dublin event was also fantastic and although it was first thought as a coderetreat, the addition of scientists and their real problems changed the nature of the session itself and made of it a fantastic coding day. The group I was working with got a spinning cube in the browser, with three different lights and three particles lighting up the cube with different colours. Great fun using the Three.js library!

The month of June started with @silverspoon organising hack nights in a café near the city centre, that I sadly missed because I was in Barcelona for a conference. Spain was great, as usual, although it was raining most of the time, but that didn't really have an impact on things such as meeting old friends, the great conversations we had, and of course, the fantastic food!

On Tuesday the 14th we had the first meet up for the SICP study group at P2PU. You can see what happened in the new wiki. This is an open group which basically means that you can join in anytime that suits you. We will meet twice a week for the next couple of months, Tuesdays and Sundays at 7pm GMT, 3pm EST. We are hoping to finish a section every two weeks, including exercises. As chapter one of the book has 3 sections, we are hoping for a 6 week period to be done with it. Wish us luck!!! or even better, join in!!!

Last night the first Ruby Project Night happened in armworks. The space is absolutely great and I want to thank Alan for hosting it. We didn't really know what to expect at first, and after a bit of chat and trying to get the projector going, we started hacking away in a rails 3 gem, something that none of us had done before. We didn't get too far but at least we got it packing and installing fine. As soon as the @theirishpenguin pushes it publicly I will share the link here. It was great to meet a bunch of enthusiastic people and looking forward to meeting them again!

This morning I read this 'Help Wanted' message from @oisin in the ruby Ireland list. If you are looking for contract Ruby work you should definitely get in touch with him. His last talk at ruby Ireland was really interesting.
In the thread he mentions that they like egoless programming which brought me back to the this old post of mine. Weingberg's book is a very recommended read even if as myself, you were not even born when it was written!

An finally, more to look forward to as the first 'technical' meet up of the Javascript Dublin group will be next Tuesday 21st at 7pm. A presentation about jQuery for web apps and a kata with Jasmine are in the menu. Are you really going to miss that???

Thursday, May 19, 2011

Mutant-Java and the KataLonja

Another month and another Kata with the 12meses12katas crowd. This time the kata is in Spanish, and it was created by the agilismo.es guys for the professional track of XGN2011. If anyone needs/wants a translation, do get in touch and I'll produce one. You can find the original version in github: KataLonja.

The Kata is about a Galician chap who wants to make some money by selling Scalops, Octopus, and Spider Crabs in a hired van. We are given a series of prices that markets in different cities will pay for the goods, alongside with distances, transport costs, and depreciation rates for the food, and we need to provide the most interesting route to get a best sale for our intrepid entrepreneur.

As a Galician immigrant myself, this is the simplest kata ever: I would drive the van right into my garage and the goods straight into my fridge; as easy as that!

Sadly this is not going to happen so let's get back to the kata. I'm certainly nowhere near finishing it, I only gave it a first go last night before bed but some cool stuff is already coming up out of it.
As I mentioned in a previous post, I use Katas to refresh some concepts that I haven't seen in a while, or that although I might use them in my day job, I've never gone deeper at them than the old getting the job done.
Last month I choose JavaScript for the bowling kata, and because I started way too late (the last day of the month!), that was the only implementation that I practised on the day. I will try and get this one practised in both Java and JavaScript, starting with the former.

Java has no associative arrays and it's generally accepted that you will use Maps instead. Maps can be very straight forward if you are using an immutable object as the key for your pair, but can get tricky if you decide to use your own class. So that's exactly what I did. It might not be the best fit for the problem at hand, or yield the leaner and cleaner code possible, but no one will have to maintain this code and it's going to be thrown away anyway so better have a bit of fun with it!

So I have created an immutable class for Seafood that I will be using as a key for at least two maps I'm using in other classes. That means overriding equals() and hashcode(), and being careful with state and escaping references to this. But as I said above, the code is nowhere near written, so what's the point of the post you will be asking yourself? I just wanted to share 3 links that have been helpful in digging a bit deeper in the adventure so far. They are:


In them you will find good advice on stuff such as when to create immutable classes and how, uses of immutability including the flyweight pattern, overriding equals() and hashcode(), and a great discussion on how to keep the equals() contract on extended classes, adapted from the book Programming in Scala into Java.

I will be digging a bit more, hopefully in the next couple of days, in topics such as choosing the right map implementation and a couple more things that I want to try (I'd like to write my cucumber step definitions in Ruby instead of Java but I'm not sure I can do that, so will have to find out!).
I also intend to write another post if I ever get to practise the Kata in JavaScript. Comparing both implementations would be cool so let's hope for that!

Sunday, November 7, 2010

breakable toys

A couple of weeks ago I watched this talk in which Corey Haines tells us all about the software craftsmanship movement.

Although I haven't heard about the movement before (where have I been for the last couple of years???!!!) some of the things he talked about there felt very familiar.
A bit more digging out took me to the Apprenticeship Patterns book. And there again, a lot of familiar concepts, and even real physical situations clicked with me straight away.

One of the patterns that I enjoyed a lot is breakable toys. I have been doing this kind of small projects for years now, although I never called them toys but prototypes or spikes. Also the level at which I was getting involved with these projects was different from the one in the pattern. In my case they used to be pretty much a couple of hours work to get some framework installed and getting a hello-world kind of project out of it. The pattern goes much deeper than that. One of the examples they use is to create a wiki, and although it might seem a bit over-engineered at the beginning, they assure that it cat teach you about "HTTP, REST, parsing, web design, caching, full-text search, databases, and concurrency". That sounds a lot cooler than my 2 hours testing framework approach to toys.

I have also enjoyed the interconnection among patterns, and how some of them can lead to others. It is a great read and although the book is available online, I had to buy a copy. And of course, recommend it here; you should certainly go and buy it now!