Saturday, October 23, 2010

I have always dealt with concurrency having a sense of uncertainty and improvisation - "just make it work with some hack" kind of thing. I really don't like this feeling. I prefer to have some good overall understanding of the most common situations one has to face, and common practice solutions.

Friday, October 22, 2010

I am reading this book http://www.codersatwork.com/ , it's really a great book, one of the best IT books I have ever read... probably because it's not so much about Computers, but about Computer People...

It shows how all these great coders, excellent at what they have done, have really very different personalities, educational backgrounds and lifestyles.

So far a common denominator of all these great minds is:
- learn to write clean, readable, well documented code
- learn to read other people code

Coding seems to be more a matter of literacy and communication than a matter of purely technical skills.

Here a great video on the Netscape developers, including Jamie Zawinsky

XML disturbs me for his prolixity, the entities like < and > and &, and the close tags . I like it because it's fairly robust and unambiguous - barred Namespaces.

JSON disturbs me for his quotes. I like its simplicity.

YAML disturbs for the reliance on indentation and special notations. I like the rigorous representation of complex data structures.

But the huge question mark raising in my head is: why on Earth do we need a format that is directly readable/editable by humans?
So that one can use Notepad or vi to edit them?

Ok, then I will give you a YAMLNotepad and a YAMLvi and we move away from a (necessarily inefficient) human readable format and use a more rigorous binary representation, mutuated for instance from Java .ser format or Coherence POF format or TIBCO or whatever other high-speed serialization standard.
We will gain in performance, validation, readibility (you can customize the program to display in whatever format you want, attaching the stylesheets of your choice)...

Why on Earth the actual data on the wire must be in the same format that we display to the user? To me it's only because it's difficult to have a standard be supported across multiple products / platform, and an ASCII editor is the most universal too available. Too bad though.... so much is lost.

I myself believe that the main criterias to evaluate code are:
- is it readable and easily modifiable?
- are build, test and deployment fully automated with a CI tool?
- is it fully covered by multithreaded automated tests?

One more thing I have to say: I am appalled that 90% of the times automated tests are executed with a single client thread... I have seen too many times multithreading issues surface during the first phases of a live application.

Sunday, October 3, 2010

I have been thinking of making a "live, searchable CV" using some a data representation format (NOT XML that I hate) and some Groovy report thingie...

I am just tired of having to answer all those questions "how may years of WebLogic or EJB do you have?" ... just annotate each project with the technologies used an run a report like:

select sum(p.duration), p.technology_used from myprojects p group by technology_used;

My sister told me that in EU this is the Europass CV standard (funny that nobody seems to enforce it in the IT recruiting world, and each agency comes up with its own model, so that they are completely non-interchangeable and you have to keep duplicating your effort... thanks god we are the IT specialists! )

Saturday, October 2, 2010

Yesterday I have seen a demo of http://screenr.com/ , you create a video and email or tweet it, the video stays archived.

The person who has shown this to me is a Pakistani IT entrepreneur, http://www.rehan.com/ , he says he does all his communication on videos, instructions to his collaborators and especially training.

His employees are asked to use videos for everything, so when one leaves another can watch the videos he left behind and catch up.

No communication is private, everything is public and archived.

Not everybody like this, in fact this diminishes the power of the individual and make people more replaceable - which is sad from the individual perspective but good for the company.

In fact, I believe that at least 30% of IT projects problems stem from Information Retention from people who keep things as less documented as possible to increase their personal influence. But if you say so out loud you will not be very popular.

He also showed me Khan Academy, these people are great, BTW they need help so if you have spare time you can assist them:

I love the idea of creating YouTube tutorials for Java, WebLogic and WebServices.
I see that even Oracle has started putting videos on YouTube.

As a consultant, I am often faced with starting a new project and being assigned insufficient hardware.

And spending anything between 10 and 30% of your time watching an hourglass.

And having painful context switches when trying to do something else while waiting.

And accumulating neurosis.

My experience is that, most of the time, your complaints will not be heard. Or they will be taken care of 2 month later, when the damage will already be humongous.

I never understood why managers don't realize how vital it is that developers have top notch equipment. I assume that this is because all they do is IE, Word and Excel and they are never faced with running Eclipse, XMLSpy, Word, Firefox, OracleXE and a WebLogic Cluster on the same desktop.

Some of them come up with funny recommendations like "why do you code in Eclipse, you can use Notepad instead". Or "why can't you deploy your code to the integration box". Getting mad will lead you nowhere. Stay cool.
This is the way things work in IT. Nobody would ever recommend a surgeon to use a kitchen knife instead of a scalpel, but in IT everything can happen.

So, my only recommendation is: buy your own hardware and develop on it. You can buy a top box with the money you make in 2 days. Or your extra 4 GB RAM with half a day salary. You can still sell it at the end of the project.