Getting Skilled: what skills do you need - where do you get them

In my last blog post I rambled on about how a tech engineer must leave College or University with skills and not just knowledge. This of course begs the question - what skills should a young graduate engineer have as they step out into the world.

Computer Science has many sub-disciplines and it is not feasible to point out the skills young graduates should have in each case. Instead I picked a few sub-disciplines and asked friends and colleagues with experience in them a simple question.

'If you were hiring a graduate engineer, what skills would you want them to poses "out of the box"?'

IT is a fast changing profession and having the skills relevant for todays technology needs may not be enough to stay competitive next year.

So I further classified skills into two categories - Right Now skills, that the tech industry needs from you immediately and Around the Corner  skills that the tech industry will likely need from you in a year or so.

Without making this to complicated, lets begin;


Your 'Right Now' Skills

Whatever your specialization there are some skills everyone working under the broad umbrella of 'IT' should have; 
  •  Solution Design and Documentation: Don't be over eager to get to coding, configuring your router, setting up your VM. Think first about the problem you are trying to solve and how you will do it. Design your solution; do your ER modeling, your use case and sequence diagrams, network diagrams, wire frames etc. Visually modeling the proposed solution will help you critique it, find weaknesses, improve it.
  • Operating System skills: Linux is Life - remember that! Get to understand and play around with its file system, permissions structure, navigation and its cornucopia of powerful utilities. Windows Server is a distant second but still hugely important in the enterprise space.
  • Networking: you need some basic knowledge of how computer networks work, the different types of networks, network segmentation, practical IPV4 and IPV6 understanding. Test a few packet sniffing tools like Wireshark or TCPdump. Play around with online network simulators - best way to learn.
  • Databases: yes Hadoop and Big Data are all the rage these days but you cannot and will not avoid running into good old fashioned Relational Database Management Systems (RDBMS).                                             Learn SQL!! - how to create data bases, optimize them for peak performance, import large data sets into them, write data to extract information. MySQL, Oracle and MSsql -Server are three of the most common-get intimate with atleast two of them.
  • Online forums: I swear by these - I live my professional life by them. Online forums are a great way to learn to solve difficult problems quickly. If you have a problem, chances are someone somewhere in the world has experienced it before you. Don't reinvent the wheel, leverage their experience to get a prompt solution!
Software Engineers/Developers, in addition to the above you simply have to acquire the skills below;
  •  Coding: learn to code! Its just that simple. Pick a couple of languages and build small simple applications, then graduate to large more complex ones. Java, C++, PHP, Python, Javascript would be the ones I recommend - pick a couple and get good at them. Practice, practice, practice!!!!! You cannot 'study' programming in the traditional sense.
  •  Application Architecture: writing code well is only part of the game. Designing the applications to accomplish a task - optimally - is what separates good coders from great software engineers. learn how different architectures accomplish tasks best -  if you can test out a particular architecture on a mini project of your own. 
  • Frameworks - great developers achieve results quickly and effectively. Frameworks a create the skeleton of your application quickly and efficiently and abstract the tedious low level stuff - allowing you the developer[s] to focus on the more important (meatier) parts of the application.
  • Software Development Process's; learn a couple of these I recommend SCRUM for smaller-fast changing projects and Unified Process for larger more structured ones.
 Database Administrators/Business Intelligence analysts, databases are your thing? Get to know them;
  • SQL is your friend. In fact SQL is your lover. Don't just learn your basic 'select * from table_name' queries - nope. Go deep - aliases, joining tables, aggregating, nesting queries, views, procedures etc. Pick an on-line tool with large data sets to practice on. Also learn what kind of information [Reports] are needed by business's (e.g do the needed data aggregated by time periods or do the like day-on-day comparisons) then see if you can write SQL queries that give that kind of data.
  • Normalization in Database design: yes they teach you this in school but you need to turn this into an art. From Entity identification to Entity-Relationship modeling and correct normalization - pick some examples on-line and try and design a database from scratch. Remember a poorly designed databases causes nightmare down the road.                                      
Network Engineers please don't just rush to get your CCNA certification. Important as they are is the hands on experience of building a small LAN, configuring a firewall, setting up a DNS server. Thank God there are on-line tools for these and many more. I'll post a few links below.

System Administrators, yours is a tough field - keeping all the different engineers from running amok is a thankless job. Somebody has to do it.
  • Visualization: this is standard fare now, VMware and other hyper-visors are 'household names. Get training and get it cheap - don't focus only on the certification.
  • Operating System installation and management. You'll need to go in depth and also that you won't learn everything at once. SysAdmins are like wine - they get better with age[experience].
  • Server Hardware is a tricky one to get skilled in. There are tens of vendors each with their own configurations including legacy setups. Most important is to identify the most popular ones (HP, IBM, Solaris are my best bets) then read up on their most stable and popular platforms. Actual experience will be hard to come by without costly training - chance any internships you can that will give you this experience.


Your 'Around the Corner' Skills

Computer Science is moving really fast - that is and has always been its nature. Your skill set must move with the times or you will be declared obsolete!

A new wave of technologies are becoming main stream and its time for each of us to update our skill set. You just maybe that innovative young engineer that revolutionizes the work place setup.


The Cloud is coming. Every facet of Information Tech is moving to the Cloud. It is not a fad, it is the future.

  • Applications are being deployed there and their architectures must evolve to meet requirements of the new setup.  
  • Operating Systems are evolving to work in the cloud.  
  • Computer networking is now among arrays of virtual cloud-based hosts. 
  • Training on Amazon Web Services (AWS), Google Cloud and Microsoft's Azure is the way to go.

Big Data. Google, Facebook, Amazon (and the NSA) have pioneered a field of computer science to manage and make use of EXTREMELY large data sets that grow hundreds of Gigabytes everyday and overall run into the tens of Petabytes or even Exabytes. They have made these tools publicly available in the spirit of open source/free software. Hadoop is the most widely used Big Data tool around-look into it. Not everyone will get to work in a PetaByte environment, but datasets are getting larger and Hadoop will soon become common place in most enterprise environments.

Machine Learning. Once the privilege of the uber smart geeks at Google's Deep Mind lab, machine learning has gone main stream and will start to trickle down to the rest of us pretty quickly. Get ahead of the curve by reading up on these and getting any training you can.

Augmented Reality is my bet for the next big thing and I pick it over Virtual Reality.

Containerization is the creation of identical 'sandboxes' with everything that an application needs to run -  from the development environment to the staging and live environment. It ensures a consistent application environment across several hardware and virtual environments so you don't have to do the tedious work of making and environment ready for your application. In my opinion Docker are leading the charge in this regard - get with their program and stay ahead of the curve.



Your 'Soft' Skills

Everything I've talked about earlier is purely technical. However always remember technology does not exist for its own sake - it must serve a business, social or economic purpose. Your database, application or server cluster must serve the purpose of the organization in/for which you operate it otherwise is is useless.

Here are some soft skills that will help you work better with your less technically inclined colleagues;

  •  Be a PROBLEM SOLVER!! to many young techies are experts at just reporting 'problems'/'difficulties' they've run into that are keeping them form completing a task. DON'T be that guy[girl]. Develop the mindset of analyzing a problem, figuring out the different actions you need to take to solve it, check an on-line forum, ask a workmate or friend, Test out a potential solution.
  • Understand the goals of your organization. What do you set out collectively  to achieve every day. e.g turn a profit, provide a governmental service, educate a group of people, solve crime etc.
  • Understand the part your service/application/database/network gear plays in achieving the organizations' goals. For example, commercial analysts may rely on reports from your database to determine the business's performance-they need those reports on time and they need them to be accurate!! How can you make that happen?
  •  Don't Speak 'Tech' to non techies. Technology is hard to for non-technical people to really grasp. Avoid sentences like 'The application is spawning too many threads under peak load and its consuming the available RAM causing the server to hang'. Instead explain complex technical concepts using simple everyday examples e.g 'the server has "memory" to remember stuff that it is working on. Like a funnel the 'work' sometimes flows into memory faster than it can flow out. Whats happening during our busiest period of the day is that much more work is flowing in than out and when the "funnel" is "full" the server can't take on any more work and becomes unresponsive'. 
  • Coax information out of your colleagues. You're and engineer, you want clear exact statements on what the non-tech side of your organization wants, or what problem they need fixed. Your colleagues however are wired differently and speak in general, broad and often abstract statements. You need to probe and ask more questions to get to the bottom of what they really want. Patience is key!!

Your 'Skills Source'

You must be wondering where you can get training for these skills. You may not have hundreds of dollars to spend - in fact you may have no money at all.

Here's the cheap-skates guide to getting 'Skilled Up'
  1. http://udacity.com/ and http://udemy.com/ are the top rated on line learning hubs. Sure they are not cheap ($10 -> +$300 a course) but thats definitely cheaper than other sources of the same training. Target their 'knock down' promotions to get the best ranked courses super cheap. You may have to make a sacrifice and skip a few lunches, but it will be totally worth it.
  2. AWS (https://aws.amazon.com/free) , Google Cloud (https://cloud.google.com/free) and yes even the ruthless capitalists at Microsoft have an Azure free tier (https://azure.microsoft.com/en-us/offers/ms-azr-0018p). Sign Up and try them out.
  3. https://www.youtube.com - so many channels with tutorials, free courseware, free training videos. 


So thats it friends, the skills you need are out there -  go and get them. Always remember that ignorance is a choice in the age of the Internet.












Comments

Popular posts from this blog

Artificial Intelligence: The second sixth day - Part 1

Digital Money: Bit Coin, Cryptocurrencies and the Block Chain - Part 2

Artificial Intelligence: The second sixth day - Part 3