The Danger of the Comfort Zone

You’re a happy programmer. You like your company enough to be motivated at what you do. You have some years of experience that allow you to be respected and maybe considered as one of the pillar of your team. Probably, you feel quite satisfied with the level of expertise you’ve reached and you think that you’re quite good at what you do.

You’re certainly right. But be careful, if the previous paragraph rings a bell, you might be living in your comfort zone for some times, and you may not be even aware of it.

This is a train of thoughts I had recently (I don’t know exactly why).

The comfort zone is a state of mind where you don’t feel the need of challenging yourself. You follow the flow of events of your days, managing to handle things as they go. But you never really put yourself in a risky position.

Alasdair White, in From Comfort Zone to Performance Management provides this definition:

The comfort zone is a behavioural state within which a person operates in an anxiety-neutral condition, using a limited set of behaviours to deliver a steady level of performance, usually without a sense of risk.

I suppose this is a very natural thing and I believe we all tend to fall in our comfort zone as time goes.

When we’re young juniors looking for building our career, we are very likely to put ourselves in challenges, we know we need to learn, to gain experience.

But when you have 10 years of experience, 15 or 20? You’re not likely to feel that need of challenge anymore, at least not with the same strength. You surely want to leverage your skills, use your assets and be that expert your CV sells. That’s perfectly normal, but dangerous.

If you don’t step out from your comfort zone, soon enough you’ll stop challenging yourself. You’ll be in a sort of autopilot mode where things get done without too much pain.
Eventually, you’ll stop learning new things and one day you will wake up and realize that you’re bored. But because of the comfort zone you’ve created unconsciously, you won’t leave. There is too much to lose.

That’s the danger: getting trapped by your own ability at creating an almost self-working environment.

The risk you pay when you step out is the price to gain even more experience, become stronger at what you do and maybe access to another level of achievement, as White explains:

Stepping out of the comfort zone raises the anxiety level engendering a stress response, the result of which is an enhanced level of concentration and focus.

Isn’t that the main purpose of life? Getting better, learning, dealing with dangers and challenges? Why do we tend to get mesmerized by our daily tasks when they get too straight forward?


Update : May, 29th

I’m pasting here a comment by Darin McBride I got on Google+ and I will reply to it, because it shows I should have clarified more precisely my point:

Yes, that first paragraph described my previous position to a tee. And it described my current one as well. However…

Isn’t that the main purpose of life? Getting better, learning, dealing with dangers and challenges?

No. Well, not necessarily. The main purpose of life is the purpose you have for it. My main purpose is to spend time with my wife and kids, to enjoy raising those kids, to ensure we are stable financially, … to help these kids grow up to be the best they can be (which could include raising their kids likewise … or not).

Leaving work in the “comfort zone” means more time for other things. If work goes into auto-pilot, then theoretically there should be less overtime required, more time with family.

It’s all about priorities.

(And if you’re looking for more of a challenge and that fits with your priorities, by all means, take it.)

Of course, I’m not saying that we should enter in a desperate quest for heavy changes, no matter what, neglecting our private life in favor of our jobs. I’m not saying that. My point is that keeping ourselves in self-working position, for too long, will eventually lead to a bored state of mind. Even though the job-life will be free of stress, that lack of challenges will have an impact on other parts of our lives. Chris Guillebeau says that perfectly in The Art of Non-Conformity, and that will be the conclusion of this post:

Many people believe that the key to an improved lifestyle is less work. I think it’s better work. I believe that most of us want to work hard, but we want to do the kind of work that energizes us and makes a positive impact on others. That kind of work is worth working for, and the other kind of work is worth letting go of, finished or not. Instead of being easy, the most memorable times in our lives are oftebn the most challenging. Overcoming the challenge is worth it in the end, but the challenge itself is also worth pushing.

Interview for the Pragmatic Perl website

Vti runs the PrgamaticPerl.com website, which is a Russian monthly review about the Perl programming language. He asked me if I was willing to answer an interview, mostly about Dancer but also about myself. As the interview is published in Russian, I’ll post here the full content in english.

How and when did you learn to program?

I started learning how to program when I was in high school, it was on my calculator, a Casio I think, there was a little BASIC  language embedded in the system and I started playing with it. I think my first program was a little text-based lottery game. That’s pretty much where I learned if-then-else structures and while loops.

What editor do you use?

Vim! I can’t use anything else to write code. Every time I try another editor, I go back to Vim in less than 10 minutes, I suppose my brain is cabled with Vim.

When and how have you been introduced to Perl?

It was during my very first job (almost 13 years ago). I was asked to build a small statistics tool that should fetch a bunch of MySQL data and produce nice reports in PDF via LaTeX. They introduced me to the Perl language, giving me the O’Reilly “Introduction to Perl” book and of course, the “Camel Book”. And that was it. After a couple of days playing with it, I was in love with the language. So easy to learn, so intuitive, I never stopped using Perl ever since.

What are other programming languages you enjoy working with?

I’ve been working with Ruby for a while, when I was working for Yoolink (a company that I co-founded and where I was the CTO). The webapp we built is based on Ruby on Rails. That was very hype at that time (2008) and we wanted to experiment that new shiny tool. I’ve enjoyed a lot working with Rails at that time but never lost the pleasure of working with Perl.

I guess I’ve never found the freedom I have with Perl. It’s like I know that I can code virtually anything with Perl, even extending its syntax with … a DSL. You see me coming, right?

What do you think is the most strongest Perl advantage?

Oh, I’m sorry, I’ve already answered that in the previous one! So yes, to me, the killer feature of Perl is the freedom it gives. You can really extend it as much as you like. It’s also its drawback, because this freedom comes at the price of a very … “tolerant” syntax and lots of programmers prefer strictness (like Python offers for instance). That’s understandable, I think both philosophies make their point, and it’s good we have both styles out there. The Perl way really fits my needs.

Also, of course, I could not stop here if we speak about Perl’s strongest advantages… CPAN, obviously. Even the worst language on Earth would be awesome if it had CPAN. This is why you come to Perl in the first place, I think. Because you know any problem you can face can be solved with a good use of appropriate CPAN modules.

And if we speak about CPAN, we speak about the Perl community. Many brilliant people are contributing to the language everyday, very smart ideas rise (Moose being one of the most impressive and Perl-world-changing one), and the tools we have to maintain, process and test our distributions are very powerful. The test smokers, the MetaCPAN, cpanminus, all that goodness contributes to the pleasure of working with Perl.

What do you think is the most important feature of the languages of the future?

Wow, that’s a tricky question! Let me see… If I could snap my fingers and magically have the ultimate language of the future, what would it be? Hmm, I think it would have a syntax very close to a natural language. A syntax that would let the programmer “describe” (rather than program) the data he needs to work on and the behavior of that data (if we can say).

Maybe we could write the specification of our program in plain English (with of course a lot of conventions to respect) and then submit that description to that magical tool. It would then compile the document into a program and a test. We would be able to review the test and move from there. Something like that, I suppose.

I have the feeling that whenever we speak about the future of computer science we speak about a world where the machine gets better and better at understanding us, the human beings. So the languages of the future would definitely be something like that.

What drives you in being so active in Perl community and open source in general?

Well, firstly, I must be honest: I’m not as active in the Perl or open source community as I used to be. At my most “active” time, I was developing and maintaining Backup Manager, contributing to Debian (I’ve been a Debian developer for three years) and – of course – contributing to CPAN. Sadly enough my personal and professional life don’t allow me to contribute as much anymore. So I’ve focused all the “free software” time that I have on Dancer.

What drives me into that? Very good question. I suppose the pleasure of writing code for the only purpose of … writing code. Free Software is the only place where you can find that: whenever money comes into play, the beauty of the code itself is altered, because of external priorities. Here, time does not matter. The only thing that matters is what you produce. From an intellectual point of view that is very satisfying, and very encouraging.

It’s also one of the best way that I know to enhance your skills at programming: writing code in a free software environment will eventually attract a lot of experienced eyes on your lines of code. Eyes that are only motivated by the appropriate way of solving a problem, nothing else. That’s why when I do job interviews I give a lot of credit to applicants who are open source contributors, for that very reason. It teaches you humility, a lot.

Writing, releasing and maintaining free software also makes you enhance a lot of skills that are different from purely programming. You need to market your product, to provide support to your users, to document the code and the product, to handle bugs… it really takes you to another level as a programmer, that’s for sure and it is very valuable. It enlarges your vision as a software developer, you really see the big picture then.

Also, eventually it can make you answer a friendly interview, and that may be the real reason why you want to be involved in free software! Narcissism!

Dancer is no doubt one of the most popular Perl web frameworks. When and why  did you start the Dancer project? Why do you think the project became so  popular and attracted so many contributors?

It’s a very hard question to answer. I can explain what I think contributed to that popularity but there is a lot of unknown there.

First of all, Dancer filled a gap. Back in summer 2009, there was nothing similar to Sinatra on CPAN: a complete micro-framework that provides a feature-rich DSL for writing a webapp. That’s a first point, Dancer introduced a new way of solving the “web development” problem with Perl.

Then there is its spirit: be as intuitive as possible. This is why you don’t have $self in the route handlers, that’s a deliberate choice. Everything that can be removed from the syntax should be. Less noise as possible. This is what brings at the end of the day that great feeling that developing a webapp with Dancer is easy, lightweight and fun. Most of the users say they love Dancer because it doesn’t force them to do things as the framework wants, it doesn’t get in their way. That’s because of that very thin and intuitive layer that is the DSL.

And finally, the fact that I’ve always tried to promote community efforts contributed to attract more and more contributors, I think.

Very soon I granted commit bits to other developers, this rapidly led to the “core team idea and helped a lot the maintenance and created a lot of energy around the project.

Look at the changelog of Dancer, and count the names… That’s probably one of the most satisfying feeling: seeing so many people joining the effort you’ve started. It must be that something was not too bad in the idea of Dancer in the first place!

Why do you think releasing and maintaining Dancer and Dancer2 at the same time is a good idea?

Because it’s actually two different ways of implementing the Dancer concept, and the design changes are so drastic it’s not possible to provide a complete backward compatibility with all the existing Dancer1 ecosystem. I’ve explained in details that decision on my blog. The conclusion of that blog-entry summarizes the decision:

There is out there a lot of real-life D1 applications. Most of them use engines that won’t work transparently under D2. Also the app-scoping can break things with some applications, if the app is decoupled in many packages.

For that reason, I’m going to release Dancer 2 in its own namespace, and that will bring a lot of energy in both projects:

  • Dancer 1 is at the same time unfrozen, development can continue there (as long as the features added are not something that would lead to a new Dancer 2!)
  • Dancer 2 is released on CPAN and its ecosystem can rise
  • Dancer 1 users are happy
  • Dancer 2 users are happy
  • Migrating an app becomes something under control.

There have been several widespread attempts to bad-mouth the project. What  helped you to face that? Why do you think this happens in open source world  and how to deal with it?

Haha, those times are over now. But indeed the early days/months of Dancer were surrounded by passions and warfare! At the beginning, there was this misunderstanding about the origin of Dancer vs Mojolicious::Lite, as both projects were released almost at the same time, it created confusion. This confusion led to create “sides” and exposed Dancer as a competitor for Mojo (or the other way around), which was in fact completely wrong: Mojolicious is a great project with a tons of brilliant features. It’s a complete suite for web development with a different philosophy (which is good). Dancer addresses another field, it has another vision: it’s to web development what Perl is to programming: a minimal and extensible set of keywords to describe a solution to a problem. At the beginning, none of us (in both sides) realized that we were playing in different fields (myself included, I admit it). So we all were a bit childish and contributed to feed that trolls army!

In the end, there was even an individual who spent time polluting anonymously our CPAN ratings or who was flooding our Hacker News announcements, even posing as members of the Sinatra community to say how much they hated Dancer! The only result was this official statement on Sinatra’s blog: Sinatra Loves Dancer !

So in the end, you realize that the more harm you try to do online to a project, the more you give it strength, because it always comes back to the project as positive energy at the end of the day. Even badly intended, a spotlight is still light.

When all this happened I found the energy of continuing my work for a simple reason: the positive feedback of all the users we have, take a look at our testimonials page, it’s really a booster. I thought: if what I did is so wrong with Dancer, then why are there so many excited developers about it? Some of them being well-known and respected Perl hackers? I must have done something good somewhere, it can’t be that bad!

Why does this kind of things happen in the open source world? Well, for sure because the way we communicate online is completely … cold. There are no feelings in an email, no way to understand irony or being able to see that someone is hurt or amused. That’s why getting upset by email is a very bad idea. Your words can be interpreted in hundred ways. This is why, I think, hackers can fight so hard when they disagree online!

But at the end of the day, you need to realize it’s just about lines of code! It’s not a big deal!

Where do you work right now? Does your company use Perl? Do you think it’s important to support the Perl language and community on the business level?

I work at Weborama one of the European leader (and we’re in Russia since last summer by the way!) in the online advertising industry. I’m in charge of the R&D team and I work with very talented people, I’m very happy to be working with that team. We tried very hard to create our platform with the full power of Perl. Not only the language but also the “culture”: we use CPAN-Mini to create our own private mirrors that host our in-house modules (in the Weborama namespace). Everything we code here is a CPAN distribution, written in Modern Perl (Moose/Moo/Dancer…) and is deployed in a perlbrew. We have mimicked the real-world CPAN to benefit of the whole tool chain: unit tests, smokers, cpanminus as our deployment tool… We use Perl::Critic plugged into Git hooks to make sure everyone respect our coding standards. Well you see the point, everything is based on the Perl way here. That’s a really great pleasure to be able to work like that, and it helps us a lot to provide very high-quality software to the company.

Also we try to attract as much as we can talented Perl hackers, we recently posted a job offer on Linkedin and on jobs.perl.org and we got many interesting applications, from all over the world, people willing to relocate to Paris to join our team. That’s really exciting to work in that environment! OK, I’m biased! I’m in charge of that team so I won’t say it’s a bad one, huh! But I think if you ask some of my colleagues they won’t say the opposite (I hope!).

I do think it’s important to support the Perl language on the business level, and we do at Weborama. We’ve been sponsoring Perl events for some time now, French Perl Workshops, YAPC::EU, or others. We also provide help to our employees who wish to attend such events like sponsoring their travel/hosting expenses or letting them go there without using a day off.

Promoting the Perl community is very valuable for a company that work with it, that’s just good sense.

Should we encourage young people to learn Perl right now?

I think so. Perl is a language that is very easy to learn and with a huge potential thanks to its ecosystem and community. Working with Perl can be very efficient and for that reason I really think the more young Perl developers we have the better. Any effort that can attract new developers to the community is worth a try.

Questions from our readers (some of them are just jokes :):

OK! I’ll try to answer without being too much of joker myself then!

Do you use Mojolicious?

Of course! All my webapps are written with Mojolicious. I could not think of any other way of writing a webapp.

Did you remember when I said earlier it was hard to catch irony in an email? More seriously, I’ve not used Mojolicious but I’ve read part of the code when I started Dancer 2. I wanted to see how things were done here and there and that’s when I really realized that Dancer is clearly not the same thing as Mojolicious::Lite. Lite is a little DSL over a huge MVC framework. Dancer is a complete feature-rich DSL. It’s not exactly the same thing. Again, I really think both approaches are good.

So no, I don’t use Mojolicious but I think it’s a great project!

So you think you can dance?

I think my Moonwalk is not so bad! And no, I won’t send you a video, you need to trust my words.

Do you know any working in production big projects written with Dancer?

First of all, at Weborama, our adserver tool (Weborama Campaign Manager) provides an API service that serves the web interface and third-party clients. This API webservice is written with Dancer (version 1) and is working like a charm. We also have released one of our last product recently with Dancer 2. Outside of Weborama, there are many “real-world” companies that use Dancer, for instance Moonfruit.com is proudly powered by Dancer. I’ve also heard of Novell who has released a deployment tool for servers called Baracus , that tool has an embedded ReST API service that is built with Dancer as well. You can also take a look at this page on the website for more “real-world” users.

Will you come to Kiev for YAPC::EU?

I don’t know yet, it depends on my personal agenda, who knows!

Did you leave Dancer1 for the community or do you still participate?

Dancer 1 is now maintained by Yanick Champoux but it doesn’t mean I’m out of the discussions. I’m not far from it even if all my energy is dedicated to Dancer 2.

Thanks for that interview, use Perl and dance!

The awesomeness of Juice Defender

Juice Defender logo

Juice Defender logo

Android users, if you don’t know what Juice Defender is, stop what you’re doing right now and jump to Google Play and install it.

Juice Defender is an application that is designed to help you retain your battery life as much as possible, depending on the trade offs you’re willing to do regarding the connectivity of the device.

The idea is simple: what kills the battery in a smart phone is the continuous updates it does behind the scene. When the 3G is on, the phone does a lot of work to get all your data up-to-date.

The thing is that it’s clearly useless (and very annoying) to get instant notifications, whenever you have an email, a tweet or a Facebook notification.
Not to mention the night, when all these will be seen when you wake up.

Juice Defender lets you choose when to enable or not the data streams. You have many options to play with and even some predefined profiles.

The application comes in three versions: a free one, which is not very powerful because it only handles the Wi-Fi connection (the 3G being the most battery-consuming). Then you have the 2-euros version that lets you configure the 3G connection and the “Ultimate” version which costs 5 and provides the full-featured setup.

I strongly suggest buying the Ultimate version, it will double the battery life for only 5 euros… It’s clearly worth the price.

Now that is nice but how well does it work? Well, a picture is better than a thousand words, here is my battery usage after a full day of work, the phone was unplugged at 8 AM, I listened to my music during the trip to the office (45 minutes) and then used it for emails, SMS or Twitter. At the office, the Wi-Fi was on but not the 3G. When I was out, nothing was on (the phone is only able to receive or send phone calls and SMS) unless I explicitly enable the data connection. If I do so, the data is on until I lock the screen.

Here is the result:

Battery usage of a Nexus 4 with Juice Defender Ultimate

Battery usage of a Nexus 4 with Juice Defender Ultimate

72% of battery still available after 10 hours, that’s way better than what it would have been without the app. As far as I can tell, it roughly doubles the battery life.

Also, if I forget to charge the phone while I’m sleeping, it will enter in airplane mode automatically and will wake up at 8 AM. Saving even more juice for the time that matters: when I’m able to use it!

A must-have on any Android!

How to Survive the Google Reader Apocalypse

RIP Google Reader, by TechnoBuffalo

RIP Google Reader, by TechnoBuffalo

You surely know that Google Reader, one of the most popular RSS Reader as a service is shutting down on July 1, 2013. Many say that Google is going to kill the RSS market but it might be the opposite.

As many I’ve been using Reader for many years – either on my desktop or on my mobile devices – as a way to read stuff that I like. The fact that Reader is going away triggered a question: “What should I do? Should I give up on RSS?”

Wait, I don’t want that! I don’t want Google to be able to tell me that from now on, I will stop using something because they decided so. No way. So, is there a good alternative out there?

Yes, there is, and guess what, it’s way better than Google Reader!

It’s called Feedly, your Reader account will smoothly import itself during your first connection, it has a sleek design, is available on all mobile devices and provides a Flipboard-like layout.

On top of that, you have a Chrome extension that automatically adds any feed you want when you open them…

What else?

Just forget about Google Reader, use Feedly and smile, RSS is not dead, it will rebirth!

Support for Nexus 4 in Ubuntu 12.10

Google Nexus 4, by LG

Google Nexus 4, by LG

If you’re the happy owner of a Nexus 4 (what an amazing device!) and a Ubuntu user, you probably got surprised when you plugged the phone in your computer for the first time. WTF, this phone doesn’t support the mass-storage protocol? Seriously? Is it an iPhone or what?

Indeed, you can look over all the settings of the Nexus 4, no mass-storage, at all! Not even one setting about “USB connection”.

Don’t be afraid, it’s not an iPhone, you will be able to transparently see the device in Ubuntu, transfer your files as you wish and even enjoy the pleasure of copying your music files with Nautilus. It’s just that the phone uses a rather new protocol: MTP, the Media Transfer Protocol. This protocol has been designed by Microsoft and according to Wikipedia is better than mass-storage because it prevents a host from corrupting the files hosted by the USB device.

So, all we need to do is to enable MTP support in Ubuntu. The good news is that GVFS (The GNOME virtual file-system) supports MTP in the upcoming new version of Ubuntu (13.04) and backports exist for 12.04 and 12.10.

So all you need to do is to install those backports, reboot your desktop, and plug-in your Nexus 4!

Let’s do that!

Add the backport repository for MTP support in GVFS.

sudo add-apt-repository ppa:langdalepl/gvfs-mtp
sudo apt-get update

Then, upgrade the system, you should see many gvfs packages in the list.

sudo apt-get upgrade

And then, reboot and you’re done!

Now you can enjoy all the pleasure of accessing your phone via your Ubuntu desktop.