I recently had breakfast with the CEO of Czechitas. Czechitas is a non-profit focused on mentoring and teaching girls who are interested in getting into IT. They do a tremendous amount of work that is important for all of us in the industry. Plus, the great thing about Red Hat is that we support such activities and I am allowed to invest some of my time to help good causes like opendata and organizations like Czechitas. Once in a while I meet with them to discuss possible areas where Red Hat can help, as was the goal today. And Dita Přikrylová, the CEO of Czechitas, asked me a very interesting question:
What technologies do you think we should teach that make sense in the long run?
That is a bit of pressure to come up with a comprehensive answer, but I travel quite a lot and speak with a lot of people worldwide about technology, and although I cannot speak on behalf of Red Hat I do have opinions on the matter.
And so I asked for a piece of paper and a pen to create a graph for visualization and I came up with a diagram like the one below. When I recreated the chart for this post I added Swift, but otherwise, this is the informal diagram I came up with on the spot.
Before we move further, a few comments on what is meant by the grey and green part. “Basic CS” is an introductory course so that people understand what is meant by the term command line, what a GUI is, what client-server architecture is, and is a very high-level introduction to networking, etc. “Cloud services” should give a basic overview of services provided by different SaaS or cloud providers that can be consumed in the other courses. This may sound like a product-pitch, but there are many useful things that can be gained with an understanding of cloud services. “Command line/Shell” would be an introductory course to Linux/macOS or maybe more generally to UNIX command line usage, which is useful when working with most of the mentioned languages. Though for some languages, such as Java, it is not mandatory if IDEs are used. However, it is still good to understand the fundamentals of command-line usage when working with any language, with or without an IDE.
You are probably asking, “What does this have to do with OpenShift ?” Well, it's because on the way home I realised that OpenShift can help and support most of the technologies I came up with.
Red Hat and Microsoft are collaborating on getting Windows Server containers into OpenShift, so that you can use one tool to manage both Linux and Windows containers.
For C# we have S2I builders so that users can deploy .NET Core applications directly into Linux containers without the need for Windows environments.
Kubernetes and OpenShift are getting Service Broker. Service Broker will provide standardized APIs to provision services inside the platform and consume services from both inside and outside of the environment. With OpenShift 3.6, the Service Broker is in a tech preview phase so you can start playing with the technology right away.
Java, Python, PHP, .NET
OpenShift comes with builder images for many languages and technologies. Even though containers are a very hot topic nowadays, not everybody is interested in learning all the aspects of the technology. S2I (Source-2-Image) provides a simple interface similar to what developers know from PaaS environments, but uses containers underneath, and the complexities are hidden behind a nice and simple facade.
Even though OpenShift does not provide native support for Go and Swift, it can run any Docker container (some may be restricted based on optional security policies set up by the operators of the environment). This way it’s easy to package your application into the container and deploy the container itself.
When Swift and Java are used for mobile development, OpenShift can help by providing an environment for deploying the backend that the application is using. This can be either a custom application based on one of the approaches mentioned above, or you can use FeedHenry Mobile Backend as a Service (MBaaS). And you can run your own MBaaS using AeroGear or FeedHenry.
There is a special interest group (SIG) for big data on OpenShift and Red Hat is working on the RadAnalytics project to provide big data tools integration on OpenShift, which at the moment, is mostly focused on Apache Spark interoperability.
But even for simpler use cases, OpenShift comes with templates for PostgreSQL and MySQL so that you can start with these relational storage systems right away. For our log management subcomponent, we use ElasticSearch on top of OpenShift as well as bundle the MongoDB template to provide you with non-relational options.
Artificial Intelligence is a trending hot topic today, and it’s sometimes difficult to understand what people mean when using that term; they could be referring to anything from Natural Language Processing (NLP) to deep learning. Does OpenShift have you covered on this topic?
Apache spark integrates with many things including MLlib, so that big data integration effort may be one of the integration points. On the other hand, whatever runs in a container can run on OpenShift, and for example, there is a community effort to put Tensorflow on OpenShift.
In any case, AI requires a huge amount of computational power and cluster management, and so even if you find yourself short on integration points between your framework and OpenShift, we are here to help you with scaling your application. OpenShift is an enterprise-grade distribution of Kubernetes. Clean Kubernetes has already been used for scaling deep-learning systems, for example by OpenAI. And whatever Kubernetes can do, OpenShift can do as well while also adding many interesting features not present in generic Kubernetes.
OpenShift as a Learning Environment
Above are my opinions on what languages and technology should be considered for future-proofing yourself against technology changes. OpenShift supports all these technologies and many of the use cases have direct integrations in the platform. But the great thing about OpenShift is that users can always create their own container image, or use a public one if the platform doesn't offer your runtime version of choice. You will also be able to benefit from the scalability and resiliency of the platform even while using container images that you have created yourself.