How to Build HoloApps

The Microsoft Hololens enables an entirely new immersive experience with computing. There is yet another digital layer that we have the ability to tap into and build upon. It is profound when you deploy a holographic model from your 2D computer to the 3D world.

What makes the hololens different from other types of computing platforms? What if holographic images became ubiquitous? Are holograms anchored to points in the world the future of distributed computing. What about holographic bitcoin nodes? (Maybe a stretch).

Disclaimer: Prior to the last month, (late July/ early August) I had never programmed in C# or with the Unity platform. I could have used Javascript but everything I read said that specifically for this type of development it is best to used C#. Compiled, more powerful etc.

I wrote this article on my phone as I built out the project.

From the start I did not want to think about the end result of seeing something floating in front of me and being able to interact with it in 3D space. Let alone voice activation built on NLP that could connect the Hololens to the REST APIs of my Bot.

Still I was able to get a digital object in front of me. The first being a cube, then a plane, then planes, then a bike, then bikes.

I prefer to think in the different components the HoloApp needs to accomplish the goal of ar cpq (Augmented Reality Configure-Price-Quote).

I know the NLP has to be trained to match the right utterance. I know that Bot has to gather the right parameters to be serialized in a JSON object. I know the scripts that allow me to interact with the Holograms have for the most part already been built. I know that the 3D models from TurboSquid cost money and it will be tough to build a compelling demo with the free ones. I know that the GUIs will need to look great but also be easy to interact with for someone who has never used a Hololens. That the story of configuring a product in the Hololens has to make sense.

The things I dont know about; how to consume our APIs directly, yet, or how to use spacial audio and spacial mapping and incorporate it into the demo.

The Hololens is amazingly beyond what your base ideas of holographic technology is. In a sense any prior exposure to what you would think as the ultinate vr future is limiting. With this in mind, it is important to understand that tapping into this digital layer requires you to think about the expirience differently.

One of the GUIs was all I had to figure out to realize that this new form of computing was the early stages of tech. It is early. Very.

Ironically, it put into perspective that yes we are living in a time of incredible technological advancement, but still, it is very early. The GUIs are surfacing the state of underlying data sources. This could be a record in Salesforce, data from an entity in Dynamics, data from a Smart Contract on the blockchain. The GUI in VR World needs to be diegetic. The cards need to be interactible, by gaze, gesture, speech; they not only look cool but are there to augment the expirience of the user.

It is not easy to type in VR.

This is another reason why bots and VR are a catalyst for each other in that the NLP used in bots will be used in VR experiences.

The other interesting concept in VR is scale. An object’s scale and distance from the main camera makes all the difference. Being able to grasp what distance and scale any object is will make developing for the Hololens much easier.

Another component of this world which I am just getting into is Raycasting. Being able to cast a ray from the main cameras eye to an object should affect the objects state, look, feel in VR. By having the light hit a gameobject witg another certain material applied is what makes the experience unbelievably realistic.

The mesh filter creates a skin or surface and Mesh renderer determines shape color and texture.
Renderers bring the MeshFilter, the Materials and lightning together to show the GameObject on screen.

Animation is next. I need to be able to have voice activated animation drive the configuration of the product.

One of the reasons being that the airtap motion is very confusing at first for users. The best experience would be having an object expand into its components for configuration, having the user select different options, and then validating the configuration bringing the model back together.

The way to achieve this would be to have the game recognize keywords or intents via LUIS, and then have various scripts applied to the game object that make it interactible.

A manager game object.

Animations can be achieved with scripts or with the animator in Unity. I tried understanding the keyframes and curves but still have not figure it out yet.

I need animation to show when a user either hovers over or air taps a selection for it to change the corresponding object in the configuration.

I achieved this using renderer.enabled onGazeEnter. I then moved the 3D box collider corresponding to the different objects out to where the tile was.

I have the select options down, either by voice, air tap or clicker.

I also added in Billboarding to the quote headers so it always faces you as you are configuring the product. I added in sound so the user knows when they make a selection and lastly I am working on getting the 2D images of the options into the tiles in addition to making the tile green upon selection.

Actually pretty tricky, but ill figure it out.

When calling the NLP from within the hololens via direct line REST API, there needs to be an avatar the user can speak to.

This concept of having the audio come from an actual thing gives it a persona. The next couple steps of the demo are creating the cards for every object which will be rendered based on the voice commands given to the avatar. Once this is complete I will need to work on the plane scene. Lastly, next week I will begin on adding our CPQ APIs to the existing bike demo.

32 Days until Dreamforce
After a couple hours I figured out turning the tiles green and replacing original blue tiles on selection by using getComponentInChildren and rendering enabled true or false on airtap.

About 3 weeks left til Dreamforce.

I just started on the configuring the inside of a plane demo. Again, getting the objects to the right scale and the right distance from the camera is key. We now have a CPQ webservice hosted on Azure which we are calling using a Unity WebRequest.

The next I have to do is work on rendering different textures of a GameObject on hover.

Also, do I call the webservice directly with a Unity Web Request or do I hit the Bots API which then calls the WebService using the Unity WebRequest. Probably the latter.

Other than that, its now a matter of just dialing everything in; I have the right assets, digital and physical, the scripts are there, its time to put everything together.

Ok, so actually it was the first Option. I called the CPQ Webservice using a UnityWebRequest and a Coroutine OnStart to Create a QuoteId and CartId and retrieve the options for the bike bundle.

I put this C# script on the Manager object. The other WebServices such as add option, remove option will probably remain on the gesture handler script. Sinilarly a CoRoutine is called OnAirTapped.

Tomorrow I have to work on parsing the JSON response from the web service and bind the option Ids to the gameobjects in Unity.

Once this is done then I will create the action to call the  finalize web service. After that, well, thats when we start to get into it. Makin it POP. Then ofcourse running into problems x,y, and z but ultimately heading in the right direction.

I ran into a few serialization errors, to say the least. After hours of testing different scenes, debugging, I have a stable project back.

The next part I have to develop is the game loop and surfacing the data in the GUI. The game loop takes an index of scenes compiled and directs between them. Advancing levels in a game, same concept. The 0 level I need to finish is a switch case where if bike A is selected go to scene A, if bike B, scene B, C, scene C.

The three bikes will be rotating and upon selection it will LoadApplication (scene#).

The other game loop will be to Finalize the configuration. Upon the user saying “Finalize”, the KeywordManager will set the Finalize gameobject to active. I have an if statement in the gameObject that is this.SetActive (true) then StartCoroutine Finalize and LoadApplication (0).

Possibly some other cool stuff such a sounds and showing the quote etc. before going back to the selection scene.

The Plane is still a work in progress. It is a different experience because of the small field of vision of the Hololens. It is still very cool but I am working on a solution to make it more of an AR expirience vs VR. Overall, both projects have come a long way. Leveraging the Holotoolkit, exporting Unity Packages, googling and reading books on C# and Unity all have had huge impact.

There is about 10 days until dreamforce and the last 10% of any project like this is the toughest.

It should come down to the wire, it always does.

Last night I might have figured out a powerful and reusable way to build Augmented Reality components. The Get Renderer.enable can be applied for any sort of dynamic action. Here are my notes:

var x = GetComponentInChildren <Renderer> {}

x.gameobject.renderer.enabled = true

x.gameobject.renderer.enabled = false

everything is a game object.

overlay the options for the bike selections and on selection render.enable = true for the corresponding text.

Essentially by having the different object within a parent rendered based on conditions being true or false in the parent can tie together the children components i.e a change of color and text showing up.

I still have some testing to do but I think this may enable a lot.

I have roughly a week to dial everything in. The plane will be today. Working on rendering different textures. Other than that it is moving the colliders for the other bikes and creating a bike select script.

I have about 3 days left and the last week has been a gamechanger. With some help(would not have been possible without them), I was able to build and deploy the last parts of the project.

Item 1) Serilaization With Newtonsoft on UWP takes a little toying with. Download the package and a portable path and download a seperate dll I will attach here.

Net: major part of the project.

Binding data to the GUI dynamically. By getting the GameObject and setting the material.

This was also huge and done with code below:

The Biggest thing just figured out and this was for the plane originally but applies for the bike was being able to for each mesh in parent render.

Today I built the plane scene, added keywords so the options can be said.

Still have to bind the quote number and updated price.

I worked two months day and night to be able to deliver tomorrow.

There is no doubt in my mind this was one of the biggest challenges I have ever had. From learning Unity, learning C#, learning how to Call Apttus APIs, importing 3D models and scaling and texturing them, solutioning the build, designing the GUIs, making it voice activated; overall yes, it was very difficult.

There were two things I will need to figure out with the build. How to render different materials of a GameObject On Tap… but I have… just thinking on it still.

And how to deselect an option in a group before selecting another.

Other than that, yeah, two three months of work. Never thought I’d work on that.

Enterprise Augmented Reality, Apollo.

Top Tips:

  • Deploy your apps to the Hololens using the USB cord. I was using WiFi for the two months of development and on the last day realized deployment took 30 seconds with a USB. (Depending on the size of the app, it could take 15 -20 minutes over WiFi).
  • TurboSquid –> Blender –> Unity
  • Leverage the Unity Asset Store
  • Export your Asset and project Settings / Create External Packages
  • Final 10% is the toughest


  • Shaders
  • Storyboard it out
  • Create Prefabs
  • Export Unity
  • Additive vs Subtractive Color
  • Vector3
  • Quaternion
  • Mathf
  • Everything is a GameObject
  • Declaration before Definition



Microsoft HoloAcademy

Unity Docs

Intro to Game Design, Prototyping, and Development  



on ipfs:


CryptoSlackBot: n. A bot that executes buy and sell orders on cryptocurrency exchanges.

Aptbot: n. A bot that executes Quote-to-Cash functions from within messaging platforms.

Do you want to build your own slack bot, universal bot, facebook messenger bot? Eventually list it as an App and publish the bot to a directory?

Over the past 5 months I have developed bots for: Slack, Skype, and mobile web.

There is a common pattern when building these bots: dialog triggers, parameter gathering, message brokering, and response formatting. In this article I will explain:

  1. How to Build a Bot
  2. How to connect the Bot with any REST API
  3. How to host and deploy the Bot
  4. How to create a Bot API

How to Build a Bot

These are the tools and languages you are going to use to build the bot:

When building a bot it is important to understand that you are abstracting away the UI with intelligent cognitive services. There is an abundance of web based services and applications that are locked into their own interfaces. We have arrived at a time where often we interact with apps without a UI. Why do I need a phone to call an Uber, can’t I just tell the uber bot in a Slack channel to pick me up from work and drop me off at the train. The bot needs two parameters: from and to.

This new paradigm of having intelligent assistants is deemed conversation-as-a-service.

The front-end is the conversations that you will have with the Bot to gather the paramaters that are passed to your server in the form of a serialized JSON object. The server deserializes it, and responds back to your bot with its own serialized JSON object.

The user interacts with the bot –> formats the request with the parameters –> the API retrieves the call data –> responds with error/data –> formats the response to the user.

When gathering the parameters with a bot you need to initiate the conversation or dialog. To start a conversation or dialog you include an array of words associated with a particular conversation. When the bot hear to execute a program, this is exactly triggers the specific dialogue, and ultimately what drives the JSON request to the API service.

You can also combine Natural Language Processing with your bot to make it more intelligent using a service like LUIS AI. Take an utterance and match it to a particular intent which is tied to a set of questions (the dialog).

Once this is achieved, the bot will store and pass this as a request in a serialized JSON object, the server deserializes it and responds back with callback data.

Everything in Javascript is an object.

Everything, in Javascript, is an object.

URL Hacking | Passing of Parameters

Once you pass the various parameters needed to the API, it responds back to your Bot at which point you can drive another action.

Essentially you are pulling in the functionality of any web service into a command line where you have interactive programs branching and executing various functions.

Let’s Start Building

There are a number of company’s that enable you to build a bot:

  • Howdy.Ai’s Botkit
  • Microsoft Universal Botbuilder
  • API.AI

In order to get one of these up an running you are going to need to execute the following code.

Botkit for a Slack Bot

In this turorial I am using Botkit.

cd c:
mkdir newbot
cd newbot

npm install botkit
npm install superagent
npm install body-parser
npm install express

npm init

git init
git commit "first commit"
git push -u origin master

git add .
git heroku:set -a <appname>
git push heroku master

Let’s break it down:

The first thing we are going to do is create a new folder for the bot application:

cd c: 
mkdir newbot
cd newbot

Once you have your new folder you are going to create an app on Heroku.

Then you need to install the various NPM packages that you need to get the bot up and running.’s Botkit is a great way to customize and get a bot up and running for a variety of different messenger platforms.

npm install botkit
npm install body-parser
npm install express
npm install superagent

Express will be used for the server and body-parser will be used to format the hypercards in the platform channels.

npm init will create your app’s JSON package.

npm init

Once you have your application setup the next step is to deploy it to Heroku.

Make sure you setup a Procfile so that your bot can “live” on the server.

Create a Procfile in the directory with the text worker: node server.js

Now that you have the base bot app setup you can begin deploying the code to Github.

Create the repo on Github and then set the remote in your directory.

git init
git commit "first commit"
git push -u origin master


Connecting Bots to a REST API

Download the npm module of whatever rest api or wrapper you want to bot to connect with. Check out my github page to see examples.

Deploying to Heroku

It is important to configure the vars in your Heroku Application so that they are not explicitly declared in your code.

The variables needed are your Slack Apps Client ID and Client Secret.

git add .
git heroku:set -a <appname>
git push heroku master

Deploying to Azure

It is important to configure the vars in your Azure Application so that they are not explicitly declared in your code. You also want to register your app on the bot framework you can connect to various platforms/services.

The variables needed are your Microsoft App ID and Microsoft Password.

Create an Azure account and create a new Web App. On the Bot Framework portal, set your website and app id/password.

If your web app is up and running and your bot is deployed you ahould be able to interact with it on your site.

OAUTH2 and Slack

Instead of just having a custom integration bot, what about creating an actual Slack app?

This is arguably the trickiest part of getting your app up and running.

You want to enable other Slack teams to use your bot in a secure way.

Slack Authenticate’s users by exchanging an authentication token for a bot token.

In doing so it gives your app access to the org with the different access scope.

This can be for bots, /commands, and webhooks user access.

The key is creating the 1) response http request 2) then having the response 3) redirect to the /x http request 4) which contains the oAuth 5) and grant’s access.

One way to test is using ngrok and pointing the request URL to your local server which has the public reachable IP through grok.

Enter the Grok ID on your App ID in Slack, in the interactive buttons, and the URLs.

start up ngrok

ngrok http 8080

then start up your app locally

node server.js

then inspect the ngrok requests

ngrok http 4040

lastly, go to localserver in the browser.

In Conclusion

The bot logic can be used across multiple platforms in that there can be multiple inputs from any messenging platform/sensors/Holograms; the bot is the broker of these inputs to other platforms. When building keep this in mind. The bot is and will continue to be a catalyst for web services to be brought into single platforms. The new OS is immersive in that we have untapped, disconnected mediums that can now leverage the same bot logic and state.

Next part will be on how to create your Bot’s own API.


90% of the World’s data was created in the past year.

We are living in a time of exponential technological advancement. Recursive machine learning & artificial intelligence, distributed systems and decentralized value transfer protocols, everything on the web creating real-time distributed consciousness. Exciting times.

This past year I learned:

  • how to program and build on the force platform
  • solve enterprise problems using SaaS
  • last but definitely not least, more about anything and everything crypto-currency.

This is going into the fourth year I have written on this blog and the stats have increased year after year. I just about hit 32,000 all time.


Hit 14,568 for this year. Not bad.


2013: A Year in Review



Some of the highlights from 2015:

  • Building some of my first Mobile Apps & Demos
  • Moving into my own apartment in SF
  • Presenting in 3 Sessions at Dreamforce
  • Winning the Coindesk Makeathon (& visiting NY for the first time)
  • Going to Texas for my first business trip

Focus in 2016:

  • Get 60K views on the blog
  • Build my own 21 endpoints to my bitcoin mining tutorials.
  • Build a solar powered bitcoin node and solar powered bitcoin miner bundle. (100 W Panel, inverter, controller)
  • Learn React.js Framework
  • Learn Python (Finish Learn Python the Hard Way) and write my own scripts on the computer
  • Learn Aura (Lightning Framework)
  • Continue to Learn Chinese (Mandarin)
  • Finish the Portuguese Duolingo & move to next one
  • Continue to learn Salesforce APEX Development
  • Use a Myo band during a demo
  • Build out end-to-end Lightning Experience
  • Get it – 185
  • Read The Intelligent Investor
  • Keep a Journal and write in it daily
  • Trade crypto-currencies daily using ShapeShift, Liquid
  • Drink more water

Funny I just looked at the journal and had already written down 2016 goals; they were pretty much the exact same.

I took a career development class in Barcelona a few years back and we had to do a mental exercise. It led me to the sentence:

I felt like a Boss because I was in my Prime

That is definitely where I need to get to. It’s just finding a balance between the craft, the activity knowledge, the learn knowledge; the energy, the effort, the execution. Autosuggestion kicked in, fully engaged, rested, on point, and dialed in.

I kept my blog on instead of May be making the switch soon, once I have it in different languages I could hit my number.

On my Birthday in June I wrote down a few things:

  • Get Healthy Looking / Toned / Cut-up
  • Capitalize on Bitcoin
  • Read Autobiography of  Yogi
  • Build a Solar Mining Rig
  • Learn AngularJS
  • Continue Chinese Studies
  • Build a Hadoop Cluster onRpi
  • Work smart, delegate, innovate


I have bought some of my first Stocks using Robinhood. I also am currently reading the intelligent investor.


I have bought into Ether and the Ethereum platform. I am looking into other alt-coins but primarily will be investing in Bitcoin.

Taking It to the Next Level

I have a couple Raspberry Pis, a 21 Bitcoin computer, USB & ASIC Miners, Solar Panels, just ordered a BitSeed with 1 TB of storage (5+ years of future txns), I have a Tessel 2  on the way; I want to build the total Blockchain / Bitcoin system setup:

  • 100 W Solar Panel running +1 TerraHash
  • Running a Full-Node on the Bitseed + 1TB
  • Run a Full-Node on the 21 Computer
  • Run Ethereum Frontier on a Raspberry Pi
  • Run Kali Linux on the Other Pi
  • Connect the Tessel to the 21 Inc computer

Taking it to the next level is going back to my Combinatorial Creativity Through Technology. Combining all of these different technologies, JS, distributed consensus protocols.

Then expand this to Solar Farm with underground mining facility…one day. Keep programming in Python on 21 Bitcoin computer. Just writing Scripts, learning the syntax, building the memory.

Lastly My post from 2015

Lightning Network: Packets to Circuits The Bitcoin Computer

Managing Digital Scarcity: Enterprise Cryptocurrency Applications

2015 Internet Trends



MYO Armband

Hash and Ledger

How to Setup an AntminerS5

Salesforce Lightning


Happy New Year. Live the Dream.


Angular JS

Model: The data shown to the users. The model data are simple javascript objects.

View: This is what the users see when they visit the page, that is after the raw HTML template involving directives and expressions is compiled and linked with correct scope.

Controller: The business logic that drives the application

This framework is known as MVC.

Scope: A context that holds data models and functions. A controller usually sets these models and functions in the scope.

Directives: Something that teaches HTML new syntax. It extends HTML with custom elements and attributes.

Expressions: Expressions are represented by {{}} in the HTML. They are useful for accessing scope models and functions.

Template: HTML with additional markup in the form of directives () and expressions {{}}.

The key to this framework binding the model data to the view unidirectional; that is, syncing from model to view. Angular JS evaluates the expression and replaces it with the calculated value; THIS. the expression is re-evaluated each time any of the data models it depends on changes, THUS updating the DOM.

The UI is separated from business data of the application through a Controller which handles inputs, delegates the tasks to business logic and coordinates with the model and view.

This framework is meant for data driven applications and RESTFUL integrated applications. It drives the UI.

Salesforce Lightning – Updated

Updated version – post Dreamforce 15.

For the past month or two I really started to understand what Lightning actually is. Lightning is the new UI layer of the Salesforce platform. It is comprised of:

  • Lightning Experience 
  • Lightning App Builder
  • Lightning Components
  • Lightning App Exchange
  • Lightning Design Systems


The framework uses JavaScript on the client side, Apex on the server side and it uses JSON to exchange data between the two. Essentially you are writing handlers that respond to interface events as they occur. These can be component events and application events. You write the handlers in JavaScript controller actions.
The first thing I discovered was that the Lightning Desktop and SF on mobile are essentially going to become a unified UX.

Lightning Components

Lightning components give you a client-server framework that accelerates development, as well as app performance. Components are the self-contained and reusable units of an app rendered to produce HTML DOM elements within the browser. These components facilitate parallel design, improving overall development efficiency. They can contain other components, HTML, CSS, JavaScript, or any other Web-enabled code.

Components – Admins:

You now have drag-and-drop control to build out interfaces for your users. It’s as easy as going to the appexchange, looking for what type of component you need and installing it into your Salesforce instance. When you go to edit the page the component will be there along with the standard Salesforce components and and other components you have created or downloaded. If created with the Lightning Design System, the component will be responsive in that it will adjust its spacing/what data to be shown dependent on screen size or what device it is on.

Components – developers:

You are now have the choice to build page-centric apps with VF or app-centric event drive n apps with Lightning Components. When building components use the new Lightning Design System classes within the component to keep the UI consistent with the rest of the page. You can also choose to embedd Lightning Components within other component so that they only show when a condition is met. Lastly, you can build entire Lightning applications using multiple lightning components and lightning events. Each component has a handler which essentially is listening for events. These events can be application wide or at the component level. Essentially you are wiring a JS front end to an existing APEX controller. You have the public class and can then build a Lightning component that is built on top of the server-side logic. You embed multiple of these components into the same application.

App Builder- Admins:

Salesforce Lightning App Builder has been released on the platform, I am going to start building with these components in the developer console. Yesterday I started building the responsive UIs for apps.

This new component driven framework is analogous to different components to a car. There are only around 50 components on the app exchange right now but I can see it developing into an even larger market then the existing app exchange.


One of this could happen would be through a new montezation model built on micropayments. The components in the exchange could charge on a per use basis and charge a digital micropayment instead of a monthly subscription. Components could compete and charge different amounts in order to be added and used within a users Lightninng application. Ultimately the user could have multiple Lightning Apps doing the same process but based upon the use case, the user could choose which component to use. This type of micropayment model would drive innovation and create an ecosystem where developers can serve different customers based upon the effectiveness of the component. Maybe someone just needs to get A–>B for a quote in the morning but later on in the afternoon has a complex use case with some integrated approvals and needs to use the XComponent.


 Creating Components

A components encapsulates a modular and potentially reusable section of UI, and can range in granularity from a single line of text to an entire application.

To create a component, go to the Developer Console within Click create now Lightning Component.

There are a number of resources that come in a component bundle. These are:

  • The Component itself
  • CSS Styles – Styles for the component.
  • Controllers – The Client-side controller methods to handle events in the component.
  • Documentation – Description and sample code to example the component.
  • Renderer – Client-side renderer to override default rendering for a component.
  • Helper – JavaScript functions that can be called from any JavaScript code in a component’s bundle.

I had two sessions at Dreamforce describing how to build these components but the highlight of it all was to see our Apttus Lightning components featured in Marc and Parkers keynote. I really look forward to building out more of these components across the entire footprint. 

For more informations go to, go to trailhead and complete the modules or just run it locally using node.js / Heroku and start developing the future of the platform!

Digital Wage

The job market for current college graduates is at a crossroad. In our new digital age, as Marc Andreessen once said, “Software is eating the world”. The internet has emerged as the foundation for our rapid advancement in information technology and the tools and products built on top of it only continue to grow. Because of this rapid advancement, many companies have cannibalized their brick and mortar business models for new digital strategies. Once dominant companies that failed to adapt have been displaced by their digital counterparts (e.g. Amazon has substituted for Barnes and Nobles and Netflix has substituted for Blockbuster). Each time a company pivots towards a more digital strategy, there comes the need for a new set of talent to lead it. It takes highly skilled engineers to create these products, design their user experience and interfaces, and build the network infrastructure to deliver them around the world. Though the demand for workers with these types of skills has increased dramatically over the past decade, the supply has not. There are more and more of these high level, high paying jobs and not enough qualified candidates to fill them. Companies are now competing for a relatively small talent pool of graduates with computer science and software engineering skills. In this research paper I will explain why there is a shortage of these highly skilled workers, what human resource managers are doing to recruit ideal candidates for these positions, and what types of resources are available to increase the number of these highly skilled workers.

Why is there a shortage of highly skilled workers in today’s job market? Shouldn’t there be more full stack software developers, data scientists, and user-experience designers? At first glance it is because the acquisition of these skills take time, practice, and years of dedication. Engineers are paid high salaries because coding is hard, it is not something intrinsic to us, and in today’s job market programmers are a rarity. Right now we live in a world where software engineers from all over the world come to Silicon Valley to work for startups or blue chip tech giants like Apple, Facebook, and Google. In Seattle, technology companies are competing with one another for talent by offering a better Zen lounge or better free cafeteria. There is a definite shortage in the number of graduates with the computer programming skills sought out by these companies. From 1970 to 2011, the number of students with a bachelor degree in computer science has remained fairly stagnant at around 3% of all graduates (ITWorld). However, in the past 4 years that number of students studying computer science in the United States has increased. Due to growing popularity, over the next few years Harvard is increasing its computer science staff by 50% (Harvard Gazette). There is a growing demand of workers for this exponentially growing industry. Software is moving into every business model due to its cost effectiveness and its ability to reach anywhere in the world with an internet connection. Software is also making the scale of difference between companies much greater. The best company in a particular market could have 10x market share compared to the second best. This Pareto curve law only becomes more self-evident each time an industry becomes more digital. The dozen largest tech companies in the US are worth more than $2 trillion dollars, more than all other tech companies combined (Thiel). This power law creates winner-take-all economics (Brynjolfsson). Companies know this and are in constant competition for the best engineers in order to create the best products in their particular market. This trend towards investing in high skilled workers and digital technology is also affecting labor intensive business practices. We now have machines there are substituting jobs that can be easily automated because a capital investment in machinery is less expensive then hiring and training a human to do the same job. This then leads to the need for even more engineers to make changes to the capital investments when needed by upper level management (Brynjolfsson). The need for engineers and investments in machinery will only increase as more companies switch towards these digital models. The tools and skills that are currently being learned by the vast majority of college graduates may not be the technical skills needed for this rapidly evolving technology industry. We need to increase the number of students learning the computer programming and technical skills needed for the jobs of the 21st century. Data compiled by show that at current rates, the country will have 1 million more computer science jobs than students with computer science degrees by 2020 ( The process for finding those 1,000,000 graduates to fill the jobs is also changing rapidly for HR departments. They too are increasingly using digital technologies to augment their search process and bridge this massive talent gap.

The HR search process for software engineers has changed due to the increase of software based search models and the lack of people with computer science degrees in the job market. This has led to a drastic increase in the competitiveness with other tech companies. The company has to differentiate itself to make itself look like the ideal place to work. They now are also the ones having to contact possible employees as opposed to employees contacting them. The current recruiting process for an HR officer is reaching out into the global pool of talent and finding those that can fulfill its current needs as a business. It starts at the identification level online, through email or some other digital resource. This then leads to a phone call to get a first impression, to the interview in person to see if they will be a good culture fit, to the hiring and training process. The first step is probably the hardest and the most that time is spent with. Often current employees are offered large bonuses for referring qualified computer programmers to the company. One of the digital resources recruiters use to find programmers is GitHub. GitHub is not only for version control and collaborative projects, but it also serves as a repository that recruiters can go and look at to see what particulars languages the programmer is proficient in and what contributions to open source projects they have made. As open source development continues to grow, GitHub will be an invaluable network to connect programmers to companies. LinkedIn has also proven to be another great tool that many HR officers, recruiters and job seekers rely on. One of the most important things with LinkedIn is being specific with word choice in company and personal profiles. Often companies will have scripts search through thousands of employees for certain words that are in their profile summaries. This could mean all the difference for someone who just has “software engineer” versus a “Node.js specialist” or “proficient in”.  The process for finding and hiring engineers that are from the United States is becoming more and more competitive because of relatively small number of students studying computer science. Because of this, software companies will look to find engineers from outside of the US. Companies are willing to pay for working permits and a more complicated hiring process in exchange for top level software engineers from countries like China and India. They want to find the best of the best to develop and keep them competitive in their given field. The jobs of the 21st will only continue to grow specifically in these technical related fields. How do we increase the size of this pool of talent domestically and connect high level skilled employees with great companies?

There are a number of ways someone can acquire the high level skills that are sought out by today’s technology companies. At its core the resource or track should be tailored to what would be needed over the next decade. There are a many websites that offer free online courses to enable someone to learn these skills. has partnered with Codecademy to provide a great resource that anyone can use to learn basic HTML, CSS, JavaScript, JQuery, Python, Ruby, and PHP. The organization offers many free interactive courses that teach the coding basics of the specific language and include projects that can help develop the skills. Knack is another great resource that allows someone to play cognitive and neuroscience based games that figure out what their current technical strengths are. Then they can analyze the results and share them with employers which could possibly lead to an opportunity. Top Coder is a resource that employers can use to find the winners of open contest in graphic design, development, and data science. In doing so it increases the programmer’s skills and allows them to create a portfolio that employers can look at. These resources all allow someone to build programming skills, get a foot in the door with a company, and lastly they are free, giving anyone with the desire to learn these skills the chance to. Another new technology that could prove to be very effective is the MOOC. MOOCS are Massive Open Online Courses. They are offered to students through some of the top universities and they enable people around the world to learn in a digital and collaborative environment. MOOCS may be the beginning of the hyper deflation of education. We need new digital models of learning and teaching that are not just a technology overlay on old modes of teaching and learning (Brynjolfsson). Stanford, MIT, and Yale are just some of the universities that provide MOOCS and other courses through websites like Coursera and Udemy. Although these are an excellent resource to teach computer related skills, the tradeoff is they do not lead to a diploma from the University. Another great resource that can teach a variety of computer related skills is Khan Academy. Khan Academy is free, globally accessible, and provides videos and exercises in a wide range of academic disciplines. Salmon Khan, the founder, has teamed up with many different organizations to bring education to the masses. His latest partnership with Bank of America aims to provide financial education to people to learn how to build credit, stay out of debt, and give a better understanding of personal finances. Udacity is a program that offers nanodegrees, specialized courses in Front-End Web Development, Full Stack Web Development, Data Science, and iOS development.  They have partnered with companies such as AT&T, Google, and to engineer these courses. Adam Selligman, VP of Developer Relations at Salesforce says, “We see a huge demand for Salesforce developer skills in the marketplace. The Udacity course on building mobile apps empowers anyone to become a Salesforce developer. We are excited for nanodegrees, as they look to be a great way to skill up millions of people to match the need in industry.”(Udacity) The technology industry is changing so quickly it really is about tailoring the program to what would be needed over the next decade. All of these online resources create tracks and are cost effective even for post-graduates with student loan debt who want to learn some new technical skills needed to put them in a position to succeed in the job market.

There has been another trend of private institutions teaching specific skill sets such as ITT Technical Institute. This private institution trains people in a specific technical field and then links them to companies that need those certain skilled workers. They have different schools within the program that offer a whole new path that financially makes more sense to some people than the four year university loan driven program. The school of information technology offers programming classes that can be very rewarding upon graduation. These institutions are around the country and offer a great way to learn some of today’s most prevalent technological skills. Another great track that enables someone to learn the most forward technical skills needed in today’s economy is with the United States military. The Army, Air Force, and Navy all offer programs that teach enable men and woman to acquire many different high level technical skillsets needed in today’s job market. These include many non-combat tracks that teach information technology, cryptology, information warfare, and computer science (Navy). The military is one of the best resources to not only learn emerging technologies and programming skills, but also disciplinary and leadership skills as well.

It is important to note that although a degree is a necessity nowadays for today’s job market, a GitHub profile of a programmer can prove competency in a developer or technical related field. All of these self-paced, self-organized learning environments and programs lead to skills that are sought after by the most innovative and growing companies in the world. My high school college counselor told me not to take computer programming because it was too hard and I should focus on classes that I knew I could pass. It has become self-evident that being able to build software or have a proficient understanding of computer science is the future for many jobs. We need to augment our ability to learn these skills by starting the process at a young age. In K-8, the computer curriculum shouldn’t just be learning how to type, it should be learning how to code. Federal and State Policy should mandate and challenge our students to learn the newest technologies, almost all which are based in the ability to read and write computer code. The access to this information has never been more available and for a lower-cost using the various digital resources, some of them do not even require internet access. A great example of this is a new program at San Quentin Federal Penitentiary north of San Francisco. Code 7370, is teaching prisoners how to code while they serve their sentences. A select group of inmates take the class four days a week, eight hours a day for six months (Ars Technica). They save their work locally to be reviewed by experts from Hack Reactor, an organization partnered with the program. The hope is that when they get out they will be able to find a job as a programmer and it will decrease the rate of recidivism. If we take a step back and look at what constitutes an effective education, it is not as important as where you went, but what you technical skills you acquired during your time there.  The San Quentin case is an extreme example of this but it still demonstrates that computer skills can be taught and learned by anyone, with minimal costs, and within a relatively short period of time. It is about what you can effectively create using various digital tools and what you will be able to do as technologies continue to advance and build on top of each other.

In conclusion, the number of resources available to enable to the acquisitions of high level skills needed in today’s economy continue to grow. Universities are expanding their computer science departments by hiring more staff and investing in more computing infrastructure. Organizations are launching more free, globally accessible courses to learn how to code, design graphics, and make sense of big data. Companies are creating more training programs for new hires. HR departments and recruiters continue to use digital technologies to move through a global pool of talent in search of the people who have acquired these engineering skills. These companies are now faced with the challenge of having to separate themselves as places to work and to attract the best candidates to their organization. As we move farther into this digital age, the programmers will continue to be the ones leading the way. They will develop the next application we all use and love. They will develop the machine learning algorithms that better understand and improve our world. They will engage with robotics and help them recognize patterns and complex communication. The advancement of technology is happening at an exponential pace and the internet is going to reach bring 5 billion people around the world into the digital economy by 2020 (Thiel). It is not exaggeration to say that they will have a printing press, reference library, school, and computer all at their fingertips (Brynjolfsson). They will all be able to utilize these technologies and create and share with the world unlike any other point in human history. The acquisition of the high level technical skills that augment their ability to use these tools will be invaluable as the world continues to shift towards digitization. The more we can build and use these skills to interact, collaborate, and work with others around the world, the more we can learn about what is needed to build the future we want to live in.




Brynjolfsson, Erik, and Andrew McAfee. The Second Machine Age: Work, Progress, and Prosperity in a Time of Brilliant Technologies. N.p.: n.p., n.d. Print.


“Major Boost for Computer Science.” Harvard Gazette. N.p., n.d. Web. 08 Dec. 2014.


“The $7,000 Computer Science Degree — and the Future of Higher Education |” Business Money The 7000 Computer Science Degree and the Future of Higher Education Comments. N.p., n.d. Web. 08 Dec. 2014.


Time, For The First. “Hire a Coder at San Quentin.” CNNMoney. Cable News Network, 05 Dec. 2014. Web. 08 Dec. 2014.



Installed npm package for:

  • Bitcoin.js + browserfy + uglify
  • Express
  • Redis
  • Jasmine
  • Karma
  • Supertest
  • Chain API
  • nforce
  • Bitcore