Sunday, February 27, 2011

Weekly roundup: stepping down at Allbus

As you may know, from March 1st I won't be the Software Architect for Allbus anymore, but I will remain in contact as an advisor. In fact, we're looking for a substitute for my position.
Working in Siena and via telecommuting with this team has been a pleasant experience and we will continue our collaboration through other means. The time freed by the new contract will let me pursue Alta Scuola Politecnica and maybe also write on this personal blog (I write 4 articles for DZone every week, which is quite time consuming). Do you feel articles on this blog would have an higher impact than the ones I publish on DZone? To me, there's really little difference in the end result, and that's why I have been a Zone Leader for months.

However, here are my original articles published this week.
Practical PHP Testing Patterns: Automated Teardown explains how to implement tear down of non-in-memory testing resources, like temporary files or databases.
How to remove getters and setters tells you 5-6 different ways to limit and eradicate usage of getters and setters in your classes. Getters and setters are a poor encapsulation mechanism.
Practical PHP Testing Patterns: In-Line Teardown explains how to tear down resources inside a test method and ensure it is really executed even in case of failure.
Why Ruby's monkey patching is better than land mines...wait, what? takes on the sarcastic Why PHP is better than Ruby and deconstructs monkey patching, comparable to messing with the foundations of your house.

Tuesday, February 22, 2011

We're looking for a developer

With March coming, my effort at Allbus will be greatly reduced. I worked here as a software architect, initially in Siena and now by telecommuting from Como. I plan to remain in contact as an advisor via the internal mailing list, by I won't have time to pair program with my colleagues due to my projects at university and Alta Scuola Politecnica.
So why am I telling you this? Because Allbus is looking for a replacement to lead the development team.

What I've done everyday (what you'll do everyday)
Mainly, pair programming with one of the resident developers, and design activity.
These are the questions that the Allbus software architect faces:
  • in what layer or object should we put this logic?
  • what classes do we create to add this feature?
  • how do we test that?
  • is this design ok, or there is an underlying smell that should be solved?
  • what's Agile practice X and is it viable for us?
Both programming and teaching are part of the daily work. And by the way, we are more interested in knowledge of software design than about scaling and performances.
I think one of the interesting things about this job is that it is more focused on working on scalable approach for the development process, instead of on putting hacks in just to make a new feature work. The question to answer is always How can we reliably handle this case in 20 different places inside the application, and sleep at night knowing that we could maintain it for 5 years? and not What is the the shortest and most convoluted code that will work for this particular functionality?

Michele (first from right), is our enlightened boss. He favors clean code over technical debt, and the whole fact that he knows what these two terms mean should already tell you something. He knows how to read code, but its role is more of the Domain Expert of the project.
Francesco (first from left), Gianluca (third) and Elisabetta (missing in the photograph) are PHP and JavaScript developers. What I have done up to this day is to pair program with one of them all the time, which we think is one of the best ways to teach design and coding skills.
And I'm that guy with the light blue t-shirt. :)

 Technologies and enviroment you will work with
  • PHP application, currently developed with Zend Framework and Doctrine 2.
  • PHPUnit (and recently Behat) for testing
  • Currently transitioning from plain old PHP to Domain-Driven Design approach. Everything is object-oriented.
The team is mainly Italian, but all the application's code and interface is in English.
Your expertise is needed on the server-side, as the company is already well-covered with JavaScript expertise.

  • The job is about telecommuting for pair programming and analysis/design sessions with the team (usually with one or two people at the time). No relocation is needed.
  • There is the opportunity to set up a flexible schedule during each week. The time required is from 12 to 20 weekly hours (the amount of time will be established at the start of the contract).
  • Medium/long term contract.
  • You'll have the responsibilities of a software designer and developer, and of a teacher for the rest of the team.
  • Communication will be in English or Italian, according to your language, but knowledge of Italian language is preferred.
In case you're interested, contact us to get to know more about this position, or for an interview.
Write to
Phone to +39 0577 208024 (9-13, 14-18 CET). +39 is the international prefix for Italy if you call from abroad.

Maybe we'll work together in the future. :)

Sunday, February 20, 2011

Weekly roundup: speaking at phpDay 2011

I have been accepted for speaking at phpDay 2011, the one and only Italian conference on PHP. I hope to do a good job in teaching the audience new things and entertaining them with my two talks (which have been accepted in the Italian version).
Inseguendo le pratiche di Domain-Driven Design in PHP, in which I share my studies and real world experience on how to conjugate DDD and PHP technologies. For example, how can you maintain a persistence-agnostic Domain Model? And how can you store it in a database when it contains classes that do not correspond 1:1 to tables, like Value Objects? The word inseguendo (pursuing) is there because I do not aim to be your DDD guru (that's @ziobrando), but I am the guy that given a DDD prescription gets a working PHP applicaton. By the way, this talk will also be presented at the Dutch PHP Conference 2011.
Pomodori tutto l'anno, on the Pomodoro Technique and my year-long experience with it as a freelancer, and for a period in a team. Time management isn't only a topic for braindead self-help books.

Here are my original articles published this week.
Practical PHP Testing Patterns: Unfinished Test Assertion describes how to mark an incomplete test. Hint: it's not by putting a Post-it on the monitor.
Practical PHP Testing Patterns: Garbage-Collected Teardown describes the first teardown technique of the series, which is also the simplest.
Do not fear the command line is a collection of some years of shell experience on Linux. Many tricks from my .bashrc are revealed.
Can you use PHP without frameworks nowadays? has been a very popular article (more than 10k views) about a fundamental question. Everyone asks What framework should we choose? but no one one asks instead Do we need a framework?

Sunday, February 13, 2011

Weekly roundup: ASP

No, not Active Server Pages, but Alta Scuola Politecnica, the joint program of Politecnico di Milano and Politecnico di Torino. I returned yesterday from the first event in Turin, where courses and projects were presented. We'll see what will come out from it.

Here are my original articles published this week.
Practical PHP Testing Patterns: Delta Assertion
Behavior-Driven Development in PHP with Behat
Practical PHP Testing Patterns: Guard Assertion
My love story with SSH

Sunday, February 06, 2011

Weekly roundup: speaking at DPC 2011

It's not official yet, but I will be speaking at the Dutch PHP Conference in May, with a 3-hour workshop and a regular talk. The schedule will be published next week. Looking forward to meet my telematic friends who will be in Amsterdam.

Anyway, here are my new articles published this week.
Practical PHP Testing Patterns: Behavior Verification officially introduces Mocks for the first time in this series.
Where has XHTML gone? tries to find out which usage this language sees today.
Practical PHP Testing Patterns: Custom Assertion explains how to create and manage custom Assertion Methods, which go a long way in making the assert phase of your tests readable and maintainable.
Is touch typing mandatory? A survey where you can express your opinion on how to approach a keyboard.