CPANday 2017

CPANday 2017 is over.

This year I remembered CPANday, after a tweet from @neilbowers pointing to a blog post on CPANday 2017, I even jotted it into my calendar all in due time and promised myself I would contribute something.

As CPANday came closer I still had no plans on what to contribute or what to work on. At the same time my workload at work was immense, having CPANday clashing with a sprint ending and a project deadline.

After a whole day of refactoring a test suite for a service/application, I came home late and was about to give up on the idea of contributing anything at all. I had some candidates, but I was too tired to take on something big or overly complex (or so I thought). I considered what could be low hanging fruit and decided to take a look at my Github issues, to see if anything stood out.

An issue with one of the dependencies I use looked interesting, but still perhaps, not something I could do anything about – I guess my weariness, got the better of me and I just dug in.

The issue was related to my CPAN distribution Date::Holidays and problems building Date::Holidays::CN. Date::Holidays::CN depends on DateTime::Astro, which seemed to be the culprit, I took a look at the issue list for DateTime::Astro and located two RTs:

RT:112240
RT:101846

The first one seemed quite easy and as pretty low hanging fruit, so after consulting the documentation of Module::Install, I got the build script improved and sent my first PR.

Completely fired up by this quick fix I decided to take a look at the remaining issue.

This required some more debugging, but luckily the issue reporter had given a good hint on how to demonstrate the error using Time::Fake.

$ env PERL5OPT=-MTime::Fake=$(date --date="2016-08-31 12:00:00" +%s) \
prove -b t/006_solar_longitude.t

I had some problems with the date command running on MacOS and I was too tired to get my head around the man page. In order to mimic the example from the issue report.

So I made my own example, calculating the number of days until the end of the month (15 on CPANday).

$ env PERL5OPT=-MTime::Fake=+15d prove --lib -b \ 
t/006_solar_longitude.t

When I was able to reproduce the error, I did some debugging and found out that the construction of a DateTime object failed, due to the fact that the date parameters were illegal (well the error output actually stated this).

After some thinking and useless experimentation it struck me that the construction was sequential, so I reordered the parameters so the day would be before the month, so we would not be altering the default object (based on the current day) so it could be a invalid date. This resulted in my second PR.

All in all a good CPAN day, short, but effective. My PRs got accepted and a new release of DateTime::Astro is now available on CPAN.

I never thought I would be able to contribute anything, so I was quite impressed with myself and my accomplishments. I even picked up a few new tricks, like Time::Fake.

I still have no idea why DateTime::Astro is needed, but it does not really matter, since the issues were a SMOP.

Now I am just looking forward to CPANday 2018.

jonasbn, Copenhagen

Advertisements
CPANday 2017

Test::Timer Release 2.00

Received some feedback on release 1.00 of Test::Timer, this has resulted in further improvements and release 2.00.

The diagnostics of failing tests using Test::Timer, now also presents the actual execution time observed.

Next goal of the next feature release, is to handle higher resolution than seconds. In the mean time a release with improved documentation is planned to go out.

Until next Timer – release, take care

jonasbn

Test::Timer Release 2.00

Date::Holidays 1.06 Release

I have uploaded a maintenance release of Date::Holidays to CPAN.

I am planning a lot of activities in relation to Date::Holidays (more on this is an upcoming blog post).

For now I have added a lot of tests of some of all the modules that Date::Holidays has adapters for and some which have not been evaluated completely yet. I am trying to get an overview of the actual status of Date::Holidays and related modules in order to plan further progress.

A part of the larger plan, is the introduction of a proper homepage. So just as for Test::Timer, Date:.Holidays now has a more appropriate representation on the web build using Github pages (also described in a blog post).

So more activity will follow in relation to Date::Holidays – I just need to flesh out the details and the plan.

Take care,

jonasbn

Date::Holidays 1.06 Release

Test::Timer Release 1.00

Yesterday while sitting at the computer working on a release Workflow I received a Github issue.

Test::Timer is a Perl test module that can assist in specifying timing thresholds for code execution. You can then specify that your test suite should break if the code takes too little or too much time.

The concept requested was simple, in the diagnostic messages emitted from the module, the thresholds specified should be mentioned. The implementation did not take long to implement.

However since the diagnostic messages was changed and somebody might be relying on these I decided to make it a major release to indicate this somewhat breaking change.

Thanks to Nigel Horne for the issue report I hope the implementation meets your needs and expectations.

Test::Timer 1.00 has been uploaded to CPAN, feedback most welcome.

Have a nice weekend,

jonasbn

Test::Timer Release 1.00

Workflow Release 1.43

First release of Workflow in a long time, but luckily I received a pull request from Oliver Welter

Oliver Welter has earlier offered patches implementing custom workflows (1.35 and 1.37) and factory subclassing (1.35) and now improvements in logging for condition validation with the latest release 1.43 – thanks Oliver, you make me look lazy ūüôā

During the testing of the release I ran into an issue with the Dist::Zilla plugin: Dist::Zilla::Plugins::CJM. Related to failing tests due to deprecation. David Golden has offered a pull request, but the author Christopher J. Madsen seems unresponsive and his activity level on Github has flatlined :-/

Changed configuration to an alternative by Dave Rolsky and everything seems to be running as expected.

Release should be available on CPAN shortly – have a nice weekend,

jonasbn

Workflow Release 1.43

Date::Holidays 1.04 and 1.05 Released – introducing Belarus

I am happy to announce a new release of Date::Holidays. The release is 1.04 and is based on work by Vladimir Varlamov, namely an adapter for Date::Holidays::BY, a module for handling holidays in Belarus.

Thanks to Vladimir for his contributions.

Unfortunately I got carton’s local/ directory included in the distribution tar-ball, which Alexandr Ciornii (CHORNY) was quick to tell me so 1.05, got shipped shortly after.

Thanks to Alexandr for bug report.

Holiday season is coming up, so check out Date::Holidays

jonasbn

Date::Holidays 1.04 and 1.05 Released – introducing Belarus

What does full-stack developer even mean?

I see the term full-stack developer everywhere, this got me thinking:

What does it even mean?

To recruiters it seem to say:¬†“we want somebody who can do everything“, meaning we want to hire somebody being¬†a perfect match no matter what, perhaps even in context of wherever technology would take¬†us.

To developers however it seems to communicate that a developer is capable of handling the ability to work in all tiers of a given stack, meaning front-end to backend, UX implementation to datamodelling and everything in between.

The two are actually not far from each other, but … what stack are we actually talking about when we say full-stack and is this even possible?

Lets start by examining what a stack is.

LAMP

lamp
Traditional LAMP Stack

There used to be a term, which you do not see so often anymore, since it has somewhat been booted by the full-stack term and that is  LAMP (Linux, Apache, MySQL, and PHP, source: Wikipedia).

The top-layer of the stack can¬†be replaced by a suited language like Perl, Python and possibly even Ruby), meaning that the definition of the LAMP stack is¬†not even entirely clear – but this is¬†a basic traditional stack and possibly one, which was and still is dominant in many workplaces, simply due to it’s popularity and wide-spread adoption.

lamp-abstract
Abstract LAMP stack

MVC

Since however the LAMP stack is a bit ambiguous lets break it down. From an¬†MVC (Model-View-Controller, source: Wikipedia) perspective it would look like this and¬†we get¬†recognisable depiction. This makes it a bit easier to identify the tiers of which the stack is comprised – let be get back to this later…

As mentioned the  LAMP stack is still around in some sense, but the classical representation does not really depict the more fine grained stack predominant today.

A 6 Tier Stack

Due to the Javascript revolution a large part of the stacks in production today can be broken down even further, Javascript was doable and used earlier, but not to the extent and in the same way as today. Taking this into consideration it is possible to do a more clear distinction.

6_tier_stack
6 tier stack

The controller/view tier, is much more well-defined and can be sub-divided on technologies, the distinction is not really communicated by the traditional LAMP stack, even though this possibly has been a more or less the de facto standard, having Javascript play a larger or smaller role based on adoption.

mean
MEAN stack

MEAN

Which brings us to another very predominant stack Рthe MEAN stack (MongoDB, Express.js, Angular.js and Node.js, source: Wikipedia).

The MEAN stack is a Javascript centric stack and the hard part when talking about a Javascript centric stack is the sheer number of variations based on frameworks etc. and the combinations possible, but the MEAN stack is very popular and seems adopted widely.

 

The abstraction of this stack demonstrates a very interesting aspect of the more modern stack Рthe separation from the operating system. Of course there is a an operating system beneath the stack, but in general it does not play as significant a role as earlier.

mean-abstract
Abstract MEAN stack

This whole discussion on the significance of discussion the operation system as part of the stack is interesting, unfortunately the topic is beyond the scope of this article, so I will leave that stone unturned.

Yes there are alternatives and there possibly as many variants of this traditional stack as there are software teams/developers/PaaS product managers. I have attempted to annotate the 6 layer stack, with some technologies just to give you a picture, there are languages/technologies that I have unintentionally left out, forgotten or have not heard about, fill me in in a comment Рbut lets move on.

annontated-5_layer_stack
Annotated 6 layer stack

To get back to the question on: “What does full-stack developer even mean?” Building on the figure above, you would have to select a set of technologies to represent the 6 layers of your stack and then you should be able to work in all tiers of a given stack, meaning front-end to back-end, UX implementation to datamodelling and everything in between.

What I have observed is that these stack-jumping super-developers do not really exist.

Each of the stacks requires specialist knowledge, since they are technologically very different. If you look at a single tier, like the server logic tier, all of the languages mentioned derive from the language C and have so much in common it is almost just a matter of syntax… *ahem* Javascript is derived from C and all in the same category, so we can actually collapse these two tiers into one. The separation was only aimed to represent the two functional areas.

Based on the above plethora of choices, I do not think it makes sense to talk about full-stack developers in general, unless you are very clear on what stack you are talking about. Yes you could go for the most prominent stack or buy into some specific eco-system. I have chosen not to touch on the Microsoft stack, since I have no knowledge of Microsofts current offerings in this area and the same goes for Java.

Developer Origins

I have observed is that developers come from somewhere. They have played around with some technologies, languages, frameworks, applications, operating systems, a stack, while they learned their way around computers. Then they got a job or an education and got exposed to new technologies and possibly even new stacks.

Some developers are be top-down, they originate from the front-end, design, UX/UI or some industry or education related to visual presentation or they just started working with websites and at some point needed some more functionality.

Others are bottom-up developers they originate from Systems administration and operation, which mean they now the OS and they now the applications part and all the operational aspects of modern applications. Perhaps they even originate from database administration meaning they are strong on data-modelling etc.

top-downbottom_up

The type I most often see is the diamond developer. These are classical computer programmers. They program and that is what they do. They originate from classical programming and at some point, they needed work with data so they got exposed to database technology. Later or before they get exposed to the concept of users  (other than themselves) and they had to create a proper user interface.

diamond

There are of course exceptions to all of the modelled developers I mention above and you can vary the size and contents of the different tiers, where some diamond developers excel in several interpreted and compiled languages, even other language concepts than the traditional procedural/OOP programming paradigms.

No matter where you come from, your perspective is unique and your toolbox is unique.

Full-stack Polyglot Specialised Generalist Developers

What does full-stack developer even mean?

It is a developer capable of working the different tiers of the stack and who can understand the different paradigms and technologies of which the tiers are comprised at the same time utilise best-practices and embrace requirements and who can consolidate everything into an application (on schedule, budget and with minimal defects and maximum security).

Just kidding…

Developers are a special lot. We specialise in our tools, we get thrown a problem and We have to understand the problem and the problem area. Which mean we have to become specialists in this particular problem area. When we solve the problem we get thrown a new problem, perhaps in a new job, gig, project and we have to become specialists again, but we often reuse our tool chain, which all of a sudden become a general tool. As we evolve with problem solving we extend our toolbox Рwe become specialised generalists or general specialists.

So to rephrase the question, does Full-stack Polyglot Specialised Generalist Developers exist?

I have met many extremely talented, clever and resourceful programmers over the course of my career and I hope to meet many more.

My conclusion is that the term full-stack developer has to take the following into account:

  1. What does the stack comprise of we are talking about
  2. How many variations to the stack have your shop/project made to the stack
  3. What is the prominent stack on the market

Then we have a slight chance of talking about the term full-stack developer and be on the same track, but at the same time this does not even make sense as a general term Рdevelopers evolve, stacks change, due to developer evolution.

The stack of yesteryear might be the legacy system you have to work with as your next problem area or you have to work with the untested error prone top-notch newest stack on the block designed especially for the problem at hand.

Stacks are just bundles of tools. Focus on problem solving, extend your toolbox, become a specialist, have a general perspective on technology and choose the best tool for the job. You will encounter numerous stacks, you will by far not become a specialist in all of them, some you will love, some you will hate, but for most you will do both since there are no silver bullets in software development Рbut there are plenty of problems, tools and the fantastic gratification of providing the solution.

 

What does full-stack developer even mean?