Posts Tagged

programmer

Javascript Class: ECMAScript standards

 Javascript class

Using javascript class will really improve your code readability, structure and making it shareable with others. ( see my other post: Coding standards: Meaningful Names in Javascript).

For many back end developers, this post would have probably been written over 10 years ago, as classes have always been present in many programming language ( c++, c# and java, etc..). Classes in javascript on the other hand, have just recently been introduced in the ECMAScript 6 release of 2015 and have not yet hit developers keyboards.

This post is aimed aimed to give an introduction to classes and it does not go in many details.

ECMAScrips for Javascript and its advantages

JavaScript does not have the best reputation amongst coding languages, but finally after the long waited version of the ECMAScript standard and good browser support, there is some light at the end of the tunnel, and it is time to deep into the enormous amount of changes that made into the standards.

In recent years, JavaScript developers have been busy creating a multitude of “hacks” and libraries to help us fulfil lack of features that made it hard produce a clean and structured code.

In June 2015 the ECMAScript standards 6 have finally provided a multitude of improvement to one of the most used language in the world, followed by a much smaller release (ECMAScript 7 in June 2016).

ECMAScript 6, took over 4 years to reach our desks, but it didn’t fail to impress and with current browsers finally introducing support for most of the changes, developers are now ready to get their hands dirty and help to improve JavaScript reputation.

Browser Support

Browser support has recently made a fantastic improvement, giving us all a chance to start and implement the great majority of the ECMAScript standards, without worry.

At the time of this post being published (June/2107) the support on desktop is almost complete ( click for full support table):

Edge

FireFox

Chrome

Safari

IE11

As shown by the table above, the support on desktop browser is quite complete, except the odd IE11 with an unacceptable level of support below 15%.

For mobile the situation is quite similar:

Android

iOS

Chrome

Almost full support for the most common browser except on android where just a quarter of features are supported.

Classes Before ECMAScript 6

Even if Javascript class have not been precisely available, developers across the countries have implemented them by using functions, scope, prototype and many other method. This has lead to a multitude of different approaches being adopted by programmers, making the dream of having a possible “standards” a myth.

In this post we will start from an existing small “class” written before the ECMAScript 6, and then implement the newly introduced “classes features” to show the power and structure that they provide to your code.

The code below is an algebra helper for rectangles.

Rectangle
 
var rectangle = function(width, height){
    var self= {};
    self.width = width,
    self.height = height;
    
    var calculateArea = function(){
        var area = 0;
        area = (self.width * self.height);
        return area;
    }
    var calculatePerimeter = function(){
        var perimeter = 0;
        perimeter = (self.width + self.height) * 2;
        return perimeter;
    }
    var getHeight = function(){
        return self.height;
    }
    var setHeight = function(height){
        self.width = height ;
    }
  
  return {
    calculatePerimeter: calculatePerimeter,
    calculateArea: calculateArea,
    getHeight: getHeight,
    setHeight: setHeight
  }
};

Classes in ECMAScript 6

In this section we are going to update the above code to use the javascript class feature.

Class

The first thing that we will have to do is create a base class called rectangle.

base class
 
class rectangle{
    
}

Contructor

Then we will create a constructor. In the previous version of Javscript to emulate the constructor we would have had to create an init function or a self calling function within the method. ( none of this example is shown above as this cover the basic to assign some values).

javascript constructor
 
  constructor(width, height){
 this._width = width;
 this._height = height;
 }

Getter and Setter

Our class is starting to take share, we will now implement the GET and SET methods

Javascrtipt get methods
 
   get height(){
        return this._height;
    }
    set height(height){
        this._height = height;
    }

This methods have been introduced in the ECMAScript 2015. They are commonly used across different programming language and do not require a function call to be initialised. An example usage of the above would be:

get and set
 
var r = new rectangle(10, 5);
r.getHeight;// Output 5
r.setHeight = 10
r.getHeight;//Will output 10

Methods declaration

Class methods have not changed and the declaration is very similar to the one showed in the initial javascript example. The main difference to note is that every method declared within a function will actually be set to PUBLIC. There are rumours of the implementation of public variables and methods for the next ECMA release ( Javascript new private class field). There are currently 4 different “solution” to make standards private methods, and they are all out of the scope of this post.

Method declared within a class will not require the “function” word, and do not require to be returned or specifically made available as they will be available as part of the object immediately after initialisation. Our example will be:

class methods
 
    calculateArea(){
        var area = 0;
        area = (this._width * this._height);
        return area;
    }
    calculatePerimeter(){
        var perimeter = 0;
        perimeter = (this._width + this._height) * 2;
        return perimeter;
    }

Conclusion

This post is aimed at sparkling some curiosity, and give just a small definition of javascript class. The final result is:

final
 
class rectangle{
    constructor(width, height){
        this._width = width;
        this._height = height;
    }
    get getHeight(){
        return this._height;
    }
    set setHeight(height){
        this._height = height;
    }
    calculateArea(){
        var area = 0;
        area = (this._width * this._height);
        return area;
    }
    calculatePerimeter(){
        var perimeter = 0;
        perimeter = (this._width + this._height) * 2;
        return perimeter;
    }
}
var r = new rectangle(10, 5);
r.getHeight;// Output 5
r.setHeight = 10
r.getHeight;//Will output 10

Classes are maybe still not fully ready for big production environment ( mainly because of the absence of a private field), but we should start to use them to get confident in using them when time comes. There are still some amazing features like inheritance ( that has not been covered in this post) that make class worth using.

I personally like the use of class because they force to structure the code differently. They put a big distinction between normal functions and big chunk of work and are perfect to get around Object orientated programming.

I will keep posting my finding on the ECMAscript 6 and future release as for my opinion this is the real future of javascript.

The power of mentoring

Intro

What a better way than start this post with this amazing quote from P. Collins. Teaching and mentoring is not sorely aimed at sharing your knowledge for others to learn, but it is the process in which you personally develop.

“In learning you will teach, and in teaching you will learn.” Phil Collins

It is well known that the IT industry is filled with many people suffering from “The imposter sindrome”, but in many instances these individuals are the best that the market is able to offer, and lean them toward a mentoring career, can be an eye opening experience.

What is mentoring

I have been looking for a nice definition for mentoring, and I finally found one that was short and concise on the oxforddictionaries.com

An experienced and trusted adviser.

I like this quote because it does not go in details, neither does it mention higher qualification or age or company position. It focuses on what really matter Experience and trust.

Experience and trust

Experience is of course a core required for mentorship, as a mentor is supposed to “guide” an individual toward an improvement of some sort. But this experience is not specific to one skill(more details below). During my last 4 years at Vizolution I have been able to be thought by some great mentors, each of which have inspired me in different ways, but what was really great was seeing employers coming in, learn, and share that knowledge with other people.

To mentor someone you need to have some skills to share. What this mean is that you could be very good in keeping notes, and therefore still be able to mentor and support a very disorganised Senior developer, or you could have adapted to scrum faster than your fellow colleagues and help them to get up to speed ( both true stories).

I really think that teaching and mentoring are completely two different way of sharing knowledge. When using the word mentoring, you are implying that you are taking “ownership” of an individual supporting him/her all the way, while teaching is just about knowledge transfer, and does not focus on how much the audience assimilate.

How to mentor

I personally love to mentor, but even more being mentored as I like to see how different people approach this subject and try to learn on the way.

To mentor people you do not need a bright star on your shirt, or a cool Job title on your name badge, what you really need is a state of mind, one that will put other people before any sort of priority, because as I said before you are taking ownership of someone skills and therefore have a duty to support them every step of the way.

I have always enjoyed teaching other people what I knew, but it has just been recently that I have been able to learn how to mentor people. I am currently supporting over 40 developers, and I try to build a specific road map for each of them to help them improve where they need it the most.

Lead the way

There are many different example that I could share, but the message is always the same, lead the way and make sure you are being followed (always make sure you are not talking by yourself, involve the person, test how much they are learning, let them take control).

If you are dealing with a junior developer, instead than just show the correct code to complete a task, you should first of all try to understand the thought that went behind his/her solution, and try to guide the programmer by showing  them the possible improvements and the different paths that could have been taken, so that the correct code becomes just a simple tool of a greater lesson.

Of course the mentoring tactic need to change depending from the individual. Some people want to be supported and helped and don’t really value themselves, but there could be other that are very confident and need a lighter support, they may not even know that you are mentoring them, but this is when mentoring really stands out.

Why do mentoring

It take time, energy, it is very difficult and sometime the person that you are mentoring may not even be aware of it, so why should you even bother.

Personally I think that a great mentor, is a great leader. Mentoring is the best way to learn your strength and your weakness. It help you with personal development and improves your existing skills.

I talked about “the imposter syndrome” above, because developers are well know for not being very social, and in many cases this is also accompanied by a sense of failure. Unfortunately, this developers, are usually the most skilled, but their knowledge is not shared. I have seen the great effect of mentoring on a specific individual, starting to share his personal skills made him realise how good it was, he improved his self esteem, and made him a key employed in the company. We usually focus too much on the core skills (in this case coding), and we forget that people may need help in different areas.

Who can mentor

It should be clear by now, that everyone should mentor. We may all do it differently, and some of us may not succeed at it at first time, but this does not mean that mentoring is not for you.

As mentioned above, I love to being mentored, I like to find the strength in people and let them teach me what their really know by sharing their love for something.  It is not important if they are junior, senior, or even if they do not work in my same sector, if someone has a specific skills that is worth sharing, it is important to accept your weakness and ask for support.

Conclusion

I am currently the technical lead, but this does not stop me going to admit that there are developers that are better than me in specific skills, and this is what mentoring did to me.

Mentoring and being mentored showed me my weakness, but it also showed that there is not harm in being open about them, because I also know to have many different strength. This state of mind is what helped me and there is no better or easier way to achieve it than by offering your help and open yourself to support others.

"