Our tech radar — where to focus as a young aspiring developer?

This is the first post of the “So, you want to be a tech professional, huh?” -series. Other posts on the series can be found at the bottom of the page.

Become a Digital Superhero!

Digital Superheroes! That’s us, the Digital Services team of Tieto CEM (Customer Experience Management) startup. We focus on web and mobile development with the latest and most proper tech tools for the job. Granted, the web technology sphere is huge! There’s a plethora of opportunities with virtually any kind of tech stack! But to become great at anything, you need to focus on something. So, for this post I’ll stick to few our tools of the trade, so you should be quite well covered.

You don’t need to know everything of course, but if you handle the general tech knowledge and one or two other topics, you should be well off.

In our daily development work in DS, I can quite easily divide our tech knowledge into few main areas:

  • General tech knowledge — what we expect from everyone
  • Front-end — covers everything in HTML5/CSS/JS/etc…
  • Integrations — business logic, e.g. how to utilise the possibilities of the backend
  • Cloud ecosystems— Amazon, Azure, Google, etc…
  • DevOps — containers, automation, monitoring, delivery pipelines & magic!
  • Backend — the core of the application.

You don’t need to know everything of course, but if you handle the general tech knowledge and one or two other topics, you should be well off.

The general tech knowledge

The language of the penguin

Basic Linux knowledge will come at you almost everywhere. Even if you are a windows-lover, you’re bound to face Linux in the server world as 2/3 of servers are Linux/Unix -based. You need to know the basics of Unix-based systems, like creating public-private keypairs and using SSH and using other basic linux commands.

Frameworks and libraries

The frameworks of your language are pretty much a given. Don’t try to invent the wheel. Not again. Just find your framework of choice, learn it, master it and move forward. There will be new frameworks every year (I’m looking at you Javascript!), so you better either stick with few, or be a fast learner!

APIs — APIs — APIs

Designed by Freepik

Pretty much E-V-E-R-Y-T-H-I-N-G is API-based nowadays. If it’s not, you’re probably the one making the APIs. The main style of web service today is RESTful API, which you need to learn. Another type of webservice gaining popularity is the Facebook-created GraphQL, which is extremely well suited for more complex, nested querying of services. GraphQL is basically a query language for a web service and definitely provides a great alternative to data-heavy applications of today. Here’s a wonderful review article on REST & GraphQL. Read it after you’re done here!

Oh, and you probably want to learn an API specification/design/framework tool, like Swagger / OpenAPI Initiative or RAML. Just sayin’.

Development workflow of your choice

No matter what is your language or environment of choice, you want to know your development workflow in-and-out. Whether you’re using Grunt & Gulp, Container-based workflows, Vagrant-based virtual environments, or whatever, just learn everything there is to learn to make the environment yours.

Front-end

I’ll start with the basics. You should know HTML5 & CSS3 basics, minimum. Maybe some preprocessors, like SASS or LESS while you’re at it. You will be useful in projects with only basic JS knowledge and HTML/CSS focus, but to be frank, it will be limited. And jQuery is not a thing anymore, sorry. :( So please, get at least some basic knowledge on a leading framework or library.

The Javascript world is currently dominated by two names: Angular and React. So, which one is better? Simple, it’s the one which fits you and your projects. Right now it’s a matter of preference. Both excel at their approach to creating modern frontend marvels. Their approaches are quite different, so you should evaluate them yourselves on few of the sites in the wide world of the interwebz. Like here or here.

So is there something you could focus which works everywhere?

Aside from the things mentioned above, some topics of interest are definitely Web Components and Typescript! What are those, you may ask?

Typescript makes Javascript great again!

Web Components are basically an enhancement to your standard HTML. It provides sets of APIs for you to create completely new kind of HTML elements (tags), which are reusable, and allow developers to go beyond the traditional limits of HTML.

Typescript makes Javascript great again! No, wait… let me rephrase that. It makes Javascript function like a real programming language. :) What Typescript does, is that it extends Javascript by adding static typing, classes and interfaces, among other things. Basically, if you’re building an application using Javascript, you probably want to try Typescript there too. It may be too robust for few website tweaks, so don’t expect a silver bullet to everything.

Integrations

Integrations are called “the plumbing” of the application. So, where the backend holds the data and the core features, the integrations adds actual logic of the application on top. Integration layer has as many architectural patterns and technologies as you have pairless socks in your drawer, but here’s a mention on microservices.

Microservices is a popular architectural pattern of today. With microservices, you deploy the business logic as a series of small, independent components, which have services exposed as APIs. Each of these microservice components have their specific task to run. You can create microservices with any language, but it’s always a good idea to build on top of others. In Java world, Spring Boot & Cloud are very common if you want to start quite clean, but using a framework, like Netflix OSS is recommendable also.

Especially in microservices and other API-driven design patterns, you want to delve deeper into interaction design. This is to say, that you need to understand how to plan various interactions, based on the business requirements, that the application has. This has a fundamental impact on the chosen stack, as not all are built equal or are capable of delivering the same type of approach. For example, choosing between synchronous vs asynchronous processing; real-time vs batch vs streaming. These should actually be the first things you should consider when dealing with architectural design of your integration layer.

Well, there’s a lot more in here, but this chapter is already longer than what I planned, so I trust one of our integration gurus will write a thorough blog post on the topic.

Backend

Backend is both simple and complex. Simple because it’s mainly about storing data and processing it. Complex because it’s fully dependant on WHAT kind of data and HOW you want to store it and HOW you wish to use it and WHERE it should live, etc… get the picture?

The main camps in backend are currently the .NET, Java, Node.js, PHP and some other smaller players. Compare and pick your poison.

Storage-wise, there’s a plethora of choices. Mainly SQL-based like MySQL, MariaDB, PostgreSQL, Oracle, MSSQL, etc… aaand the NoSQL ones, like CouchDB, MongoDB, Cassandra. Again, not one better than another, but more about the tool for the trade and your background. Also, what we’re seeing is that the cloud ecosystems (see below) are replacing some backend functionalities with their solutions.

Backend developers usually serve integration and API -layers (see above), so it’s natural that you have overlapping understanding. For backend the key points come down to the storage and optimisation of data and the performance aspects. Having an excellent grasp of things like SQL and transactions are key to make things speedy here.

Cloud Ecosystems

Amazon ecosystem provides an amazing, enterprise-grade cloud application stack. You can do pretty much anything with Amazon tools. Certified AWS developers and architects are currently in very high demand everywhere.

One of our experienced architects Kari Marttila has recently published a good blog post on the AWS stack, where you can find deeper insight.

DevOps

DevOps is an amazingly large topic, with the core being in collaboration, continuous delivery and automation. It’s much more than just technology. but I’d like to highlight few main tech areas, which are increasingly more valuable in employing DevOps:

Continuous Delivery pipelines

A type of continuous delivery pipeline by Tieto.

Martin Fowler, the know-it-all of quite many hot topics in software development, sums up continuous delivery like this:

Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time.

Fowler continues by explaining the core traits of continuous delivery:

  • Your software is deployable at any time
  • Your team prioritizes keeping the software deployable, aside moving on to new features
  • anybody (developers, ops people and even business folks, who are not tech-savvy) can get feedback on the production deployability of the software after a new change.
  • You can perform push-button deployments of any version of the software to any environment on demand

Incidentally, these mostly describe the end results of a well functioning DevOps team. Granted, there’s a lot more, but if you reach the state above, you’re doing pretty good already.

Containers, container stacks & infrastructure-as-code

I believe containers are future. I believe that by immersing in containers (like Docker) and family (like Docker compose, Kubernetes, Mesos, etc.), you will be a sought after talent. This applies both as a developer or operations guy. You can learn and deploy containers so easily that it’s currently revolutionising the developers and ops professionals’ world together. Yes, it’s not perfect yet, but it’s definitely getting veeeery good!

And, if containers are not your cup of tea, at least learn your way with infrastructure-as-code in general, in case you want to be taken seriously in the ops-side of things. Some hot names here are Chef, Puppet, Terraform & SaltStack.

“Monitoring is your learning platform into your own application”

Monitoring your software and environments is something developers have not adopted well outside the DevOps paradigm. Previously it has been considered as “the ops guys work”. But monitoring is basically the starting point to jumping from a good developer to a great developer. Monitoring is your learning platform into your own application. And boy, should you learn from it. Things never go as you’ve designed them. And that’s why you need thorough monitoring to dig deeper into the “why”. It then leads you to explore new approaches and ways to solve bottlenecks and possible bugs. And before you know it, you stepped up a notch. Thanks to some well thought monitoring.

So, you still want to be a tech professional, huh?

That’s it! As you can see, the tech industry is vast with multiple opportunities, and this was just scratching the surface. It seems even a bit overwhelming sometimes, but don’t worry, it’s fun! It’s so much fun! So, just take it one step at a time and find your passion!

Want to become a Digital Superhero?

Follow, contact me through Twitter, LinkedIn or Email.

Series posts:

  • Intro: So, you want to be a tech professional, huh?
  • It’s the person that counts — non-technical traits of a tech professional (coming soon…)
  • The skills of a superstar Project Manager (coming soon…)
  • …would you like to hear something more in this series?