Tips for making learning a habit and maximizing knowledge acquisition
Tips for running services at scale with minimal toil
My foremost goal while building software is to build stable self-healing systems with deterministic behaviour. I want to ensure my code continues to work even when unexpected events occur. In the event of unknown unknowns, the expectation is a graceful degradation in the worst case.
Sometime last year I started to solve hackerrank problems at my pace and here is my progress after about 108 days ago.
I recently ran into a code puzzle; the question asked for the finding the unique element in a list of integers given that every integer appears twice except the single special element.
I used to read a lot in the past without practicing what I learnt; that exposed me to a variety of ideas and empowered me to discuss a lot of things. Over time, I found out that I mostly didn't 'know' what I thought I knew. Yeah I know it sounds somehow but it's really true. True understanding … Continue reading Reading is not enough
Nan literally means Not a Number. Yes, it means that value is not a number and occurs when you try to coerce a non-mathematical value (e.g. string) into a number.
I used to think computer science never mattered because I rarely used algorithms and never saw the value of algorithm-based interviews (I still don't ;) ). The few folks I asked also concurred so I felt I was right.
the mathematical concept of sets in number theory. The set of integers can be seen as a type - only values such as 1, 2, 3 are integers; decimals (e.g. 1.1) or irrational numbers (e.g. π) aren't members of the integer set.
Continuing with the dive into property descriptors, this post goes deeply into the properties, what they mean and how they can be used.
As part of my continuous learning; I started reading Tero Parviainen's 'Build your own AngularJS' about 6 months ago. After 6 months and 127 commits, I am grateful I completed the book.
A simple explanation of 1s complement arithmetic - a basis for how computers run.
Bit masks enable the simultaneous storage and retrieval of multiple values using one variable. This is done by using flags with special properties (numbers that are the powers of 2). It becomes trivial to symbolize membership by checking if the bit at a position is 1 or 0.
I try to read a lot of books. Over the years, my 'taste' for books has been refined and some of my criteria are listed below.
Lions at the zoo Zoos allow for safely viewing dangerous wild animals like lions. Lions are caged in their enclosures and can't escape its boundaries (if they did, it'd be chaos eh?). Handlers, however, can get into cages and interact with them. Like cages, you can think of variable scoping rules as establishing the boundaries and walls in … Continue reading Learning ES2015 : let, const and var
Let's take a scenario from Mathematics, how would you model the infinite set of natural numbers? A list? An Array? Or a Stream? Even with infinite storage and time, lists and arrays do not work well enough for this scenario. Why? Assuming the largest possible integer an array can hold is x, then you've obviously missed out onx + 1. Lists, although not constrained by initialization, need to have every value defined before insertion.
1. Is memq broken? memq is an in-built list search function; it finds the first occurrence of a key in a list and returns a new list starting from that key. Now that you know what memq does, lets look at some weird behaviour Building on that foundation leads to the following conundrum memq tests whether the key exists in the … Continue reading SICP Section 3.3 – 3.5 : Found a bug in memq
Here are my thoughts on Sections 3.1 and 3.2 of my SICP journey; the deeper I go in the book, the more I appreciate the effort, style and work the authors put into it. Each section builds on earlier sections and it is amazing how it forces you to see software development from a new … Continue reading SICP Review: Sections 3.1 & 3.2
So four months after I started and more than 90 solved exercises, I can say Alhamdulillaah chapter 2 is done! Section 2.5 was one of the most challenging so far; the exercises revolved around building large easily extensible software systems. And here are the thoughts again :) 1. Coercion The section revealed the importance of coercion in software … Continue reading SICP Section 2.5
1. Top-Down Design Most of the problems in the SICP book are solved in a top-down way with lower level details deferred until needed. The focus on high level details makes for expressive flexible code since implementation is based on well-defined interfaces and not implementations. Consequently, swapping and improving interfaces is a cinch - the dependency on high … Continue reading SICP Sections 2.3 & 2.4: Thoughts and Ideas
5 things to learn from the SICP book