October 31, 2013

The computer revolution hasn't happened yet

I'm a huge fan of conferences, I like documentaries and any kind of media that teaches something. And as a software developer I must say that there are lots of good resources for us to learn, to keep updated in technologies, concepts and general practices.

One of the best presentations I've seen so far is Alan Kay's keynote at OOPSLA 97, I don't know if there are any transcripts of it, but it is very valuable to listen what the man has to say, recommended.

September 11, 2013

The mythical man month - the tar pit


It's been a while since I wrote something, work, university and life in general have kept me busy enough to forget that from time to time it is required for me to spare some words in any kind of medium. Just for the fun of doing it.

Then I just started reading the book The Mythical Man Month by Frederick P. Brooks because I found in many places that it is a mandatory reading for software development in general and I started reading it to find out what it has on it.

Initially I was just a little bit skeptic about the fact that a book so old (in software-related terms) could have some content for me to be interested.

But after finishing the first chapter I realized that this is not just only a very interesting book, but an invaluable source of data, techniques, practices and tales about how software engineering has been done in the words of the great Frederick P. Brook.

So as I identify this book as something I want to remember, I'm going to write down my thoughts in a chapter-by-chapter basis, pointing the things I have experienced related to them.

The Tar Pit

In this chapter its author identifies that in many senses large systems development can be compared to a huge tar pit where incredibly strong creatures have found their death. 

It defines in a very interesting way programming systems product as:
  • A program, a software product that can be developed by small teams, a simple application (i.e. cat).
  • A programming product, a software product that can be extended or used for the programming of other systems, a library component (i.e. SQLite).
  • A programming system, collection of interacting programming products, I identify it as a basic operating system (i.e. Minix).
  • A programming system product, a collection of interacting programming products that could used and extended by anybody, I identify it as a complete operating system (i.e. Linux)
Based on such classification it describes how systems programming is a craft that has joys and woes inherent of software development, that is impossible to develop something without having limited resources, budget, time and collaboration. But when ones get things done you can express with great honor that you survived the pit. 

August 11, 2013

Weekly log - August - week 1

This week has been very entertaining due to the huge amount of issues I had to dealt with, here a short summary:
  • I learned about the evilness about Global State, had to fix several issues related to it.
  • I got very interested (yet again) in the Dependency Inversion Principle and finally understood it.
  • Started working on a very interesting project regarding a bunch of new technologies and concepts that are really exciting, some of them are REST, Maven, Spring, Scala and AOP.
  • Watched this great lecture on Biology provided by UCBerkeley.
  • Got more and more interested in Ruby with Sinatra.
  • I learn about the difference between Leadership and Authoritarianism.
  • Scala seems to be the way to go beyond Java, I really like its nature and it's been defined.
  • Learned about real Object-Oriented development with DCI in Practice.

June 18, 2013

Is not about the tool

Over and over I keep listening and reading in software development forums about certain types of questions:
  • What is the best tool to do ?
  • What is the perfect IDE for ?
  • What can I use for modelling in ?
I know this because I started with those questions as well when I started a few years ago, but when dealing with different things during my short experience I have learned that the answers were never going to be enough, because the questions never were the correct ones in first place.

Let me explain that, the questions I (and some other developer folks) was asking during those initial years in my experience could be translated to other contexts in this way:
  • What is the best hummer to build a chair?
  • What is the best brand for office furniture?
  • What pencil can I use to draw amazing designs?
If you can read them well, you can understand how lame they are. I should have focused first in the concepts that enable those tools to be useful. The tools are just the medium to build something, the major part of the problem is to identify and understand what to build first.

Of course is very useful (and mandatory) to know about the tools, but the effort should be directed to understand how thinks do and should work. That's the reason why the Business Analyst title is so hot at the moment, we as developers have sent the system's business to the background of things, that's my advice, focus on the concepts, business and things that have value, the tools will come eventually.    

April 25, 2013

Why to learn Ruby

First of all, the mandatory disclaimer: I'm a Java developer and I have been one since 2006, I have some experience with it and I can tell that most of the things I tried have worked fine.

Now, why if I have a stable knowledge on an existing programming language, and its frameworks, and its related tools, and its book and literature, want to learn a new language such as Ruby?

- Well, the answer is simple, because sometimes you have to choose the right tool for your current context. 

Here are the some reasons that make Java kind of hard to work when developing something:
- It's compiled, so if I want to do something quick such as a prototype... it takes some effort.
- It's verbose, yes it is, especially if you compare it with languages such as Scala or Ruby.
- You need an IDE for it, perhaps this is not that bad after all, but sometimes you don't need to do something big or have a full-featured software behind your little project.
- Functional programming support is missing, I think new Java proposals have been taking this issue, but it's still missing in the mainstream.

Now a short list of some Ruby features I really enjoy:
- Interpreted/Dynamic, you can type and run without problems.
- Wonderful syntax, even though I don't like the 'end' keyword, it is really nice to read code written with this syntax.

- Functional programming support, I'm not sure how far it goes into this support, but blocks, mixins and some other features are quite interesting.
- Dependency management, you have Gems and packages in a Maven or Ivy style.
- Build tool, rake is quite good.
- Literature, there are lots of data about it in the net, it has a huge community and many experts around the world.

That's the short list regarding my current choice on Ruby Learning, and I don't regret it. I have some projects to do in dozens of hours, they could not be possibly made without Ruby and wonderful frameworks such as Sinatra, Rails or DataMapper.

You should learn a new language once on a while, because as the market is moving skills are required everywhere, and seeing what other people is doing will help you understand how good or bad you are
at doing things. Personally I have found many mistakes in my code and my concepts by checking what other people have done, and by finding them I have improved a little bit, week by week and month by month. That's the thing, keep yourself moving forward, always, and hopefully always improving :-)

March 29, 2013

ATIX Libre - segundo artículo publicado

Tarde pero seguro, he reducido la frecuencia de publicaciones debido a mi pésima administración de tiempo, pero que hacer, solo yo puedo cambiar eso :-)

 Sin mas preámbulos, he aquí la segunda parte de los artículos que he venido escribiendo sobre este interesante framework para desarrollo web en entornos Java, Play! Web Framework.

January 17, 2013

Primer artículo publicado

Se dice que la escritura fue la idea base para el desarrollo de sociedades y la dispersión de conocimiento, tal conocimiento por cientos de años solía pasar como historias o enseñanzas verbales de persona en persona, ahora ya todo ha cambiado.

Tenemos en el bolsillo con un smartphone, Kindle o iPad la capacidad de alojar cantidades inimaginables de datos e historias, sin precedentes en la historia de la humanidad. Ahora nuestro problema no es encontrar la mayor cantidad de conocimiento, sino descartar aquél que no tenga utilidad.

Con esta introducción tengo el grato agrado de haber visto un artículo mío publicado por una revista :-)

Sin mas reparos, les presento a Atix Libre No. 20: