Understanding Software Complexity
Apr 27, 2023
Software development is a complex process that involves addressing complex problems. The complexity arises not only from the problem itself but also from the choices we make during the design and development of a solution.
In his influential paper (1986) “No Silver Bullet—Essence and Accident in Software Engineering”, Fred Brooks outlines two types of software complexity: accidental and essential.
Accidental Complexity
Accidental complexity is the non-essential complexity we add to a solution that is not inherent to the problem we are trying to solve.
...
➦ Java Module System
Dec 18, 2021
Java Platform Module System (JPMS) is Java’s new modularity to provide a higher-level aggregation above packages. It has been introduced as part of Java 9 as an outcome of Project Jigsaw.
The primary goals are to
Make it easier for developers to construct and maintain libraries and large applications Improve the structure and security of the platform and JDK itself Improve the performance Better handle decomposition of the platform for smaller devices1 JVM before version 9 is monolithic, which can cause slow start-up times and more RAM.
...
➦ Evolution of Java Concurrency
Dec 14, 2021
Java’s concurrency support has changed significantly over the last 20 years to mostly reflect the changes in hardware, software systems, and programming concepts.
Going through the evolution of Java concurrency support can help in understanding the reason for the new additions and their roles.
Java’s Initial Concurrency Support
Initially, Java had threads and built-in monitor objects, which are supported by locks (via synchronized classes and methods), Runnable and Thread interfaces.
...
➦ Lessons Learned Of My Second Decade
Dec 28, 2020
It has been a decade since my first post on the lessons learned. There have been significant changes in the way we work, and tools and techs we use but I can see the lessons I wrote up 10 years ago are still valid. Although it would be better to rephrase them and elaborate more, I’d like to focus more on the additional ones but some will be already overlapping.
...
➦ Introduction to Terraform
Dec 15, 2019
Terraform is an open-source infrastructure automation tool by HashiCorp. It has been gaining more ground towards being a defacto choice for creating and managing cloud infrastructures by writing declarative definitions. By enabling “Infrastructure as Code”, Terraform provides repeatability and consistency, which is very useful when setting up complicated infrastructures, such as a cluster of containers with its underlying infrastructure on AWS.
Terraform supports many cloud providers for IaaS (e.g. AWS, GCP, Microsoft Azure, OpenStack, Alibaba Cloud), PaaS (e.
...
➦ Running GUI applications using Docker
Oct 7, 2018
A short guide on how to run GUI applications on MacOs, Linux and Windows Back to Blogging
Oct 6, 2018
Ok, I’m back to effortful and also joyful world of blogging after 5 years. That is the plan, at least.
Yes, it has been 5 years since I blogged last time on my Wordpress blog. It was this post. Many things have changed in the technologies I work with and many new things arosen to shared. I still continue getting hands dirty on development. I had times to coach teams to improve process and gain development skills as well as do development.
...
➦ Java Developers! You Should Learn Groovy
Nov 5, 2013
A couple of years ago, I started playing with Python, Scala, Ruby and Groovy time to time. The very first thing that really impressed me was their expressiveness.
**I really like all of these languages, but here in this post I’d like to emphasize the benefits of Groovy for Java developers since Groovy is the easiest to learn and to make transition to a “Java.next()” language for them. **
Groovy is Expressive
...
➦ A software myth: Behind schedule, add more people
Apr 21, 2011
You may have already experienced several times that when a project is late or seems to be late, the first solution mostly applied is to add more people. But mostly, it makes the project later. It does not solve the problem but ironicaly creates more problems.
Even with adding more people, sometimes, the project can be delivered as working somehow. However, the team later has to deal with some bugs introduced by these people added.
...
➦ Lessons Learned Of My First Decade
Dec 28, 2010
No language fanatism : All languages are like tools in your toolbox. Just use the most suitable one, which is not necessarily the most popular one. Measure progress and make it visible, even when you are doing it yourself. Use board and charts.
Code base is like your house. Always keep clean, otherwise after a while, you can find yourself in a mess. Refactor.
Always be very humble.
...
➦