My face

I'm an enthusiastic software professional with a soft spot for agile development.

Here I gather my works and thoughts.

Where

I currently live and work in the beautiful city of Trieste, Italy.

What

I am a signatory of the Manifesto for Agile Software Development and of the Manifesto for Software Craftsmanship, which I hold, in some incarnations, among the simplest yet best ideas about software development for the 21st century. Their focus on people, relationships, and values takes what was considered a technical-only task - software development - to a different level, bridging the gap between what is just a software and what is a 'really useful' software.

I work mostly using Java and Python programming languages, yet I think that a developer should be language agnostic and pick the best tool to perform his job in a certain context; lately I'm quite happy when using Ruby, especially for small tasks that need to be automated, and I'm becoming increasingly interested in functional languages.

I'm quite experienced at developing web-oriented, distributed applications with a lot of networking inside, in medium-sized development teams (10-15 people).

Why

I strongly support the idea that quality matters - any way to do something is not the best way to do it.

Teamwork is an essential part of software development. Very few great pieces of software have been created and evolved by a single person, and a motivated, well-jelled team can achieve a development speed which is orders of magnitudes greater than the sum of its components. Let's forget the myth of the genius programmer

I think that problems should be solved where they arise, at their root, and that software is not a solution for business process issues. Creating a software to solve an issue caused by a poor business process may just create a crappy software, and estabilish a bad practice as the 'right way to do it'.

I believe automation is a key factor to highly efficient organizations: as soon as a task can be automated, its burden is gone. How long does that task take is not really important: a lot of time every day is wasted in small, trivial, and yet necessary, manually-performed tasks.

I think that an essential part of software development involves dealing with complexity: mapping a complex concept requires a proper analysis and decomposition in smaller pieces that can be understood and individually handled. A complicate problem doesn't justify a complicate solution.

I like to say that software development is partly a science, partly an art; both faces deserve their own merits and woes, and balance between them should be achieved when programming.

Continuous improvement is the way to achieve better and better results. No one knows everything from the beginning, but that's not a good excuse for not learning from the past. The fact that something has worked (or not worked) someway since long is not a good reason not to improve it.

Innovation can provide groundbreaking advantages to an organization; it often stems from research and needs a favourable environment in order to flourish. Failure is a necessary by-product which must be accepted and learned from.

  • java logo

    jquickrepo minimalistic disk-based persistence

    Whenever you need persistency but a full-fledged DBMS/KV Store/(put anything in there) is an overkill, chances are that a save-and-retrieve-from-disk solution must be created on the fly every time. This project offers such very basic yet reusable piece of functionality.
  • ruby logo

    extrarange ruby ranges on steroids

    Enhanced Ruby ranges that support operations on sparse ranges. They try to act as normal ruby ranges as much as possible, yet they greatly enhance the power of the language.
  • python logo

    pydenji Python(ic) Dependency Injection Toolkit

    Dependency Injection the python(ic) way. If you though that could be achieved by large and cumbersome xml-based frameworks only, take a peek at this!
  • python logo

    ducktypes Does it quack like a duck?

    Duck typing is fun. If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck. Ducktypes lets you tell whether it swims, quacks and looks like a duck.
  • python logo

    annopyte Annotations for Python

    PEP-3107 function annotations are a nice way to add metadata to Python; such metadata is available on Python 3.x and on functions only. This toolkit backports such functionality to Python 2.x and extends it to allow annotations on any object.
  • python logo

    hgskipcommit skip committing some files

    Extension for the mercurial distributed version control system that allows the user to skip the commit of tracked files, especially to prevent IDEs or externals tools from accidentally polluting a project's history via unintended changes.

Ollivander

It's my tech blog, where I discuss something on software, be it programming, analysis, methodologies, or just a rant. My latest post is

Go!

Mostly Unixish

where I write about sysadmin-friendly tips and tricks, I recommend some Linux/Mac tool, or I discuss about some strange gotcha I wouldn't like to need sorting out ever again. I recently sorted out

Go!

Here you can find some links to my presentation stuff, slides, and some videos.