Dec 12, 2019

Done is better than perfect

Perfect is the enemy of good

Facebook's 5 core values via Mark Zuckerberg & Sheryl Sandberg
  1. Be bold
    1. Building great things means taking risks
    2. The riskiest thing is to take no risks.
  2. Focus on Impact
    1. Focus on solving the most important problems. 
    2. If we want to have the biggest impact, the best way to do this is to make sure we always focus on solving the most important problems. 
  3. Move Fast
    1. Build more things and learn faster. 
    2. Move fast and break things.
    3. The idea is that if you never break anything, you're probably not moving fast enough.
  4. Be Open
    1. Informed people take better decisions. 
    2. People with more information can make better decisions and have a greater impact.
  5. Build Social Value
    1. Build real value for the people. 
    2. Focus every day on how to build real value for the world in everything they do.

Resources: Facebook's 5 core values via Mark Zuckerberg & Sheryl Sandberg

Dec 4, 2019

You are what you choose

Cleverness is a gift, kindness is a choice.

Gifts are easy -- they’re given after all. Choices can be hard.

You can seduce yourself with your gifts if you’re not careful, and if you do, it’ll probably be to the detriment of your choices.

How will you use your gifts? What choices will you make?
  1. Will inertia be your guide, or will you follow your passions?
  2. Will you follow dogma, or will you be original?
  3. Will you choose a life of ease, or a life of service and adventure?
  4. Will you wilt under criticism, or will you follow your convictions?
  5. Will you bluff it out when you’re wrong, or will you apologize?
  6. Will you guard your heart against rejection, or will you act when you fall in love?
  7. Will you play it safe, or will you be a little bit swashbuckling?
  8. When it’s tough, will you give up, or will you be relentless?
  9. Will you be a cynic, or will you be a builder?
  10. Will you be clever at the expense of others, or will you be kind?


Oct 27, 2019

Leadership and Retention


Leadership is About Influence - Not Authority

"Respect is how to treat everyone, not just those you want to impress." ~Richard Branson

Great leaders don't set out to be a leader. They set out to make a difference. It's never about the role – It's always about the goal.

“It’s amazing how much you can accomplish if you do not care who gets the credit." Harry S. Truman

“Leaders become great, not because of their power, but because of their ability to empower others.” John Maxwell

A boss has the title. A leader has the people. ~ Simon Sinek

"Take care of your employees and they will take care of your business. It’s as simple as that." Richard Branson

"People will forget what you said, people will forget what you did, but people will never forget how you made them feel.” ~ Maya Angelou

"Culture is more important than vision. Some leaders have great vision, but have created a toxic culture where that vision will never happen." ~ Phil Cooke
  • A toxic culture cannot take root without a fertile ground. The symptoms cannot survive without a support network.
"Train people well enough so they can leave, treat them well enough, so they don’t want to." ~ Sir Richard Branson

If you don't show appreciation to those that deserve it, they'll learn to stop doing the things you appreciate.

"Leaders who don't listen will eventually be surrounded by people who have nothing to say." ~Andy Stanley

A bad boss can take a good staff and destroy it, causing the best employees to flee and the remainder to lose all motivation.

Oct 25, 2019

Happy Diwali

Sky full of fireworks, mouth full of sweets. House full of diyas & heart full of joy.

May the lamp of soul shine with the oil of purity. May the wick of wickedness burn under the fire of truth.

Wish You All A Happy Diwali.



Do you have a mentor ?

A mentor is someone who allows you to see the hope inside yourself.

A mentor is someone who allows you to know that no matter how dark the night, in the morning joy will come.

A mentor is someone who allows you to see the higher part of yourself when sometimes it becomes hidden to your own view.

Source: https://sites.sph.harvard.edu/wmy/celebrities/oprah-winfrey

Please share your thoughts via the comments.

Oct 20, 2019

Don’t find fault, find a remedy.

Henry Ford was an American industrialist and a business magnate, the founder of the Ford Motor Company, and the sponsor of the development of the assembly line technique of mass production.

Some interesting quotes from Henry Ford
  • Don’t find fault, find a remedy.
  • Vision without execution is just hallucination.
  • If there is any one secret of success, it lies in the ability to get the other person’s point of view and see things from that person’s angle as well as from your own.
  • The only real mistake is the one from which we learn nothing.
  • Quality means doing it right when no one is looking.
  • To do more for the world than the world does for you – that is success.
  • Failure is simply the opportunity to begin again, this time more intelligently.
  • A business that makes nothing but money is a poor business.
  • There is one rule for the industrialist and that is: make the best quality goods possible at the lowest cost possible, paying the highest wages possible.
  • Employers only handle the money – it is the customer who pays the wages.
  • Coming together is a beginning; keeping together is progress; working together is success.
  • You can’t build a reputation on what you are going to do.
  • There is no man living who isn’t capable of doing more than he thinks he can do.
  • Whether you think you can, or you think you can’t – you’re right.
  • Anyone who stops learning is old, whether at twenty or eighty.  Anyone who keeps learning stays young.
  • Thinking is the hardest work there is, which is probably the reason so few engage in it.
  • Enthusiasm is the yeast that makes your hopes shine to the stars.
  • You don’t have to hold a position in order to be a leader.

Oct 19, 2019

Dynamic Programming

Those who do not remember the past are condemned to repeat it. ~ George Santayana

In terms of mathematical optimization, dynamic programming usually refers to simplifying a decision by breaking it down into a sequence of decision steps over time.

Dynamic programming amounts to breaking down an optimization problem into simpler sub-problems, and storing the solution to each sub-problem so that each sub-problem is only solved once.

Dynamic Programming (DP) is an algorithmic technique for solving an optimization problem by breaking it down into simpler sub-problems and utilizing the fact that the optimal solution to the overall problem depends upon the optimal solution to its sub-problems.

There are two key attributes that a problem must have in order for dynamic programming to be applicable: optimal substructure and overlapping sub-problems.

If a problem can be solved by combining optimal solutions to non-overlapping sub-problems, the strategy is called "divide and conquer" instead. This is why merge sort and quick sort are not classified as dynamic programming problems.

Some good resources to learn about dynamic programming:
  1. Demystifying Dynamic Programming
  2. Dynamic Programming – 7 Steps to Solve any DP Interview Problem
  3. Topcoder - Dynamic Programming from Novice to Advanced


The perfect questions to ask in your job interview

The perfect questions to ask in your job interview.

Lynne has created KeyValues to help software developers like her find engineering teams that share their values.

Interviews are two-sided. The perfect questions to ask in your job interview. 
Make sure you show up prepared to get the answers you need about the things you care about most.

Mentioned the areas here. Questions can be found at culture questions.

Engineering
  • High Quality Code Base
  • Pair Programs
  • Open Source Contributor
  • Start-to-Finish Ownership
  • Uses Agile Methodologies
  • Cutting-Edge Technologies
  • Fast-Paced Environment
  • Continuous Delivery
Team Values
  • Engages with Community
  • Team is Diverse
  • Continuous Feedback
  • Impressive Team Members
  • Bonded by Love for Product
  • Creative + Innovative
  • Cross-Department Collaboration
  • Open Communication
  • EQ > IQ
  • Flat Organization
  • Risk-Taking > Stability
  • Wears Many Hats
  • Heavily Team Oriented
Daily Routines
  • Eats Lunch Together
  • Flexible Work Arrangements
  • Light Meetings
  • Friends Outside of Work
  • Has Good Beer
  • Thoughtful Office Layout
Career Growth
  • Promotes from Within
  • Internal Mobility
  • Good for Junior Devs
  • Has Internship Program
  • High Employee Retention
Personal Health
  • Actively Practices Inclusion
  • Work/Life Balance
  • Committed to Personal Growth
  • Ideal for Parents
  • Safe Environment to Fail
  • Supports Physical Wellness
  • Fosters Psychological Safety
Strategy
  • Customer Comes First
  • Engineering-Driven
  • Product-Driven
  • Design-Driven
  • Data-Driven
  • Rapidly Growing Team


Sep 15, 2019

Are you an investor or consumer ?

“A nation is born stoic, and dies epicurean” – Will Durant

A stoic believes in enduring hardship without complaint. 
Epicurus believed that pleasure was the greatest good. 

Stoics are people willing to sacrifice present pleasure for something better later. They are investors. 
Epicureans live for now. They are consumers. They say you only live once. 

Media is bombarding you with thousands of ads. They are trying to sell you something. 
Luxury comes at a cost...of killing your hopes, your dreams, your ambitions. So toughen up a little bit. Be a stoic.

Everybody wants, but not everybody toughens up to get the good life. You must toughen up. 

Chief Tecumseh says:  Love your life. Perfect your life. Beautify all things in your life. Seek to make your life long and its purpose in the service of your people.


Resources:

Sep 8, 2019

Start Thanking - Stop Apologizing

Stop Saying "Sorry" And Say "Thank You" Instead

Sorry for taking up all your time => Thank you for spending time with me
I am sorry I am late => Thank you for waiting for me.
I am sorry for talking so much => Thank you for listening.
I am sorry you had to stay so late => Thank you so much for going beyond the call of duty.
I am sorry you had to defend me => Thank you for your loyalty.

Resources: 

Sep 6, 2019

51:49 Rule

51:49 Rule

The 51:49 rule means that whatever happens to you at every moment in life,
  1. You contribute to 51% (Major)
  2. External factors contribute the other 49%  (Minor)
The 51 and 49 numbers are arbitrary. The numbers could’ve been 60:40, 75:25 or whatever. The point is one number is always higher than the other. One part has greater influence than the other. One part is more powerful than the other. One part actually determines your daily experience!

The higher number means you’re 100% responsible for whatever is going on in your life. You’re ultimately accountable for all of the results in your life because you’ve created them. You’ve attracted them into your life. There are many outside influences and situations constantly testing your resolve and you don’t have to allow them to put you into a negative mentality. If they do, you have choice to erase them.

"10% of life is made up of what happens to you. 90% of life is decided by how you react."  ~ Stephen Covey

Please share your thoughts ...

Aug 24, 2019

Programming Quotes

Fix the cause, not the symptom.

Intent does not erase Impact.

“Code is like humor. When you have to explain it, it’s bad.” ~ Cory House

“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” ~ Linus Torvalds

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” – Martin Fowler

“First, solve the problem. Then, write the code.” – John Johnson

"Optimism is an occupational hazard of programming: feedback is the treatment." ~  Kent Beck

“When to use iterative development? You should use iterative development only on projects that you want to succeed.” – Martin Fowler

“Java is to JavaScript what car is to Carpet.” ~ Chris Heilmann

“Talk is cheap. Show me the code.”  ~ Linus Torvalds
“Make it work, make it right, make it fast.” ~ Kent Beck
“Simplicity is the soul of efficiency.” ~ Austin Freeman

Your intent does not erase your impact. Your privilege is not your fault, but it is your responsibility. (From: Clarity 2019)

Feel free to share your one liners ...

Aug 22, 2019

Test Driven Development - eradicates fear of change

TDD eradicates fear of change.

As a developer, you shouldn't have to guess whether software is working correctly; You should be able to prove it at every step of the way.

A test-driven development (TDD) process allows you to build testing into your daily routine.

You can get instant feedback on the changes you are making which will increase your productivity, confidence and peace of mind.

Definition:
Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: requirements are turned into very specific test cases, then the software is improved so that the tests pass.

This is opposed to software development that allows software to be added that is not proven to meet requirements.

Cons of TDD:
  1. TDD will make you slow when the design is changing rapidly. 
  2. In TDD, emphasis is given to passing tests than design. 
    1. Passing tests is NEVER a key to good quality.
    2. Quality is made by design, not testing.

Aug 21, 2019

SOLID - Principles of Object Oriented Class Design

The theory of SOLID principles was introduced by Martin in his 2000 paper "Design Principles and Design Patterns". The SOLID acronym was introduced later by Michael Feathers.

1. Single responsibility principle
A class should have only one reason to change

Martin defines a responsibility as a reason to change, and concludes that a class or module should have one, and only one, reason to be changed (i.e. rewritten).

"When designing our classes, we should aim to put related features together, so whenever they tend to change they change for the same reason. And we should try to separate features if they will change for different reasons." - Steve Fenton

2. Open-Closed Principle
A module should be open for extension but closed for modification.

Of all the principles of object oriented design, this is the most important.

It means simply this: We should write our modules so that they can be extended, without requiring them to be modified. In other words, we want to be able to change what the modules do, without changing the source code of the modules.

3. Liskov Substitution Principle
Subclasses should be substitutable for their base classes

This principle was coined by Barbar Liskov in her work regarding data abstraction and type theory. It also derives from the concept of Design by Contract (DBC) by Bertrand Meyer

Derived classes should be substitutable for their base classes. That is, a user of a base class should continue to function properly if a derivative of that base class is passed to it.

4. Interface Segregation Principle
Many client specific interfaces are better than one general purpose interface

The essence of the principle is quite simple. If you have a class that has several clients, rather than loading the class with all the methods that the clients need, create specific interfaces for each client and multiply inherit them into the class.

5. Dependency Inversion Principle
Depend upon Abstractions. Do not depend upon concretions

Dependency Inversion is the strategy of depending upon interfaces or abstract functions and classes, rather than upon concrete functions and classes. This principle is the enabling force behind component design, COM, CORBA, EJB, etc.


Aug 11, 2019

What is True Wealth ?

True Wealth is So Much More Than Money

The majority of people think of the word ‘wealth’ in terms of finances only but this is a narrow view of what it means to be wealthy.

Wealth consists of every area within one’s life — health, relationships, finances, time, so on and so forth.

Different types of wealth:
  1. Financial / Material Wealth (Money)
  2. Social Wealth (Relationships)
  3. Time Wealth (Freedom)
  4. Physical Wealth (Health)
  5. Mental Wealth (Mindset)
  6. Spiritual Wealth (Satisfaction)
The majority of people chase money and status at the expense of freedom and health. In the short term, this “works” somewhat to the favor of the individual but in the long term, it produces nasty consequences.

Be careful of the system which tempt you in with financial / material wealth (money) but rob you of all other types of wealth (Freedom, Health etc.)

What do you think about this ?

Aug 9, 2019

Are you doing right things?

Where is your concentration ?
Are you concentrating on doing things right or doing right things ?

Doing things right will keep you going.
Doing right things will make you move in right direction.

Both are important; but with out doing right things, doing things right will keep you busy (you might even be very satisfied) and you might land in a wrong place.

Dong things right and not doing right things might give you short term results but will fail you in the long term.

So, make sure that you are doing right things before you start doing any thing.

"Management is Doing Things Right, Leadership is Doing the Right Things" ~ Peter F Drucker

Don't just manage your life and work. Lead your life and work.

Feel free to share your thoughts in comments below.



Aug 6, 2019

Speed matters

Why working quickly is more important than it seems ?

The obvious benefit to working quickly is that you’ll finish more stuff per unit time. But there’s more to it than that.
If you work quickly, the cost of doing something new will seem lower in your mind. So you’ll be inclined to do more.

The general rule seems to be: Systems which eat items quickly are fed more items. Slow systems starve.

What’s true of individual people turns out also to be true of whole organizations.
  • If customers find out that you take two months to frame photos, they’ll go to another frame shop. 
  • If contributors discover that you’re slow to merge pull requests, they’ll stop contributing. 
Unresponsive systems are sad. They’re like buildings grown over with moss. They’re a kind of memento mori. People would rather be reminded of life. They’ll leave for places that get back to them quickly.

Part of the activation energy required to start any task comes from the picture you get in your head when you imagine doing it. 
It may not be that going for a run is actually costly; but if it feels costly, if the picture in your head looks like a slog, then you will need a bigger expenditure of will to lace up.

Slowness seems to make a special contribution to this picture in our heads. Time is especially valuable. So as we learn that a task is slow, an especial cost accrues to it. Whenever we think of doing the task again, we see how expensive it is, and bail.

That’s why speed matters.

The prescription must be that if there’s something you want to do a lot of and get good at—like code, or fix bugs—you should try to do it faster.

Source: http://jsomers.net/blog/speed-matters

Feel free to share your thoughts in comments below.

Aug 2, 2019

Who owns your life ?

As long as you worry about what others think of you, you are owned by them.
You own your life only when you don’t need approval from others.

“Care about what other people think and you will always be their prisoner.” – Lao Tzu

People Pleasing Hides the Real You.

Don't Change So People Will Like You - Be Yourself and the Right People Will Love the Real You.


Feel free to share your thoughts in comments below.

Jul 31, 2019

Managers and Makers

Manager's Schedule:
A manager’s day is, as a rule, sliced up into tiny slots, each with a specific purpose decided in advance. Many of those slots are used for meetings, calls, or emails. The manager’s schedule may be planned for them by a secretary or assistant.

Managers don’t necessarily need the capacity for deep focus — they primarily need the ability to make fast, smart decisions. In a three-minute meeting, they have the potential to generate (or destroy) enormous value through their decisions and expertise.

Maker's Schedule: (Engineers, Artists, Writers etc. )
A maker’s schedule is different. It is made up of long blocks of time reserved for focusing on particular tasks, or the entire day might be devoted to one activity. Breaking their day up into slots of a few minutes each would be the equivalent of doing nothing.

When you’re operating on the maker’s schedule, meetings are a disaster. A single meeting can blow a whole afternoon, by breaking it into two pieces each too small to do anything hard in. Plus you have to remember to go to the meeting. That’s no problem for someone on the manager’s schedule. There’s always something coming on the next hour; the only question is what. But when someone on the maker’s schedule has a meeting, they have to think about it.

Each type of schedule works fine by itself. Problems arise when they meet. Since most powerful people operate on the manager's schedule, they're in a position to make everyone resonate at their frequency if they want to. But the smarter ones restrain themselves, if they know that some of the people working for them need long chunks of time to work in.

We shouldn’t think of either type of work as superior, as the two are interdependent. Managers would be useless without makers and vice versa. 

Managers need to identify the makers and give space to their schedules. 

Source: 

Jul 27, 2019

Your mind can be your best asset or your worst enemy. Train it well.

Your mind can be your best asset or your worst enemy. Train it well.


Inspirational quotes on leadership


Inspirational quotes on leadership from historical figures and business leaders:

“A leader is best when people barely know he exists…when his work is done, his aim fulfilled, they will all say: We did it ourselves.”
— 
Lao-Tzu, an ancient philosopher and founder of Taoism

“Leadership is about making others better as a result of your presence and making sure that impact lasts in your absence.”
— Sheryl Sanberg, COO of Facebook

“If you want to build a ship, don’t drum up the men to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea.”
— 
Antoine de Saint-Exupéry,  French writer and pioneering aviator.

“Leaders need to provide strategy and direction and to give employees the tools that enable them to gather information and insight from around the world. Leaders shouldn’t try to make every decision.”
— Bill Gates, founder of Microsoft

“As a leader, I am tough on myself and I raise the standard for everybody; however I am very caring because I want people to excel at what they are doing so that they can aspire to be me in the future.”
— 
Indra Nooyi, former CEO of PepsiCo

“If your actions create a legacy that inspires others to dream more, learn more, do more and become more, then, you are an excellent leader.”
— 
Dolly Parton, actress and singer

“Leaders are made, they are not born. They are made by hard effort, which is the price which all of us must pay to achieve any goal that is worthwhile.”
— 
Vince Lombardi, American football coach, and NFL executive.

“Leadership is the ability to guide others without force into a direction or decision that leaves them still feeling empowered and accomplished.”
– 
Lisa Cash Hanson, CEO of Snuggwugg.

“People ask the difference between a leader and a boss. The leader leads, and the boss drives.”
— 
Theodore Roosevelt, 26th President of the United States.

“People have to trust you. You have to build in trust for people.”
— 
Jack Welch, former CEO of General Electric

“It is better to lead from behind and to put others in front, especially when you celebrate victory when nice things occur. You take the front line when there is danger. Then people will appreciate your leadership.”
— 
Nelson Mandela, South African political leader

“Often poor leadership is masked by those with the loudest voices and strongest opinions.”
— Nick Fewings

“Become the kind of leader that other people would follow voluntarily; even if you had no title or positon.”
— Brian Tracy, motivational speaker, best-selling author and personal development expert

Words can be powerful, but only if you follow up their inspiration with action. Remember, a great leader requires more than a title — you need drive, creativity, and a willingness to learn.


Source: 
  1. https://digital.com/blog/leadership-quotes
  2. https://wisetoast.com/50-inspiring-leadership-quotes

Feel free to share your thoughts in comments below.

Measuring a software engineers performance

Why measure?

There are a few different reasons why a software engineering team lead would want to track each software engineers individual performance.
  1. Fair Compensation
  2. Promote individual growth in key skill areas
  3. Assess individuals comparative to their team’s performance

What to measure ?
  1. Ability to write source code that adheres to specifications
  2. Peer reviewing other team members work
  3. Debugging and troubleshooting complicated issues
  4. Process Improvements

How to measure ?
Here are a few ways to gather the information below
  1. Surveying the individuals more senior peers
  2. Creating metrics through issue trackers and time sheets
  3. Observing the quality and speed yourself
  4. Surveying the individuals senior most peers


Feel free to share your thoughts in comments below.

Jul 25, 2019

Procrastination to Motivation (Regulate your emotions)

You Procrastinate Because Of Emotions, Not Laziness. Regulate Them To Stop Procrastinating!

There are two trains of thought – One leads to procrastination and one leads to motivation. And somewhere in between, there is a junction called anxiety.

Procrastination train of thought:

  • People procrastinate or avoid aversive tasks to improve their short-term mood at the cost of long-term goals.
  • Procrastination is not a time management problem. It is an emotion regulation problem - we delay activities which might make us feel not-so-good.
  • Procrastination is not laziness. Humans procrastinate because of poor emotional regulation about the outcome of tasks.
  • In short, we often procrastinate because of perceived anxiety, stress, and poor emotional regulation about the completion of a task.
  • Perceived anxieties make us feel ‘not so good.’
  • The aversion activity is a mechanism to avoid or delay the anxiety and repair the short-term negative mood.
  • Habits like procrastination are a reaction to the idea of completing a task. 

I'm so stressed that relaxing makes me more stressed because l'm not working on what's making me stressed.

Motivation train of thought

The fact that there are consequences for procrastinating is a source of anxiety and stress in itself. This could motivate you to not procrastinate in the first place. But that doesn’t always happen. The motivation could stay in the background or it could even push you toward your goal. However, the anxiety remains until it is dealt with.

Procrastination + Motivation = Conflict + Action

Solutions for overcoming procrastination
  • Address the perceived anxiety about the completion of a task. You know it’s there but it might not be in awareness. So you might have to dig and address your feelings first.
  • Use the popular Pomodoro Technique to gain control over your tasks and relieve the pressure from some associated anxiety. 

You can avoid procrastination by dealing with it like its a habit. Focus your willpower on The Cue and create a plan to change your reaction to the task. You have the control to rewire your brain and thus, form new beneficial habits.

Remember: Procrastination happens when your brain thinks that the consequence of doing your task is a painful experience. And thus, it tries to avoid it.


Feel free to share your thoughts in comments below.

Jul 24, 2019

Famous Laws Of Software Development

Famous and interesting laws of Software Development

  1. Murphy's Law: If something can go wrong, it will. 
  2. Brook's Law: Adding manpower to a late software project makes it later. 
  3. Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law. 
  4. Conway's Law: 
    1. Any piece of software reflects the organizational structure that produced it.
    2. [OR] Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. 
  5. Postel's Law: Be conservative in what you send, be liberal in what you accept. 
  6. Pareto Principle: For many phenomena, 80% of consequences stem from 20% of the causes.
  7. The Peter Principle: In a hierarchy, every employee tends to rise to his level of incompetence.
  8. Kerchkhoff's Principle: In cryptography, a system should be secure even if everything about the system, except for a small piece of information - the key - is public knowledge.
  9. Linus's Law: Given enough eyeballs, all bugs are shallow.
  10. Moore's Law: 
    1. The power of computers per unit cost doubles every 24 month. 
    2. [OR] The number of transistors on an integrated circuit will double in about 18 months.
    3. [OR] The processing speed of computers will double every two years!"
  11. Wirth's law: Software gets slower faster than hardware gets faster.
  12. Ninety-ninety rule: The first 90% of the code takes 10% of the time. The remaining 10% takes the other 90% of the time
  13. Knuth's optimization principle: Premature optimization is the root of all evil.
  14. Norvig's Law: Any technology that surpasses 50% penetration will never double again (in any number of months).
Source: https://www.timsommer.be/famous-laws-of-software-development

Feel free to share your thoughts in comments below.

Want to hire the best programmers? Offer growth


[Based on the research done by Triplebyte]

Software engineers of all stripes want, more than anything else, to develop their abilities as engineers. 

They want it more than pay, more than work/life balance, and more than autonomy.

This is probably, at least in part, because they know that every other priority they have will eventually depend on keeping up with the industry.

Women Engineers Want Growth, Too (But Also Comfort and Inclusivity)

As expected, “inclusive workplace” shows the largest relative difference between men and women engineers. Female-identified candidates chose it three times as often, a far larger relative difference than any of the other common motivators.

Great Engineers Are Different From The Best Engineers

Great engineers answer “salary”, “impressive team members”, “autonomy”, “fast-paced environment” and “equity” much more. “Autonomy” suggests that these engineers know that they're skilled and can be trusted to work with minimal supervision, and “salary”, “fast-paced environment”, and “impressive team members” reflect career ambition appropriate to that skill level.

In short, great engineers want to be paid well and allowed to exercise their skills in challenging environments.

The best engineers have completely different priorities from great engineers. In many cases, the trends from the previous graph actually reverse when looking at the best engineers.

For example, great engineers selected “work/life balance” less often than the population as a whole, but the best engineers rank it as their top priority by a gigantic margin.

Impressive team members”, on the other hand, was selected more among great engineers but plummets to near the bottom among the best.

In other words, the priorities of the very best engineers are very different from those of merely great engineers. The very best engineers want comfortable and meaningful work and the ability to choose their work environment and timing.

Finally, it's critical to decide whether your company needs great engineers or the very best engineers. 
  • If your company wants great engineers, emphasize pay, autonomy, and challenge. 
  • If your company wants the very best engineers, let them work from home, keep your expectations around hours worked reasonable, and go out of your way to emphasize meaningful product.

Full Article: https://triplebyte.com/blog/want-hire-best-programmers-offer-growth

Feel free to share your thoughts in comments below.

Jul 23, 2019

What is legacy code ?

Changing code with out tests is like doing aerial gymnastics without a net. 

What is legacy code?
Let's look at the strict definition: Legacy code is code that we've gotten from someone else. Maybe our company acquired code from another company; maybe people on the original team moved on to other projects. Legacy code is somebody else's code. But in programmer-speak, the term means much more than that. The term legacy code has taken on more shades of meaning and more weight over time.

What do you think about when you hear the term legacy code? If you are at all like me, you think of tangled, unintelligible structure, code that you have to change but don't really understand. You think of sleepless nights trying to add in features that should be easy to add, and you think of demoralization, the sense that everyone on the team is so sick of a code base that it seems beyond care, the sort of code that you just wish would die. Part of you feels bad for even thinking about making it better. It seems unworthy of your efforts. That definition of legacy code has nothing to do with who wrote it. Code can degrade in many ways, and many of them have nothing to do with whether the code came from another team.

In the industry, legacy code is often used as a slang term for difficult-to-change code that we don't understand. But over years of working with teams, helping them get past serious code problems, I've arrived at a different definition.

To me, legacy code is simply code without tests. I've gotten some grief for this definition. What do tests have to do with whether code is bad? To me, the answer is straightforward, and it is a point that I elaborate throughout the book:

Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.

You might think that this is severe. What about clean code? If a code base is very clean and well structured, isn't that enough? Well, make no mistake. I love clean code. I love it more than most people I know, but while clean code is good, it's not enough. Teams take serious chances when they try to make large changes without tests. It is like doing aerial gymnastics without a net.


Recommend the below book for more understanding on how to deal with legacy code.

Working Effectively with Legacy Code (Get Better Performance Out of Your Legacy Systems): Is your code easy to change? Can you get nearly instantaneous feedback when you do change it? Do you understand it? If the answer to any of these questions is no, you have legacy code, and it is draining time and money away from your development efforts. Michael Feathers offers start-to-finish strategies for working more effectively with large, untested legacy code bases.


Other useful books from the same publisher:

Clean Code (A Handbook of Agile Software Craftsmanship): Best agile practices of cleaning code “on the fly” that will instill within you the values of a software craftsman and make you a better programmer—but only if you work at it.

Clean Coder (Practical Advice for the Professional Programmer): Robert C. Martin introduces the disciplines, techniques, tools, and practices of true software craftsmanship. This book is packed with practical advice–about everything from estimating and coding to refactoring and testing.

Clean Architecture (A Craftsman's Guide to Software Structure and Design): Uncle Bob presents the universal rules of software architecture that will help you dramatically improve developer productivity throughout the life of any software system.

The Software Craftsman (Professionalism, Pragmatism, Pride): Sandro Mancuso helped found the world’s largest organization of software craftsmen; now, he shares what he’s learned through inspiring examples and pragmatic advice you can use in your company, your projects, and your career.

Whats your take on Legacy Code and tests? Feel free to share your thoughts in comments below.

What is Code ?



An interesting graphical intro to computers and coding.

https://www.bloomberg.com/graphics/2015-paul-ford-what-is-code/

From: Paul Ford (A writer and programmer who is a founding partner of Postlight, a company in New York City that builds Internet platforms and develops interactive products.)

Isn't it interesting ? Feel free to share your thoughts in comments below.

Jul 22, 2019

Software Development Lessons (learned the hard way)


These are the exhaustive list of lessons Julia Biason learnt in 30 years working with software development.

Folks who have spent some time in software development can easily connect with them. 

Programming

  • Before you start writing code...
    • Spec First, Then Code
    • Write Steps as Comments
    • Gherkin Is Your Friend to Understand Expectations
    • Design Patters Are Used to Name Solution, Not Find Them
    • Thinking Data Flow Beats Patterns
    • The Magic Number Seven, Plus Or Minus Two
    • Cognitive Cost Is The Readability Killer
    • Learn The Basics of Functional Programming
    • Shortcuts Are Nice, But Only In The Short Run
    • Debuggers Are Overrated
    • Think About The Users
  • Testing Software
    • Unit Tests Are Good, Integration Tests Are Gooder
    • Testing Every Function Creates Dead Code
    • Tests Make Better APIs
    • Make Tests That You Know How To Run On The Command Line
    • Good Languages Come With Tests
  • Documenting your code
    • Documentation Is A Love Letter To Your Future Self
    • The Function Documentation Is Its Contract
    • If A Function Description Includes An "And", It's Wrong
    • Good Languages Come With Integrated Documentation
  • Source Control
    • Always Use A Version Control System
    • One Commit Per Change
  • Project Organization
    • Organize Your Code by Data/Type, Not Functionality
    • Create Libraries
  • Writing code
    • Be Ready To Throw Your Code Away
    • Future Thinking Is Future Trashing
    • Don't Use Booleans As Parameters
    • Beware of Interface Changes
    • It's Better To Let The Application Crash Than Do Nothing
    • If You Know How To Handle It, Handle It
    • Types Say What Your Data Is
    • If Your Data Has a Schema, Use a Structure
    • Don't Mess With Things Outside Your Project
    • Resist The Temptation Of Easy
    • Start Stupid
    • Always Use Timezones With Your Dates
    • Always Use UTF-8 For Your Strings
    • Optimization Is For Compilers
    • Units Makes Things Clear
    • If It Doesn't Run On Your Computer, You Have A Problem
  • Making Things Go
    • The Config File Is Friend
    • Command Line Options Are Weird, But Helpful
    • Not Just Function Composition, But Application Composition
    • Even for Application Composition, Start Stupid
    • Logs Are For Events, Not User Interface
    • Learn To Monitor

Community/Teams
  • A Language Is Much More Than A Language
  • Understand And Stay Away From Cargo Cult
  • "Right Tool For The Job" Is Just To Push An Agenda
  • The Right Tool Is More Obvious Than You Think
  • Code Reviews Are Not For Style
  • Code Formatting Tools Are Ok, But No Silver Bullet
  • Code Style: Follow It
Personal
  • Companies Look For Specialists But Keep Generalists Longer
  • Keep A List of Stupid Bugs That Took More Than 1 Hour To Solve
  • When It's Time to Stop, It's Time To Stop
  • Code of Conduct Protect YOU, Not THEM
  • Learn To Say No
  • Take Responsibility For The Use Of Your Code
  • Don't Tell It's Done When It's Not

Source: https://blog.juliobiason.net/books/things-i-learnt (Author has written elaborate explanation on each of the mentioned lessons)

An interesting discussion on the above subject can be found at Hacker News

Whats your take on Software Development? Feel free to share your thoughts in comments below.

Jul 21, 2019

Design Patterns are not solutions


Design Patters Should be Used to Name Solution, Not Find Them

Most of the times I saw design patterns being applied, they were applied as a way to find a solution, so you end up twisting a solution -- and, sometimes, the problem it self -- to fit the pattern.

My guess is that the heavy use of "let's apply this design pattern" before even understanding the problem -- or even trying to solve it -- comes as a form of cargo cult: "We saw that people used this pattern and solved their problem, so let's use it too and it will solve our problem". Or, worse: "Design pattern is described by Famous Person, so we must use it".

Here is the thing: Design pattern should not be used as a way to find solution to any problems. You may use some of them as base for your solution, but you must focus on the problem, not the pattern.

"Do a visitor pattern will solve this?" is the wrong question. "What should we do to solve our problem?" is the real question. Once you went there and solved the problem you may look back and see if it is a visitor pattern -- or whatever pattern. If it doesn't, that's alright, 'cause you solved the problem. If it did... well, congratulations, you now know how to name your solution.

I've seen this happening a lot: People have a problem; people decided to use a pattern; the pattern doesn't actually solve the problem (not in the 100% mark, but above 50%); what happens then is that people start twisting the problem to fit the pattern or, worse, add new layers to transform the problem into the pattern.

Source: https://blog.juliobiason.net/books/things-i-learnt

Whats your take on Design Patterns? Feel free to share your thoughts in comments below.





Jul 19, 2019

Design Differences Between RDBMS and Cassandra

Design Differences Between RDBMS and Cassandra

NO JOINS
You cannot perform joins in Cassandra. If you have designed a data model and find that you need something like a join, you’ll have to either do the work on the client side, or create a denormalized second table that represents the join results for you. This latter option is preferred in Cassandra data modeling. Performing joins on the client should be a very rare case; you really want to duplicate (denormalize) the data instead.

NO REFERENTIAL INTEGRITY
Although Cassandra supports features such as lightweight transactions and batches, Cassandra itself has no concept of referential integrity across tables. In a relational database, you could specify foreign keys in a table to reference the primary key of a record in another table. But Cassandra does not enforce this. It is still a common design requirement to store IDs related to other entities in your tables, but operations such as cascading deletes are not available.

DENORMALIZATION
In relational database design, we are often taught the importance of normalization. This is not an advantage when working with Cassandra because it performs best when the data model is denormalized. It is often the case that companies end up denormalizing data in relational databases as well. There are two common reasons for this. One is performance. Companies simply can’t get the performance they need when they have to do so many joins on years’ worth of data, so they denormalize along the lines of known queries. This ends up working, but goes against the grain of how relational databases are intended to be designed, and ultimately makes one question whether using a relational database is the best approach in these circumstances.

A second reason that relational databases get denormalized on purpose is a business document structure that requires retention. That is, you have an enclosing table that refers to a lot of external tables whose data could change over time, but you need to preserve the enclosing document as a snapshot in history. The common example here is with invoices. You already have customer and product tables, and you’d think that you could just make an invoice that refers to those tables. But this should never be done in practice. Customer or price information could change, and then you would lose the integrity of the invoice document as it was on the invoice date, which could violate audits, reports, or laws, and cause other problems.

In the relational world, denormalization violates Codd’s normal forms, and we try to avoid it. But in Cassandra, denormalization is, well, perfectly normal. It’s not required if your data model is simple.

Source: Cassandra: The Definitive Guide

Jul 18, 2019

What does schema-less mean for a document database?


Document databases are sometimes called schema-less, but that’s misleading, as the code that reads the data usually assumes some kind of structure—i.e., there is an implicit schema, but it is not enforced by the database.

A more accurate term is schema-on-read (the structure of the data is implicit, and only interpreted when the data is read), in contrast with schema-on-write (the traditional approach of relational databases, where the schema is explicit and the database ensures all written data conforms to it).

Schema-on-read is similar to dynamic (run-time) type checking in programming languages, whereas schema-on-write is similar to static (compile-time) type checking.

Just as the advocates of static and dynamic type checking have big debates about their relative merits, enforcement of schemas in database is a contentious topic, and in general there’s no right or wrong answer.

--------
Completely agree with the above the statements beautifully put by the author. An interesting excerpt from the book "Designing Data-Intensive Applications" by Martin Kleppmann.





Jul 15, 2019

Learn to Respond, Not React

You will continue to suffer if you have an emotional reaction to everything that is said to you. True power is sitting back and observing things with logic. 

TRUE POWER IS RESTRAINT

If words control you that means everyone else can control you. Breathe and allow things to pass.
Let it R.A.I.N. - Recognize, Accept, Investigate & Not-identify


-----------

​"10% of life is made up of what happens to you. 90% of life is decided by how you react." -Stephen Covey

Source: Internet

A Wealth Of Information Creates A Poverty Of Attention


What information consumes is rather obvious: it consumes the attention of its recipients.

Hence a WEALTH of INFORMATION creates a POVERTY of ATTENTION, and a need to ALLOCATE that ATTENTION efficiently among the overabundance of information sources that might consume it.

~ Herbert A. Simon (Nobel Prize winner in economics)

Herbert Alexander Simon (June 15, 1916 – February 9, 2001) was an American economistpolitical scientist and cognitive psychologist, whose primary research interest was decision-making within organizations and is best known for the theories of "bounded rationality" and "satisficing".

Jan 6, 2019

Story about Samsara from Vidura in Maha Bharatha



From Sri Maha Bharatham - 11th Maha Parva (Stri Parva) - Jalapradanika Sub Parva - 5th Chapter

"Dhritarashtra said, ‘Tell me in detail everything about the ways of that intelligence by which this wilderness of duties may be safely covered.’

"Vidura said, ‘Having bowed down to the Self-create, I will obey thy behest by telling thee how the great sages speak of the wilderness of life. A certain brahmana, living in the great world, found himself on one occasion in a large inaccessible forest teeming with beasts of prey. It abounded on every side with lions and other animals looking like elephants, all of which were engaged in roaring aloud. Such was the aspect of that forest that Yama himself would take fright at it.

Beholding the forest, the heart of the brahmana became exceedingly agitated. His hair stood on end, and other signs of fear manifested themselves, O scorcher of foes! Entering it, he began to run hither and thither, casting his eyes on every point of the compass for finding out somebody whose shelter he might seek. Wishing to avoid those terrible creatures, he ran in fright. He could not succeed, however, in distancing them or freeing himself from their presence. He then saw that that terrible forest was surrounded with a net, and that a frightful woman stood there, stretching her arms. That large forest was also encompassed by many five-headed snakes of dreadful forms, tall as cliffs and touching the very heavens. Within it was a pit whose mouth was covered with many hard and unyielding creepers and herbs. The brahmana, in course of his wanderings, fell into that invisible pit.

He became entangled in those clusters of creepers that were interwoven with one another, like the large fruit of a jack tree hanging by its stalk. He continued to hang there, feet upwards and head downwards. While he was in that posture, diverse other calamities overtook him. He beheld a large and mighty snake within the pit. He also saw a gigantic elephant near its mouth. That elephant, dark in complexion, had six faces and twelve feet. And the animal gradually approached that pit covered with creepers and trees. About the twigs of the tree (that stood at the mouth of the pit), roved many bees of frightful forms, employed from before in drinking the honey gathered in their comb about which they swarmed in large numbers.

Repeatedly they desired, O bull of Bharata’s race, to taste that honey which though sweet to all creatures could, however, attract children only. The honey (collected in the comb) fell in many jets below. The person who was hanging in the pit continually drank those jets. Employed, in such a distressful situation, in drinking that honey, his thirst, however, could not be appeased. Unsatiated with repeated draughts, the person desired for more.

Even then, O king, he did not become indifferent to life. Even there, the man continued to hope for existence. A number of black and white rats were eating away the roots of that tree. There was fear from the beasts of prey, from that fierce woman on the outskirts of that forest, from that snake at the bottom of the well, from that elephant near its top, from the fall of the tree through the action of the rats, and lastly from those bees flying about for tasting the honey. In that plight he continued to dwell, deprived of his senses, in that wilderness, never losing at any time the hope of prolonging his life.’"


"Dhritarashtra said, ‘Alas, great was the distress of that person and very painful his mode of life! Tell me, O first of speakers, whence was his attachment to life and whence his happiness? Where is that region, so unfavourable to the practice of virtue, in which that person resides? Oh, tell me how will that man be freed from all those great terrors? Tell me all this! We shall then exert ourselves properly for him. My compassion has been greatly moved by the difficulties that lie in the way of his rescue!’

"Vidura said, ‘They that are conversant, O monarch, with the religion of moksha cite this as a simile. Understanding this properly, a person may attain to bliss in the regions hereafter. That which is described as the wilderness is the great world. The inaccessible forest within it is the limited sphere of one’s own life. Those that have been mentioned as beasts of prey are the diseases (to which we are subject). That woman of gigantic proportions residing in the forest is identified by the wise with Decrepitude which destroys complexion and beauty.

That which has been spoken of as the pit is the body or physical frame of embodied creatures. The huge snake dwelling in the bottom of that pit is time, the destroyer of all embodied creatures. It is, indeed, the universal destroyer. The cluster of creepers growing in that pit and attached to whose spreading stems the man hangeth down is the desire for life which is cherished by every creature.

The six-faced elephant, O king, which proceeds towards the tree standing at the mouth of the pit is spoken of as the year. Its six faces are the seasons and its twelve feet are the twelve months. The rats and the snakes that are cutting off the tree are said to be days and nights that are continually lessening the periods of life of all creatures. Those that have been described as bees are our desires. The numerous jets that are dropping honey are the pleasures derived from the gratification of our desires and to which men are seen to be strongly addicted.

The wise know life’s course to be even such. Through that knowledge they succeed in tearing off its bonds.’"




"Dhritarashtra said, ‘Excellent is this parable that thou hast recited! Indeed, thou art acquainted with truth! Having listened to thy nectarlike speech, I desire to hear thee more.’

"Vidura said, ‘Listen to me, O king, I shall once more discourse in detail on those means an acquaintance with which enable the wise to free themselves from the ties of the world. As a person, O king, who has to travel a long way is sometimes obliged to halt when fatigued with toil, even so, O Bharata, they that are of little intelligence, travelling along the extended way of life, have to make frequent halts in the shape of repeated births in the womb. They, however, that are wise are free from that obligation. Men conversant with the scriptures, for this, describe life’s course as a long way. The wise also call life’s round with all its difficulties a forest.

Creatures, O bull of Bharata’s race, whether mobile or immobile, have to repeatedly return to the world. The wise alone escape. The diseases, mental and physical, to which mortals are subject, whether visible or invisible, are spoken of as beasts of prey by the wise. Men are always afflicted and impeded by them, O Bharata! Then again, those fierce beasts of prey, represented by their own acts in life, never cause any anxiety to them that are of little intelligence. If any person, O monarch, somehow escapes from diseases, Decrepitude, that destroyer of beauty, overwhelmshim afterwards. Plunged in a slough by the objects of the different senses--sound and form and taste and touch and scent--man remains there without anything to rescue him thence. Meanwhile, the years, the seasons, the months, the fortnights, the days, and the nights, coming one after another, gradually despoil him of beauty and lessen the period allotted to him. These all are messengers of death. They, however, that are of little understanding know them not to be such. The wise say that all creatures are governed by the Ordainer through their acts.

The body of a creature is called the car. The living principle is the driver of (that car). The senses are said to be steeds. Our acts and the understanding are the traces. He who followeth after those running steeds has to come repeatedly to this world in a round of rebirths. He, however, who, being self-restrained restrains them by his understanding hath not to come back. They, however, that are not stupefied while wandering in this wheel of life that is revolving like a real wheel, do not in reality wander in a round of rebirths.

He that is wise should certainly take care to prevent the obligation of rebirth. One should not be indifferent to this, for indifference may subject us to it repeatedly. The man, O king, who has restrained his senses and subdued wrath and covetousness, who is contented, and truthful in speech, succeeds in obtaining peace. This body is called the car of Yama. Then those that are of little intelligence are stupefied by it. Such a person, O king, would obtain that which thou hast obtained. The loss of kingdom, of friends, and of children, O Bharata, and such as these, overtake him who is still under the influence of desire.

He that is wise should apply the medicine of intelligence to all great griefs. Indeed, obtaining the medicine of wisdom, which is truly very efficacious and is almost unattainable, the man of restrained soul would kill that serious disease called sorrow. Neither prowess, nor wealth, nor friend, nor well-wishers can cure a man of his grief so effectually as the self-restrained soul. Therefore, observant of the great duty of abstention from all injuries, or friendship for all creatures, be of pious behaviour, O Bharata! Self-restraint, renunciation, and heedfulness are the three steeds of Brahman.

He who rides on the car of his soul, unto which are yoked these steeds with the aid of traces furnished by good conduct, and drives it, casting off all fear of death, proceedeth, O king, to the regions of Brahman. That person, O monarch, who gives unto all creatures an assurance of his harmlessness, goes to the highest of regions, the blessed realm of Vishnu. The fruit that one obtains by an assurance unto all creatures of his harmlessness cannot be obtained by a 1,000 sacrifices or by daily fasts. Amongst all things there is certainly nothing dearer than self.

Death is certainly disliked by all creatures, O Bharata! Therefore, compassion should certainly be shown unto all. Endued with diverse kinds of errors entangled by the net of their own intelligence, they that are wicked and are of good vision, wander repeatedly on the earth. They however, that are wise and endued with subtle sight, attain to a union with Brahman.’"

Feedback is a gift

 Feedback is a gift.  "We all need people who will give us feedback, that's how we improve" (Bill Gates) "Feedback is the...