Old software acronyms – DCOM, ATL, ASM
I was looking at one of my resumes from several years ago. At the time, my experience was a combination of embedded systems/firmware programming and at the other spectrum web based applications in a three tier structure. The big three (Google, Amazon, Facebook) did not have a say in the development frameworks or the tools available to write software – Apple owned its universe of tools and frameworks. There was no React, Angular, Android, Scala, Golang, Rust, Kotlin, Swift, Rust, etc…
The only hard core players in town were C/C++, C# and Java. Python was at the edge of mainstream, Perl was not in enterprise and the only avenues for serious development were Java/ J2EE and C++ (linux) and VB/C# heavily supported by Microsoft. The system development was always in C/C++ and different companies were releasing varied tools to improve memory management, GUI widgets, libraries for IP communication. I remember programming in assembly for 8086 and having a program resident in memory initiated by a key combination that I can access and dump memory in hex.
At that moment in time software development was close to the metal, there was no sophistication in tools or libraries.
And that is symbolized by the bald old man in the picture above.
The new acronyms – Docker, K8s, DevOps
Nowadays, the frameworks added, the new languages are pushing the speed, introducing complex memory garbage collection, formalizing concepts (dependency injection, code generation, etc…) to another level. I am experimenting with different languages and frameworks now – Angular, React, Kotlin, Swift, Rust, Firebase, MongoDB and I already deployed apps in Python, Flask, FastApi, Android.
The difference these days is the open source/proprietary products developed with specific/narrow goals:
- memory databases or key/value storage- Memchache/Redis/ElasticCache
- MVC/MVVM frameworks for easy development – ASP.Core/Django/Spring/Rails
- specialized software for stream analysis – Kafka
- message brokers – RabbitMQ, MQTT
- Data Lake products
- serverless computing
- NoSQL – MongoDB, CouchDB and many more
- companies are offering services in the cloud (SMS/VoIp API/ monitoring) – Datadog, Twilio, Relic, Atlassian
Software development is more of connecting off-shelf software and solving specific tasks than the craft of modelling the problem in a specific language. If before there was no DevOps job description, today it has its own tools and development with Docker / OpenShift / Kubernetes.
Division of labor in software, or where the tools are hard to change
Software development is divided and so specialized that it is not possible to go on the full stack and be knowledgeable.
And that is the symbol of the young man in the picture, with a backpack full of tools and new challenges ahead of him.
There are pockets of development where the changes are slow, like embedded systems, RTOS programming, mainframe programming (are they still around?). Due to a small audience, there is no incentive to adapt those environments to the new tools available.
How is going to be ten years from now the software engineering job? More specialized, more integrated with science than engineering ? What are the trends and what is going to stick from the existing offerings? Because COM/DCOM/ATL have disappeared, VB is gone, C++ seems to loose ground to Rust, SQL flavors added many features to stay in the game with NoSQL (json storage, columnar database, GIS functions).
Drop me a line about your thoughts !
P.S If someone is interested to collect books about COM/DCOM/ATL or ActiveX development just message me :), otherwise the dead trees will be recycled soon.