Growing ICT talent (was stage of development)

From: Vy-Shane Sin Fat <shane_at_node.mu>
Date: Fri, 26 Feb 2016 13:34:12 +0800

On Fri, Feb 26, 2016 at 4:39 AM, S Moonesamy <sm+mu_at_elandsys.com> wrote:
<snip>

>
> I assume that the student is studying ICT? Meetups can often provide the
>> support network for ICT people. In Mauritius there is the MSCC of course.
>> Unfortunately the MSCC isn't very active online. An IRC or Slack channel
>> would have been very useful. I get more value out of the online channels of
>> some meetup groups that I've joined than out of their formal or informal
>> gatherings.
>>
>
> Yes, the student was studying computer science. This is tied to the
> recent discussion about mentorship. A support network supplements
> mentorship; it is not a substitute to mentorship. I too used to get more
> value out of online channels.
>

*Mentoring*
In my experience, mentoring happens on the job. I wish that I had received
more technical mentoring during my career, especially early on. All of my
peers tell me the same thing when the subject comes up. Is this an
indication that we should be doing more to help juniors? Probably.

*Technical* mentoring in our field is tough and requires a high level of
commitment from the mentor. The nature of our work is such that the mentor
will need to have a deep knowledge of the mentee's project in order to be
able to give meaningful advice. This means that the best chance that a
person will have to get mentored is going to be at work, where colleagues
are collaborating on the same project.

*Open Source*
An alternative to mentoring is to contribute to open source projects. Pick
one where the barrier to contribution isn't too high. If there's a lot of
elitism and ceremony in the way it's not going to be worth your time.

*Join a High Calibre Team*
The best advice that I could give to someone who is starting their career
in ICT is to join the best team that will let them through the door. Don't
worry about how much they will pay you. Your pay will increase very quickly
as you get better. The quality of the team is usually in direct correlation
to the caliber of the development lead. So research the person. You
research their background the same way they research yours: LinkedIn,
social media, blog, GitHub / open source contributions, Google. Ask them
questions during the interview. Some topics that you can ask them about are:

   - Source code management
   - Issue tracker
   - Testing frameworks
   - Do developers get time on the job to research technologies and
   alternative approaches?
   - Code reviews
   - How easy are production deployments?
   - How easy is it to get a development environment up and running? Does
   development look like production?
   - Continuous integration/delivery
   - Does the company sponsor conference attendance?

You don't want to hear a negative answer high up in the list. If that
happens, don't join the team.

*Industry Trends*
How about industry trends? It pays to be ahead of the curve. Where are we
heading and what should we be looking into? The following is an opinionated
writeup based on what I'm seeing. It is obviously coloured by the space
that I'm in: startup tech companies, non-enterprise, unix back-end, mobile
front-end.

*SysOps*
If you're a sysadmin, I'm sorry to say this, but you're going to have to
become a decent coder. DevOps is the new reality in high-performing teams
and you are going to have to become part dev. To get ahead of the curve,
look into:

   - Immutable infrastructure
   - Infrastructure as code
   - Containerisation (currently basically means Docker)
   - Container orchestration (e.g. Kubernetes, Docker Swarm, Mesos)

What does this mean in real life? In a nutshell, we're moving away from
manually setting up machines and manually performing maintenance on them.
Instead, we automate the spinup of new machines, and simply destroy and
replace them if they misbehave. Pets vs. cattle [1]. Obviously at some
point someone somewhere has to deal with the actual physical hardware, but
many teams are choosing to build on top of public clouds.

A note about Kubernetes specifically. I think that it's currently the best
Docker orchestration system. I looked at Docker Swarm + Compose last year,
and have used Amazon's ECS in production recently. Kubernetes is ahead in
terms of functionality and maturity. The abstractions that Google has
chosen make sense. The ideas have been battle tested at scale at Google and
therefore the project has a maturity that is surprising for its age. If
anyone wants to play with Kubernetes, I've got a project [2] that makes it
easy to spin it up on a local Docker host. I can also recommend some
reading material.

*Development*
If you are a back-end developer, the future is distributed. Your
application runs across many servers instead of the single one. The current
buzz word is microservices. When ideas become popular, they also at the
same time get criticised for simply being the latest trend. However, if you
are building a distributed application, you're going to have to break your
application up into smaller pieces. There's no way around this.

If applications are distributed, it means that network latency is foremost
in our thoughts. The future is asynchronous. Better get familiar with
Futures/Promises, Streams etc. The various flavours of Reactive Extensions
(Rx) [3] are hot right now. I've got a sample Android project [4] that
demonstrates the use of RxJava if anyone is interested.

If your application is stateless, you can easily scale out. If your
application is stateful and you need to scale out, consider the Actor model
via something like Akka [5] or Erlang/Elixir/OTP [6]. I've got a sample
Akka Cluster project [7] that deploys via Docker to Kubernetes if anyone is
interested to see what's involved (not much).

I'm seeing a consensus forming that type safety is important and worth the
effort. Erlang/Elixir people recommend using Dialyzer, and JavaScript folks
have things like TypeScript [8] from Microsoft and Flow [9] from Facebook.
PHP has added type hinting. Swift is less dynamic than Objective-C.

Immutability and functional programming is also tending. Elixir [10] is
getting popular, Scala is big in big data and Swift is the newly blessed
language on Apple's platforms.

JavaScript is hot at the moment, obviously. It's a hotbed for ideas about
how to do UI programming at the moment. It's worth checking out ReactJS
[11] + unidirectional data flow. I've heard good things about Elm [12].
Node.js has taken up the mantle from Ruby on Rails as the popular web
framework. I personally haven't used it. I see nothing there that would
encourage me to switch from my preferred backend stack.

Android and iOS developers are in demand. I probably get an email about
once a week from recruiters looking for iOS and Android developers. They
are casting their nets pretty wide too - I've been contacted twice by
different Facebook recruiters about Android developer roles in Menlo Park.
Sounds like there is a real talent shortage at the moment.

Open source has won [13].

I don't mind sharing my experience. I can be pretty opinionated (not
>> necessarily a good thing) and have the propensity to get pretty
>> enthusiastic and evangelical about technologies that I think are awesome. I
>> don't co nsider myself an expert (an overused term, IMHO), but I'd be
>> delighted to talk shop if anyone is interested.
>>
>
> It's interesting to have those little technical "fights" once in a while.
> :-) I rarely get the opportunity to talk shop.
>
> Regards,
> S. Moonesamy
>

Apart from my note about Kubernetes, I've tried to not be too prescriptive
about choosing a technology stack. I've got my own preferences of course,
and some of it can be controversial. I'll leave that for another day. This
email has gotten too long already.

Cheers,
Shane


[1]: https://blog.engineyard.com/2014/pets-vs-cattle
[2]: https://github.com/vyshane/docker-compose-kubernetes
[3]: http://reactivex.io
[4]: https://github.com/vyshane/rex-weather
[5]: http://akka.io
[6]: https://en.wikipedia.org/wiki/Open_Telecom_Platform
[7]: https://github.com/vyshane/klusterd
[8]: http://www.typescriptlang.org
[9]: https://github.com/facebook/flow
[10]: http://elixir-lang.org
[11]: http://facebook.github.io/react/
[12]: http://elm-lang.org
[13]:
http://venturebeat.com/2015/12/06/its-actually-open-source-software-thats-eating-the-world/
Received on Fri Feb 26 2016 - 05:34:58 PST

This archive was generated by hypermail 2.3.0 : Fri Feb 26 2016 - 05:36:02 PST