Thursday, January 29, 2015

Shock and Terror - Perl IS a readable language


As a fresh developer, one of the first things you'll hear about Perl is one of the following:
  1. Perl is unreadable
  2. Perl is the only language that looks the same before and after is encrypted with sha256
  3. Larry Wall fell asleep with his head on his keyboard and when he woke up he called the result Perl
You won't hear that Perl is the language that was behind almost every Web page until 2000s, practically powering the whole www, or that you can use Perl to build anything and elegantly implement all of your business requirements, or that Perl is the only real programming language that is delivered with every Linux distribution. No, I'm sure that if you started programming in the last 5 years, the very first thing you heard about Perl is one of the above bullshit jokes. And, if you happen to challenge their affirmation, they'll pull out some snippets that won a Perl golf code competition to "prove" it to you, proudly enforcing their statement with: "that is a perfectly valid  piece of Perl code". The truth is that no, the output of a golf code competition is not a valid piece of code. Not for the business critical applications that we generally use Perl for. Believing someone who never opened a Perl manual and says that Perl is unreadable, is like believing a 3 years old when she tells you that English is unreadable. Come on, you gotta be smarter than that.Show me a programming language that you can understand without reading some parts of its documentation and I'll give you the winning numbers at the lottery.I'm sure you can read and understand any programming language after you put enough effort and exercise into learning it - yes, even brainfuck

Programming Languages are Like Spoken Ones

There are around 1 billion people who understand Chinese and 200 million people who understand Arabic after all. And there are literally billions of people on earth who can't understand a single letter from the Latin alphabet. Do you believe that those billions of people who can't read English are wrong? or the ones who only speak Chinese, Japanese, Arabic, Russian, or Hebrew are using a less than best language because you can't understand them?  Now, do you really think that Perl is unreadable? Compared to what? To a language you used for years before trying to do something with Perl? Who sets the programming language readability standards? You see my friend, There Is More Than One Way To Do It and if someone tells you something else, send them to this post.
Just because some respected developer in an unrelated technology can't figure out what each sigil means in Perl, it doesn't mean that the language is unreadable. It means that the developer is a superficial cunt individual, who can't figure the difference between a joke and reality.

Programming Languages are Like Civilizations

We can consider Perl to be like the modern world, where everybody is allowed to do anything they want as long as they don't disturb or harm other people (this is unfortunately untrue at a world scale, but I live in Europe and here this is pretty much the case). Perl evolved nicely from a time similar to Egyptians where we used rudimentary tools and were able to  build great things - the internet, just like the Egyptians built the pyramids, to the present day, where we have DBIx::Class, and Mojolicious, and Catalyst, and Dancer, and Plack and we build beautiful skyscrapers with hundreds of floors.
We can see that other languages are still in the dark middle ages, where they burn witches when they say that not everybody likes to have their indentation enforced on their code the Earth is not flat, or even that it revolves around the Sun instead of the reversal.

The future is now

Right now I'm in Brussels, waiting for +FOSDEM 2015 to begin (thanks Evozon for sponsoring my presence here). If you're also around, do your best to attend Larry Wall's keynote speaking on Sunday, because I've heard he has really important news to share regarding Perl6. You might actually not have that much time to try Perl6 (which I hope will be named Camelia) before it is declared production ready and becomes mainstream.
If he made it that big with the original Perl, imagine what kind of a language will come out after his more than 25 years of experience, out of which, 14 were spent on designing a new language.

I can't wait to see the power of Perl6 explained by +Curtis Poe (who's one of my favorite presenters) on Saturday - have a sneak peak at his slides hereIf you liked this article, don't forget to share it on your favorite social network.

Sunday, January 18, 2015

Perl Already Won

This post is a response to the Yet Another Perl Rant article which appeared on hackernews.

Without being a special kind of paranoid or conspiracy theory adept, I can't help myself noticing that from time to time an article appears which tries to convince us that Perl is dead and there are no reasons to learn it.

TL;DR

Perl already won once - in the nineties it was the technology that powered the whole web. It got a market share that none of the 'cool' languages will ever be able achieve - be that Python, or Ruby, or Go, or Node, or whatever. Be that backed by Google, Facebook, Twitter, Craigslist or Booking.com. PHP is coming close, but it won't achieve it, exactly because of the cool new programming languages, because of the much larger internet market and of the diversity of software developers. 

I believe the main reason haters gonna hate Perl forever is because their language of choice will never achieve its dominant adoption.

Transition to Perl

I started programming in Perl in 2010, after 4 years of professional software development (in progress) and after I did some projects in PHP, Ruby and Python.

I have to admit, as a programmer it wasn't really easy to start with Perl:

  1. Having those list, scalar, string, or void contexts is pretty confusing when you're first exposed to them. 
  2. The types of variables are totally different from anything that I've seen that far - scalar, array and hash type. 
  3. It was also hard to get along with the TIMTOWDI (There Is More Than One Way To do It) principle which is everywhere - should the $customer->orders method return undef when no orders are present, or should it simply return, or should it return an empty array or maybe an empty array ref - this is just one question that I found myself asking over and over again.
I had all of the above issues clarified after I read Damian's Conway Perl Best Practices and Intermediate Perl.

I came for the money and stayed for the robustness

I decided to switch from Progress because there was only one company in Cluj-Napoca that was using it. While you would normally expect, as an extremely specialized technologist, to earn a bigger salary because of the scarcity of experts in a certain field, the opposite was true - I earned a smaller than average salary, exactly because I could do nothing about it (ie I didn't had where to go). Although I wanted to switch to Java, the first opportunity I had was Perl. Given that we had at that time about 5 companies that were doing Perl development in Cluj, and that the salary this company offered, as a junior Perl developer (I wasn't able to even code the 'hello world' without googling it), was bigger than the one I got as a senior Progress developer with a commitment of salary negotiation after one month with the company, signaled me that there had to be something good with the language that I've only heard about it looks the same before and after it is encrypted. 

While I worked as a Progress developer, I was doing the whatever part time project I wanted to work on using technologies like PHP, Ruby and Python, mostly because of the high costs of running a Progress app (at that time they were charging even for the runtime VM, I don't know if that still applies). I don't have any public project since that time. When I switched to Perl I decided to use it for everything I do - I wanted to see if that's possible, without losing any productivity and in order to become more proficient in the language.
As a result, I currently have 2 extra projects that I work on and have real users www.eatfab.com (a food ordering application) and www.prforge.com (a crowd speaking platform).

The right tool for the right job

Since 2010 when I started to develop in Perl, I found out that Perl has everything that I needed, some more and they're all rock solid pieces of software:

  1. Want a RoR like framework? go with Catalyst
  2. Want a Sinatra like framework? choose between Dancer2 and Mojolicious
  3. Want an uber ORM? - go with DBIx::Class (dbic)

That's why Perl became my golden hammer

Young but wise

I think that the average age of a Perl developer is about 35 years (I have no official data for this, my hunch is based on the people I saw at numerous YAPCs I had the opportunity to be present at). Assuming this is true and assuming a dev enters into production at 23 years old, it results that the average Perl developer has 12 years of software development experience.
What kind of code would you prefer in your business critical, money making software products? one written by people with an average of 12 years experience in the language of choice, or one written in a language that appeared on the radar in the last decade:
  1. Ruby on Rails, the framework that made Ruby popular was launched in late 2005
  2. NodeJS is not yet at version 1, having its first version launched in May 2009
Regarding youth, Perl's last stable version is 5.20.1, released in 14th of September 2014. The Dancer2 framework had its first release in 2013 and it had 37 more releases since then. Mojolicious reached version 1 in December 2010, now it's at version 5.72 - have a look at the frequency of releases.

In my imagination a language that is dying does not have frequent releases, nor it has modern frameworks and it doesn't inspire other languages also.

A short story

I currently work on a project written completely in Perl for a company that sells economic reports - lets call it X, because I don't have their permission to use their name. The project was started around 1998 and for about 8 years there were less than 3 developers who supported the whole online division of the company. The company that I currently work for (an outsourcing one) started to assist the X company with the project around 2008. If I remember correctly, between 2008 and 2012 there were no more than 5 developers assigned to the project from my company at any one time.

In late 2012, a new CIO was hired by the X company in order to help with modernizing their so called legacy codebase. It was indeed legacy - the whole website was done entirely with CGI.pm. The new CIO promised to rewrite the whole system in .NET in just one year, because you know, how much functionality can be implemented by an average number of 3-4 developers in a technology that is so old and rusty as CGI, while also maintaining the core, business critical and money generating, functionality?

So, in November 2013 they started to lay out the business logic that takes place in the online app in order to be able to start implementing it in early 2013 so it would be done by the end of 2013.

It was March 2013 when the CEO decided to stop the idea of rewriting the app in .NET because they weren't able in those 4 months to even define the scope of the project. The CIO was out.

My company made the commitment to rewrite the whole app using Modern Perl and to also respect the original schedule, compensating the time lost because of the unsuccessful .NET rewrite attempt. I remember my department manager saying after he came back from company X with the project "I might have made the most stupid commitment ever, but it might also be the best".

Long story short - by October 2013 we rewrote 90% of the old application using Catalyst and DBIx::Class on the backend and Bootstrap from Twitter on the front end. By the mid of 2014, the old application, the CGI one, was taken out of production.

There was no business interruption because of the rewrite.

Conclusion


Watch out for whoever says that Perl is an ancient technology, because they're either ignorant and completely clueless about what's really happening in the world of computer programming, or they have hidden agendas.

I know, this might be a biased post - I love Perl, but so are the posts that people wright when they say it is irrelevant. Let me ask you a few biased questions:

  1. Why do you love Perl?
  2. How did Perl helped you in your profession?
  3. How did Perl helped your company?
  4. How do you intend to use Perl in the next years?

Monday, September 8, 2014

Making a "Simple" Site is Damn Hard

If you're somehow related to the IT field (you're a sys admin, a QA, a Project Manager, or even a programmer) you surely got at least one request from a relative who just opened a business, to create them a "simple" website. This term - "simple" - lies anywhere from some texts that don't need to be updated in the future, to online stores or web scale streaming platforms. How hard can it be? it's just a "small" web page after-all. You're in luck, my friend. This post is here to help you make them appreciate the simplicity of web sites.

 This impression, that to build a good web site is so simple that even the nephew of one of my wife's cousins who's only in his 9th grade is able to do, is our fault.

We, the people from IT, fail to communicate properly how complex and what a big deal it actually is to have a "Hello World" correctly displayed in a web page. After all, there might be a reason (related to social and communication skills) why when you ask somebody what job this guy
has, most of the people will say he's an IT guy.
People are ignorant by definition and this also includes us, the software developers. If you start talking to me in nautical jargon, I'll most probably understand only your linking words and phrases. Why should we expect from our non-technical peers to understand that in order to avoid sql injection attacks on their "small" web site, we have to use prepared statements or ORMs? Or that they want their site protected against cross site scripting vulnerabilities and we have to use some sort security encoding library or framework? No, they don't have to know all this and it's absolutely normal for them to expect to have a web site that in a month or so after you finished, it will still display their content and not some commercials to the blue pill for men or genuine fake watches.

They instead can, and actually should understand, that software development is hard. The simplest way to convince them that web development is a difficult process is to ask them to press ctrl+u (if they use a PC and Firefox or Chrome as browsers. If they use other "browser", one of the most helpful advice you could give them is to switch to a real browser) and have a quick glance at the source code of any web page.

And then explain them that all the gibberish characters they see there is actual code that a programmer (most probably you) has to write, all of it. And then, tell them that if instead of jQuery you happen to write jquery, none of that part of the code will work anymore.

Next, let them know that the whole process of building a "simple" web site is a stream of decisions that you have to make:


  • Will you design the site from scratch? Will you buy and use an existing theme (disclaimer - that link contains my referral id to the themeforest site)? 
  • Will they require a CMS?
  • What features will they need on the site? (shopping cart,  newsletter, contact form, forum, blog, calendar, polls, etc.)
  • Will you implement the above features by yourself or you'll re-use existing solutions?
  • What kind of hosting will you recommend (dedicated server, VPS, shared hosting, etc)?
  • etc

Of course, you'll have to take some of those decisions together with the beneficiary of the web site, but most of them you'll take by yourself. The fact that you take as many of those decisions by yourself and get off the burden from the shoulders of your potential client, will increase their appreciation of your work because having to make too many decisions increases the anxiety of normal people.

Please notice that I haven't even brought into discussions the decisions related to:

  • What programming language should I use? (although it should be Perl, obviously)
  • What framework should I use?
  • Should I use a relational database, or some no-sql technology?
  • What's the caching strategy that I'll adopt?
  • Full-text search solution?
  • Hosting OS?
  • What web server should I use in production?
  • etc

I haven't mentioned these kind of questions, because they don't concern average Joe. The ignorance of normal people regarding those questions is absolutely normal, and we should only bring them into discussions when we want to be seen as some special kind of smart asses. It's like someone would've told me that he tied a becket hitch  instead of tying a knot. I'm not a walking wikipedia to know everything and neither are our non-technical friends. 

In conclusion, the more you make regular people understand why software development is a complex process, the less difficult will be for them to appreciate your work and accept your hourly rate. Share this article with your friends and help them become a little less ignorant regarding the complexities of web development.

----

Want to see some of my work? have a look at PRForge - a crowd speaking platform where you amplify your message with the help of your friends and brand ambassadors across different platforms (for now we support facebook, twitter, reddit and hackernews). We'll soon open the private beta, so leave your email address in the form there, to catch a seat in the first row.

Wednesday, April 23, 2014

Facebook Authentication in Perl with Mojolicious (Lite)

Below is the minimum you need in order to have a web app that provides Facebook authentication.

Although there are less than 100 lines of code (including comments), this is a complete Facebook application implemented in +Perl  , using the +Mojolicious web framework. It provides Facebook authentication and accesses user's Facebook username. Of course, with proper scope settings it could also access user's list of friends, the pages that the user manages, or many other interesting things that Facebook offers access to.

So, the complete app:



In order to make it work, you have to first create a Facebook application and then fill in the values for $config->{facebook}->{app_id} and $config->{facebook}->{secret}  with the values provided by Facebook on the application Settings page:



Also, you have to provide a Site URL to your Facebook app. This is the URL where the user will be redirected after Facebook authenticates him. In our app, the URL is http://mojo.dev:3000/redirect_from_fb  - of course, mojo.dev is not a valid domain, but an alias I made in /etc/hosts that points to the IP of the machine that runs our Mojo Lite app - Facebook seems to be OK with this URL.

After you have installed the dependencies:

You can start your app in dev mode by executing: morbo facebook

When you click on the Click here to authenticate with FB link, you (and your users) will be redirected to Facebook and presented with a screen like this

After you authorize the app to access all the scopes set on line 39, Facebook will redirect you back to your app. Note that this authorization phase is done just once - after that, every time you log in with that account, Facebook will simply redirect you to the app.

If you read this far and liked the article, get rid of your shyness and share it using the buttons on the left :)

Sunday, January 5, 2014

Voting Rings - Bad or Good?

Voting rings can be a low cost alternative to AdWords and Facebook ads to promote high quality content.

What are voting rings or voting cliques?

Reddit, in their faq section, answers to the question What constitutes vote cheating and vote manipulation? with:
 A "vote ring" is a group of people who agree to vote on certain things together, either a specific submission, a user, a domain, or anything like that.
And they, not only discourage this type of practice, but they explicitly forbid it. Other websites that highlight voted content like hacker news, digg, delicious, stackoverflow, quora and basically all the rest, also forbid the practice of participating in voting rings.

Why are voting rings so alluring

Because it helps you get on the front page of hacker news, or of any popular reddit thread - and this, my dear reader, brings a huge amount of traffic to your site. 

As an example, my post titled Why I'll never leave Romania as a software developer was on the front page of the /r/programming thread on reddit for one day. As a result, the post got 26k visits, most of them from reddit. And the visitors were highly targeted people, all interested in programming. 

You don't have to be a rocket surgeon to estimate that, at a modest cost of 30 cents/click with AdWords, this amount of traffic would've cost 7800 dollars. Imagine what happens when you are on the front page on /r/technology (which has 10x times more subscribers than the /r/programming thread) or reddit itself.

Most of the algorithms that decides what post to be on the front page are based on a combination between the number of votes it receives, and their recency, such that, the more votes a post receives right after it is posted, the upper it gets on the front page, thus being exposed to a bigger number of readers, increasing its chances to be upvoted even further. 
On the contrary, no matter how good an article is, if it doesn't get a few upvotes early on, right after it is submitted, it will go down the drain on the path of internet forgetfulness.

Voting rings are a current practice of internet activity

If you love a certain's author style, there are big chances that you like, share, tweet or upvote the content they publish, creating a voting ring, so the better an author is, the biggest their voting circle is, the bigger the chances that their content gets featured on social networks and so on. Indeed, you might say, having many followers, the author has proven track record that they create notable content. 
For the rest of us, the mere mortals, things are a little bit different - we have to be proactive in promoting our content in order to have it exposed. 

Unfortunately, this proactiveness is considered bad practice and it might get your account banned from the vote enabled, content bubbling sites. Fortunately, it is difficult to accurately identify voting rings, especially due to the fact that popular authors posts look liked they're promoted through voting ring schemes.

So, whether you explicitly ask your friends to upvote your submission or you share your submission on your social network profiles, you encourage your friends to upvote your creation, thus you are susceptible of ad-hoc voting rings creation. 
In my opinion, voting rings are a reality, whether they're good or bad is debatable, but, when I spend 3, 4, or even more hours to write an article, I want to make sure it gets all the possible feedback - be that positive, or negative, so it seems normal to promote it on all the channels I can and ask a few friends to help me with it. 
I don't even know if there's anyone to be featured on the front page of any popular social content aggregator who got there without help (ie early upvotes) from friends or acquaintances. If you have knowledge of highly popular content that got its notoriety without some initial boosting, please mention it in the comments section of the article.

Conclusions

I'd say that voting rings are a natural way of association among individual. It happens day by day in our offline lives. It happens when we ask for endorsements, it happens when a political party or NGO starts a social movement or a protest and the examples could go on and on. 
So, creating a voting ring to give you an initial boost to your content is a good thing. The people in the community will take care and show you the place where that post belongs in an instant anyway, by upvoting or downvoting it.
Why would we ban those practices from the online environment? I expect the online world to be an enriching experience to our offline lives, not a restricting one. I expect it to offer at least what the offline world offers (in the limits of the current technology available, of course), and a little more.

The worst case scenario would be when a group of, lets say, 1000 people group together and act in a monopolistic way against the community they're part of, by keeping the front pages filled only with their content. Such a group of people will take time to be created and there are little chances that just one group will be. There would be more groups, acting in opposition, simply balancing the focus the internet gets.


An Experiment


Not long while ago, together with a group of friends, we created PRForge. It is thought as a platform for audience amplification. Whenever someone posts a link in a group on PRForge, the link gets spread on the social properties of all the members from that group, thus amplifying the total reach of that piece of content. The social platforms supported until now were just Facebook and Twitter, but starting the last days of 2013, we implemented reddit and hacker news upvotes:
If this post convinced you that voting rings are OK to use, join the group on PRForge and be part of the voting ring I created. 

After you sign-up, install the firefox plugin from the link 
Go Get It Champ
which is on the left sidebar. 
Let that Firefox instance running with a Reddit and Hacker News account logged in. Whenever an authorized to post member of the group will submit a Reddit/HN link, it will be automatically upvoted by all the members of the group. 

In order to become authorized to submit links, let me know in the comments section of the group. 
After you sign up you'll be also able to create your own, private groups.

Please note that although PRForge's main functionalities are working right now, it is in a really early release and there are things that will not work. Please bear with us while we fix the glitches that will appear.  

If you read this far, you might want to follow me on twitter

Friday, December 13, 2013

How to screw up a startup community

TL;DR

Organize meetings, social events and hackathons, pretend you want to help the community, then use the ideas you saw there to serve your personal purpose. In order for this to work, you have to keep for yourself everything that you work on until the launch day, while you encourage the participants to tell you as much as possible about their businesses. If they ask you something about what you're working on, lie to them, otherwise they might not come to your future events.

This happened to me (I was at the receiving end of this "business model")


I started to work on EatFab sometimes in November 2011 in order to solve the problems we faced with food ordering management (the major problem is that a lot of time is spent to centralize the orders). We started to use it at my current employer in September 2012. 

In December 2012 I found out about Open Coffee Cluj - a group formed for the like minded people, entrepreneurs and people with initiative. At least that's what the organizer of the meetups, Marius Mocian, told us. Everything seemed to work well, we exchanged ideas, we talked about what we're working on, the problems we faced and we had brainstorming sessions whenever someone raised an issue. Except that when Marius was asked what he was working on he was always vague, saying only that he mostly mentors other startups. 

Six months later, around May 2013, a mobile application is launched for the food delivery market in Cluj-Napoca. Shockingly (in an unpleasant way) for me, I find out that Marius Mocian is the one responsible with the marketing of the app, with some responsibilities in product development and he was occupying that role for several months. While keeping his main occupation secret until the last time is legal, I find this to be immoral, to say the least, because he kept organizing the startup related meetups and encouraged us to keep giving statuses related to our workings.

Although all of my gut feeling alarms went crazy, I deceived myself by telling me that it just looks like we're competing in the same market: his application is for individual deliveries, while EatFab is for office food ordering, so we're kind of complementary and he didn't had any kind of moral duties to disclose he is deeply involved in development of a competing application. 

So, I continued going to the events he organized and continued to be very open related to EatFab - that's what you read on hackernews, /r/technology and /r/startups afterall: be as open as possible and let as many people as possible know about your ideas. I brought several people to the meetings, in the hope that we'll grow the whole startup community together. I also went to the Startup Live event that he organized in Cluj just because he didn't had enough participants - I convinced one of the Evozon's owners to pay the tickets for a whole team there and also persuaded several other developer friends to come. All of this, just to help the local startup community to grow and to have meaningful events here.

The cunning gets real


In September 2013, I saw an ad on the biggest social network, aimed exactly to EatFab's market: office food ordering. After thorough investigation (because the domain owner enabled private registration), I found out that the man behind it is Andrei Barabas, the owner of Barandi Solutions - a company from Cluj, with its owner deeply involved in the startup "community" created by Marius Mocian. Andrei also participated to the Startup Live event I mentioned earlier, as a mentor and member of the jury. 

Let me remind you that this was happening almost a year after I told them about my approach on the food ordering market: office delivery for groups of people. And 4 months after Marius's application launch (not quite his app - he's just an employee there) - an application that didn't had the expected impact on the market, although it's a very sexy application and they had a decent budget for marketing.

I found the idea of a competing web application, exactly in Cluj, exactly on the main workings of EatFab, after a very short period of an unsatisfactory launch of a competing app, done by a guy who knew about EatFab as a huge coincidence.

Being in the same market, I thought about letting Marius Mocian know about my findings. 
I also asked him if he knows anything about it - his answer was a very strong "I have no clue", but said that he'll ask Andrei about it. A few days later I asked Marius if he talked with Andrei and he said that yes, but that he can't tell what the site is about and that I'll have to ask Andrei.
Today I met with Andrei (the guy who works on EatFab's copycat) and asked him about what he's working on. 
His answer "The web part of Marius's application"

Business rules, and types of people


While what Marius Mocian did is not illegal (not from what I know at least), it is highly immoral: lying, deceiving, cunning and betraying are not healthy ways to build communities and businesses. While my unfair advantage is the usage of +Perl and +Mojolicious, having a high productivity and short time to market, it looks like Marius takes the idea of unfair advantage literally. 
Marius's kind of people when employed, are able to develop a parallel business based on your business model while you pay them a monthly income in good faith. They're able to steal the source code of your application, put a different skin on it and try to build a company based on it (Marius said once that copycats of his app started to appear on the market soon after their launch - an affirmation which in hindsight might mean more than I thought). 

I hate rants and public complaints, and this post is exactly that, but, while I learned about Marius Mocian the hard way, I want to ask you to help other people find out about this typology. 
So, please share this article on reddit, hackernews and wherever other people involved in technology and startups are present so that when someone will be interested to collaborate with Marius, they'll do it knowingly.

Also, by making this type of articles popular, people will become aware on the importance of honesty and will realize that the greatest asset we have as individuals is our reputation.

Sunday, October 13, 2013

Why I'll never leave Romania as a software developer

I am a +Perl software developer for 3 years and I'm a paid software developer for 7 years. I live in Cluj-Napoca, which is the second most populous city in Romania. 


It's been around 4 years since I started to have this feeling that I wouldn't have the same standard of living in another country as a software developer that I have in Romania. Back then I was netting around 700 EUR/month. Given that the average net income in Romania in that period was less than 325.91 EUR, it was probably the fact that I'm earning more than 2x than the national average income that created this feeling that I don't want to leave. Anyway, that was just a feeling and although I was earning that much compared to the rest of the people, I felt like struggling with money from one month to another. This struggling was caused  by my lack of money management, by the fact that back then my wife just started as a lawyer and the income she brought was nearly zero and by the fact that the overall purchasing power in Romania is extremely low.


Programmer's Income in Cluj-Napoca

Although the trend changed here and there from time to time, the general rule for paying a decent software developer in Cluj is the following (I'm always talking about after tax money - net income): 

  1. the developer starts with about 400 EUR
  2. every 6 months she gets a 100 EUR raise

Within some exceptional cases, things might vary - for good, or bad. 
In a good sense the programmer is able to force a raise:
  1. by simply asking
  2. by going to interviews to other companies,
  3. by changing workplaces from company A to company B and then back to A
  4. and of course, by having extraordinary performances and negotiating a raise
In a bad way, programmer's income can increase slowly if:
  1. the company he works for does not perform well
  2. he is not a good negotiator
  3. the company is a shitty one and, given that he's satisfied with what he earns, is not raising his salary although he deserves so
  4. he is not performing well

So, it not exceptional to find a programmer with 5 years of experience netting 1500 EUR/month, or one with 7 years of experience who earns 1700 EUR/month.

From Feelings to Numbers

Recently I found the great numbeo site which gathers prices from the cities all over the world and exposes them publicly. More, it can show comparisons between 2 cities regarding prices, salaries and correlating that with the total purchasing power, it gives estimates of one's needed income in order to live in another city.  With its help I could justify the feelings and confirm my hunches that it's impossible to live that well in other part of the world as I do in Cluj:

CityReference IncomeRent in foreign cityIncomeYearly net income
London47625,396.931,884.007,280.9387,371.20
Berlin27843,155.20800.003,955.2047,462.40
Amsterdam38264,336.131200.005,536.1352,033.56
New York48485,494.402,214.007,708.4092,500.80
San Francisco44845,081.872,216.007,297.8787,574.40

How I reached those numbers

Reference - it is how much one should earn in the given city to have the same quality of life as in Cluj, when in Cluj earns 1500 EUR net/month. In the table are displayed money after taxes, or net income, paying rent in both cities.
Income 1 - It is the net salary that one should earn in in the given city in order to be at the equivalent of 1700 EUR in Cluj, paying rent in both cities. I consider 1700 EUR, because this is close to my actual salary and it is an average income for one developer with 7 years of experience.
Rent in foreign city - rent for a 3 bedroom apartment, outside of city centre
Income 2 - given that I don't have to pay rent in Cluj and I'd have to pay in the foreign city, this is computed by accumulating Income 1 column and Rent in foreign city column
Yearly net income - Income 2 column multiplied with 12 

More Data Needed

We'd definitely have a much more clearer image if there would be a column with average programmer net income in those cities. Unfortunately, most of the sites I've looked are displaying only the gross (pre-tax) yearly income and it is rather impossible to compute the net income without thoroughly knowledge of the local laws and fiscal policies. So, if you have knowledge of the average net income a programmer earns in the above cities, please share them with us in the comments and I'll update this post.

Programmers Lifestyle in Cluj-Napoca

Given the low purchasing power in Romania in general, the day by day prices are also very small. Have a look at the numbeo page with prices for Cluj
In 1700 EUR/month you have whatever type of life you want - for a party animal, a way of living here can be: 
  1. eat in the city every day (12 EUR for 3 meals/day * 30 days = 360 EUR/month).
  2. go out in the most expensive clubs every weekend (30 EUR/night * 8 nights = 240 EUR/month)
  3. have as many beers you can drink every day of the work week in the most expensive pubs (5 beers * 1.5 EUR/beer * 22 days = 165 )
  4. circulate only by taxi (5 EUR/day * 30 days = 150 EUR)
  5. pay rent and utilities (370 EUR)
  6. total: 1285 EUR/month
If you like to live healthy, the costs are much lower. 
Cluj-Napoca is a university city, during the academic year its population increases with 33% (100 000 students are here) making it a busy town. Almost every day there is some cultural event to be part of, a movie projection somewhere, a concert to attend, or a party in some club. Being surrounded by so many young people makes me feel younger (I'm not that old though, I'm 31).
I live at one end of the city and Evozon's office is in the center of the town. It takes me 10 minutes by car to reach there, it's great.

Conclusions

Besides money, there are definitely other things when I considered moving, like entrepreneurial opportunities. That is why I chose the above cities: they are some of the most active cities with regards to startups and IT in the world. Those would be the cities I'd consider moving to when my entrepreneurial desires will take over. But until then, I am staying here and I'm doing my best to be an active part of the young startup communities that are getting born in Cluj.

If you read this far and liked the article, get rid of your shyness and share it using the buttons on the left :)