Managing change
You might as well get used to it. in all likelihood, the pace of technology change will probably not slow within your lifetime. Whether it's new devices, new delivery platforms, or the new coding paradigms and operating system tools to control them, it makes no sense to assume your current skills are going to be enough to stay afloat. At some point, you're going to need some new tools.To get a handle on the problem, it's probably a good idea to start by asking yourself two questions:
- Within the context of your current work and long-term career goals, how exposed are you to technology-influenced disruption?
- How can you most accurately identify the kinds of new skills you should be looking to add to your portfolio?
Ready to go?
Why your career needs future proofing
So then, just "how exposed are you to technology-influenced disruption"? Well that depends on what you do for a living. Here are some general thoughts:- If you write programming code professionally, you'll definitely want to keep an eye on industry trends. You might be a world-class authority on BASIC or Pascal, but if there just aren't that many companies hiring hordes of BASIC and Pascal developers for their new projects, expect the demand for work opportunities to remain low. Based on your current skills, are you even sure your present employer will have work for you a year or two from now?
- If you administrate on-premises bare-metal servers for a living, expect trouble. The number of leftovers may never quite hit zero, but most locally maintained data center workloads will probably be migrated to a public cloud platform like Amazon Web Services in the near future. And as virtualization continues to change the way servers run, the legacy infrastructure that remains local will probably require fewer human hands to administrate it.
- If you manage information technology (IT) operations or teams of developers - or make decisions affecting those operations - you'll need a way to intelligently evaluate what's currently available. You'll also need to anticipate new stuff that's just coming on-line. It must be demoralizing to receive detailed reports from expert stakeholders outlining the choices you face but have no way to judge for yourself whether it all makes sense. What happens when they ask you for your opinion?
- If you're looking to launch your career and trying to figure out the best way to sell yourself, you'll need some profile depth. Trust me, a CV with just "Javascript developer" in the Skills section doesn't sound nearly as good as "Javascript developer with AngularJS and Apache Cordova experience on Docker-based microservices apps."
What you should be learning
Don't expect me to tell you what you should be learning. That's your business. But I can offer a few thoughts that, assuming you're still undecided, should help you figure it out for yourself.First of all, make a point of keeping an eye on IT trends. What compute platforms appear to be growing more popular? Where are the IT giants like Amazon and Google investing their big bucks? Which programming languages show growing demand among published online job ads?
An excellent tool for researching trends is Google Trends. Figure 1.1 below shows a search comparing worldwide search patterns for Kubernetes (the open source container administration system) and vSphere (VMware's virtualization platform) over the last five years. As you can clearly see, vSphere isn't going anywhere anytime soon, but interest growth in Kubernetes is definitely sustained. Scrolling down through the page will also show you interest by region.
To do this right, you'll also need to regularly follow at least one technology news feed like Ars Technica, Tech Crunch, or (my favorite) ZDNet. It also won't hurt to stay up to date with events in the worlds of politics, business, and economics - each of which can have a significant impact on the kinds of ventures that organizations might undertake.
Some time back, I was offered a job with a large and well established technology company. The fact that I was familiar with the history behind the technology in question (and with the fact that that particular company had arrived very late to the party) made my decision to turn down the offer easier. It was equally obvious that investing time learning their tools made little sense. Being informed helps.
Whenever possible, try to incorporate big tent technologies into your learning. By "big tent" I mean the larger environments within which applications and IT services are run. And by "larger environments" I mean platforms like Linux (which currently dominates the enterprise and web server markets), Amazon Web Services (AWS - which currently dominates the cloud computing market), and Android (which currently - as of May, 2017 - accounts for more than two billion monthly active mobile devices).
Why are big tent technologies so important? Because those are the places where things happen. If you have a solid understanding of how they work, you'll be far more effective at whatever it is you're trying to accomplish.
Avoid getting trapped inside silos. AWS is a terrific place to build infrastructure for secure and highly reliable services, but two or three years from now? Who knows...once upon a time IBM's lock on the PC and business server market also appeared unassailable.
Similarly, strive to at least understand the underlying design and structure of one or two programming languages besides the one you use for most of your work. Java and Python are both great today...but what would your career prospects look like if you only knew how to code in COBOL?
You don't want your narrow knowledge to trap you on a sinking ship. On the other hand, of course, if you spread yourself too thin and fail to truly master at least one area, then you'll have no ship at all. And I should at least note that, years after the official "death" of a technology (like COBOL), some experts will still receive desperate calls from companies needing fixes for copies running it on their legacy systems.
Balance. Everything is balance.
To add some more value to this chapter, I'm going to briefly describe some of those big tent technologies and why you might want to learn a bit more about them.
Cloud computing
Cloud computing is the provision of on-demand (meaning self-service) compute, memory, and storage resources remotely over a network. A lot of the cost-effectiveness of the cloud model is the result of the fact that usage charges are calculated and billed in very small increments (often in fractions of a penny).This makes it possible to launch risky projects because there's no need to purchase, build, and house all the expensive hardware you'd need to properly support traditional IT stacks. Instead, you effectively "rent" just enough equipment to handle changing demand on your site and pay only for what you actually end up using. As shown in figure 1.2, properly configured, your cloud resources will automatically "scale" up and down according to demand, resulting in minimal wastage and, often, significant cost savings.
Given how quickly enterprise, government, and organizational deployments are being migrated to cloud platforms of one flavor or another, it's only a matter of time before you're asked to participate. You won't want to look stupid, right?
Web development
Crafting good code and reliable, secure infrastructure is something to be proud of. But don't get all snobby about it and forget that, more often than not, you'll also need to expose your service to the customers/clients who will use it. That will usually mean building some kind of web interface through which your product can be attractively displayed and consumed.Getting that done will require working through a few layers of web development. Just in case you're not yet familiar with how all that works, here are some of the tools you'll need to know:
- Hypertext Markup Language (HTML). The text annotation standard that, being understood by web browsers, allows them to present HTML files to users in an attractive and readable form. Basic HTML is not hard to learn, but is as essential to web communication as English is to the world of flight and air traffic control.
- Cascading Style Sheets (CSS). CSS documents can be used alongside HTML to closely define the way HTML elements should be visually laid out and presented to users. While most CSS functionality could, technically, be included within HTML files, keeping them separate allows for a more efficient and modular document design.
- JavaScript. Web site interactivity - through which visitors can engage with the site content by customizing the display, entering data, and initiating transactions - is usually provided through programming using the event-driven language, JavaScript.
- HTML5. Most discussions of "HTML5" aren't referring to the fifth major version of the HTML standard as such, but to the new ways that this version handles multimedia and cross-platform mobile clients. Because so much web traffic is now coming through small-screen mobile devices, and because the outdated Flash multimedia standard is so hopelessly buggy and insecure, modern web sites must incorporate HTML5 technology...or else.
- PHP. You can add significant scripting power to a web page - to permit relatively smooth and simple database integration or access to host resources - through the PHP server-side scripting language. PHP code snippets are often embedded directly within HTML code, so implementation is closely connected to website creation.
- LAMP. The overwhelming majority of modern websites are powered by one version or another of LAMP server. LAMP stands for "Linux, Apache, MySQL, and PHP", although you can substitute another web server package (like Nginx) for Apache, a different SQL-based database (like MariaDB) for MySQL, and Python for PHP. Being comfortable quickly building, configuring, and securing a LAMP server can make you a real hero with your development team. My Linux in Action book from Manning includes a number of chapters that cover those topics in depth.
Databases
Most applications generate data, and data - especially when it comes in large volumes - must be properly organized and maintained if it's going to be useful.A relational database (like MySQL, MariaDB, or Amazon's Aurora) organizes data into tables made up of columns and rows. The Structured Query Language (SQL) is a standardized syntax for managing data on relational databases. A database engine (like MariaDB) is software for managing relational database data and exposing it to administrators and automated processes using SQL syntax.
For applications that must quickly process updates but don't require a high level of data consistency (for instance, online gaming applications), you might prefer a NoSQL database engine like MongoDB or Amazon's DynamoDB.
But either way, being comfortable working with data can make you far more effective - and popular - as a developer or admin.
Big data
Think about this:- There are millions of web-based applications running right now, cheerfully chugging along doing their thing.
- There are billions of Internet of Things devices (like your smart fridge or car) cheerfully doing their thing.
- Each application and device can easily output many megabytes of data in a day.
Docker
Containers are extremely lightweight virtual servers that, rather than running as full operating systems, share the underlying kernel of their host OS. Containers can be defined using plain-text scripts, created and launched in seconds, and easily and reliably shared across networks. Figure 1.3 illustrates the basic container model.Because of the particular ways they live and die, containerized applications will often need special handling at the coding stage, so the more familiar you are with Docker structure, the faster you'll be up and running in a container world.
Blockchains
People can't seem to stop talking about cryptocurrencies like Bitcoin these days. But within the IT world, most of the big action is probably going to happen around blockchains - the underlying technology that makes Bitcoin work.A blockchain, represented below by figure 1.4, is a distributed string (or "chain") of records used to validate transactions. The idea is that maintaining a reliable and incorruptible public "ledger" of transactions can greatly improve the way many businesses function. And those businesses will need plenty of developers and administrators to create and manage the new infrastructure. Why not join in?
Security and Encryption
Everyone's infrastructure is vulnerable to attack. From teenagers and their smart phones to massive corporate data center campuses: if there aren't multiple layers of protection in place, expect service disruptions. To be honest, even if there are multiple layers of protection, there will still be service disruptions, just fewer.Someone's got to design, test, and implement security protocols and encryption algorithms. And someone's got to build firewalls and convince people to use proper passwords and multi-factor authentication. These are jobs that every organization needs done, and that need isn't disappearing any time soon.
DevOps
DevOps isn't a technology per se - it's actually more of a process - but it's popular enough throughout the programming world these days to justify your attention.DevOps (formed from the words "Development" and "Operations") promotes collaboration between a project's development, Quality Assurance (QA), and IT teams that's designed to facilitate faster time-to-deployment and software update cycles, and to allow greater levels of process automation.
Often the true benefits of automation come through the use of continuous delivery tools like Ansible or Amazon's AWS CodeDeploy. Being able to simply plug new or updated code into a kind of virtual assembly line with all the underlying infrastructure and compatibility details invisibly taken care of can speed things up, improve quality, and reduce errors. Figure 1.5 shows the cycle of a typical DevOps workflow.