My Development Stack – Tools, Languages, and Frameworks
As a developer, I rely on a diverse set of technologies to build, deploy, and maintain software. From frontend and backend development to DevOps, here’s a comprehensive list of the tools and frameworks I use in my daily work.
Programming Languages
Java
Java is my primary programming language because I strongly believe in developing for all platforms. I personally prefer strongly typed languages, as I find it easier to read and understand code when the types are explicitly defined. Additionally, Java's strong emphasis on the object-oriented programming paradigm naturally encourages writing maintainable and scalable code.
JavaScript/TypeScript
In web development, JavaScript is a language you inevitably have to work with sooner or later, which is why it became my second language. Since its syntax is similar to Java, learning it was relatively easy for me. The only thing that initially bothered me was its dynamic typing. However, when I discovered TypeScript, this issue became much less of a problem, and over time, the language grew on me.
Python
I initially explored Python just for fun, but it never really grew on me. Today, I only use it when I need to quickly write a script without focusing too much on programming paradigms.
Backend
Java Spring + Spring Boot + Gradle
With Java as my main language, I rely on Spring and Spring Boot for backend development. What I appreciate most about Spring is its flexibility—rather than loading all dependencies by default, I can choose only the ones I need for my project.
REST
I prefer REST as my data transfer format. The fact that it builds on HTTP and its verbs makes it incredibly easy to implement in projects, ensuring simplicity and compatibility across different systems.
SQL
Even though ORMs eliminate the need to deeply learn every SQL dialect, I still prefer MySQL and PostgreSQL as my go-to relational database management systems (RDBMS). Their strong community support and reliability make them an excellent choice for scalable applications.
No-SQL
I prefer using MongoDB for No-SQL database needs. Its document-based structure allows me to store not only structured data but also semi- to unstructured data, making it a versatile choice for various project types.
Frontend
React.js + Vite
Due to its popularity, I came across the React library paired with the Vite build tool. As someone who enjoys declarative over imperative programming, I was immediately impressed. The easy-to-understand documentation and large community made it incredibly easy to get started.
Next.js
In the React documentation, I came across Next.js as a full-stack framework. Personally, I use it only for developing the web frontend because I found Java to be better suited for executing business logic. However, thanks to Next.js's ability to render components on the server and fetch data from it, SEO is greatly improved, and I can still create interactive pages with client components. By combining Next.js with Spring, I get the best of both worlds.
Tailwind CSS
My biggest challenge in frontend development was CSS. I often lacked the creativity for great web designs, but everything changed when I started using Tailwind. Since then, designing has become much easier for me. The fact that styling happens directly in the HTML saved me from constantly switching between files. In my opinion, this CSS framework is accessible to anyone, and I can highly recommend it.
Redux
I’m a big fan of Redux for state management. However, if the project allows, I sometimes opt for the useContext hook combined with useReducer from React. Thanks to Redux's incredibly clean and easy-to-understand documentation, getting started with it was a breeze. It offers a great structure, and I highly recommend it for managing complex state in applications.
Redux Toolkit
When using Redux, Redux Toolkit is also installed, which I think is fantastic for data fetching. It combines the best aspects of libraries like React Query and Axios, making it easier and more efficient to handle asynchronous operations and manage state. Redux Toolkit simplifies many of the complexities that come with Redux and streamlines development.
DevOps
Git
The great popularity of Git led me to use it as a version control tool.
Docker
The deployment process led me to work with containers, and Docker is one of the most popular tools in this space. Since I started using it, completely new possibilities in development have opened up to me. Instead of downloading databases, runtimes, or message brokers onto my local laptop, I now only work with containers. When I no longer need them, I can easily remove them. Deploying to VMs from cloud providers is done in just a few minutes with minimal effort.
Google Cloud Provider (GCP)
When it came time to choose a cloud provider, I immediately opted for Google. The reason is that I have a great deal of respect for Google's influence in the open-source community. The company, which has brought us Kubernetes, the Go programming language, and the gRPC protocol, fully earned my admiration.
Cloudflare
I really enjoy using Cloudflare as my domain provider because of its simplicity. It offers a user-friendly interface and powerful features that make managing domains and ensuring security incredibly easy.