Saturday, March 25, 2017

[Job Skills / Guest Post] Skills Gap Analysis: Is the Tech industry facing a serious talent shortage?

In this cloudy saturday evening I want to share a guest post by Maria Baranowska, Outreach Executive at Mason Frank International, global and niche IT recruitment company, who is passionate about responsible marketing and the growing digital world.

I decided to guest her and this interesting post because nowaday I'm facing an incredibly high shortage of skilled professionals and we are desperatly seeking guys willing to at least learn how to become a Salesforce programmer: and this is surprisingly strange in these times of crisis.


The Tech skills gap is like the monster under the bed. You’re absolutely sure it’s there, but you can’t seem to make it out in the darkness.

According to Fortune "there are currently 607,708 open computing jobs in the US, but only 42,969 computer science students graduated into the workforce". Globally, there is much debate on the area and what that could mean for the industry in years to come. So how significant is the talent shortage? What does it mean to be ‘unskilled’ in the field? And, ultimately, what does this mean for today’s tech professional?

The graduate numbers in computing are the initial concern. Outside the above stated, the problem seems to be global. In the UK, the number of graduates in the field actually reduced in the last year, despite the country’s widely considered status as European Tech hub, and an increasing number of technical jobs. Furthermore, the talent pool is further depleted by the lack of equal opportunities. Globally, "there is less than 20% women in tech" and university statistics do not indicate a growing trend. ‘Of the 63,000 UK students taking the subject in 2014-15, 85% were male’ according to a report published by Hired. This can be seen reflected in the workplace too. The Mason Frank Salary Survey states, globally, the split of male to female Salesforce professionals is 66% to 33% (1% undisclosed) indicating the industry is still falling behind the equality stakes.

The demand for more tech professionals is definitely still on the rise. The US federal government alone reported needing an additional 10,000 IT and cybersecurity professionals and, according to the same source, "more than two-thirds of all tech jobs are outside the tech sector".

The lack of graduates within Computing may seem concerning at first, however, there are many arguments that support the idea of there being absolutely no shortage of professionals . According to Hired, around a quarter of today’s Tech professionals do not hold a degree. This could indicate the nature of Tech vocations allows for ‘on the job’ training and education outside of the traditional framework. In 2016, Mason Frank International were responsible for qualifying 30,000 Salesforce professionals through specifically tailored training programmes. Companies are now taking alternative routes to create their own workforce. Microsoft recently announced their own degree programme in order to train a specialised workforce. This approach could be beneficial long term and as we see a rise in alternative education through apprenticeships. Across the world, governments are introducing coding and computing into school curriculums A shifting attitude. towards education also suggests a greater focus on proving technical and soft skills in other ways.

It’s also important to consider external factors. The US, among other countries such as the UK, relies heavily on foreign workers. The outcomes of changing political landscapes may limit opportunities to work abroad and hinder the closing of the skills gap. Technology leaders such as Mark Zuckerberg and Gerard Grech are speaking out against President Trumps recent travel ban in fear of limiting access to the best talent through changing roaming legislation.

The key takeaways of this post are first and foremost an awareness of the potential issues. Considering the pace of Tech growth, our education systems are not moving fast enough to keep up. However, business owners and employers have a responsibility to nurture talent through other avenues and hire more for personality so that training can be given to the right candidates. It’s the only way we can ensure our feature in Tech.


Thursday, March 23, 2017

[Salesforce] ORGanizer Chrome Extension hits its first 1000 active users! #PartyHard

I proudly announce that ORGanizer Chrome Extension we have reached the 1000th active ORGanusers!

A big thanks to everyone!

The Extension is free for all, support us to keep it free forever!

Click here and decide to:
  • offer me a coffe, a pizza, a cappuccino, a pasta (I'm italian after all) to thank me for this awesome job
  • share your love for the ORGanizer Chrome Extension on the social channels!

Monday, March 6, 2017

[Salesforce / Apex Runtime] Bug Report: Null exception not thrown

This little and simple post is to get Community's attention to a possible bug my colleagues and me found few days ago.

It's about how null checking differs if occurring from outside or inside an Apex Class.

For those who are TL;DR (like me), jump to the following Gist and comment if you have an explanation.

Let's take this simple class:

public class MyController {
    public Account tst{get;set;}
    public MyController(){
        this.tst = [Select Id, Name From Account limit 1];
    }
    
    public void myMethod(){
        system.debug('Test inside: '+(tst.Name == null)); //Throws null pointer exceptions
        system.debug('Test inside: '+(tst == null));
        system.debug('Test inside: '+json.serializepretty(tst));
    }
}

Let's take the following anonymous code:

MyController cnt = new MyController();
cnt.tst.Name = 'test';
cnt.tst = null;
system.debug('Test outside: '+(cnt.tst.Name == null));
system.debug('Test outside: '+(cnt.tst == null));
system.debug('Test outside: '+json.serializepretty(cnt.tst));
cnt.myMethod();

Question: What do you think is the debug?

Answer:

19:06:58.24 (32784451)|USER_DEBUG|[5]|DEBUG|Test outside: true
19:06:58.24 (32903967)|USER_DEBUG|[6]|DEBUG|Test outside: true
19:06:58.24 (33182107)|USER_DEBUG|[7]|DEBUG|Test outside: null
19:06:58.24 (33393615)|EXCEPTION_THROWN|[7]|System.NullPointerException: Attempt to de-reference a null object

Yes, that is!

Apparently calling a nullified member of type Sobject of an object instance from outside is somehow handled by the runtime as null, whether you recall a field (cnt.tst.Name == null) or the member itself (cnt.tst == null); while calling the same member from inside an object method, correctly throws a null pointer exception as expected.

This seems related to how Sobjects are handled when used in SOQL relationship fields, such as:

List<Contact> cntList = [Select Id, Account.Name From Contact limit 1];
System.debug('Account is: '+cntList[0].Account);
System.debug('Account.Name is: '+cntList[0].Account.Name);

In this example if the Account parent object is not presente, the debug outputs:

19:18:17.18 (79345369)|USER_DEBUG|[3]|DEBUG|Account is: null
19:18:17.18 (79634328)|USER_DEBUG|[4]|DEBUG|Account.Name is: null

This is somehow confusing.

I get that when dealing with SOQL queries this is useful (no null checking) but dealing with custom Apex Classes this can lead to real confusion.

These are my 2 cents, what do you think?

Wednesday, March 1, 2017

[Salesforce] ORGanizer Chrome Extension Version 0.5 is live!

Dear ORGanizer users, we have reached beta version 0.5, that means we are half way to version 1.0!

For anyone that doesn't know what the Salesforce ORGanizer Chrome Extension is, download it for free from the Google Web Store and, believe me, you won't be disappointed for sure!

As usual, if you find ORganizer useful please cast a vote on the store!

This release comes with important major and minor new features and several UI fixes.

  • OAuth login
  • Automatic data backup
  • Very Important Queries and Scripts (VIQ and VIS)
  • Other improvements

OAuth login


The ORGanizer allow login with username and password along with token if the Login with token flag is active.

If your company's password policies prevent you from using the ORGanizer to store passwords, from now on you can enable your browser to user OAuth: by requesting an access token the ORGanizer store (only locally and with encryption) an access token so it can requests a valid session Id without knowing the user's password.

This means that you need to authorize every instance of the ORGanizer you have installed, so you need to input password at least once for every laptop you own.

How does it work?

Create or edit a new Account by clicking on the ORGanizer extension icon and select YES in the Login with OAuth (no password) section:


With this configuration the password field is not mandatory.

The first time you try to login with the above user (or if the authorization of the ORGanizer app has been revoked by admin, read later for how this is done) you are redirected to this internal page:


Remember which username you are about to authorize and click the link.

You are then requested for your username and password:


And to authorize the ORGanizer App (in this screenshot you are seeing the stage app):


This app requires web and API access (otherwise the Extension cannot work).

Once authorized you are then redirected in the following page:


where the access is validated and the access / refresh token stored locally (encrypted, no remote syncronization is done). You can proceed with login or simply close the app.

The next time (ever after days) you login with this user you are automatically provided a valid access token to enter in your ORG.

This authorization process occurs while setting up a new connection or when an App in no more authorized in your ORG.

To revoke an access token, jump to Setup > Users > select the user you want to revoke and go to the OAuth Connected Apps section:


Revoke each OAuth token issued (you can find multiple instances of the Connected App).

If you want to block the whole Salesforce ORGanizer Chrome Extension Connected App jump to Setup > Connected Apps OAuth Usage:


You can even remove the single user that are using it:



Automatic data backup


On the ORGanizer Chrome Extension's Options page there is a new section:


The extension automagically saves a local copy of current ORGs and Accounts configuration every time you change a value from the Popup (or change encryption password).

You can set the maximum backup stack size (maximum is 100, minimum is 0) and download a specific backup.

Remember that the Reset all data! and Reset all local data! actions affect the backups aswell.

The bigger your ORGs and Accounts configuration is, the bigger is the local storage needed. Keep an eye on the new gauge on the SYNC/LOCAL QUOTA section:



Very Important Queries and Scripts (VIQ and VIS)


You can name queries and scripts you use often in the Very Important Queries and Very Important Scripts sections on the Quick Console.

V.I.Q.


V.I.S.


You can name a new query/script, select a saved one or delete one.

Remember that every query / script is only stored locally and affects the local storage limit seen in the previous chapter.

You can download a backup of all VIQs and VISs in the Options page:



Other improvements


The Quick Describe plugin's search now filters objects based on key prefix:


The Options page now shows a link to the main site FAQ page and every section has a ? link to get some help.


Reset the Quick Console size and position (it can become too wide or can move outside the window if you are playing with Chrome's window):