Higher Ranked Types 24 Jan 2019 Monomorphism, Polymorphism, and Higher ranked types
GADTs Talk - Bengaluru Haskell Meetup 29 Nov 2018 Talk I gave at Bangalore Haskell Meetup Group on using GADTs to bring compile time correctness to Haskell programs
The Expression Problem 13 Nov 2018 The expression problem is a well known problem in programming language theory dealing with the expressiveness of a programming language. Whether a language can solve the Expression Problem is a salient indicator of its capacity for expression.
Expressiveness 08 Nov 2018 What is expressiveness of a language?
Expressiveness of Haskell 04 Nov 2018 Demonstrate the expressiveness of Haskell using a simple Binary Tree and in-order traversal in Haskell, Python and Java
Dependent Types To Eliminate Runtime Checks 26 Oct 2018 One of the main advantages of static typing is to catch errors before we deploy code to production. Dependent Types allow us to eliminate some checks that are usually done at run time. I take a simple example to show how dependent types can be used in that regard in day-to-day programming.
Distributed Systems and Scalable Databases 08 Oct 2018 Introduction to distributed systems. How distributed databases work and their scaling model.
TDD Mantra 11 May 2018 The Essence Don’t write a line of new code unless you first have a failing automated test. Eliminate duplication. (refactor) What is Needed The ability to write concrete, deterministic, automated tests is a prerequisite for applying TDD. Mantra - Order in Programming The two mantras imply an order to the tasks of programming: Red - write a little test that doesn’t work, perhaps doesn’t even compile at first Green - make the test work quickly, committing whatever sins necessary in the process Refactor - eliminate all the duplication created in just getting the test to work Implications The simple mantra generates complex individual and group behavior.
Lambda Calculus 25 Feb 2018 Introduction to Lambda-Calculus and Church Numerals
Outward Counterclockwise Spiral Matrix Traversal - Haskell 12 Feb 2018 An efficient, lazy implementation of spiral traversal on a matrix in Haskell.
Notes on Sets, Relations, and Functions 04 Nov 2017 Basic maths - Sets, Relations, and Functions
TensorFlow Basics 02 Oct 2017 TensorFlow is Google's open source library for numerical computation. All computations are represented as Data Flow Graphs. The Nodes in the graph represent operations and Edges represent the data-communication between nodes.
Thinking in Imperative, Object Oriented and Functional way 15 Sep 2017 programming paradigms stem from different concepts about how the world works. They represent different opinions about how to best model the world while we are writing programs.
OO(h!) Principles 23 Oct 2016 An (incomplete) list of principles of OO software development
GADTs To Eliminate Runtime Checks 15 Oct 2016 GADTs generalizes ordinary algebraic data types by permitting value constructors to return specific types. GADTs are used for ensuring program correctness and in generic programming. This article is specific to Haskell programming language. In Haskell GADTs are implemented as a language extension. The article describes these use cases with small programs.
A Detour Called Monads 15 Aug 2016 When learning Haskell, all of us are faced with this monad monster. I too have spent many days and night fighting it - hoping that it will grant me all the wisdom if I survive long enough. I have come to believe that the community as whole has created this monstor. And many of us have taken this detour to master the art of monstor slaying instead of going on ahead - just to realise later that the detour was unnesessory.
Decisions 15 Aug 2016 We all make decisions. We should make decisions to be happy
Duplication Vs Abstraction 05 Jul 2016 When you see code duplication and can’t think of an abstraction to put that piece of code in, it is wise to keep the code separate. At least until you figure out the right abstraction.
Pair Programming - What? Why? And How? 31 Jan 2015 What? Simply put, pair programming is two programmers with a single computer working together to solve a problem! Why? To produce better code To learn more from your peers To learn and practice objectively evaluating possible solutions To collaborate with better programmers How? The Driver is responsible to coding (owns the keyboard) The Navigator is responsible for reviewing the driver’s work 30 min Rule: Role changes every 20-30min (at a logical break point) Take control of the worl.
10 Vim Plugins That Made My Vim Easy 04 Jan 2015 Few days back I posted the below pic online and some of my friends wanted to know how I got there. I am no vim expert and there are myriad of other (possibly better) ways of doing things. So I will just list the plugins I have used in my setup. Note that the side panes (NERDTree on the left and Tagbar on the right) auto-collapse. They magically appear when you summon them and hide themselves when the task is done.
Performance Analysis In Python 02 Nov 2014 My recent escapade with Python taught me many things. One of which is to “start doing something that interests you. And each such daring act will teach you many more things.” This time I set out to finding ways of analysing the performance of an application - specifically Python applications. And as always I wasn’t disappointed with the results. Why Python? I just happened to be playing around with Python at the time (what I really mean is I was learning Python!