Tuesday, December 31, 2013

Books I read (2013)

- Matemàtica discreta. UOC. (2nd time)

- The New York Trilogy, Paul Auster

- The Great Gatsby, F. Scott Fitzgerald
- Event-Driven Programming: Introduction, Tutorial, History; Stephen Pherg
- JavaScript Enlightenment, Cody Lindley

- El camino a un mejor programador, Esteban Manchado, Joaquín Caraballo and Yeray Darias
- The Mists of Avalon, Marion Zimmer Bradley

- La Tumba (Grave Peril), Jim Butcher
- Implementation Patterns, Kent Beck
- User Stories Applied, Mike Cohn

- Implementation Patterns, Kent Beck (2nd time)

- Chapters 1-6 of Object-Oriented Analysis and Design With applications 2nd edition, Grady Booch

- Test-Driven Development By Example, Kent Beck (2nd time)
- Victus, Albert Sánchez Piñol
- El cuerpo humano (Il corpo umano), Paolo Giordano

- Part 1 of Test Driven, Practical TDD and Acceptance TDD for Java Developers, Lasse Koskela

- Liquidación final (Περαίωσι), Petros Márkaris

- Con el agua al cuello (Ληξιπρόθεσμα δάνεια), Petros Márkaris
- Specification By Example, Gojko Adzic

- Los desorientados (Les désorientés), Amin Maalouf
- The Clean Coder: A Code of Conduct for Professional Programmers, Robert C. Martin
- Effective Unit Testing, A Guide for Java Developers, Lasse Koskela

Thursday, December 26, 2013

MOOCs: Programming Languages in Coursera

Two weeks ago I finished this great Coursera course by Dan Grossman from the University of Washington:

In this course we learned many of the basic concepts behind programming languages, with a strong emphasis on the techniques and benefits of functional programming.
We used three programming languages, ML, Racket, and Ruby, in order to learn learn key issues in designing and using programming languages, such as modularity and the complementary benefits of static and dynamic typing.

Dan did a great work on the videos to explain very clearly some hard concepts such as pattern matching, thunks, promises, streams, currying or partial applications. The challenging set of weekly assignments helped me a lot to digest the materials.

This course was at the same time a challenge and a great experience. As one of the course mates said on the forum:
"This course opens your mind... It's exciting! (And annoying sometimes haha)".
I can't agree more. This course was tough and challenging. Some weeks I even thought I wouldn't be able to finish the assignment. You had only two submissions per assignment and only one timed opportunity per exam. It's been probably the toughest course I've taken so far in Coursera, but at the same time it's also been the most rewarding one.

I'm very proud and happy to have been able to complete it and I've learned a lot about functional programming and a bit about object oriented programming. I think it's made me a better programmer.

To finish, I'd like to thank Dan, his team and Coursera for making this great course possible.

Friday, December 13, 2013

MOOCs: Introduction to Systematic Program Design - Part 1 in Coursera

Last month I finished this great Coursera course by Professor Gregor Kiczales from the The University of British Columbia:
This course is a 10 week introduction that presents a design method that enables you to approach the design of complex programs systematically. I saw a previous version of the course and felt curiousity about it.
Their method shows how to model the information in a problem domain, how to structure program data to mirror that information and how to further structure the data to lead to a well organized program. It also teaches how to distinguish those parts of a program that are naturally data driven, from those that should use an alternative algorithmic approach. The method also uses a first test approach to unit-testing.

The course goes slowly and Professor Kiczales explains all concepts very well. Moreover, their design methodology with its design recipes and templates helps to make explicit many of the unconscious design decisions experienced programers often do. For that reason I think it's a great introduction to programming.
In my case, having some previous programming experience, I found that applying the method systematically for most of the small programs done during the course was a bit overkilling. However, in the end, it paid off when we started working with generative recursion to produce fractals and with bactracking searches. Following the recipes of their method proved to be really useful.

Another reason to do this course was the languages it uses: several teaching languages that are subsets of Racket (a Lispy language). This makes this course a gentle introduction to the basics of functional programming.
It gave me the chance to practice a lot with recursion, immutability and higher order functions, and it also helped me to get into the "Lisp cycles":
It was a great course. I think that Professor Kiczales and his team did a really great work and I'd like to thank them and Coursera for giving us this opportunity.

I'm looking forward to start the second part.