My impression of DevOpsCon 2017 Berlin

Lately I have developed interest on devops. From time to time I try to learn about the new possibilities to automate and optimize my software delivery process, and I find quite exciting to learn about what devops offers today.  I think all developers should at least know a little bit about system administration and devops to understand better the environment their applications are deployed and make themselves more productive. In this post, I will summarize my impression of DevOpsCon 2017 Berlin.

Last two days I had the opportunity to attend DevOpsCon 2017 conference in Berlin. The conference had a pretty busy agenda full of presentations on five different tracks and four different keynotes. The presentations covered broad subjects such as designing microservices, using tools like Jenkins to create container images, security of docker containers, managing delivery pipelines, managing deployment in a polyglot environment, etc.

What I liked: most of the given talks were about real life experiences from some companies and consultants on how they implemented or helped other companies implement devops in their company structure. Some shared their previous failures and what they learned from them, which I found very useful.

What I missed: most of the talks were plain presentations of slides and very little to no demo. It felt a little dry to just listen to people sharing their experience of using a tool without a single demo about it. I was expecting a lot more hands on demos.

What I didn’t like: some of the talks were given by the conference sponsors. As they were showing use cases around their products, sometimes the talks sounded more of a marketing pitch rather than experience sharing presentation.

As a takeaway from those talks and experiences shared, I understood that quite a lot of companies are already working towards having DevOps people on their teams, be it as a specialized position, or as a mixed responsibility of developers or operations people. I also understood that companies quite often are struggling to fit these positions into their current organizational structures and sometimes there is a need to change the way their teams communicate. Being a relatively new position, it is also one of the misunderstood positions as the responsibilities of a devops person are not quite clearly identified in most places.

Backup your database

To backup your database regularly is one of the tasks that can be very easily accomplished but is quite often neglected until the minute you face the first disaster. Backup solutions can be of very complex types which you might engineer to simple ones like copy and pasting. Depending on your application, the necessity for complex solutions might vary. So what could be a minimum solution that is viable and stable?

The simplest solution in my opinion should contain these elements:

  • Create a dump of the database
  • Copy the dump to another location (different from the DB server)

Now depending on your RDBMS and operating system, you can take different approaches to implement these two tasks. On a Linux system with a MySQL or PostgreSQL, my approach would be to write a shell script which does these two functions. One such a script might look like this

#!/bin/bash

DATE=`date +%Y%m%d-%s`

FILE=/path_to_bckp_folder/$DATE-blog.sql

mysqldump  db_name > $FILE

Line no. 3 creates the DATE variable which holds the current timestamp. It is used to construct the name of the backup file. Line no. 5 creates the FILE variable which holds the complete path of the backup file. Line no. 7 is the MySQL command to dump the database named “db_name” to the path determined in line no. 5.

So far, this code completes the first task of backup up the database. The next task is to copy it somewhere else so we don’t have the db and backup on the same disk. Now this “somewhere” could be some other server, some other disk, or somewhere else e.g. cloud storage. My preferred choice would be to put it to a cloud storage like AWS S3. Having aws cli installed, copying the backup file to an AWS S3 bucket is a one line code

aws s3 cp $FILE s3://bucket_path

The complete file would look like:

#!/bin/bash

DATE=`date +%Y%m%d-%s`

FILE=/path_to_bckp_folder/$DATE-blog.sql

mysqldump  db_name > $FILE

aws s3 cp $FILE s3://blog-db-bckp

Conclusion

I know a lot of people might not agree with me that this is a good solution, but in my opinion, this is the minimum code that does the work. What you need to do next is add this script to /etc/cron.daily folder and your script will execute daily and do the backup for you (please make sure that permissions are correctly set so it can be executed). It is not the most elegant solution but does the job.

As a bonus point, I would also add a “done” notification to a script which would send an email or post to a slack channel or whatever notification that suits you so you know that your script has executed.

ElasticSearch – Getting started

Context

A few weeks ago, our team decided to use ElasticSearch for the search functionality of the project we are implementing. I had no previous experience implementing any search engines, so I got excited to get my hands onto doing something really new. What I am going to describe you here is the process I followed do a spike on ElasticSearch and what I learned out of it.

Why should you care about it

Elasticsearch is useful on several scenarios. It is very good for searching product catalogs, creating recommendation engines, logs aggregation and searching for faster debugging, data mining and identification of patterns, and in many more scenarios. There is a chance, the product you are working on might need such a thing.

Some basic concepts first

As an entry point to this task, first I had to learn the basic concepts about ElasticSearch. In essence, ElasticSearch is a document database which uses Lucene as a search engine. It is fast and horizontally scalable, though, it is a very memory hungry system. It stores all documents inside so called Indices. An index can be imaged something like a database in the relational databases world. Inside indices, you can have types, which you might think of as database tables (not exactly like that, but a good analogy).

Data of an index is saved in one or more shards (the default is 5 but this is configurable). Every shard can have one or more replicas. A replica is just a copy of the shard and it serves for optimizing performance and failover. If you don’t have millions of data, it might be good to have fewer shards for a better performance.

Setup ElasticSearch on your computer

To start experimenting, I started with setting up an instance on my computer. Setting up ElasticSearch is pretty easy (at least for the beginning). There are numerous ways you could follow and they are very well documented in their installation page. The approach I took is to have it as a docker container on my local machine so I can start experimenting right away and for production to have a chef script to do the installation for us.

If you already have docker installed, having ElasticSearch up and running on your machine is a matter of minutes by executing pull command to get the image

docker pull docker.elastic.co/elasticsearch/elasticsearch:5.3.1

and running the container

docker run -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" docker.elastic.co/elasticsearch/elasticsearch:5.3.1

This command runs the container and exposes port ElasticSearch on port 9200. If you try in your browser executing http://localhost:9200 (username: elastic, password: changeme) you will receive a response like

{
  name: "B4VsybF",
  cluster_name: "docker-cluster",
  cluster_uuid: "EDkqSWH1Q7mjM3RSEV7kVw",
  version: {
    number: "5.3.1",
    build_hash: "5f9cf58",
    build_date: "2017-04-17T15:52:53.846Z",
    build_snapshot: false,
    lucene_version: "6.4.2"
  },
  tagline: "You Know, for Search"
}

This shows that ElasticSearch is running inside the docker container and you can start playing with it. You can find all these installation details in Elastic’s site.

Loading data to an index

Now that ElasticSearch is running, the next step is to populate some data so we can test the search functionality. At simplest, we can communicate with ElasticSearch using curl cli tool or by using a http tool like Postman, or Sense – chrome extension. Pushing data can be done manually one record at a time, or in bulk. As a first step, we could create an index by executing

PUT /documents/person
{
  "shards":2,
  "replicas":1
}

This will create index named documents with two shards and one replica per shard. It will also create a type named person.

To insert a person document, we can execute a post request with person’s data

POST /documents/person/1
{
  "name": "Arian",
  "last_name": "Celina",
  "phone": "1234567"
}

The url segments map to {index}/{type}/{id}. If we didn’t specify id, then ElasticSearch would create an id for us. The response from ElasticSearch for this request would look like

{
  "_index": "documents",
  "_type": "person",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "created": true
}

From the response, I can read that I posted to index documents and type person and the request was successful.

For the sake of simplicity, we just posted the data to ElasticSearch without doing any data mapping. If we don’t do it, Elastic will do a dynamic mapping. If you want to enforce the type of data uploaded, you might consider to create a mapping when creating the index. Please take a look at mapping documentation for more details.

Loading more data

Posting one or two documents is easy, however, that would be of little help to really test searching functionality. To make the test more realistically, what I did was to export data from our PostgreSQL database to a json file and then posting the file to ElasticSearch using a curl command

curl -XPOST 'http://localhost:9200/documents/person' -d /path/to/file.json

If the export file is too large, you might want to split it to smaller ports (I got the right size by ‘trial and error’).

Searching

ElasticSearch offers plethora of query combinations. The query documentation is large and describes all the ways to construct complex queries with filters and aggregations. To the simplest form, for the sake of demonstration, if I want to search for the person whose phone number is ‘1234567’, the query would look like

GET /documents/person/_search?q=phone:1234567

or in a more complex form

GET /documents/person
{
  "query": {
    "match": {
      "phone": "1234567"
    }
  }
}

Either one would bring the same result. For more complex queries, please consult the documentation.

Conclusion

With such a short article, I could only touch the top of the iceberg about ElasticSearch. This article summarises the steps you can take to bring up an instance of ElasticSearch, load some data on it and start experimenting with it. Happy hacking.

Learning process of a software developer

Lifelong learning is a vital skill for software developers. Without continuous learning, I cannot imagine how could a software developer have a successful career in our days. But how can one keep up with the loads of information out there. The amount of information to be consumed passes far our ability to consume and learn. How do we develop ourselves as successful software developers? What strategies should we use? Here is the learning process I use, perhaps it could be useful for you too.

1. Practice

There is a good saying I like: “Practice makes perfect”. If there is one thing that I would choose above all, it is the practice. Writing code is the single most important thing you need to do to get good at software craftsmanship. You may do it in different ways and different levels. Being a full time software developer I would say is the best way, but you may also work on your own or contribute to open source projects in your free time. Apart of full time serious projects, I find it also very useful to work on a side project. Side projects can be fun and may give you the opportunity to learn and enjoy what you do, and often, these projects can be turned to successful projects.

2. Following trends

Following trends is very important to keep your skills sharp. Knowing what is coming next in your industry is of utmost importance to excel in your career as a software developer. Following trends can be done in several ways and you may find which suits you best. You may choose to follow the industry leads in social media, or read regularly their blogs, or you might be just the guy who goes to the events of user groups and conferences. Following trends will show you what you need to learn next and where should you put your focus so you are trained well to cope with future challenges.

3. Video tutorials

Video tutorials have become the common way we consume information today. Videos have many benefits. We can consume higher amount of information in a shorter amount of time. Also, most people learn better when they consume information visually, and this makes watching videos a preferred way to learn new technologies. You may choose to subscribe to a learning site (e.g. PluralSight or Udemy), or you may choose to watch videos in Youtube, you have plenty of choices.

4. Books

Although we have several ways to consume information, I think books are the best choice when you want to learn a technology thoroughly. Tutorials are good to get a glimpse on a technology for evaluation purposes or to get an idea how it is working, but if you want to get a sound understanding of something, I think, books are still the best choice. They usually are more carefully written, present the information more completely and in a flowing order. Yes, they take more time to read and they are larger in volume, but they give you a better understanding and full perspective of a big picture.

5. Sharing

One of the best practices for learning better in my opinion is sharing your knowledge. Be it blogging, showing off your code in a user group, or teaching someone on a what you are good at, sharing your knowledge pushes you learn better what you know. Teaching challenges your understanding of a subject and helps you improve your knowledge. This is my main motivation why I write in this blog.

Summary

The learning process of a developer nowadays might be different and adjusted to custom habits and requirements, however, in my opinion, these are some of the best ways to learn new technologies and always maintain your skills. What are your learning habits? Share with us.

My weekend with Python programming language

This weekend was a long one for me. Unfortunately, I catched cold and had to stay the whole weekend home resting and waiting to feel better. While sitting and wondering what can I do (I wasn’t in a mood to work on anything), I decided to take a look at Python programming language. It’s been a while that I have developed a kind of interest to try this language but never had a chance to take some time out of a busy schedule. Many people were telling me good words about it, how elegant it is and how easy it is to write code using it, but I needed to try it to have my own opinion. Although I could only spend 2-3 hours during the whole weekend trying it, I would like to express my first impression of this language.

What I liked

  • There are plenty of learning resources. Although I could have started with a video tutorial, I chose to start with this tutorial by google which seemed to me quite concise and straight to the point. It was showing all important points without getting too much into details. Just what I needed.
  • Coming from a programming background, I found it extremely easy to start coding immediately in python. The language syntax may seem odd at the beginning but the learning curve is smooth. It’s easy to grasp the python way of coding, although, it may take some time to forget putting the semicolon at the end of the line though 🙂
  • The language seems elegant and rich in features. It has most of the features found in other languages such as Java, C#, and PHP.
  • The fact that you can write code in the command line was interesting to me 🙂
  • Working with lists and tuple structures was extremely easy and handy.

What I did not like

  • The fact that there are no curly braces and semicolons at the end of the line might cause a little headache for those of us who come with a background from the C line of languages (C++, Java, C#, PHP, JavaScript, etc.). Omitting semicolons looked easier to me than maintaining the lining of code to keep track which code belongs to which block. After you get used to it, the whole code starts to look more elegant and easy to read.
  • You can define variable names same as built-ins overriding system variables. I think this could be a big point of confusion for newcomers.

Summary

I admit, evaluating a programming language by spending three hours learning it is extremely hard and might lead to biased judgments. However, I write this review solely because of my positive impression with this language. I like learning new programming languages as almost each of them have good parts and practices from which we all might learn and benefit. Certainly, python has its share in this and in my opinion is worthy to give a try. For me, my next step should be to find an opportunity to use it in a real life web application and see the experience 🙂

What is your experience with python? Share it with us.

 

*python logo image source: http://www.vizteams.com/wp-content/uploads/2013/08/python-logo-master.png

5 reasons you should be a web developer

Over the plenty of career choices in the world economies, choosing what to do for living is not an easy decision. A healthy career comes out of finding the intersection of market demand and what you love to do. Being in the software industry for around fourteen years, and ten of them spent in web development, my career choice of web developer has come out of a funnel, starting as a desktop application developer and refining my knowledge to web development as the potential market started to emerge. But web development has changed dramatically last ten years. The possibilities of web applications often surpass those of desktop applications in market reach and sales perspectives. I will list here 5 reasons you should be a web developer.

1. You can work independently

Being a good team player is an essential skill required to be a part of any organization, but when it comes to starting a private business or wanting to earn some extra money in addition to your full time job, being able to work alone is equally important and a huge benefit. As a web developer, you can create web applications, web sites, themes, and many more digital products which you can easily monetize. You may sell gigs in sites such as Fiver, or create WordPress themes and earn some extra money by working an hour or two in the afternoons at your home .

2. You do not have a big startup cost

Developing web applications does not require huge computing resources. The startup cost is as cheap as having a moderate computer and an internet connection. Many of the software tools which are used to develop web applications are free of charge or cost less than $100. Nowadays, even the hosting providers have lowered the hosting prices quite a bit, and you may easily find good hosting to your web site(s) for ~$5 per month.

3. You can sell your work online

Being a web developer, you do not need any shipping or packaging of your products. You simply push your code to the hosting server and run it there. You may also easily do remote consulting work or create web sites and sell them in different market places. Envato is one of the companies that provides different marketplaces for different digital products, one of them being for WordPress themes: themeforest.net.

4. You may develop mobile applications with web development skills

Web development has evolved over the years, and with that, the support to browsers as well. In current days, you may easily pack a web application as a mobile application and publish it in Apple AppStore, Google PlayStore, or any other mobile app market. The user interfaces may often be very similar to native applications and may create a full featured mobile app with a plain web development skills, thus, allowing yourself access to a huge market and business opportunities.

5. You have plenty of tools and framework to suit your work style

As a web developer, you will have plenty of tools and frameworks which make your job easy in many different ways. Of course this is highly impacted by the platform you choose, but I would confidently say that, all major web development platforms and languages have good communities with good support and plenty of tools available to develop web applications and web sites. This will make your jump start to web development easier and time to market quite short.

If you have not yet decided which profile of developer you want to be, here are five reasons to be a web developer. Web developers have plenty of opportunities in front of them which suits the needs of different kinds of persons. You may be an entrepreneur or a full time professional developer, web development has a lot to offer to you.

What is the mission of a software developer

Nowadays, there is a great demand for software development out there. The world needs software solutions just about anything. From planning and running complex business and industrial services to planning and running your day. From execution of mission critical operations to playing for fun, almost everything is backed by a software. There are millions of software developers out there and yet the global need for them is not about to be met. The world needs a lot more software developers, but seriously, why do we need them, what is the mission of a software developer that is so important to the world economy?

Let us analyse first how a software developer grows. Basically, there are two major paths one may follow to be a software developer. One is to have a formal education (be it a university degree, or a formal training program) and acquire the necessary skills to develop software, and the other is to be an autodidact and teach yourself using plenty of available resources (books, online courses, articles, tutorials, etc.) about software development.

The self learning approach is very personal and it is hard to generalize the way one teaches himself therefore it is hard to draw conclusions that what process is followed or what the outcomes may be. Also, compared to the numbers, I am sure this group is the minority, and the majority of developers come from a more formal path.

The formal path, however, has a visible indicator how one is being trained in the field of software development. We can have a look at the curricula of many universities and analyze them. We can get a subset of subjects that are covered from most universities, or so to say core subjects,  and they are programming languages, databases, data security, algorithms, maths, web development, etc. (I am not focusing here on training programs as usually they tend to have a narrower focus on one technology or one aspect of it, and rarely on a complete process as universities do). Some universities offer also non computer science complementary courses such as on entrepreneurship, preparing business plans, biology, etc., but only as elective courses that are left on the will of the student if he or she wants to take it.

From the university curricula I have seen, I can draw the conclusion that most of the universities prepare the software developers as pure technical persons who are supposed to solve technical problems related to software development. But is this the reason world needs the software developers that much? Personally, I do not agree with this, and I keep asking myself the question:

What is the mission of a software developer?

Let us try to answer this by trying to find the answer to this question: What does a software developer do after the graduation? I can think of several answers to this:

1. Industry path: He or she is employed by a company who needs software solutions for their business needs (be it a software developer company, a bank, an engineering company, a distribution business, whatever…) and he/she works there trying to create software solutions for the needs of the company.

2. Academic path: He or she may decide to pursue further studies and be a researcher who continues to contribute to academia by teaching and to the knowledge by researching unknown solutions for existing technical, real life or business problems.

3. Entrepreneur path: He or she creates a solution for a real life problem or a business problem, makes a business out of it, and creates an enterprise which runs a business by providing a software solution for a business problem.

Of course it is not easy to sum up all available paths to follow, but in my opinion these three cover the major available paths to follow for a computer science graduate.

Now what can I see from these choices is that, none of them are about solving technical problems purely. What I can also conclude is that, solving a real life or business problem is what turns out to be the real reason why we need so many software developers today. From this, I can confidently say that

The mission of a software developer is to solve real life and business problems.

You may say that is something we know and it is obvious, what is the problem about this? Well, I have a lot of contacts with different developers, experienced ones and want to be ones, university trained and autodidacts. I am teaching programming courses myself on a university level and professional level for over 6 years now, and I have had the opportunity to deal with over 1000 students up to now. What I can see is that, software developers see themselves as technical persons who are there to solve technical problems and they do not care about the business world. All they are interested is that how a technology or a framework works and how they can use or advance it. That is it. They care about code quality, they care about unit testing, they care about code reuse, and lots of other technical characteristics of the software, but rarely they discuss about how usable their applications are, or how efficiently they optimize a business problem their software is addressing or what business value they have delivered with the software they have built. I am not saying that technical characteristics are unimportant, far from it, we should always strive to write the best quality code we can, according to best industry standards, using best practices, and best patterns we know. I am just stating that the most important thing is we deliver value with software. If there is no value, there is no point having unit tests, most clearly written code, or bug free code, as it will not be used.

But perhaps this is not their fault as the education system they are following is not preparing them to think in that way, and that is where our duty as computer science teachers come to a focus. It is us, everybody who teaches a computer science related subject, be it a university course, an online course, or tutorial series, we should communicate the idea that technology is there to solve real life and business problems. I do think that we should not grow technical persons who write code, but we should teach them to be problem solvers who provide value with their solutions.

What do you think? Leave a comment and let’s discuss about it. If you agree with my opinion and think this is a valuable point, please share it so it reaches a broader audience.

Subscribe

Get my posts in your inbox weekly

* indicates required


A beginners’ guide to web development

If you are reading this post, most probably you have some sort of interest in web development, or even you think about starting to learn about web development. In this post, I would like to show you what path you can follow to be a web developer. This is a beginners’ guide to web development from the perspective of what to learn and how to specialize. This is not a post in which you will learn coding. I just want to point out the what you need to consider before you start learning to code. So, welcome to our dynamic and ever changing world. One of those fast-pace professions with lot of challenges and excitement. So let us define some basic concepts first.

Front End vs. Back End

The initial separation you will feel here is Front End vs. Back End. Let us clarify first what is Frond End and what is Back End.

Front End

Web applications are categorized as distributed applications with a client-server architecture. So, we have a part of code which runs in the client and another part in server. The part of application which is run and rendered in client (most of the time, the client is our web browser) is called the Front End. The most usual technology combination which is used to develop for Front End is HTML+CSS+JavaScript. Front End specialists usually develop expertise in creating Front End of the web applications using these technologies. Another common skill Front End developers master is slicing Photoshop designs to HTML+CSS+JavaScript web pages.

Back End

Back End developers write code that runs on server. Usually, this part of the job entails communication with the DataBase for reading/writing data, reading/writing files, doing the business logic, etc. In some cases where the business logic resides in client side, then Back End is used to serve the data from the DataBase usually in the form of Web Services. Back End developers usually master one of web programming languages and a DataBase Management System.

 

You can master both, but from my experience, I have seen that all web developers tend to like one more than the other. Some even specialize on only one of them. Although there is a line of separation, there is no limit that which side should do what. Sometimes Front End is used only for visual representation and all the job is done in Back End. In some cases, Back End only serves the data and all the calculations and functions reside in Front End. It is a matter of design and architecture to define which side does what (although, depending on the architecture you choose, there are some guidelines about the responsibilities of each side).

Programming languages

There are a lot of available programming languages for web development. When we want to program on Front End, the defacto standard language is JavaScript. When it comes to Back End, we have plenty of choices. Let me list some of the popular choices:

  • PHP
  • JavaScript
  • Ruby on Rails (used with Ruby programming language)
  • ASP.NET (used with .net programming languages)
  • Java EE
  • Python

And this is not a definitive list, just those that came to my mind right now. So which one to choose. Well, your choice should be evaluated based on some factors like: the job market, hosting environment of the web application, available learning resources, available time to learn, the development community around you.

If you want to work as a web developer, in my opinion the most important factor is the job market. You should analyze the job market you are in (or you want to be in) and chose that language that has most job openings. Another important factor is the hosting environment. For example, PHP hosting is quite cheap compared to Java hosting. If you are going to develop an intranet application which is going to be hosted internally in an organization, perhaps Java EE could be a very good choice, but if you want to host your application online, Java EE could be rather expensive compared to other languages.

With the popularity of Node.js, JavaScript has started to become a popular choice of Back End programmers, however, this is still quite a new and immature technology compared to others, and I would not recommend it as a choice of beginner Web Developer.

In my opinion, PHP has the easiest learning curve, cheap hosting environment, plenty of learning resources and relatively easy development environment, so I would recommend to any beginner web developer start with PHP. ASP.NET is also a good choice. Microsoft offers a lot of learning resources, free development tools and a pretty rich environment. If you like the Microsoft ecosystem, ASP.NET is a very good choice.

Frameworks

If you are a beginner, give yourself some time before you start learning a framework. Frameworks are code libraries which make the life of a web developer easier. Frameworks give a structure to a web application, help web developer do some tasks a lot easier and faster then coding everything yourself. If you want to be a professional Web Developer, then it is a must you learn at least one framework, which boosts your speed of development.

You have a plenty of frameworks which try to be general solutions or specialist solutions. You must evaluate your needs. If you have chosen PHP, I would recommend Laravel as a framework of choice. It is a sound MVC framework which is quite trendy these days. If your choice is with ASP.NET, I would definitely recommend you learn ASP.NET MVC and EntityFramework at least.

Web development can be huge and you may want to focus on one type of applications, let’s say development of web sites with Content Management Systems (CMS). Again if you have chosen PHP, I would recommend you continue with WordPress. WordPress allows you to create web sites, blogs, but also it can be extended with ready plugins or custom themes and plugins to quite complex business applications.

You will find plenty of choices for frameworks for any language you choose, so based on your language of choice, you will have to work with different frameworks.

What next

As a first advice, even if you choose to specialize for Front End or Back End (I would strongly recommend you do), you should have a grasp of the other side, and if you do, your team’s performance will be better. If you have learned a programming language and mastered a framework, what I would recommend is you start with another one. Programming languages have their own philosophies and paradigms, and sometimes some differ quite a lot. Knowing two or more programming languages will allow you have a better picture and understanding how programming problems are tackled and will make you a more fluent developer. As I said earlier, you have to consider many factors when you choose your languages. My choices until today were: JavaScript, PHP, ASP.NET, and Java EE. I’m still looking forward to extend my list 🙂

Do you need to take developer certifications

Software development industry is one of the fastest progressing industries. New technologies, amazingly fast changing businesses, and advancement of requirements make learning a daily task of software developers. In a way, when we choose this profession, we kind of agree to lifelong learning, but there comes the question:

“Do you need to take developer certifications?”.

Personally, I like developer certifications. You can see from my profile, I have taken 9 different industry certifications, mostly for Microsoft technologies. The biggest value I see in taking certifications is learning the details of some technologies. As the saying goes “The devil is hidden in the details”, I like learning some technologies in deep details. I do not claim that I do remember all those details from all the certifications I have gone through, but from the experience, I have had some “aha moments” when some of those details have spared me lots of time. Certifications have also helped me to establish my knowledge and credentials as knowledgeable person in those technologies and help me teach those technologies in various courses.

The effect of certifications on your career

I have read in many articles that certifications help you find a better job. I would not argue that you can look better or more prestigious with all those certifications but personally, I have not seen any case that certifications have been the ultimate factor for hiring someone. Perhaps I’m short of that kind of experience, but I put myself in the shoes of a hiring person, if I’d be choosing someone to hire, the certifications surely would be a benefit or a value added for the candidate, but not an important factor for my decision. The important factor is the knowledge one has, and industry certifications can only be a plus.

The effect of certifications on your professional development

If you have taken and passed an industry certification, most probably you have followed a learning plan to learn all the objectives tested in the exam, and that has pushed you to have some good understanding of that specific technology. Moreover, you have seen the latest developments in that technology and have become familiar with what is required to follow on further developments.

Development technologies advance every day, and if you follow the cutting edge technologies, this is an indications that you are also a productive developer as new technologies most of the time make the development process easier and faster. I have not seen a better illustration of this than this picture

are you too busy to improve

The effect of certifications on your personal brand

Branding is not something exclusive to corporates. We all have our brand, your name is a brand, and you should work to make it better and better. Taking certifications will have a positive impact on establishing a firm expertise in your industry and showing how seriously you take your career and personal development. Certifying your knowledge will have an added value towards the development of your personal brand as an industry expert.

Conclusions

As I stated from the beginning of this post, I am very much into certifications, not from the marketing benefits I get from them, but from the learning and self development benefits I get from the process of preparing to take the exams. Personally, I have had a lot of benefits from the knowledge I have gained during that process, therefore I would recommend taking industry certification exams to anyone who wants to advance in software development career.