Myth Busting Growth Figures….

Let’s consider this really quickly…..

tweetmadmen

I respect this sort of thing being tweeted by @naomhs, on the whole it’s actually a good piece on taking the social media advantage, increasing eyeballs and digital engagement. That’s fine.

Anything with a percentage sign is like catnip to me though, especially when it’s about growth. In fact any press release where an organisation claims to have n% growth gets my attention because I’m always looking for two things, a starting number and an ending number.

For example:

Clicks last month = 10

Clicks this month = 100

Growth is ((this month – last month) / last month) * 100.

So ((100 -10) / 10) * 100 = 900% = DRAFT A PRESS RELEASE!

Even if last months figure was 1 and this month is 10, it’s still a 900% growth rate! DRAFT ANOTHER PRESS RELEASE WITH KITTENS THIS TIME!

 

The most important piece advice I can give to a #startup: own your #code.

I’m going to get supported and slated in equal measure I feel but I’ve seen this so many times now that it’s becoming the elephant in the room so I’m going to comment all the same.

Dear Founder…..

What we do know, especially in Northern Ireland, is that there’s a lack of developer talent that is willing to work on a startup from the initial stages, no sweating out the product in the small hours. Founders have little option than to go to development houses to get their concepts built so that they can be proven to the market.

Buyer Beware

When you are shopping around make sure you ask this simple question:

“The work that you do, do I own ALL the code?”

Hint, if they say “no” or “we use some of our own custom software” politely end the discussion immediate and walk away. 

Emphasis on the question is on the word ALL. In order for your business to survive you have to be able to adapt your code at any time. Software houses are not their with your best interests at heart (regardless of what they might actually say to you, they’re a business they need to survive too, it’s all about recurring revenue). If you don’t own ALL the code then you can’t adapt quickly or adapt at all.

If open source libraries are mentioned check the licensing agreements on them, not all open source is free. And make sure your developer in waiting shows you want libraries they are using and get the links so you can see them too.

I’ve seen many company start well and within time end up like

scared-lady

 

Trust me, it will hurt your revenue far more than it will hurt the development house.

My Advice To You, Founder

With the big wedge of cash (yours, an investor’s or the government’s funding) you are the customer who can call the shots. So demand 100% source code ownership, in your hands, in a Github account. In the event you need someone else to do some work as you grow, well then you can.

Even better is get friendly with a coder, even if they have a full time job, coders like to code so if you offer them a rate they’ll support you too. Have a developer fallback plan, you owe it to your business and your investor if she/he is putting the money in.

Review any SLA’s you have with development houses and see exactly what you are getting for your money. Insist on a monthly statement of how many hours were actually spend on your business. Complain bitterly if you need too, the customer is king here though every development house would make you think you are nothing without them.

Basically you need the following for a fairly run of the mill web/mobile tech startup:

  • Someone who knows your web side code (PHP, Ruby, Java, Python or what have you)
  • An iOS developer if you have an Apple supported mobile product.
  • A developer who knows good Android development.
  • A server guy or gal who’ll advice, stress test and update your server (a lot of development houses will steer clear of the hard stuff and just code)

One person can cover all of those roles, well they are rare but they do exist. I’d look to spread the workload where possible. In Northern Ireland we are acutely aware of a complete lack of good CTO material for startups but try and find a technical person that can articulate comments and ideas to the development house, nothing a developer house hates more than a person who knows what they do.

With so many new ideas coming out development houses are only too happy to greet you with open arms and discuss your dreams and visions. Corny as it might sound it’s a long term relationship so make sure you’ve done a bit of dating first to find a suitable match.

Ultimately though, make sure you’ve got your prenup in order for when you want to move, you need 100% of your code with you in order to continue your life once the developer separation happens.

 

 

Remember your daft ideas, well they’re not that daft after all. (@foldingathome @WiredUK)

My office is littered with notebooks, mainly Moleskines as I’m a colossal hipster nerd (sans beard) and I only write in them with Uniball Eye Micro pens (I knew you were all thinking it).

On the 6th June 2013 I scribbled some notes about using mobile phones as cluster node devices to do small chunks of processing, I even wrote a blog post. My rationale was simple, with all the phones on the planet in standby wouldn’t it make sense to use the downtime like we did with screen savers, trying to solve a bigger problem, a medical one for instance.

20150505_202919It didn’t get very far in my mind, too complex and while a few had tried Hadoop on Android the phones just couldn’t handle the load in a decent way. I toyed with using Zookeeper or RabbitMQ to do the communication work. Regardless of which way I was to do it, it was going to be hard for one man and a kitchen table to do this sort of thing. Not impossible, just hard.

Mistake 1 – I kept the idea to myself. 

Well that’s not 100% true, I did email one person and tell another. On the grounds of it being too complex for one person to handle I closed the notebook and left it at that, a fresh page waiting for the next idea.

That was a mistake….

Mistake 2 – Didn’t share with my collaboration partners

When I say “collaboration parters” I mean, my developer network, me mates. Perhaps they’d see something I didn’t. Was I just way ahead of the right time (usually the way, far too early stage for my own good sometimes). Regardless I didn’t show it to them.

Mistake 3 – Believing your own internal critic

After staring at the said page in my notebook for a few days I left it as a bad idea. Too ahead of the curve, limited use and I couldn’t see that anyone would be interested.

Sometimes the inner rascal will tell you something is right when it’s wrong, sometimes it will tell you the opposite.

With all that in mind, I just found out something.

Turns out I was completely wrong……

The new issue of Wired landed on my door mat this afternoon, yes the print edition, can’t be doing with digital edition of these sorts of things (apart from HBR). At the bottom of one page something about an app that cures cancer while you sleep. The premise is built on using mobiles as a cluster….. beautiful, and the numbers are highly encouraging. “…at one point 53,000 phones were working at one time. This is twice as fast as any supercomputer in the US“.

So Folding@Home out of Stanford University. Well done for daring, poking the devices and seeing what was possible. Vijay Pande I salute you! Well done and brilliant work.

If you want to download the app and putting your device to work, have a look at the Folding@Home website.

 

 

 

Reflections beyond Big Data Week – #bigdata #bdwbelfast

I’ve had some time to reflect on a few things recently, one of which was the Big Data Week Belfast panel.

bdw

It was a delight to sit with my friend Tom Gray, CTO of Kainos, Adele Marshall director of research at Centre for Statistical Science at Queens University and Padraic Sheerin of the Prudential who had the unenviable task of keeping us all in order, he did a good job.

Now for the record I usually make sure of two things when I’m asked to do a panel. Firstly, I’ll be an independent voice and I certainly don’t arrive to tow a sales departments voice or check with PR or HR about what can or can’t be said. Spade’s a spade and all that. Secondly, I tend not to hang about afterwards…..

I made a few points but time was precious so I didn’t get time to elaborate as much as I could have.

“A new set of cliches”

I think we’re at a point now where big data is just data. The real mission is how to, if there’s a case to, process it. BigData has now resolved itself to a worn out marketing term but it’s fair to be said that it’s the term that companies still look up to.

So I firmly believe it’s time to use a new set of cliches and that means coming up with a new set of terms first.

“What advice for SME’s?”

We did establish that the price of utility computing is coming down, something I also emphasised in The Profit Margin interview. What I will say again and again is know what question you’re trying to answer. Then ensure you have the right data to hand. I’ve come across companies who want to know their target audience but never actually retained the customer data in order to get that answer.

I know it sounds daft but the harsh reality is that a lot of companies don’t know.  Also, these kinds of questions are rarely from a technical perspective but come from all parts of the board, C level and employee levels of the company.

I liken a data project in the same was as a web design project, we’ve got to that point. I don’t believe one tool will save you but a suite of skills that may come from different people. Storages costs are down, processing costs are down, putting it in the cloud costs are down…. it’s the brains to make it all work that are the main cost.

“The Health Opportunities…..”

A huge talking point at the moment is between health in terms of prediction, savings and monitoring and the over hyped Internet of Things (IoT). To be honest I didn’t say much here this is really more Tom and Adele’s gig than mine. Though saying that I did throw in a curve ball.

I used the Clubcard data as an example (don’t I always), this time though with the emphasis on data collaboration. The majority of hands went up when I asked who was a Clubcard holder. With those hands up I threw the ball, “who’d be happy for that transaction data to be sold for health monitoring purposes?”.

No surprises, 99% of the hands went down. I believe this is what’s next, data collaboration on a massive scale. Tesco sharing data with insurance companies (they have one already so chances are it’s already happening to a point). A health startup being able to see the rough levels and categories of food shopping, alcohol consumption and so on. Could you predict a family’s health outlook by they shopping habits, you probably could. If a supermarket can determine what trimester a pregnant mother is in, then yes anything is possible.

“A New Name for Big Data”

Gerald, Bruce…. I’ll settle with Data Analytics.

 

@Translink_NI, #Clojure and Neo4J – Part 1 – NI Rail Routes as Nodes

 

 

Spreading the Translink Lovetrain

First off this isn’t a post about #opendata. I’m going to keep my trap shut about that once and for all. If I start such a conversation off I will cause the usual gasps and responses on Twitter.

scared-lady

As a passenger I’ve never really had issue with Translink. The service is usually good and the trains are punctual. So much so that Nick Hewer and Margaret Mountford were singing Translink’s NIRailways service’s 99% punctuality rate compared to the rest of the UK’s private sector offerings.

So to that end, by way of a tribute let’s look at converting that love into graph database nodes. Okay as links go that was pretty lame, regardless, let’s get started.

Londonderry to Great Victoria Street

The route from Londonderry to Great Victoria Street (GVS) is nothing short of stunning, well the coastline bit is.

niroute

 

What we are dealing with here is a large graph database. Each station represents a node and the connecting line represents an edge. Programatically we could recreate this map (I’m just doing the Londonderry to GVS part) and traverse the graph accordingly (something we’ll look at in part 2). Nodes and edges in a tradition database are a bit of a pain to design and populate. Graph databases though are much easier for this sort of work.

Neo4J – The Node of Node Hall

You can download Neo4J Community edition for free. Download the distribution and then untar or unzip it to a clean directory. For this demo I’m not fussed about authentication so I’m going to disable (it’s only working locally, if it were like then make sure it’s enabled).

The conf directory has a file called neo4j-server.properties and you need to make sure the following line is false.

dbms.security.auth_enabled=false

To start Neo4J run the following command from the home directory of the Neo4J distribution.

bin/neo4j start

This will start  the server and also the web based browser console (more on that later).

Nodes and Relationships with Clojure

I’m going to code up the bulk of what goes on to get our nodes (the stations) and the edges (the connecting line between the stations) in to Neo4J. Clojure are an open source wrapper than connects with Neo4J’s REST interface called Neocons. I’m going to use Leiningen to create an app project and handle all the dependencies.

So, to create a new app from the command line:

lein new app nirailways

Then you need to edit project.clj and add the Neocons dependency to the :dependencies map.

[clojurewerkz/neocons "3.0.0"]

All done.

In src/nirailways/core.clj is where the Clojure code will reside. I’ll breakdown the coding elements here, to see everything have a look at the Github repository.

Establishing a Connection

Before you can establish a connect you need to add the required libraries to the code.

(ns nirailways.core
 (:require [clojurewerkz.neocons.rest :as nr]
 [clojurewerkz.neocons.rest.nodes :as nn]
 [clojurewerkz.neocons.rest.relationships :as nrl]))

You need a connection to the database. In it’s most basic way using nr/connect function will do that for you.

(nr/connect "http://localhost:7474/db/data")
Creating Nodes

Each node will be a station and will have two properties, the name of the station and the type it is, for this case it will just be “station”. We could add bus stations later if we wanted.

Using nn/create method will create a node taking it’s properties as a Clojure map.

londonderry (nn/create conn {:name "Londonderry" :type "station"})

There we are, a node. Now there are no other stations just this one. So in order to get Neo4J to do something I need to write a function that will create all the nodes for us.

(defn create-nodes-edges []
 (let [conn (nr/connect "http://localhost:7474/db/data")
 londonderry (nn/create conn {:name "Londonderry" :type "station"})
 bellarena (nn/create conn {:name "Bellarena" :type "station"})
 castlerock (nn/create conn {:name "Castlerock" :type "station"})
 coleraine (nn/create conn {:name "Coleraine" :type "station"})
 ballymoney (nn/create conn {:name "Ballymoney" :type "station"})
 cullybacky (nn/create conn {:name "Cullybacky" :type "station"})
 ballymena (nn/create conn {:name "Ballymena" :type "station"})
 antrim (nn/create conn {:name "Antrim" :type "station"})
 mossleywest (nn/create conn {:name "Mossley West" :type "station"})
 yorkgate (nn/create conn {:name "Yorkgate" :type "station"})
 belfastcentral (nn/create conn {:name "Belfast Central" :type "station"})
 botanic (nn/create conn {:name "Botanic" :type "station"})
 cityhospital (nn/create conn {:name "City Hospital" :type "station"})
 gtvictoriastreet (nn/create conn {:name "Great Victoria Street" :type "station"})......

That will create all the station nodes for us. Now then only thing is they are connected to nothing.

Creating Relationships Between the Nodes

With two nodes we can create relationships. The nrl/create function will take two nodes and create a relationship between then. We’ll call this relationship a connection and I’ll add a property called “distance” in there too but I’m setting all the distances to ten miles as I don’t know what they are.

rel1 (nrl/create conn londonderry bellarena :connection {:direction "all" :distance "10"})

Adding this to the node creation function will generate all the nodes and relationships in one go. Notice for Coleraine there are two relationship nodes. One points to Ballymoney (onwards to GVS) and then another to University (on the Portrush line).

(defn create-nodes-edges []
 (let [conn (nr/connect "http://localhost:7474/db/data")
 londonderry (nn/create conn {:name "Londonderry" :type "station"})
 bellarena (nn/create conn {:name "Bellarena" :type "station"})
 castlerock (nn/create conn {:name "Castlerock" :type "station"})
 coleraine (nn/create conn {:name "Coleraine" :type "station"})
 ballymoney (nn/create conn {:name "Ballymoney" :type "station"})
 cullybacky (nn/create conn {:name "Cullybacky" :type "station"})
 ballymena (nn/create conn {:name "Ballymena" :type "station"})
 antrim (nn/create conn {:name "Antrim" :type "station"})
 mossleywest (nn/create conn {:name "Mossley West" :type "station"})
 yorkgate (nn/create conn {:name "Yorkgate" :type "station"})
 belfastcentral (nn/create conn {:name "Belfast Central" :type "station"})
 botanic (nn/create conn {:name "Botanic" :type "station"})
 cityhospital (nn/create conn {:name "City Hospital" :type "station"})
 gtvictoriastreet (nn/create conn {:name "Great Victoria Street" :type "station"})
 university (nn/create conn {:name "University" :type "station"})
 dhuvarren (nn/create conn {:name "Dhu Varren" :type "station"})
 portrush (nn/create conn {:name "Portrush" :type "station"})
 rel1 (nrl/create conn londonderry bellarena :connection {:direction "all" :distance "10"})
 rel2 (nrl/create conn bellarena castlerock :connection {:direction "all" :distance "10"})
 rel3 (nrl/create conn castlerock coleraine :connection {:direction "all" :distance "10"})
 rel4 (nrl/create conn coleraine ballymoney :connection {:direction "all" :distance "10"})
 rel5 (nrl/create conn coleraine university :connection {:direction "all" :distnace "10"})
 rel6 (nrl/create conn ballymoney cullybacky :connection {:direction "all" :distance "10"})
 rel7 (nrl/create conn cullybacky ballymena :connection {:direction "all" :distance "10"})
 rel8 (nrl/create conn ballymena antrim :connection {:direction "all" :distance "10"})
 rel9 (nrl/create conn antrim mossleywest :connection {:direction "all" :distance "10"})
 rel10 (nrl/create conn mossleywest yorkgate :connection {:direction "all" :distance "10"})
 rel11 (nrl/create conn yorkgate belfastcentral :connection {:direction "all" :distance "10"})
 rel12 (nrl/create conn belfastcentral botanic :connection {:direction "all" :distance "10"})
 rel13 (nrl/create conn botanic cityhospital :connection {:direction "all" :distance "10"})
 rel14 (nrl/create conn cityhospital gtvictoriastreet :connection {:direction "all" :distance "10"})
 rel15 (nrl/create conn university dhuvarren :connection {:direction "all" :distance "10"})
 rel16 (nrl/create conn dhuvarren portrush :connection {:direction "all" :distance "10"})
 ]))

We can run this method through the REPL, there’s no output it will just report nil as there’s no return value (though Clojure will return something).

(create-node-edges)
Viewing The Results

So far we’ve started the Neo4J server, written some Clojure code to handle the REST API calls to create the stations and the line connections. Looking at the Neo4J browser (open a browser and go to http://localhost:7474) we can see the nodes connected in graph form.

Click on the top left icon of the three circles. Then click the “connection” icon. You should see the node graph show up (you can maximise this to full screen).

ninodes

Clicking on the node itself will show the detail in the bottom left.

Next Time….

We’ll look at using Clojure to traverse the graph and even maybes throw in some Dijkstas algorithm for shortest path calculations. I might even get all the NI Railways stations in at some point too….

Want To Try?

 

 

 

Calculating Geodistance – my move from #Java to #Clojure

Sometimes it’s too easy to rest on what you know well, anything for an easier life. Less challenges more ease. Grab a cup of tea and carry on. Sometimes shock to the system will wake you up and make you think a little harder.

Cue The Crippling XFactor Back Story

That’s been me with Java, for a long long time. Considering I’ve been working with it from the start in 1995. While I know other languages like PHP, Ruby and Python I’ve always gone back to Java to get things done for the simple reason is, I get things done.

Clojure and Scala came along, I dabbled with both and Scala was easier from a Java perspective and I took the easy way out. When you’re not exposed to something though it’s easy to go back to first principles of do what you know best. Clojure I couldn’t wrap my head around. I usually ended up with this sort of expression….

scared-lady

The Time Will Come….

There will be a day when you can’t avoid it. And over the last few months I’ve not been able to avoid Clojure. It’s staring me in the face and it’s what my client uses. The best way for me to learn is to have a goal in mind and code my way to a conclusion. Now fortunately for me I’m with some of the best Clojure programmers going, highly involved in the community, a lovely team to boot.

With some pair programming things are taking shape and that’s great. So my current face now seeing the power of Clojure is….

m2

There are times when you need to do you first solo flight and see what happens. So I did my first solo flight.

Calculating GeoDistance

i want to take two latitude and longitude points and calculate the number of miles between them. In Java it’s going to look something like this:

private double distance(double lat1, double lon1, double lat2, double lon2) {
        double theta = lon1 - lon2;
        double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
                + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
                * Math.cos(deg2rad(theta));
        dist = Math.acos(dist);
        dist = rad2deg(dist);
        dist = dist * 60 * 1.1515;
        return dist;
    }
    private double deg2rad(double deg) {
        return (deg * Math.PI / 180.0);
    }
    private double rad2deg(double rad) {
        return (rad * 180 / Math.PI);
    }

If I run that and give it some co-ordinates it will push out the distance in miles.

System.out.println(gd.distance(55.0000 , 4.0000, 51.00000, 3.0000));

>> 279.4624387415594

So what’s I’m trying to do is write this program in Clojure and come up with the same output for the same test.

In the Java there are two private functions one to convert from degrees to radians and vice versa (deg2rad and rad2deg). So I’m going to write these first. They’re basic functions taking in the degrees and, for degrees to radians, multiplying by the value of PI and then dividing by 180.

Here’s my Clojure functions:

(defn- deg2rad [deg]
  (/ (* deg (. Math PI)) 180))

(defn- rad2deg [rad]
  (/ (* rad 180) (. Math PI)))

The things with Clojure functions is they’ll always return something. So once the calculation has been done whatever the value is will be returned. Looking good already.

Now to calculate the distance, well part of it anyway. There’s a lot of sine and cosine calculations to do so I’m going to create another method to do this.

(defn get-distance [lat1 lon1 lat2 lon2]
  (+ (* (Math/sin (deg2rad lat1)) (Math/sin (deg2rad lat2)))
     (* (Math/cos (deg2rad lat1))
        (Math/cos (deg2rad lat2))
        (Math/cos (deg2rad (- lon1 lon2))))
     ))

Within the square brackets [] are the values being entered into the function. You can now see where there deg2rad function is now being used.

Nearly there. All I need to do the arc cosine of the value of the get-distance function, convert from radians to degrees and the multiply by 60 * 1.1515 to get the number of miles.

(defn calc-distance [lat1 lon1 lat2 lon2]
  (* 60 1.1515 (rad2deg (Math/acos (get-distance lat1 lon1 lat2 lon2)))))

I’ve copy and pasted these functions into my Clojure REPL. And then I can test. You can see my test of the calc-distance function below.

#'user/deg2rad
#'user/rad2deg
#'user/get-distance
#'user/calc-distance
user> (calc-distance 55.0000 4.0000 51.00000 3.0000)
279.4624387415595
user> 

Now the output is the same as the original Java function. This makes me rather happy a bit like this but without the healthy food perhaps…..

1950s-woman-smiling-holding-platter-of-hors-d-oeuvres-snacks

Want to build UI in clojurescript? #jobfairy

Via my friends at the BigData company Mastodon C. An amazing bunch to work for if I say so myself.


 

We’re looking for a User Interface designer and developer to help us work on an upcoming project. More details are below.

Who we are

Mastodon C are agile big data specialists. We offer the open source technology platform and the skills to help our clients realise the potential of their data. We work in particular in applying data to areas where we think we can have a positive impact on the world, like sustainability, health, and built environment.

Responsibilities

You will be the lead User Interface designer and developer for a major new product, applying big data, open data, and analytics technologies to improve city planning. We’ll be working with one major city as a test client, and hope to be bringing the product to a wider market from late 2016.

You will in particular be responsible for:

  • Interacting with users and clients to understand their challenges and goals
  • Making and keeping the interface beautiful and usable
  • Thinking through, designing, and implementing data workflows that will be intuitive for non-technical and less-technical users
  • Working within the development team to develop features end-to-end – you will be specialising in front end and UI technologies, but you will also get involved with building the rest of the technology in the product

You will work day-to-day with our UX consultant, who will be gathering and shaping user needs and overall design, and with the rest of the software development team, who you will collaborate with to design and implement the product.

Who you are

Our ideal person for this role would:

  • Have already held a professional designer or software developer role
  • Know or be interested in learning ClojureScript – for example, we hope you would find this article interesting
  • Have experience with Javascript, HTML, and CSS, and be comfortable learning other new languages
  • Be excited about enhancing your UI and UX skills
  • Be interested in and excited about applying data and analytics to important issues in the world
  • Be able to demonstrate experience in turning complex needs into simple and elegant interfaces

Salary and work environment

We are based in Fitzroy Street, near Euston, London. We’re also happy to discuss part-remote or part-time arrangements if those are important for you.

We’re a small and very consultative team, which means that every member has a big influence on how things run and has a lot of control over the way they work.

The salary for this role is up to £40,000 per year. Our preferred start date is 1st June.

If this looks like your kind of a job, please contact us at theteam@mastodonc.com with a CV (and, if possible, recent code or project examples) and we’ll talk.

Please note that you need to be eligible to work in the UK to apply for this position.
No agents please.

Interesting Posts w/e 12th April

A few posts that I faved on Twitter as I thought they were interesting reads.

What Etsy’s S1 Filing Taught Me About Market Places (link)

Everything We Wish We’d Known About Building Data Products (link) via @ckevinliu

The Best Loyalty Scheme Was Replaced With the Worst (link) via @thesidsmith

Why Startups Fail and How To Build Interest Before Launch (link) via @mattermark

Apache Spark’s Success: Overhyped or Preordained? (link) via @andrewbrust

 

 

Kids Coding, the Long Term View.

I’m all for teaching problem solving, logic, programming concepts and so on in schools. I’ll start with that. Getting everyone hyped up about how great a career in IT is, well I have my opinions on that but I really should keep those to myself.

There is potential for a real problem in the long term and the pictures painted aren’t all as rosy as people make out.

If It’s Repetitive It Will Be Automated

Get used to this, it’s happening at scale already. Companies will only ever be precious about the bottom line and shareholder value over the long term, that’s what companies are designed for. Now to reduce the bottom line well you want to automate whatever you can.

In the ever present search for the unicorn* company then automation is key to reducing overheads.

Everyone Must Code!

Now I’ve said this before, I don’t agree with the above statement. Not everyone must code. Teaching them the process, logic and other bits is fine with me. Being a programmer though is a choice.

What seems to be forgotten is that in some respects coding is a repetitive task, therefore can be (and is) automated. And with machine learning and deep learning what we are presented with is a case for self healing algorithms and code. I mean anyone with the time, determination and patience can put together a website in either PHP, Ruby or Python.

Clojure, that might take a little more time.

Back to the children though, what we saying is that “tech is really cool and you need to know all this to get a career later in life”. The reality could be far different. For example a child looking at Scratch now in P7 is a good 6, 7 or 8 years away from being available to the job market. So while the number of available skills is going up over the time period and a wave of programming talent is on the market, no one is talking about the potential downside.

 

 

20150409_083206

The solid line shows the skills, the dotted line shows the potential requirement over time (in years). Now this is a simplistic view but with the rapid development of deep learning means that the requirement landscape could change dramatically. Legacy costs money to maintain, let alone the new and the funky.

While Moore’s law tells us the halving of cost while doubling of power. We’re not looking at the long tail of a career that has had once severe dip in the past after the dot com bust. Where a lake of great talent was jobless for a long time.

All Hail The New Startups!

Telling kids they could be the next Uber/Facebook/Twitter etc is all well and good, it’s not impossible and the creative process is great to do. More and more though we’re reading that doing a startup is an aside to the day job, fake it ’til you make it.

Let’s keep the 98% failure rate thing under the carpet though. And I know founders that will tell you the startup life is great and then spending a sleepless night wondering where the runway of cash is coming from so they do payroll in two months time. Not a life for every child in school, let’s be honest.

Everyone Can Be a Potential Unicorn

Very true, thinkgeek.com do a Unicorn Mask.

1107_unicorn_head_mask_inuse

#DataScience for the confused. Ni Software Jobs – Part 2

[The post bag is full of single unit count postcards, okay one, with comments from my last post].

Anon from Northern Ireland writes:

convo

As it’s a bank holiday it’s double time mate but I’ll look all the same.

No Pondering Required

No pondering required as we’ve done all the majority of the pondering we need to do and we have some scripts that will help us get the numbers. So a small ponder is required….

m2

A Wee Bit of Prep

IT Sales and Business Development Manager are essentially sales roles so I’ll base my searches there. The category number is 24, compared to 3 which is for IT.

A quick switch of the keywords and we can release the script to an unsuspecting world.

for i in it+sales business+development+manager; do echo -n $i >> jobsoutput.txt ; curl http://www.nijobs.com/ShowResults.aspx?Keywords=$i\&Location=\&Category=24\&Recruiter=Company | grep "Total Jobs Found:" >> jobsoutput.txt ; done

And this time no messing around with awk, there’s only two numbers I’m after.

it+sales <label style="margin-right:30px;">Total Jobs Found: 31</label>
business+development+manager <label style="margin-right:30px;">Total Jobs Found: 19</label>

There we are, 31 and 19. Fifty jobs in grey, so to speak.

Back to the Hypothesis

Let’s have a look at the “anonymous” comment again.

convo

So the question is are those numbers matching. For 50 sales jobs there should be 300 developers. A quick look at a basic search of all the IT positions shows 118 jobs. So that’s a factor of 2.36, a bit off the mark.

That does beg the question that given every sales position does an organisation already have the required number of developers and just a lack of sales? The conclusion here is that there’s a factor of 2.36 available IT jobs against the number of sales/bizdev positions.

For Further Discussion?

Is Northern Ireland a “normally functioning market”? Does the number of employed sales people match up with the required number of IT related people (a factor of six)?

Can I have my tea now????