Pietro Menna Home page

The role of a senior developer

Last year, around August/September, I got the chance switch my role at work. I became a Development Manager, which is something similar to Engineering Manager in some places. It is not a technical possition such as “technical Leader” or “Development Lead”.

Since I got to this role, I heard sometimes the question “What do I need to do to become a senior developer?”. I do not know if I have a real answer to this question since it depends a lot in different factors.

What it means to me being a senior developer?

Being senior in something means you have experience in something, you have been exposed to many situations that you had to figure out on your own. I do not mean just technically, I also mean having worked in different roles in different projects, having to deal with conflicts, having to deal with having to eventually help others in matters that you are not an expert, but you wanted to help and learn so you both grow together.

It is not related to having more knowledge of a technology domain (expert in the libary usage), but knowing how to browse for solutions or whom to ask for help.

It is not about “knowing better” than the junior colleagues, but listening to all ideas and learning from others.

It is not about being the one who always will deliver on time, but to have maturity to say: “I will not be able to deliver in time, but I will be able to deliver up to X point in time”.

It is not about being more aligned with you management structure, but the one who can warn management when something is not right.

It is also not about being the role model or the one that takes administrative tasks. But it is about being involved in more than just code, for example discussing with stakeholders, mentoring peers, helping in interviews for other engineers, etc.

It depends a lot

The truth is that it depends on a lot of factors, and it is different everywhere. Some criterias that maybe are useful in many places are: years of experience, knowlegde in the domain you work, interpersonal skills, technical skills, the overall perception you cause on your other peers, how you got into your organization and your initial negotiation.

There are organizations where is common to see a lot of people with the senior title. In this case, what it really means to be senior?

In other places, being senior is a way of recognizing a person.

Conclusion

It really depends a lot and to have a real answer for your own situation, you must analyze your organization.

Never install a database again

Yesterday I went to FISL to watch some of the talks. I learned a lot in just a few hours and got impressed how networking and events such as conferences can make participants to learn such amount of content in just few time.

Some of the talks I went to listen were about Docker and others about UX and MongoDB.

Docker

The speaker of the docker talk I went to see, said an interesting phrase: “Never install a database again”. His point was that Docker allowed us to have the service we need without having to install in a local environment again.

Some years ago, when we wanted to to have development environments which we could share with someone else, we created a Vagrant image. Which was a virtualized, full installation of a operating system, the databases required, and the libraries required.

Whenever we needed to upgrade a component in that image (lets say a new version of ruby), you needed to create a new image and distribute it again. We can say that the image would be large.

Docker allows to share a container (which happens to be a minimal image of a operating system which only provides a single service). By service we can assume a “Database”, or a “Web Server”, or any other type of application communicates via network socket.

Docker composer

What most impressed me was that in a 1 hour time, it was shown how to generate 4 development environments by using Docker Compose.

With Docker Compose it is possible to define the services which interact with you application. It is basically a way to define multi-container environment for your application in which each container contains a part of your application.

In order to define the multi-container environment, the developer has to set up a docker-compose.yml which described the application. More information here.

Not installing MongoDB as example (but having available)

Cool, but I just want to benefit to install easily a Database, not using composer or anything like that yet! Let`s try MongoDB.

In order to achieve this, we can follow the steps:

  1. Install Docker, in my case, I installed Docker for Mac. There is also the Windows version, and of course the linuxes versions which depends on your linux flavor you use.

  2. All next steps are on the terminals. Ensure your deamon is running.

      $ docker version
      Client:
       Version:      1.12.0-rc2
       API version:  1.24
       Go version:   go1.6.2
       Git commit:   906eacd
       Built:        Fri Jun 17 20:35:33 2016
       OS/Arch:      darwin/amd64
       Experimental: true
      Cannot connect to the Docker daemon. Is the docker daemon running on this host?
    

If you get that, you need to ensure that Docker deamon is running. In that case you will get something similar to:

    $ docker version
    Client:
     Version:      1.12.0-rc2
     API version:  1.24
     Go version:   go1.6.2
     Git commit:   906eacd
     Built:        Fri Jun 17 20:35:33 2016
     OS/Arch:      darwin/amd64
     Experimental: true
    
    Server:
     Version:      1.12.0-rc2
     API version:  1.24
     Go version:   go1.6.2
     Git commit:   a7119de
     Built:        Fri Jun 17 22:09:20 2016
     OS/Arch:      linux/amd64
     Experimental: true`
  1. Get the image you are looking for. Also if you have a chance, browse for it on Docker Hub. For mongo it is here. For getting the image, use docker pull

     $ docker pull mongo
     Using default tag: latest
     latest: Pulling from library/mongo
     8ceedfe606fc: Already exists
     de56a622d4ac: Already exists
     6f6965220a2d: Already exists
     290580b9cb91: Already exists
     74518025c1d4: Already exists
     7caf7e3d8fb7: Pull complete
     dcfe9afaf914: Pull complete
     b3c5b8f22de4: Pull complete
     b66f9b8214cf: Pull complete
     Digest:         sha256:fc89af57055910959cd94c3f852150fc0dafc95e2b081            b57d109711dbcf0d506
     Status: Downloaded newer image for mongo:latest
    
  2. You are ready now, just run the image my forwarding the port of the service you need:

     $ docker run -d -p 27017:27017 -p 28017:28017 mongo
        
     curl localhost:27017
     It looks like you are trying to access MongoDB over HTTP on the native driver port.
    
  3. It worked!

Now I have a working mongodb service running on my machine and I am ready to learn Mongo!

Conclusion

It is possible to avoid the hassle of installing software which is not always necesary on your computer by using Docker. Docker also provides mechanisms for developers to create virtual environments which are replicable on any machine which runs Dockers thanks to the container technology.

The problem of eBooks Business Model

The expectation of readers of eBooks is different to the readers of paper books. They are completely different technologies and its users have different expectations. The expectation also depends on the type of content of the book/eBook.

Currently there are some publishers and authors who struggle to see the difference, they keep publishing eBooks as if they were only books. In some cases, example for technical content eBooks (example: eBooks about a programming language), this should be unacceptable.

Different expectations for different models

Novels

Reading novels on a paper book feels a lot better than reading on a eBook. You feel the paper, you can carry anywhere, and also the reader is usually pride and wants to show what novel is currently reading.

Novels also do not get updated, it is rare (or inexistent) the case in which a novel has a new version. Usually only a few words gets changed from one print to another, the content is the same.

When a reader buys a novel as eBook, its expectation is usually to read on a Kindle device, or his iPad, or any other digital media. His expectation is that the content is readable on his device, and that the content is the same as the printed book.

Technical books

When a reader buys a technical book, because he wants to learn a new technology, he expects that the book is accurate and the examples contained on it work. It is understandable, that a typo may have gotten through and go to an errata on a web site.

When a publisher/author charges extra for the digital version, the expectation is the same as if it was a novel book, plus that the eBook will be updated with the new prints. If the reader downloads the latest version, it should be reading a version in which the errata is already corrected.

The technology business model of books/eBooks

Technology is always evolving, and changes to software, programming languages are inevitable. Some changes are also not backwards compatible. As an author, it is great opportunity to get a technology from the begin and publish a book about it.

If the initial book is successful, and lot of changes occurred to the software/programming language, it is an opportunity again to make money! You can release a new version of the book with updates! Specially if you wrote a very good previous version, lots of people will buy the new version.

For a reader, it may be interesting to buy the new version if many things changed, but otherwise it will just stick with the old one.

eBooks as opportunity

For authors, an eBook should be an opportunity to keep the readers updated with any small change that may come. This is a way to keep them reading the content which was initially sold in a more accurate way.

When a book contains examples which are to be run on a computer, they must be working! If a small change on the language software breaks an eBook, the author has an opportunity to make a small correction and release it in the latest version of the eBook. This practice is better than keeping an errata or a “companion”.

Just buy the next edition

This is what you would usually hear as a reader, but in days that subscription model is what we hear, and that re-generating an eBook should take the same amount of time that writing an errata, you should have the most accurate content available.

We should actually pay for new content. For example, a new version is released which requires major rework for the author, we should pay for it. Maybe not the full price, but it is even understandable.

My bad experience

When you buy an eBook about Cocoa Programming for Mac OS X, you expect the examples to work. You do not expect to read the eBook, watch the examples not to compile, and read a companion.

The people from Big Nerd Ranch actually have the best books for Cocoa and iOS, and they are very professional to release the companion guide.

Unfortunately, my expectation nowadays is not a companion, but a new eBook version which contain the changes from the companion.

I bought the previous edition of this book , and decided to buy the current version because of the change from Objectice C to Swift. I wouldn’t have bought if I knew I would have to read a book in which the examples do not compile!

It does not compile not because of the authors are careless, but I think it is related to be published by informit. I have not yet seen an eBook from this publisher to be updated. I suspect this bad practice comes from the publisher which has an outdated business model.

Don’t get me wrong, informit publishes great books from awesome authors, but this practice of not updating is not correct!

My good experiences

The expectations I have mentioned in this post comes from the books and eBooks I buy from the Pragmatic Programmers site.

Their good practices are:

  • Update eBooks instead of errata.
  • Small updates even on code examples, creates a new version of the eBook, and this is usually free.
  • New versions of eBooks, usually come as an upgrade of the previous version, sometimes with discounts.
  • The reader receives updates about the eBooks he owns.

There are other authors and publishers which also follow these practices. This is what I expect as a technology guy who reads technical stuff.

Summary

The content of a book determines the expectation of the eBook version. Some publishers still works in a Business model which is no longer the ideal for the reader point of view for technical eBooks.

Maybe as readers we should demand more from the publishers and cheer the publishers and authors who play nice.