- Python, machine learning and data science
- Applications created for customers on the web, mobile and the enterprise
- Architecture, Enterprise, DevOps and Docker
I make this report for tech professionals, enthusiasts, students and anyone who wants to see what technologies real-life projects are using. My goal is to help you (and me) to find those new tech components, libraries, frameworks that are worth your time reading, experimenting and prototyping.
I use Stackoverflow data to find out what’s trending and set up a list of what I want to prototype and learn during the year. I’m sharing my findings with you now, maybe you spot a new skill to build, or create a prototype that will change your life.
The report is based on Stackoverflow data, so you can assume it’s pretty close to reality. It tells you about the technologies that real-life teams are discussing in Stackoverflow questions and answers.
The backing data is a dump of all Stackoverflow questions and answers. Stackoverflow releases their data every quarter and it’s available in the internet archives at https://archive.org/download/stackexchange.
I download the Stackoverflow files every year and add them to a database on an external SSD that I labeled DWH. Having multiple archives at hand lets me create trends that would not be possible with one dump only. Everything you read here is the result of tedious data crunching with Emacs Org Mode, Python and Postgres.
Every Stackoverflow question has one or more tags assigned to them. I start from the list of top tags on Stackoverflow and dig deeper from there. You can see the top tags in the table below.
|#||tag||# of questions|
You can see the number of questions with the top tags since 2008, when Stackoverflow started in the table above. The graph shows the number of monthly questions created with the top tags as the percentage of all questions.
The chapters of this report are structured around those significant tags that indicate a domain and we explore tags within these domains and their growth trends. I followed the data to create the table of contents:
- We start with Python and its two applications that generate most buzz; machine learning and data science. The most inspiring IoT and Embedded projects are related to AI, so we inspect them here.
- We go beyond code and dive into devops and docker and two more work related topics; architecture and enterprise.
These are the areas that I found most interesting based on the data. If something is missing, it does not mean that it’s not important, it just means that I could not read the data in a presentable way. Let’s dive in!
Python, machine learning and data science
The heat map here shows the most used tags next to the python tag in Stackoverflow questions.
You meet many data science and machine learning related tags like pandas, numpy, matplotlib and tensorflow here.
Tags like regex, django and flask prove that the scripting and web application side of Python is still strong.
In order to have a good idea of fastest growing tags, we take a look at Python questions and see which additional tags got the most growth in question views last year. This growth is depicted in the tables below.
I split this table into 3 parts. You find this categorisation in all chapters, so let me explain quickly how this works.
- Established tags are the tags that have a high number of questions, they have been around for a while and many projects use them.
- Trending tags are the tags that have less questions, but they also have a solid track record on Stackoverflow.
- Emerging tags are the ones that have a few questions, you find newcomers and hidden gems in this category.
Based on the tables you probably agree that we can attribute most of Python’s growth in the past years to data science and machine learning applications.
Let’s talk about the tags in the table a little bit. The tables are the best place to find new tech to learn or prototype.
The top established tags are usually the ones that are used by most projects to accomplish core tasks. Keras, tensorflow and scikit-learn are mainstream machine learning tech, all great to start learning.
Pandas and the dataframe are fundamental data manipulation tools, this report is also made with them.
Anaconda and Jupyter notebook are in the growth table. You can use Anaconda to conduct professional grade data science and ML work, at the same time it’s a great spot to get your hands dirty, it contains all the tools you need to get started.
Jupyter notebooks are notebooks containing your Python code, execution results and Markdown documentation. It’s a great way to work, present, share and collaborate. Jupyter notebooks comes with Anaconda.
Thanks to Google we have a cloud version of the notebook available for free at https://colab.research.google.com. If you build your first Python data crunching or machine learning prototype, start here!
Computer vision and natural language processing are the fields of machine learning you can meet every day (just think about phone apps with face recognition or voice assistants). So it’s not a surprise to see opencv on the established tags list.
Let’s look at the top tags next to machine learning in the first graph and data science in the second graph and discover more options for prototyping.
As you can see these domains are dominated by Python related libraries and frameworks, actually both lists start with python itself.
Let’s note the other fast growing language in the field; R.
We also find tags here that represent broader fields like deep-learning, neural-networks, computer vision and nlp.
Neural networks and deep neural networks are the state of the art machine learning methods and these charts also confirm that computer vision and nlp are the common applications.
The next table contains the detailed growth segments of machine learning.
An important change from past years is that cloud platforms are climbing up the growth charts.
Amazon Sagemaker and Google Colaboratory are emerging tags and we have Azure Machine Learning Studio and IBM Watson Studio to choose from. AI is becoming industrialized, it’s important that you build skills on at least one of these platforms.
Additional prominent trend is to bring machine learning to mobile and edge devices. The top growing machine learning framework in the trending tags, Pytorch, has capabilities to run ML on edge devices including iOS and Android.
Apache spark appears both in the Python and machine learning growth tables. Apache Spark and pyspark (Python API to support Apache Spark) let you analyze large volumes of data on clusters. Microsoft’s Apache Spark based analytics service, Azure Databricks, is the top item on the Python emerging tags list.
Real time object detection and industrial grade nlp are represented by Yolo and Spacy. I made a quick prototype with Yolo and got a cool image with boxes around every object. It’s too personal to share, though; my wife is standing there between a potted plant and a backpack smiling frantically surrounded by box that says: “person”.
Let’s look at some cool applications of machine learning beyond image processing and nlp! You find some of these tags in the table above, while some other tags come from additional exploratory queries that I run.
The Gym toolkit is an open-source project to build reinforcement learning projects. You can use it to teach your machine to walk or play games.
Reinforcement learning is the kind of machine learning where your software agent is learning from its own experience.
It’s very similar to the way we learn from our own mistakes. This is the kind of AI I find most exciting.
Gym makes an Atari game environment available to train on games, and 2D and 3D robots are also available beyond algorithmic scenarios.
Photo credit https://gym.openai.com/.
Context is the weak point of present chat bots and virtual assistants. Rasa, the open source contextual assistant has 2M+ downloads is available for free or with enterprise support. Sounds like a chance for clever business prototype.
This year is buzzing with AI enabled IoT and embedded projects.
Nvidia’s Jetson product line offers development kits and embedded products to prototype and run neural networks.
You can build robotics applications for manufacturing, delivery, smart cities and retail with Nvidia’s developer kits.
For more information visit the Nvidia Jetson site.
Photo credit: https://www.nvidia.com
One more cool example is the Crazyflie open source flying develeopment platform by Bitcraze.
The Craziflie is a tiny quadcopter drone that you can extend. It has advanced positioning extensions enabling autonomous flights and swarms.
Photo credit: https://www.bitcraze.io/
Applications created for customers on the web, mobile and the enterprise
Looking at the heat map you might think that we are back in 2005 with JQuery, HTML, CSS and PHP on top. Well, HTML and CSS are still evolving, although they are hidden behind flashy frameworks. (I know, React is a library…)
Good old JQuery and PHP are slowly expiring, they still run most of the web, but new applications are built with new tech.
The established tags start with the *front-end framework battle that used to be loud a few years back, with heated articles and videos about React vs Angular and later also Vue.
Today the picture seems a bit clearer, Angular is higher on the heat map, which means it has more questions than React, but React is growing a bit faster. We have to come back to the figures next year to see where this trend is going.
In real life these two frameworks (except for React, which is a library, of course) seem to serve different type of businesses and projects.
The enterprise clients I work with use Angular exclusively. My understanding is that they do so because Angular is a framework, meaning there is a built in standard way to accomplish core tasks. This helps a lot with quality and skill building in large organizations.
React is a library; you have several options to extend it with further libraries to build up your own stack. There are however mature and winning combinations and there are some React based frameworks on the rise that provide standardized solutions.
You see that Angular and React are far ahead with Vue in the third position. Adding Svelte to the picture has no strong visual value, but it’s a fast growing newcomer (it’s on the emerging list on the previous page).
Svelte is inspired by React and Angular and is built on the experience of the big frameworks. It feels a little like a newer generation keeping what’s working well and fixing what’s not so good. I built a chat app prototype with Svelte and it was a pleasing experience, you might want to give it a try.
The second graph shows Next.js and Nuxt.js front-end frameworks mentioned on the last page.
The third tag on the graph, Nest.js, is different; it’s a server side Node.js framework. (I put these on one graph because the scale of the numbers is similar, so you can see the rapidly growing trend.)
Nest can run two Node.js server solutions under the hood; Express or Fastify. Express is the Node.js classic, while Fastify, as the name suggests, is tweaked towards performance. Express has not received new commits in the past 9 months on GitHub, which makes projects like Fastify highly welcome.
Modern frameworks and architecture styles are a lot of fun, but the complexity and infrastructure need is often unreasonable; you might want something simpler for your next web or mobile app MVP.
Here comes Google’s Firebase, a development platform that has the right tools and infrastructure components you need to launch your web or mobile app quickly. (Firebase is on the trending tags list on the previous page and appears in several tables in this report.)
Firebase offers just the right tools, plus features for A/B testing, predictions, messaging, quality assurance and analytics. I used Firebase in a recent prototype and loved it.
Java is an amazing creature. I learned to appreciate it with time.
It runs most businesses across the globe and it does its job really well. No wonder large corporations put their trust in Java and are slow to move to hip tech like Node.js.
Java does not appear in trendy articles often, there is no hype, but it’s catching up with features for functional and reactive programming and machine learning.
The main Java use case is enterprise business support systems development and Android development.
Java has the most sophisticated arsenal to support the enterprise, but this machinery comes from the pre-cloud era and it makes Java look a little dated compared to modern options especially when it comes to app startup times, memory consumption or container deployment size with fat jars.
The heat map shows the most used tags next to Java on Stackoverflow.
Do you mind if I write about the Spring framework and Spring Boot right away? Spring is the top server side tech on the heat map and Spring boot is the fastest growing Java related established tech in the table below.
Spring is the enterprise tech lead’s dream come true. It’s computerized Swiss army knife that has all the best practices included that you need to build a serious, secure and performant business application.
You don’t need to reinvent solutions for dodgy functional areas like security, REST, database connections, MVC or microservices; Spring got you covered.
The amount of experience built into Spring is astonishing. If this does not sound intimidating, you can experiment with JHipster, a project that generates Spring applications plus Angular/React front-ends as a monolith or a microservices architecture ready to run in production.
Most tags in the growth tables denote some standard tools used everyday in enterprise projects, but there are a few different ones like micronaut and OpenJFX.
Micronaut, a Java based framework to build microservices and serverless applications, promises to deliver on the key weak points of Java; startup time and memory consumption. If you take the time and test it out, please let me know about your findings.
OpenJFX is an open-source project to build cross-platform client applications in Java. Cross platform development is catching up with many languages, and Java is also joining in with JavaFx.
Staying on the server side, let’s mention Python’s contribution. Django and Flask are both on the Python top list and they are a beloved alternatives to Java and Node.js on the server side. They are used for web applications and as microservice backends. Connexion, a project that serves your HTTP request based on your OpeanAPI YAML specification using Flask, seems to be a hot candidate for a prototype.
Now that we saw web front-end and back-end tech, let’s spend some time with mobile development.
Coming from a more classic IT era, it took me some time to realize that mobile first does not just mean to design your mobile website first. It really means to start your business giving a mobile app to your customers and the rest will follow.
I created a couple of online ventures as my own initiative in the past, but never really came up with a service idea on mobile and launched it. If there is something I really should be prototyping is a business idea that starts on mobile.
Thinking about mobile development seems a bit double sided to me. On one hand, it’s just iOS and Android and you have to do both, so I’m not getting any headaches here.
On the other hand, mastering both iOS and Android and maintaining two code bases seems a lot of work. We’ve got cross platform solutions to address this, but many companies say these bring even more pain.
Let’s have a look at the most used tags next to mobile, Android and iOS on Stackoverflow on the heat maps below.
The heat maps show the essential tools of the trade; Android, Java (for Android development), Swift for iOS and some old-fashioned tech like JQuery mobile to build responsive websites.
So what shall the avid prototyper do to lay her/his hands on some new mobile tech? I hope we find the answer in the detailed growth tables. We start with the top tags next to Android.
We all know by now that Kotlin is a programming language interoperable with Java, but meant to fix Java’s main flaws. We see it on top of the Android growth chart, which I’m sure is great news for devs who are deep into Android development; according to Stackoverflow you can improve your life by giving Kotlin a chance.
For me, who is not into any platform yet, but willing to prototype a new app in 2020, Kotlin is not the solution I’m looking for. I’d rather try some cross-platform stuff. It should be fresh, modern and proven with a solution to every problem.:)
The thing with cross platform tools is that you regularly see news about large companies moving away from one or the other. You also see the opposite; cool tech players committing to one platform for the long run. I don’t wanna put brand names here, please ask google for examples.
There are various reasons to abandon a cross platform development solution, the most common ones being; startup times, worse than native performance, partial coverage of features; meaning some features still need to be developed natively for iOS and Android. This implies that you have to maintain 3 code bases instead of 1 cross-platform or 2 native.
So the question comes, which one should I use in my prototypes going forward? Let’s add the growth table of iOS to the picture and come up with a plan.
It’s obvious that I have to put React Native on my shortlist. It’s a top growth tag next to iOS and Android, too. I’ve got React skills (that I acquired through blood, sweat and tears), it seems like a no brainer. But I have a concern.
Learning React was painful because I had to research and choose the right library to be added to React to cover the basics.
React does front-end right, I like its logic, style, I even like JSX, it’s compatible with my brain’s wiring. But React stops at the front-end and leaves the rest of your app to you. I’d rather check out something that gives me more end-to-end support.
Xamarin works with .Net and C#, I saw it in various corporations doing a good job. If you are into the Microsoft ecosystem and already know C#, it looks like a great option, because MS got your back end to end.
To complete the short list let’s look at the growth next to the mobile tag, too. Flutter by Google and its programming language, Dart, appear on top.
Another Google project, Firebase, is listed in all the growth tables in some form. I’m particularly excited about the real time database, and I’d love to build my mobile prototype with it.
I’d add React Native or Flutter to implement the mobile part. Flutter integrates well with Firebase with good learning materials and examples. I’d have to learn Dart though.
React Native seems easier if you know React, but then you have to figure out how to integrate with Firebase. I think I have to research this.
Architecture, Enterprise, DevOps and Docker
These tags, especially architecture and enterprise are smaller, Stackoverflow is more about code related issues than conceptual matters.
Still I’m very curious about these tags, because like many of you, I also work with enterprise clients, and do solution architecting work.
Prototyping for enterprise makes a real difference when you are in the process of moving into cloud, digital, data-driven, event-based and real-time. I realize, this list sounds like b***shit bingo, but this is reality.
I see these projects happening right now and enterprise experts need a lot of training and guidance to design and implement systems with the new mindset. Prototyping is essential, because this stuff improves the bottom line.
Let’s see if we can find something worth trying!
The heat maps show the most used tags next to architecture (first graph) and enterprise (second graph).
Tags like C#, Java, MVC and database pretty much summarize what we used to build in-house applications in the past two decades. No big news here.
The way we implement modern applications changes though.
Having iOS and Android on the heat map means that mobile has been a top enterprise priority for years. Corporations with legacy stacks add mobile applications as a new customer channel to their existing applications.
Mobile integration uncovers the shortcomings of legacy architectures. It’s inefficient to retrieve a screenful of information from legacy monoliths, they don’t have the right gateways, the interfaces are too fat and system boundaries are not in line with mobile screen flow.
New enterprise systems are implemented with the microservices pattern and old legacy stacks are re-architected to resemble microservices as much as possible.
You find the top growing tags next to architecture and enterprise in the tables above. Microservices architecture appears right on the top of the list. It’s a vast universe with its pluses and flaws, but it’s totally feasible to build a small scale prototype architecture for learning purposes for yourself.
I built mine with JHipster and I would recommend it to architects and devs who want to play hands on.
You get a Spring Boot backend, an Angular or React front-end, API gateway, Traefik, Authorization system, SQL or NoSQL, Kafka and deployment with Docker and Kubernetes. You get it all generated for you automatically and you can start experimenting. Sweet, isn’t it?
If you want to get into Spring Boot a little deeper, I recommend the courses of this author on Udemy.
On the design side Domain driven design and Clean architecture are the concepts trending on Stackoverflow. To get started check out Domain Driven Design by Eric Evans and Clean Architecture: A Craftsman’s Guide to Software Structure and Design by Robert C. Martin a.k.a. Uncle Bob.
Our prototyping ideation must touch upon DevOps and Docker. These tools enable whole new levels of automation. This is a hot topic everywhere.
I teach Docker in classroom trainings at large corporations.
People learn the tools first, then they realize that they can solve problems in entirely new faster and simpler ways.
This is the moment when it’s great to be in education.
Docker and DevOps means a lot to me. Not technically, more like personally. From the day when I first saw a computer in around 1986 I firmly believe that technology will take us to a highly intelligent age when everything happens automagically and we’ll all be very happy.
So in my early career it was pretty shocking to see that dev and ops are two different disciplines separated by a giant wall. Why would anyone do that? It was so unbearable that I married the head of application support to put the universe back in order.
No wonder I’m a great fan of The Phoenix Project, a one of a kind IT novel by Gene Kim, that shows dev and ops the way I like to look at IT.
The heat maps above show a good picture about the everyday reality of this domain; Docker, Jenkins, Kubernetes, Ansible, Linux, Git and Cloud skills do the job here.
The table below shows the top growing tags in the DevOps domain and the table after shows the growth tags of Docker related questions on Stackoverflow.
If you take a look at tags in the above tables, you can see that Kubernetes is at the top both next to devops and docker. The reason for this is that Kubernetes is the most adopted container orchestrator on Earth right now.
Mastering Kubernetes is a pretty daunting task. To cope with the complexity most clients use PaaS solutions like OpenShift or cloud providers to set up and manage k8s clusters.
You can build your first Kubernetes prototype with Minikube and learn the basics. Then try running applications on GCP, AWS and Azure with their respective managed Kubernetes offerings.
Jenkins is at the core of automation, it’s the most popular CI/CD solution for corporations. While there are various cloud options available like CircleCI or Travis, you can always set up your own Jenkins on your own servers. Try running Jenkins with Docker as a prototype, I have a blog post almost ready to publish to show you how you can do this.
Another key tool that you can set up on premises is Gitlab. Gitlab with Jenkins is a frequent combination in enterprise projects.
Moving further into automation you find infrastructure automation with Terraform by HashiCorp and configuration management with Ansible, Chef and Puppet. You find most of them in the top growth tables. Prototyping these tools is pretty easy, just take any web application prototype you already have and deploy it to a cloud service with these tools.
There are good number of solutions to help you deploy a production level Kubernetes cluster. Kubespray works with all major cloud services, supports Ansible and Vagrant and has great compatibility with 3rd party components.
If you deploy your apps on edge devices, you might want to check out microk8s, the zero-ops Kubernetes for workstations IoT and embedded applications.
Identity and access management is an aspect you have to handle in every project. Keycloak, a project backed by RedHat provides all-around open-source identity and access management. I just built a few small prototypes with it and liked the experience a lot. I rebuilt the prototypes with Firebase Auth and liked it even better. I’m also considering another rebuild with AWS Cognito.
If you are new to Docker and willing to learn, check out my Docker tutorial book I teach in classroom trainings; Get Started with Docker in your Projects - through Examples.