Code of Honor

I always try to live by my code of honor. A man is nothing without his honor. "A sin is to betray your code".

Honorable life

  • Don't betray your code of honor.
  • Defend your Bushido way.
  • Live life as an Honorable Man.
  • Don't lie.
  • Honesty takes courage.
  • Don't talk without a knowledge to support it.
  • "Don't argue with the crazy guy".
  • Always follow your sense of Justice
  • Feel the pain of others.
  • Always put your self in people's shoe before making any decision.
  • A simple smile goes a long way.
  • There's no honor in winning by cheating.
  • "If you fall down 7 times make sure to get up 8 times."
  • Protect your promises.
  • "For a samurai everywhere is Japan."
  • Holding back is disrespectful to your opponent.
  • Live life in your way.
  • "Respect is earned, not given", So earn it.
  • "A man is much more than the job he holds and clothes he wears."
  • "If fail and you return home coz you're not good enough, you are welcome here. But if you come back because you didn't give your all, find another home."

The only true wisdom is in knowing you know nothing. I am the wisest man alive, for I know one thing, and that is that I know nothing.

–- Socrates

Science

Truth is sought for its own sake … Finding the truth is difficult, and the road to it is rough. For the truths are plunged in obscurity … God, however, has not preserved the scientist from error and has not safeguarded science from shortcomings and faults. If this had been the case, scientists would not have disagreed upon any point of science… Therefore, the seeker after the truth is not one who studies the writings of the ancients and, following his natural disposition, puts his trust in them, but rather the one who suspects his faith in them and questions what he gathers from them, the one who submits to argument and demonstration, and not to the sayings of a human being whose nature is fraught with all kinds of imperfection and deficiency. Thus the duty of the man who investigates the writings of scientists, if learning the truth is his goal, is to make himself an enemy of all that he reads, and, applying his mind to the core and margins of its content, attack it from every side. He should also suspect himself as he performs his critical examination of it, so that he may avoid falling into either prejudice or leniency.

–- Ibn al-Haytham

Wonder is the beginning of wisdom.

–- Socrates

Five basic principles of a scientist

  • Question Authorities, No idea is true just because someone says so, Including me.
  • Think for yourself. Question yourself.
  • Don't believe anything just because you want to, believing something doesn't make it so. Test ideas by evidence gained from observation and experiments. If a favorite idea failed a well designed test, It's wrong, get over it.
  • Follow the evidence, where ever it leads. If you have no evidence, reserve judgment.
  • And the most important of all, remember you could be wrong, even the best scientists have been wrong about something. every great scientist in the history made mistake. Of course they did, we are only human. Science keeps us from fooling ourselves and each other

To myself

  • Being a scientist means to be underestimated or misunderstood by others. When you come across people who ignore you, or don't take you seriously just stick to your scientific principals. Science is absolute but people's opinion are not. Think of those scientists who had to suffer in the past for the same reason, you're not alone.

Software Engineering

  • Simplicity over Complexity
  • Simple first, then Easy
  • Abstraction, Abstraction, Abstraction
  • Put your conventions layer on top of a well written abstraction
  • Always choose a name for your variables which implies the variable content or usage.
  • Never ever use variable names such as x, a, b, etc.
  • Bugs before new features
  • Docs before new features

Library design

Major releases can contain backward incompatible changes. It's better to use a different code name instead of a major version number change to indicate that there going to be backward incompatible changes. Minor releases shouldn't break the dependency versions. E.g: X(0.6.0) depends on Python(3.5.x), X(0.7.0) should depends on the same version python

New Feature Checklist

  • Is it easy to extend the feature ?
  • Is it scalable ?
  • Is it easy to maintain ?
  • Is it well documented ?
  • Does it have the best possible performance ?
  • What about tests ?
  • Is it following the correct coding style ?

Resiliency Checklist

  • Things that might fail:
    • Dependent systems
    • Network
    • External storage
    • Database
    • "The Cloud"