Learning one new language every year

Here’s an update of the current status of my “one language per year” lifelong initiative:

  1. 1992: QBasic
  2. 1993: Turbo Pascal
  3. 1994: C
  4. 1995: Delphi
  5. 1996: Java
  6. 1997: JavaScript
  7. 1998: VBScript
  8. 1999: Transact-SQL
  9. 2000: C# + Prolog
  10. 2001: C++
  11. 2002: PHP
  12. 2003: Objective-C
  13. 2004: Visual Basic.NET
  14. 2005: Ruby
  15. 2006: LINQ
  16. 2007: Erlang
  17. 2008: Python
  18. 2009: Go
  19. 2010: Lisp
  20. 2011: Haskell

The trend has roughly been an evolution from procedural during the 90′s, to object-oriented ones at the beginning of the 2000′s, and finally to functional languages right now.

And thus I realize, I’ve been programming for 20 years this year, 15 of which for a living.

Best Books of 2010

It is that time of the year again, just like in previous years. This is the list of the books I enjoyed most in 2010! You know that I like reading at least 6 books per year, and learning a new programming language every year. Last year’s programming language was LISP, and the books, well, here they go.

eBooks

By all means, it is clear that 2010 was the year of the eBook. Maybe it’s because of the iPad, but I’ve been consuming more and more eBooks, even if I still enjoy buying some classics in paper form. Kindle, iPad, iBooks, Nook, GoodReader, PDF, ePub, all of those names have shaped my way of reading last year.

But one of the most visible changes of switching to eBooks was the speed of reading; consuming eBooks is fast, much faster than reading normal books. I can’t say that I prefer one or the other; it’s simply different. But reading eBooks is faster than reading paper books. Probably there’s a warmth factor in paper books, which makes me enjoy them longer, I don’t know, but the fact is, in 2010 my book reading consumption has gone up in an alarming rate. Continue reading

Best Books of 2009

047014873X.jpg Every year I’m doing the same post (well, in 2006 I completely forgot to do it) that starts more or less with the same phrase: “every year I like to read at least 6 new tech books, and to learn a new programming language.”

Last year’s language was Go, and the books, well, here we go:

Software Engineering: Barry W. Boehm’s Lifetime Contributions to Software Development, Management, and Research

Barry Boehm is a name that might not strike a chord immediately, but if you work in the software field, it should. He has been working non-stop for the past 50 years (that’s right, 50), discussing all kind of subjects related to the practice of software engineering. This book is a compilation of his most well-known papers, with subjects ranging from project management to components, from iterative techniques to developer productivity. The guy has written about all of it, and when you realize how right he was, you wish you had read those papers earlier in your career. Continue reading

HTTP Headers, Web Apps and Mobile Safari

I found today that Mobile Safari, the browser bundled with the iPhone, has a very strange and annoying behaviour when it comes to web apps. In fact, when you “install” web applications with the <meta name="apple-mobile-web-app-capable" content="yes" /> tag in the “Home Screen”, the USER_AGENT header sent to the server is different to the one sent when you access the same app manually using Safari..

Here’s a test that proves this assertion: Continue reading

iPhone Apps without Objective-C

Yes, it’s possible. Even if Objective-C is one of my preferred programming languages, in any case I think it’s worth mentioning that, 2 years after the official iPhone SDK has been announced, the iPhone development landscape has really grown up, and many, many different options are available today. This article provides a very high-level enumeration of some options I’ve found on the web, but I’m sure there are even more alternatives around.

0321566157

Here it goes: Continue reading

On the Importance of Yerba Mate in the Software Development Process

mateThis paper will highlight the results of an extensive research conducted since the mid 90′s, on the effects of the consumption of beverages based in the plant known as Ilex paraguariensis, in the framework of software development process activities in South America and some small parts of Europe.

This paper will provide an introduction to the herb commonly referred to as “Yerba Mate”, and will later delve into the advantages and disadvantages of such practice, in the context of the creation of software products.

Introduction

Yerba Mate is defined by Wikipedia as follows:

Yerba mate or yerba-mate (Br.) (Spanish: yerba mate, Portuguese: erva-mate), Ilex paraguariensis, is a species of holly (family Aquifoliaceae) native to subtropical South America in northeastern Argentina, eastern Paraguay and southern Brazil. It was first scientifically classified by Swiss botanist Moses Bertoni, who settled in Paraguay in 1895.

Continue reading

The Dirty Little Secret of iPhone Development

This is happening right now, at a web agency near you.

The dot-com boom of the 90′s spawned a brand new generation of coders and software developers, including me, by the way. While before that time the term of “software developer” might have been reserved to system programmers fluent in C, COBOL, C++ or other languages, right now the vast majority of developers I know spend their time writing web applications, either public or in a private intranet, in J2EE, ASP.NET, Rails, PHP, you name it.

I have said before that writing web applications should be taken as seriously as writing desktop systems. Call me names if you want, but I’m a big fan of Joel’s Test.

However, after all this years, after the Chaos reports, after Peopleware, after the Mythical Man Month, people still treat quality as an afterthought. And also complain about how much software sucks, how expensive it is, and how late it arrives, by the way. Now that the iPhone SDK is widely available, that the App Store is selling more apps that we could have had imagined 6 months ago, many web agencies want to jump to native iPhone development contracts, which are hype and nice and pricey and whatnot. Which is only going to make things worse.

The dirty little secret in this story is this: iPhone development looks more like developing applications for a desktop operating system, and less, much less than web development. And I’m frightened to see some small shops (and even bigger ones), who never attained a real level of professionalism or quality in their software tasks, starting projects and realizing, later, when they are over budget and behind schedule, that this kind of applications requires a different mindset.

Continue reading

A Watch – from an OOP perspective

A watch might be one of the most common types of objects, but it remains also one of the earliest pieces of human craftmanship to show an extreme level of complexity, all contained in a small amount of space. Since the late 1700s, artisan watchmakers in Switzerland and elsewhere have shown their pride and skills creating watches called “Grande Complications”, containing thousands of individual parts and performing incredible functions:

The most complicated watch ever made, known in watch enthusiasts’ circles as “The Ultimate Watch,” is Patek Philippe’s “Calibre 89. The incredibly precise operation of 1728 parts in this really ultimate masterpiece of watchmaking allows to perform no less than 33 (thirty-three!) complicated functions, among them a correction for the 400-year-rule, an Easter date indication, a star chart, a tourbillon, a perpetual calendar, a sidereal time indication, and, and, and … This watch was sold in 1989 for the nice round sum of about four million Swiss francs.”

(Ozdoba, 2005)

(Source: CNN.com, 2005)

More information about the “Calibre 89″ can be found here and in the Patek Philippe Museum website.

However, the same watchmakers that made these fine pieces were also aware of the basic information that their creations were to provide: time. As such, their watches remained extremely easy to use, and they set up the basic standard for analog watches, in such timeless designs that the latest Swatch models show the same basic layout and functionality.

The underlying concept is the very same used in today’s object-oriented abstraction and encapsulation. Even Apple uses the idea of the watch to show this characteristic:

All programming languages provide devices that help express abstractions. In essence, these devices are ways of grouping implementation details, hiding them, and giving them, at least to some extent, a common interface—much as a mechanical object separates its interface from its implementation, as illustrated in Figure 2-1.

(Source: Apple Developer Connection, 2006)

In this article I will provide my view about how different OOP concepts apply to a real-life object such as a watch, in all its forms. Continue reading

Amazing Xcode

Xcode is amazing. Of all the IDEs I’ve used (and this is, as always, a personal opinion, having used Visual Studio since version 6, Eclipse, Kdevelop and others) it’s the one I prefer. And today I found another reason to like it.

I’ve noticed this: when I use Xcode on a single-processor machine (such as a Powerbook G4) and I rebuild my master thesis project (in C++) I see this build window:

No big deal: each file is compiled, one after the other. However, it seems that when I run it on a dual-processor machine (both in my dual G5 desktop and my Intel Core Duo 2 MacBook) I get a boost in compiling time, with parallel compilations! See this:

Then, coupled with Bonjour networks, you can even go faster, using the processing time of your peers’ computers to have smaller compilation times.