My Favorite Programming Languages: The Journey
Since I was in university (circa 2009) until now, I saw there many programming languages emerged or the 90’s languages that become mature and more robust. It was confusing because I have to choose programming languages for my career. But I experienced this doubt when I was in university only.
Afterwards, during my career journey there were also new programming languages released to the community as open source project. That also made me doubt whether I should choose that new programming language or just leave it.
After more than 9 years since I got my first job, I think I could share my experience how to choose my favorite languages. So it could end “programming language war” if you still on that situation. Different to other talented guys who invented tools or create new programming languages. I’m just a user of particular programming languages.
Let’s start!
A. Taught at university / college
Everyone has their own starting point. For me, I learned programming around 2008 when I was failed to pass university entrance exam (SNMPTN). During that gap year, I learned Javascript which I can try on Firefox web browser. I got the learning material from my friend who attend the programming class at private university in Bandung.
At that time, I didn’t really understand how a set of Javascript code could give me a pop-up windows and alert. Even, at that time I didn’t really aware that there are frontend web app, desktop app, mobile app, backend web app, etc.
Then, finally I passed university exam to join with Universitas Pendidikan Indonesia. I enrolled to computer science degree at 2009. This was my starting point to jump into IT world and computer science.
Basically, I learned these programming languages from my lectures or their assistants when took some of courses:
- Pascal: I learned it when enrolled to Algorithm and Programming I course
- C/C++: I learned it when enrolled to Algorithm and Programming II and Data Structure course
- Javascript: I learned it when enrolled to Web Programming course
- PHP: I learned it when enrolled to Web Programming course
- Java: I learned it when enrolled to Object Oriented Programming, Mobile Computing, Database System II and Artificial Intelligence
- SQL: I learned it when enrolled to Database System I and Database System II course
- BASH: I learned it when enrolled to Operating System course
So it’s kind of official language which taught when I was at university. I used it only for specific course. For the final projects of my undergraduate thesis, I used Python and PyGame. Not single one above.
I might learn many things from my lecturers. But I had to mastery on few things to make money and start my career as IT engineer. Especially in software engineering.
But when I got my first freelance job, I use Javascript, PHP and SQL. As an additional I also learned HTML, CSS, XML and JSON. Then, my internship used similar stack as well. Finally, when I got my first job I still used HTML/CSS, Javascript, PHP and SQL. Those languages is my turning point to enter IT world in professional.
Programming languages: Javascript, Pascal, C, C++, PHP, Java, SQL, BASH
B. Influenced by other peers
When I was in university (circa 2009–2014), I wasn’t only get my knowledge from my lecturers from multiple course. But my senior and junior became my knowledge sources. So, I will try to mention those peers based on programming languages I know from them.
- Python: I learned this programming language for the first time from Bramandityo. I learned Django (HTTP RESTful API), Celery (Async task), Sentry (error tracing tools), CherryPy (HTTP RESTful API), PyGame (game framework) and many things.
- Erlang: I learned this programming language for the first time from Bramandityo. I just learned the fundamental and I was difficult.
- C#: I learned this programming language for the first time from Rendy and Yusuf. I learned how to make an app with C# for Microsoft Lumia (Windows Phone OS).
- ActionScript 3.0: I learned this programming language for the first time from Yusuf, Giri and Gilang A. Aziz. I learned how to make game and educational apps with Adobe Flash
- Node.js: I learned this programming language for the first time from Bramandityo. I learned Express.js (HTTP RESTful API) and Socket.io (WebSocket framework)
- Elixir: I learned this programming language for the first time from Bramandityo. I learned about Phoenix Web Framework for backend web application (HTTP RESTful API + WebSocket)
Basically, I know those programming languages from student ambassador who works for their student organization. Bramandityo and I were in same student organization called POSS UPI (Pemberdayaan Open Source Software — Universitas Pendidikan Indonesia). This organization had an objective to introduce and make use of open source software, Linux and FreeBSD.
Giri was also in POSS UPI but he worked a lot with Multimedia Laboratory with Gilang A. Aziz. If I’m still remember correctly, those peers were part of Adobe ambassador. For Rendy and Yusuf, both of them were Microsoft Student Partner who spread a lot about Microsoft Technologies at that time.
If you realized, I learned some of programming languages from Bramandityo. I learned a lot from him because he is my senior. At that time, Bramandityo is a person that really love to learn more and more about IT. Especially in software engineering with open source. Some of his thoughts which are becoming real now, for example:
- Cloud computing will become the future of computing. Then, now I work a lot with Google Cloud Platform and many SaaS providers
- Python will become more popular. Then, Python become primary languages for IaaC with Ansible, Data Science, Data Analytics and Data Science. Almost cloud services has their Python SDK too. It’s also consider as most popular languages by JetBrains and StackOverFlow. And many other tools which are being used widely now
- He shared knowledge which is called distributed computing. Means that you are not only have single server for serving your web application or running extensive task such as an ETL jobs. At that time, he mentioned that Celery is just one of tools that could be used to perform distributed computing. Now beside Celery, we have Apache Spark on top of Hadoop, Apache Kafka for message-queue and many others
- Linux is also the future. That’s why I learned a lot from him about it. At that time, there was evangelist said that Linux is not valuable for cloud computing. But now, almost cloud provider use Linux as their main distribution. Even that evangelist company provide Linux and other open source software.
- Javascript won’t run only in web browsers. Someday, Node.js will become backend progrmming languages too. Then, Node.js become backend for most of SaaS services, we could use Javascript for building backend web app with Node.js or even use Javascript for building hybrid mobile application.
- OpenERP or now become Odoo is one of promising ERP solution for enterprise. At that time, there was someone who said that OpenERP or Odoo is not valuable for enterprise-grade. But now as Bramandityo said, Odoo is one of popular solution for building ERP.
- And many others that I’m still trying to remember but most of his statement are becoming real. I feel that he is more futuristic beside other my peers.
Back to programming languages topic, some programming languages that I used a lot after meet some peers are Python and Node.js. I didn’t have a chance to use C#, ActionScript 3.0, Erlang and Elixir for my career. Most of the time, I stick with Python for my professional career and Node.js as an additional.
For me Python as primary and Node.js as secondary programming language is enough for me because in these two languages alone, I could see there so many things that I haven’t tried.
Programming languages: Python, Erlang, C#, ActionScript 3.0, Node.js, Elixir
C. It’s related to my jobs
C.1. Internship
Around 2013, I worked as software engineer for building web application. The type of web application was E-Learning application. The web app could upload various learning materials such as videos, audios, PDF documents and external link. Beside of that, the web app was able to create classroom, manage assignment and generate learning reports.
Team and I used CodeIgniter web framework which is for PHP programming language. For the frontend side, I used jQuery and MetroUI CSS. So the appearance was similar to Windows 8 OS. The main database was MySQL.
The app was deployed in Linux on-premise server. Monolithic architecture was applied and everything hosted on the single node on-premise server.
Because I worked with the team, Git is mandatory to let us collaborate each other. I got this internship from my senior.
Programming Languages: HTML/CSS, Javascript, PHP, SQL
C.2. My first freelance
I freelanced as software engineer around 2014. The project was interesting. Along with the team, I built social media for travelers. They can exchange information about tourism objects mostly in Indonesia. Rate some point of interests. Follow and command each others. At that time, traveling websites were so many. And the project want to cross traveling website with social media functionality.
The backend part used CodeIgniter web framework. For the frontend part, still use jQuery but with addition of Twitter Bootstrap. Main datastore was MySQL.
The app deployed in Linux on-premise server. Monolithic architecture was applied. Everything was deployed on the single node on-premise server.
Because I worked with the team, Git is mandatory to let us collaborate each other. I got this internship from my senior again
Programming Languages: HTML/CSS, Javascript, PHP, SQL
C.3. My first job at Online Travel Agent (OTA)
My first job was software engineer at OTA company from 2014 to 2016. The websites provided flight ticket, train ticket and hotel booking. The web app was front part of in-house core services. Basically, it was sub product for end user.
My team used CodeIgniter for building the web page and interact with the core services. For the frontend part, we used jQuery and custom HTML/CSS templates was built by our UX Designer. Main datastore was MySQL. For collaboration, we used Subversion or SVN.
The app deployed in Linux on-premise server. Monolithic architecture was applied. Everything was deployed on the single node on-premise server.
Programming Languages: HTML/CSS, Javascript, PHP, SQL
C.4. My experience at IT Consultant
I worked as software engineer here around 2016. At that time, I built online music prototype to become in-house product. The app could manage multiple tracks, music album and artists. Everyone could listen to their favorite music from web browser or mobile app.
Along with the team, I built multiple components. For the main web application, I used Django and Django REST Framework. It consists of API for the mobile app developed by mobile engineer and admin page which built on top of jQuery and Twitter Bootstrap.
For the websocket server, I used Tornado webserver. So by using Python, you could compete with Node.js that has Socket.io. The websocket server help the mobile application to get realtime features such as on comment, online status and share listening activity. But at that time, Tornado features was limited. Maybe now has expanded and bigger.
In this company, I also learned important knowledges such as:
- Asynchrounous tasks with Celery + Redis, so you don’t have to make the client wait
- FFMPEG for manipulating audio files
- Django UnitTest to write multiple of unit tests that could help developer to test the most of web app functionality before deployment.
- Elasticsearch used for providing search features and auto complete with more advanced algorithm
- Sentry become real solution for tracing error from the Django web application. I could check Python exception came from which file and specific line. I also could check how much exception happened in particular time windows. It’s not just for Django web app. Mobile app such as Android and iOS, other web frameworks even CLI application could send their exception or errors to Sentry.
- For collaboration I used Git and Phabricator. A self hosted git server and open source.
The app deployed in Linux virtual machine at Digital Ocean. Multiple monolithic architecture was applied. Main web app, websocket service and some databases were hosted in different virtual machine on top of Digital Ocean. So the deployment strategy was better than hosting everything in the same host.
Programming Languages: HTML/CSS, Javascript, Python, SQL
C.5. My experience at Data Analytics Company
I worked as software engineer here around 2017. There were to projects I was working on:
- Rewrite the core tracking API from PHP into Python because we want to perform proof of concept in AWS Lambda. I used Flask and Zappa to build the serverless API. The tracking API was also integrated to AWS SQS for message queue, AWS SNS for push notification, AWS Elasticache (Redis) for caching and AWS RDS (PostgreSQL) for main datastore. But it was postponed and I should move to another projects
- Build ETL pipeline with Apache Sqoop + Cronjob to pull large-scale dataset from existing PostgreSQL database,
- Build ETL pipeline with Python and PySpark on top of AWS Elastic Map Reduce to pull large-scale dataset from Datalake provided by DSP Provider. The task was triggered by Cronjob.
- Build ETL pipeline with Python and PySpark on top of AWS Elastic Map Reduce to pull large-scale dataset from real time data storage (AWS S3) which produced by new tracking API built by our team to our Datalake. The task was triggered by Cronjob.
Programming Languages: Python, SQL
C.6. My experience at Digital Mental Healthcare Company
I worked as software engineer here from 2017 until 2022. It’s quite long time for me to join a company. I also worked as cloud infrastructure engineer in the same time. Because at that time we have limited manpowers. Some of backend engineers should participate in managing our cloud infrastructures.
At the first time I joined this company, I worked as software engineer to build a gamification service for mental healthcare treatment. The service was written in Typescript and use Express.js as the web framework. Main datastore was MongoDB. For the code quality, I used TSLint and UnitTest also Travis CI. I deployed the service as Docker at Rancher v1.0
Programming Languages: Node.js, Typescript
Previous projects was postponed. Then, I moved to the core team for building main services written in Python and Django REST Framework. The main service contain medical services and sensor service. For the medical services, main datastore is PostgreSQL. For the sensor service, the datastore is MongoDB. The service is deployed at Rancher v1.0 as Docker.
To help improve response time of our Django web app, we used Celery + Redis so the response is more faster. Some of the tasks that need asyncronous task are send email from mailer service and send push notification to Urban Airship.
For the code quality of our Django web app, we used Flake8, Django UnitTest, Codecov and Travis CI. To trace the error, we used Sentry and track every exception which raised by our codebase. We use also Prometheus and UptimeRobot to monitor our Django web app.
For the chat service, we used Ejabberd which is written in Erlang. So, I had a chance to create extension on top Ejabberd by using Erlang. Ejabberd use MySQL as main datastore. I modified mod_prometheus to allow the exported send the number of online users per second to Prometheus. The service is deployed at Rancher v1.0 as Docker . It was difficult but fun.
Programming Languages: Python, SQL, Erlang
I worked as cloud infrastructure engineer here for the first time. For the first 2 years, I am still working for two roles. But in the Q2 2020, I was moved to Cloud Infrastructure Team to be fully working as Cloud Infrastructure Engineer. So I rarely did a programming when I should be dedicated infra guy.
Beside working for managing cloud infrastructures both during on-call or project based. I also maintained Terraform codebase which has some parts written in BASH for local exec. I also maintained Ansible playbook and build some Python scripts to be integrated in the playbook. I also add some scripts to work with Sentry API from Ansible playbook.
By having software engineer background, I also started to build software but for infrastructure engineering. I built a shortcut from OpsGenie that could run Ansible Playbook from AWX for particular frequent alert. It used OpsGenie API and AWX API. The backend service for this automation was written in Typescript and Nest.js web framework. The main datastore was PostgreSQL. The service is deployed at Rancher v1.0 as Docker.
Programming Languages: Python, Typescript, BASH, SQL
C.7. My experience at Educational Technology Company
I worked as cloud infrastructure engineer here at 2022. Most of the time, I managed Kubernetes and self-hosted databases (MySQL Galera Cluster, Redis in Kubernetes, MySQL in Kubernetes), maintain some automation pipeline for infrastructure requests and research.
In this company, I built some projects:
- Ambassador and Cloud Flare automation. Previously, it was added manually and wasted time. I used BASH script to parse new Ambassador manifest and create the Cloud Flare CNAME automatically via Gitlab CI. But then, we moved to Github Action.
- Deploy Pritunl Enterprise for VPN Server. Also integrated the access from VPN Server to Kubernetes pods by using Pritunl VPN Mesh. I deployed the Pritunl VPN Mesh by using Kustomize and Gitlab CI.
- Extending Ansible playbook for user access. I added Pritunl API for interact with Pritunl Enterprise such as fetch MFA activation URL, set the default password and download the proper VPN profile. I worked with Python, Ansible and Gitlab CI on this project. But after some decision made by the management, we moved from Gitlab CI to Github Action. So there were some changes required on the project.
- Create automation for reset someone VPN profile by using BASH script an Jenkins
My codes deployed inside Jenkins Jobs and Gitlab CI / Github Action. For the Jenkins it’s deployed in Kubernetes. For Gitlab CI / Github Action, the runner is also in Kubernetes. Every credentials were stored in Vault.
Programming Languages: Python, BASH
C.8. Now working at IT Consultant
Now, I am working as cloud infrastructure engineer here since January 2023. Most of the time, I am assigned to take ticket related to infrastructure request automation. But I also worked on ad-hoc infrastructure requests during on-call week. Even it’s become L1 or L2 on-call engineer.
Here, most of the time I worked with Terraform and BASH to provision and modify cloud resources. I am also working on automation that could let someone to use Slack and send the request directly to the on-call engineer. I used Python and Flask to finish the projects and deployed it to Kubernetes via Helm Charts + Gitlab CI and ArgoCD.
So my main objective in this company is building automation as many as possible.
Programming Languages: Python, BASH
D. Because it’s multi platform
After more than 9 years, I realized there are some languages which might be considered as multi-platform. Why is it multi-platform? because it could run on many platforms that we could use now. In my opinion, here are some well-known platform that popular for last 9 years:
- CLI
- Desktop Application
- Frontend Web Application
- Backend Web Application
- Mobile Application (Smartphone app, Smartwatch app, etc.)
- Microcontrollers (IoT, Robotics, etc.)
Now here are some programming languages which I considered as multi platform:
- Java: CLI, Desktop App, Backend Web App, Mobile App, Microcontroller
- Javascript / Typescript: CLI, Desktop App, Frontend Web App, Backend Web App, Mobile App, Microcontroller
- Python: CLI, Dekstop App, Backend Web App, Mobile App , Microcontroller
- C#: CLI, Dekstop App, Backend Web App, Mobile App, Microcontroller
Those languages are promising. But in fact, for now only Javascript that ace in Frontend Web App development with various of frontend web framework such as Angular.js, Vue.js, React.js, etc. But, I am not interest in frontend web, so I just limited myself to Node.js which is runtime for backend web app. Moreover, now Javascript has it’s own transpiler called Typescript which has more advanced support for Javascript application development. I can’t drop Javascript from my toolbet list.
But why I didn’t choose Java or C#? both of languages are promising and even has more vacancies than Python. I still use Python as my primary programming languages because it’s easy. It’s support OOP but not so hard as Java. Moreover, the library from Python Index Package (PIP) are free and various. Also Python has popular backend web framework such as Django, Flask, Falcon, Tornado and many more.
To be honest it really help me to create an application with Python. Moreover, when I use Ansible. I think I could manage my Python skill for developing Ansible Module. This is my example Ansible module which I created for personal usage:
Moreover, I’ve found Python is more interesting when I’ve found tools like Sentry and Celery which could help me to create more resilient tools for supporting my Django web application. AWX (Open Source Ansible Tower) is also tools that help me a lot to manage Ansible playbook. Also I could create ETL jobs with PySpark for Apache Spark. So it’s make me pay more interest to Python than other languages. To be honest, it’s my subjective opinion about Python.
Programming languages: Python, Javascript
E. As a core part of my favorite tools
For last 9 years, even if it’s for real projects or personal projects purpose. So far my favorite tools based on Python are:
- Django, a super web framework for Python
- Flask, a micro web framework for Python
- Celery, a task queue frameworks. The queue backend could be Redis, RabbitMQ and many more.
- Gunicorn, web server for Django or Flask
- Sentry, error tracing tools for multiple platforms
- Some libraries for performing HTTP requests, accessing databases (MySQL, PostgreSQL, Redis, MongoDB, Elasticsearch), etc.
- Some libraries for creating ETL script (PySpark, boto3, Pandas, etc.)
The tools I mentioned above, mostly use when I was still working as software engineer. When I switched my career path into Cloud Infrastructure Engineer, sometimes I also developed backend web application or CLI application but for Cloud Infrastructure Engineering purposes. When becoming Cloud Infrastructure Engineer, I rarely spend my working hours for developing applications.
Some tools that I used mostly when I become Cloud Infrastructure Engineer are:
- Ansible, infrastructure as a code for provisioning a cloud resources and remote configuration tools. Written in Python
- AWX (Open Source Ansible Tower), Written in Python, Celery and Django
- Prometheus, monitoring for server and application. Written in Go.
- Grafana, multi purpose dashboard solution. Written in Node.js.
- Terraform, for provisioning cloud resources. Written in Go.
- Packer, Written in Go.
- Vault, Written in Go.
- Docker, Written in Go.
- Helm Charts, Written in Go.
- Kubernetes, Written in Go.
- ArgoCD, Written in Go.
Then I realized, that I liked some tools written in Python. So if I want to go further with those tools, I have to mastery Python. As well as for some tools which is written in Go. It’s better for me to learn Go lang and be ready for extending or creating plugin for those tools in the future.
Both Python and Go are core part of tools that I really like at this moment. This point might become a strong reason why I choose Python, then Go.
Programming languages: Python, Go
F. What’s Next
Above sections are fully my opinion based on my experiences for more than 9 years. But if you want to see trend which more objectives based on survey, you could see these surveys:
Hope you choose your favorite programming languages in 2023 and onwards.
Conclusion
For now, I choose these programming languages:
- Python, I really love this programming language since at university and my workplaces give me chances to use it for real projects. Moreover, Python has wide range support from just CLI app, web app, machine learning, data science, cloud infrastructure engineering and many mores. Moreover, you could see that Python is mentioned for 49 times in this article.
- Javascript / Node.js / Typescript, as an alternative I choose Javascript because I learn this programming language since at university as well and still useful if I have to build backend web application beside Python. But for now, I like to build backend web application with Nest.js only. I don’t have experience in building mobile app or frontend web app with Javascript.
- Go, I really need time to invest on it. Because my favorite tools such as Kubernetes and some Hashicorp stacks are written in Go. Someday if I want to make extension for those tools, I should write it in Go. Most of Cloud Native
Basically, I choose to stay with backend web application and cloud infrastructure engineering. And those programming languages I think it’s still sufficient for next decade.
It’s just my personal opinion, everyone may have different ideas and favorite programming languages.
Thanks for reading.