Tuesday, December 24, 2019

SOLID Principles is not a rule but just some recommendations.

If you are like who wish to go deep into understanding every little bit of thing you read about, it can be very un-smartly in today's high-speed agile lingo.

You learn what you need, get the job done and then move on to next. You sure do pick up some skills but you don't get to be "expert" in any of that matter. Isn't that interesting? I always aspired for getting deeper understanding of technical topics and would go out of the way in reading books & articles one after the other like in some inception-mode hoping to get the detailed view of the topic in hand and before I am back to start, I would either be fully satisfied or confused. Later happened mostly with this exercise.

Anyways, to bring the point home, I was never sure about how SOLID principles align with reality. I always thought that if you don't do SOLID, you are a rookie. I thought the pros have got it on their fingertips. But I never understood what does a true SOLID code looks like. I kept looking for it and I thought that everyone else except me understood it and there's this unspoken rule of the trade that no-one has to speak it out-loud because it is such a common knowledge.

So my journey kept going looking for the right answer. Well I am not sure if I can say that I have finally found something that lights up the darkness for me, Here's a youtube video:-


Here's the summary of the talk:-



The other slide I really liked is :-



One of the point she mentions is not to pursue SOLID as a goal but as a set of guidelines to make your code easy to maintain in the future.

I feel much more relaxed about this religious practice in Software Engineering and makes my head hurt less. Apart from keeping so many other details tightly contained in my head (for which I really doubt I have similar capacity as an average man). I remember logic and concepts much better than details. I have struggled with it throughout my life as long as middle school without really understanding that this is how I am wired to think. In some way it is a blessing. I tend to focus on important things in life and forget about miseries as fast as you forget my name when introduced in a party :).

Good luck to you in your struggles towards becoming a better software engineer. I don't think Software Engineer is for few. I think anyone who wants to get bit more involved in how he/she interacts with technology can become a software engineer because this one one field of career which is only going to grow for the next 50 years at least. I think on 51st, AI will be doing our job and will be simply be monitoring AI machines and getting paid for our ideas.

















Wednesday, July 17, 2019

Tuesday, July 16, 2019

Perfection is the Enemy of the Good.

I have struggled with this idea of Perfection many times in my life and even now when I am writing it. The change today is that I know I am not right about this obsession and I know one needs to have a balance to go through this life with a smile and satisfaction.

To that I say, let's priortize progress over perfection. Let's prioritize iteration. Let's not wait for the RIGHT answer for life is no binary. It is a unreal number where a value of Pi can be 3.14 or 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280 34825 34211 7067 
and even that is not perfect. If you gonna wait for the perfect, you pay with progress.
















Image result for perfection is a mirage

Related image


Image result for perfection is a mirage

Thursday, July 4, 2019

palindrome number


Find if the integer is Palindrome or not. Test Cases : a) 10 : False b) 0-9 : True c) 121 : True 

https://leetcode.com/problems/palindrome-number

https://gist.github.com/amitkc00/48e93764cff5de8eca5d8857034f9778.js

Python Language Tit-bits I always forget for interviews.

==

dictionary - add, delete, access key,value, length etc

list - add, delete, access key,value, length etc

tuples - add, delete, access key,value, length etc

set - add, delete, access key,value, length etc

==
for key, value in enumerate(list_name):
  print(key,value)

###

zip

###

join

###

len(list_name)
list_name.length()

####
int(string_int)
str(int)
####

map

####

filter

####

reminder = x % 10
quotient = x // 10
####
unittest package
####
file processing
#### s = "split this string"
s.split() # default is space
join_string = ':'
join_string.join(#iterator)


Wednesday, June 19, 2019

Python Internals

Ever curious to learn more about Python Language Internals. I am too and I found some resource online which I want to list here now and read at a appropriate time.

https://tomlee.co/wp-content/uploads/2012/11/108_python-language-internals.pdf

https://stackoverflow.com/questions/3298464/how-can-i-learn-more-about-python-s-internals

https://tech.blog.aknin.name/category/my-projects/pythons-innards/

https://medium.com/@dawranliou/getting-started-with-python-internals-a5474ccb8022

https://leanpub.com/insidethepythonvirtualmachine/read#leanpub-auto-pyobject

https://akaptur.com/blog/2014/08/03/getting-started-with-python-internals/

http://www.pgbovine.net/cpython-internals.htm

Before we get lost in othe blogs.. I think let's focus on the docs.python.org, the core of the truth.

https://docs.python.org/3.7/reference/index.html

Moving from Java to C++

I stumbled upon this post at reddit and thought it could be useful for someone out there.

https://www.reddit.com/r/cpp/comments/8ppz53/advice_for_a_java_programmer_who_is_moving_to_c/

Object Oriented Design Project Ideas

PROTOTYPE DRIVEN LEARNING 

1. Heath Tracking App.


Tuesday, May 7, 2019

Distributed Systems Course CSEP-552 at UW, Seattle



Lecture 1 :

After going through just this first lecture, I realize why I was not doing well in Google System Design kind of questions. It is because I lacked this background and without understanding the depth of this topic, it will be simply faking my response and not really understanding the ins & outs.

I am hoping to complete this lecture series and also work on the homework assignments when I get some time.




Some more resources:

  1. UW Course Site Winter 2018
    1. UW Professional Masters in CS Program : https://www.cs.washington.edu/academics/pmp/overview
  2. Open Source Distributed Systems Book
  3. Introduction to Distributed System Design by Google Code University
  4. Original Map-Reduce Original Paper
  5. Quora : Other Distributed System Online Course Resources

Tuesday, April 30, 2019

Why TDD? I hope this will finally do the mental shift for me.


Great talk. Loved the fact that I am yet to be a TDD devotee and don't know how to do it right. Maybe this will motivate me for future.


Tuesday, April 9, 2019

Go for C++ Developers


I liked the talk because of the coverage and meaningful conversations it had.

 My thoughts are:-

1. I think Golang is a very powerful language for backend systems development.
2. The simplicity of the language and support for concurrency is what makes it practical.
3. For me to do really well with this language, I need to get my OS concepts sorted out. I think if I can get some basic Compilers studies done as well, I think it will help immensely with the understanding of the language construct.
4. There are many companies doing great products using Go. Few of them I explored are Hashicorp, InfuxDB etc.
5. The one goal I have with this language is to be able to write serious projects and architect a design that is simple AF. I think there's lot of value in simplicity and I know I gravitate towards it naturally. What I lack is enough experience to build Software Systems independently or outside job like OSS. I think if I could spend some time doing independent projects, it can take me a long way.

Good luck.





Friday, April 5, 2019

One Article to understand Why a good Software Design Matters?


I cannot be more grateful for this article to be written on how to design a software system and why does it make sense to think about your design first before you go ahead with jumping on your keyboard and fill in the blanks for a quick and dirty prototype.

Cindy Sridharan Medium Article

This article talks about why a "Mental Model" of your design needs to be simple and easy-to-convey to others who are reading it.

Tuesday, March 26, 2019

Popular Linux Questions (Draft : Work in Progress)

  • How do you troubleshoot a slow file copy from a remote machine
  • Explain all fields in top command
  • Can you copy a 2 GB file if total memory is 8 GB and is 95% utilized.
  • How does Ping Work?

Thursday, March 21, 2019

Remote Procedure Call, gRPC, Protocol Buffers

Let me say to be honest "I had no idea of the impact of RPC in Distributed Systems" until I watched the UW session on Distributed Systems on Youtube. I asked myself, why is it that that RPC is a module in itself. Why every other place it is dedicated lecture. I couldn't understand it before.

But now that I understand that it is a foundation for creating a truly distributed system, I want to bring in the resources which I felt are important to learn this topic.

What benefits do you get from using Protocol Buffers over other contemporary techniques? Specially when it comes to System Design and Architecture, what leverage do I get here that I cannot find elsewhere?


First, let's learn about Why RPC?
<Fill in the details here>

Second, why Protocol Buffers?
<Fill in the details here>


Third, Implement gRPC and ProtoBuf in Python

Protocol Buffers Basic using ToDo Project


Creating a Server and Client Code using above lecture material and gRPC.

This is a good place to start understanding what is gRPC.
https://grpc.io/docs/guides/



Intro to gRPC in C# 4/19/2020
I actually liked the tutorial because it was more hands on and the others I posted before.

Here's one article that I think could handy as well : https://medium.com/@karuppiah7890/how-i-started-learning-grpc-and-made-a-grpc-client-in-nodejs-and-grpc-server-in-golang-cc7e3901ed54

Monday, February 11, 2019

Database Normalization - 1NF, 2NF, 3NF and 4NF




1st Normal Form
---------------
Each Cell to be Single Valued
Entries in a column are same type
Rows uniquely identified - Add unique id

2nd Normal Form
---------------
All attributes (non-key columns) depened on the key

3rd Normal Form
---------------
All Fields(Column) can be determind only by the key in the table and no other column

4th Normal Form
---------------
No Multi-Valued Dependencies

It's OK to be NOT-OK.

02/22/2021  Last week I was just un-productive and was not doing enough to talk about. I also wanted to say that weeks before the last, I ha...