← Back to Blogs

Of Simplicity and Minimalism

adarshpatil
27th March 2014
Simplicity, Minimalism
blog1

The minimalist aesthetic is under-applied in the culture of software development. Thankfully, the benefits of its application haven’t gone unnoticed. Guess what, for starters I even found this wiki article on Computing minimalism. I will make a bold assertion here: Complexity is making
Our software slow , Our programs insecure, Our jobs harder, Our users unhappy

Even at work or any of my hobby projects, I always have fancied the idea and enjoyed the challenge of a simple, basic, KISS workflow. What do I mean by minimalism exactly -
"It's a style distinguished by severity of means, clarify of form, simplicity of structure and texture"
There is a lot that I said in that sentence. I will break it down for you.
1. Severity of means - There are 2 ways to get there.
    TopDown - Know what you need to do, visualize it. Know what tools are available with you to accomplish it. Use the most minimum means needed to achieve an end.
    BottomUp - The reduction of a system to its rudiments. Break down the problem statement into parts. This isn't simple, it needs a mastery, experience and as I call it being street smart!
2. Clarity of form - Just as in music or poetry, software should explicitly define objectives and boundaries and aim achieve it in the most elegant way possible.
3. Simplicity of structure - Modularize the code base. Know how modules link to each other (coupling) and link within each other (coupling)

I also want to get across what I would call Strategies for Minimal Software
1. Unification
    + Details and Context
    + To some extent Code and Data - I strongly advise you to read Homoiconicity
2. Reduction
    + Lines of code
        -- leverage encapsulation
        -- remove redundancy
        -- prefer self explanatory code to comments
        -- manage dependency carefully
    + Linguistic verbosity
        -- Reduction of syntax
    + Abstraction
        -- The good idea in Unix was its clean and simple interface.
          Open / Close / Read / Write everything including devices
    + Hierarchy
        -- In an extensible system, use frameworks that are flexible for extentions, but avoid proliferation of
          primities
3. Constraint
    + Define project scope (something I learnt early, from my manager at work)
    + Know operational requirements, sometimes simple solutions are most easy to support
    + Know the limitations

I believe that most of the computer software we use today is bloated, clumsy and non-conducive to productivity. Minimalism is also the best way to learn something. When you understand something from basics, that's when you master it. I do agree we tend to be more agressive and agile in our software development and reinventing something doesn't make sense in certain places. However I will also argue that going back to the roots opens up new avenues of thinking and philosphy. So when you have the time and apetite for it why not take a step ahead and see what's going on behind the scenes and below the abstraction.

As a small background of how this blog post came to be. My portfolio/blog site you are reading currently is using no framework at all. Definitely not the bloated Wordpress, Octopress and not even even the simple static site blog frameworks like Jekyll, Pelican. Believe me I've tried them all and I felt the time I spent to understand them was greater, but more than that I felt I had no control over anything and I was being held back by them when I tried to tweak something. I don't need databases and user accounts for my blog nor do I need a in browser text editor and a zillion other things. So, I wrote a bunch of CSS and added some off the shelf javascript effects like fancybox , NIVO Slider , top control etc. Some python text parsing scripts to mimic a reStructuredText , Markdown format that I am comfortable with and spits out HTML. Some more python and Unix bash scripts to update links each time I write a new post and enable pagination. And taadaaa the result is in front of you to judge. Here is the github repo link for this website.

EDIT: I've had to make this repository private because of some private keys in the code. The above link to the repo will not work anymore but the points highlighted in the blog above in general are true.

EDIT 2: The repo is now public on github, I've found other ways of obfuscating the private keys. Here's the link again if you missed it in the blog above. https://github.com/adarshpatil/timewarp


Comments (0)

Leave a Comment

* required
Name*
Email*
Web
Comments*