Book review: The Mastery

Mastery – a guide to discovering the inner force and principles for achieving mastery in any field or activity. It does not dive into the specific areas or skill sets but instead distills a set of general principles that one must follow on their path to achieving mastery in a field or subject of their choice.

The book is very dense in the material it presents. You could unpack each chapter for hours and dive into them deeper with more books and materials. What helps for the book to stay clear on the message and follow along is the format it chose. It expresses the principles by looking at contemporary and historical figures that were highly influential and respected personas in music, business, and technology and weaves all principles in mini stories that are easy to isolate and dissect.

The common theme of the book is that we all posses the ability to be great. It is not about the talent; it is not about “born genius,” or mystical powers. Luck plays a great role in our lives and cannot be dismissed. But you have to be prepared to accept and use luck to turn into anything meaningful. You have to be ready to receive it before it can make an impact on you. Through it all, it is all about hard work and more work, tactical plans combined with an ability to be flexible with a capacity to learn from others and stay on course despite the challenges that the life will present you.

It all starts with the process. First, you need to know what your big goal is. What are you trying to achieve? What is that you are trying to become? It is a difficult thing to define, and you need to spend time thinking about this deeply. Sometimes we get lucky, and we just know in our hearts what we want to do. In that case, the big goal is already defined, otherwise work to set it.

Second follows an immense practice and learning of your field or subject of interest. Not superficial tutorial here and there but full immersion and intentional practice. We need to anticipate that once the initial excitement wears off, the difference will be our ability to stick around and continue to study, learn, and practice the field. Push hard, let go, relax, push hard, let go, relax, push hard, let go relax … a cycle that will get you working hard and at the same time keeping you re-energized for more. The key is that each time you learn something, more unknowns open up and you continue to dig deep to understand the field or whatever it is that you are trying to master. The practice must be deliberate, that is with a goal in mind, and each stage has to have a purpose behind it. It’s a challenging work, but the rewards can be great.

During this time you must be strong enough to deal with self-doubt and potential criticism of others. Accept it but don’t get discouraged. Another roadblock here could be people close to you that will advise you against going for something big and steer you towards fields or topics that have quick short term gain but usually are dead-end occupations or endevours that will leave you unsatisfied. You need to find the calling that attracts you, that also is useful to the world, and then go after it.

All of the hard work is for one goal: developing of intuition. The greater the mastery, the better the intuition. There is a feel that gets developed that hints to you what approach is right and what is wrong. The deep intuition also helps you develop the connections between the subjects and fields that deepen the learning AND fuel the discovery. This is why the people that are in the field for a long time can know right away what the issues are, can solve them fast, and move past the complicated concepts in their field. The intuition is guiding them along th way.

You can enlist the help of mentors to accelerate your development. If mentors are being available, the next best thing is books and learning materials. The key is to be tactical about what is being studied and the approach that is used. The mentors can be incredible accelerators of the development and are highly recommended to be seeked out. Unfortunately in this area I have no experience as I have only occassionally encountered somebody who I could call a mentor in some capacity. The book advices on how to find such a person, how to approach it, and how to work under them. Don’t expect the mentor to have you as their primary concern. Instead you have to be creating some sort of value for the mentor in exchange for the mentorship. At the end, don’t be surprised when your hard work is taken over or adapted by the mentor. It is OK, and can happen. Accept it and expect it. And then if you follow the right path you will outgrow the mentor and move past it. The key is to recognize when that time comes and move on.

Another section that was immensily helpful and I found very useful was the section on social intelligence. Along the way to mastery, you will work with other people and organizations. The ability to read and navigate social situations is as useful as knowledge itself. Knowledge in a vacuum is useless. It has to be presented to others, allowed for others to take it apart and criticize it. Beware that at the end, people only care about themselves so potential “political” meddling and situations can arise. I love the book’s advice on it: expect it, embrace it, and move away from it. Don’t play “political” games if the goal is the mastery and gaining the knowledge. Instead, be prepared for it in a way that it does not surprise you or blind side you and do your own thing.

Overall the book was a great read. I have a feeling that I will be coming back to it from time to time. Also, just picked up a few of other Greene’s books that have similar rave reviews as Mastery. Here is to more reading and learning!

AI Nano degree update – Project Two

This is the second post in the Udacity’s AI Nano degree series. Taking the course is my attempt at learning and re-familiarizing with AI / CS concepts.

Project #2 tasked the students to implement an AI agent that is capable of playing a game of isolation. The only exception from the usual isolation game was that the moves had to follow a chess knight’s pattern. The course provided the board implementation and we had to write AI agent that is capable of searching for optimal moves through the board with the goal of defeating an opponent.

Sample isolation board. Visited squares are in the grey/black shade.

Initially, the game itself was not something to get too excited about. But when the implementation of algorithms started that’s when the fun picked up! Let’s start at the high-level definition of a problem. Given a board, it is not obvious what should the next move be in order to guarantee a win. One could run simulations and try to find it, but the search space can be too large even for the small boards (7×7) making it impossible to solve by a brute force alone. Instead, AI agent should focus on optimizing how it traverses the game tree by doing two things:

  • Come up with a way to evaluate the score for the board positions. A winning board has a score of infinity, a losing board has a score of negative infinity, anything in between should have a score that correctly determines how favorable the board is for winning or losing.
  • Iterate the possible solution tree in a way that is fast. You want to throw out the boards that are unfavorable to you, or select ones that were known to benefit you.

For the first problem, coming up with a way to value a board, means defining a heuristic function for the board position. The strength of the heuristic function is the difference maker in the AI agents. It requires a balance between being accurate but also fast to compute so that your algorithm can evaluate many boards during a single turn. If you make a heuristic function that is too complicated, then AI agent will be slow and with certain rules where time limits are enforced will lose.

For the second problem, iterating the possible solution tree, there are approaches such as minimax, alpha-beta pruning to optimize your move selection. Mix in iterative deepening search and you got an effective agent.

The heuristic functions I tried out where giving a score to a players position that indicated how many open moves the player had vs the opponent (the more moves over the opponent you have the better) COMBINED with how close the player was to the open positions. The idea here is not to get trapped. Another variation of the above I tried was staying as far away from the walls as possible. That one turned out to be a good heuristic, but not as effective as staying close to the open fields. And lastly I tried one combination where I combine staying away from the walls with staying close to the open fields and the results were still less than just staying close to the open fields.

All in all, it was a successful implementation that beat the baseline score set out by the project’s creators. Now I am trying to decide what to do with the agent and see what can be added to it so that it can participate in the competition against the agents of other students.

Some observations from going through the exercise:

  • Visualization is the king. Visualizing the board positions and move calculations really helped me discover bugs in my implementation. I should just always start with the visualization when working on the problems and go from there.
  • Iterative deepening was somewhat unintuitive at start. It is amazing how much it helps to find the solution faster without going too deep into only certain parts of the tree.
  • Alpha-beta can be a bit confusing at the start and you definitely need many manual/on-paper implementations to see why it is effective.

Some things that I did not implement as part of this exercise that still need to explore:

  • quiescent search. This one is a mystery and something that I will bring up on the course forums. I have read book materials on it and other online resources but something tells me that until I will try to implement it, it will not fully make sense.
  • Monte Carlo tree search roll outs. I really want to implement this one and see how it would make the AI agent better. Seems like it is a big part of any game playing AIs and making them effective.

This was fun. On to the advanced search concepts and pacman lab!

AI Nano degree update: Project One

First project required to write an AI agent capable of solving a Sudoku puzzle. The key goals of the exercise: familiarize students with concepts of constraint propagation and search for solving problems.

I would summarize constraint propagation as follows. In abstract, when you have a function that needs to pick a solution given multiple of choices, it can narrow down the answers by coming up with strategies that eliminate the subset of given solutions until a single solution remains or the number of potential solutions is smaller than the input solution space.

In Sudoku project, the three strategies for eliminating the solutions employed were as follows:

  • straight up elimination – find boxes that are solved, and then remove that box’s value from its peers (rows, cols, squares)

  • only-choice – given a box with multiple possible digits, for each of those digits, see if it is not present in other unit’s of that box thus making that number the only viable choice for the box

  • Naked twins – sometimes you have units that have two boxes with the same possible solutions, so that means those two squares will have either one of those digits. Thus those digits can be eliminated from other units of the box. There are variations of this called naked triplets, and so on. Twins seemed to be the most effective.

Now you can imagine that one can run through the solution elimination sequence in a loop, with each pass applying all the elimination techniques. You stop looping if none of the techniques are reducing the solution space further. You are stalled.

What now? Well, brute force search. Pick un unsolved box, and iterate through its solutions, in each pass applying the constraint elimination sequence until you either solve the problem or you stall. If you stall – the initially picked solution is not a good choice, move on to the next until solution is found.

The project was a very fun exercise. I never was much into Sudoku before so at the very least it gave me an excuse to try the puzzles out. It quickly became a fun exercise of finding patterns. And once you mix in writing Python code to solve the problem automatically, it was nothing but a delight.

Here is a screenshot of AI agent in action:

AI agent in action solving a sudoku puzzle
AI agent in action solving a Sudoku puzzle

To generalize the idea: when you have a function which has a set of possible solutions to choose from – go ahead and think through how you could constrain possible solutions to reduce the search space. Then brute force search through each until the answer is discovered.

Besides a great warm up into search, the first project also gave me a great intro into Anaconda, “Leading Open Data Science Platform Powered by Python.” Think of it as a Python environment that is loaded with data science libraries and tools. If that is not enough, it can “containerize” your Python environments that are entirely isolated and across machines/platforms. You can setup a Python 2 environment and Python 3 environments, load it on the same machine, and neither will impact each other. And again, not to mention that it comes pre-installed with a variety of data/ml related packages.

On to the second project, which goes much deeper into general AI ideas around search and advanced game-playing techniques. I am done with that project two and should have a write up for it shortly.

Machine Learning update – Feb 2017

In the last update on my machine learning journey, I had just finished the Udacity’s intro and started with the Coursera / Stanford Intro to Machine Learning. I am happy to say that this course is now complete as well!

It feels slightly surreal to reach this point. When I first setup my plan for ML, Coursera’s course was something I had marked as being challenging and a “maybe if time allowed.” The reviews and the feedback mentioned how great the course was, but also many people seemed to drop off at the neural network chapters. Essentially I had my doubts about being able to finish it on time while doing it part time. There is no time limit to the course, and you could transfer to the next cohort, but I wanted to make sure I did it in the same session I had started. Once you start delaying an online course, there is a chance you will delay it indefinitely.

In retrospect, the course was indeed challenging but not as bad as I expected it to be. The hardest part was to get comfortable with Octave environment and translating lecture notes and formulas into matrix equivalents. I am quite happy that I stuck to the end, and with 100% grade to boot.

If I had to compare the intro courses from Udacity and Coursera, I would still recommend Udacity to start and then use Coursera to augment and deepen the understanding of the basics. I had quite a few “aha!” moments when taking Coursera’s course, but Udacity makes ML more practical and attainable. I thought it demystified the Machine Learning field. After taking the course, you see the application opportunities and the landscape which you should further study. Perhaps best is to combine the two classes – they are drastically different – and learn and compare the concepts between the two.

What’s next? Feb 16th I am starting AI Engineer Nano Degree on Udacity. The same feeling again, a bit daunting and challenging. Hopefully, I will hang in there and power through it. I am sure to post the update as I go.

Before the course starts, I am taking a quick detour back to stats and statistical analysis, to make sure I grasp the basic concepts of analyzing data. Trying to go deeper into kernels and data sets on kaggle.com, familiarizing myself with pandas framework, etc. Basically having fun before AI degree ruins it all.

View story at Medium.com

Book Review: The Richest Man in Babylon

Rating: 4 stars.

Amazon Link

I wish I had read this book sooner.  I found it very useful, despite its unusual, parable-like, story style. The stories teach the reader how to achieve financial success. Even though the setting is ancient times, the advice conveyed is very practical and applies today as well.

When we think about “financial success,” we often think of immediate and big gains: stocks that multiple overnight, big payday, bonus, etc. The reality is quite different: financial success comes to those that work hard and smart, plan for it, and then take patient and steady approach.

The book, which was written in the 1920s by an American author, shares stories that are mostly about a wise man Arkad and how he achieved financial wellness.

Arkad’s main rules are simple:

  • Save 10% of your income

  • Spend less than you earn, after you put away that 10%

  • Once you have a nice amount of money saved up, don’t keep it idle but instead make it work for you. i.e., invest it somewhere so it earns money.

  • Invest it wisely, don’t invest in the areas you don’t understand without an expert guiding your way. Make sure you can get the principal back safely.

  • Own the place you live in, i.e., don’t pay rent

  • Insure your life, your earnings where applicable

  • Increase your capacity to earn by acquiring skills and knowledge.

Now you could argue with some of the points here, but the principles in general are very sound. Save part your income, don’t spend lavishly, then start investing and get back principal AND interest, while keeping insurance around and all the time seeking for ways to improve your ability to earn. Can’t go wrong with that.

Some of the other things that caught my eye were around how you go about saving money. When you start to save, don’t go crazy and frugal to the max, just make sure you start with 10% savings, and that’s a good enough start.

However do analyze your spending and see if there are expenses there that can be cut (but again, within reason). Sometimes we forget subscriptions/services that we keep, and perhaps those can be avoided.

And one of my favorite: “Opportunity is a haughty goddess who wastes no time with those who are unprepared.” When the opportunity comes, those that take it benefit, and to take it you have to be ready – you just never know when it will come.

Parkinson’s Law

Human psychology and various inefficiencies that we build into our behaviors are fascinating. Here is one that I have come across recently that resonated on many levels: Parkinson’s Law

“work expands so as to fill the time available for its completion”.

An interesting variation of this law is: the complexity of a solution to a problem increases to fit our initial assumption about how complicated the solution should be. I can recall many times feeling very uneasy and uncomfortable the moment somebody emphasizes the complexity of a task being worked on as opposed to breaking the task down to simplify it. Most likely the anguish is from knowing that such behavior leads to things being made complicated without having it to be that way. High complexity means unnecessary work and wasted time, two things that should always be avoided.

The next time a problem statement comes along, I will keep Parkinson’s Law in mind. Instead of hailing the complexity of a task, we should focus on understanding the problem by breaking it up into small pieces and simplify each part of the solution. If a job sounds complicated, we haven’t thought about it long enough to simplify it and break it up.

Other lessons to be learned from Parkinson’s Law:

  • If a task is perceived to be unimportant, it will take longer to complete. Make sure that the “why” behind a task is understood and emphasized.
  • If you change nothing about the task itself and instead change your attitude and perception on how complicated you deem the task to be, you will increase your chances of not only completing a task but will end up doing it sooner, and in a simpler and efficient fashion.

A start of machine learning journey

Early in September, I started taking a course on learning. Essentially it is a course on how to be a better learner. Learning about learning might sound silly, but it was a great course with many great strategies to employ when trying to master new material or acquire new skills.

As part of the course, we had to pick a project that we will use to apply the techniques we were learning. The concept made a lot of sense. In my experience, the best way to learn a practical skill is to combine the theoretical knowledge with practical work, so the project seemed very appropriate.

My project was to take and finish a course on Machine Learning. I knew close to nothing in this area, and it is a field that is hot in software engineering. ML being new to me, it gave me a chance to program using techniques that are completely unknown and that makes things a bit frustrating but also a lot of fun.

The course I went with was Udacity’s Intro to Machine Learning course. So far the intuition to pick that course is proving to be correct. I finished it ahead of my planned scheduled. It took me just a tad over two months, while mostly studying on weekends and occasional early morning.

The most fun part was applying the skills learned from the course at my current job. We do some video processing tasks and such things have been notoriously tricky to estimate how long they will take to complete. With ML, and more specifically regression analysis, it was a breeze to build a model that gave excellent predictions on processing durations. Some of the predicted times were within seconds of the actual times, most within minutes, which was more than sufficient when you consider the processing could last anywhere from 20 to 40 minutes (with some outliers of course shorter or much longer).

My goal was to apply the techniques in some capacity by February 2017, and being able to do that so much earlier was a big boost and motivator to continue going strong. Actually one of the learning course main preaching points was to use what is being learned right away, even if you don’t feel like you know what you are doing. It just strengthens the knowledge and right away deepens your grasp of the concepts that you are learning.

I am highly recommending udacity’s course for the others that might like to start ML journey themselves. It is not very heavy on theory, although one should use the topics presented to dive into more theory online. The examples and mini projects they present are really great, interesting and informative. If you know a bit of python you are pretty much ready to go. Knowing some of the advanced math conceps helps to understand the course better, but it is not necessary in order to use the techniques.

What’s next? I am happy to share that I got accepted to AI nano degree. It does not start until February 2017, so in the meantime, I am taking another ML intro course, this time Stanford’s Machine Learning course which I debated to take before picking Udacity’s option. Stanford course is great, but presents much more theory and is a bit more “drier”, more pedantic. I am on a week 3 now of the course, going ahead as far as I can before Neural Network weeks. That area might prove to be very complicated so it will be good to have as much cushion as possible for quizzes and learning.

 

That’s it for now. I can’t wait to see where this ML journey will bring me. Hopefully, I will continue to deepen and strengthen my practical skills and start applying it in everyday life with regularity.

Experiment: taking notes while reading

This seems to be a common evolution for non-fiction readers:

  1. A love for reading leads to various fiction books. A thought of reading non-fiction does not enter one’s mind.
  2. Continued love for reading and desire to learn more leads to an occasional non-fiction selection.
  3. Non-fiction starts to dominate the reading list until eventually a fiction book is a rare choice.
  4. The realization that “plowing through” non-fiction in the same fashion as fiction leads to forgetting the content way too easily — some sort of notes / review process is added.
  5. Notes / review process evolves as one gains experience with it.

If you read a lot of non-fiction and haven’t started taking notes, I would highly recommend doing so. It might seem like a daunting task at first, but it is actually not that bad and enhances the overall satisfaction with your reads.

The simplest form of note taking is summarizing the book after you read it. I’ve been doing this for six years and have found it to be very useful. It’s a good way to refresh yourself on what the book was about in case you need to make a recommendation to another reader. Summaries also come in handy when you need information that you know you read about but are not sure which book contains it. Often the summary will remind you which one it was.

I’ve found that doing a summary right after finishing the book is the best way to go about it. Make sure you record it somewhere that you can easily go back to when you need it. Google Docs is good and simple, or you can use something more sophisticated like goodreads.com. I wrote a book site for myself that anyone can create an account on and use: trackmybooks.appspot.com. Goodreads is too noisy / distracting for me for this purpose.

For a couple months now I’ve been running an experiment of taking notes while reading. It is a much more intense and in-depth process than summarizing a book. I’ve used it for three books so far and I am enjoying the process immensely.

What held me back from taking notes while reading was fear that it will prolong the reading time greatly, and make it less enjoyable. However, if you change how you read books and combine it with the constant analysis, review, and questioning of the material it leads to a greater understanding, and greater enjoyment. You really start to “feel” the book instead of passing it through your thoughts. And instead of simply reading the book from start to finish, now I do this:

  • Quickly review the book online either on Amazon or Wikipedia to see what is a point the author is trying to make.
  • Get some quick info on the author and what is the author known for.
  • Look at the table of contents and note the name of each chapter so you familiarize with how the book will flow
  • Now read through each chapter: look at the title, for each paragraph read first and last sentences to see if you get the idea of the paragraph and if it is necessary to dig in more.
  • While doing this, summarize what you are reading in your notes, but in your own words. Ask questions, verify the strong points author tries to make: do you agree or disagree? does the point make sense? what are others saying about it? The actual place where I take notes right now is a simple paper notebook. Not sure how that will hold up and how I will go about digitizing this.

Essentially you are studying the material. I am still a rookie at this and I am sure my note process will change as I go. My notes might still be too passive, still follow the book too much vs being my own voice. Or maybe not, I just need to continue doing this and evaluate how I feel about the process as I go, and adjust.

Some of the interesting links I found when researching how others take notes:

I think the key is to start simple, not too worry too much if you have the right approach, just pick one and evaluate and then adjust as you go. Personally, I will continue to develop the note taking approach and looking forward to seeing where it will take me.

A great Quora question and answer

Resurrecting the habit of writing regularly on this blog by using it as a place to share and document some of the more interesting content I find.

There was a question on Quora recently: “What are some of the best life tips?” and this answer by Dean Yeong is excellent. It contains number of points and I would like to highlight some of my favorite ones below:

#4. Stop complaining – “it changes nothing at all” – so true. I think all of us go through a phase where our first instinct when things don’t go our way is to turn to complaining. Luckily some realize how wasteful such a habit is and get past it. You are better off spending your energy else where.

#7 Detach your emotions with external things – meaning don’t allow others to influence how you feel and how you go about your business. I think part of this includes surrounding yourself with people who are less concerned about controlling / influencing your feelings and instead are there to share their ideas and support you when necessary.

#12 Take tiny actions, celebrate small wins – this one is big for me personally. Often I witness how people are very dismissive of small steps thinking that they are simply too small to make an impact. When we see people accomplish big things we don’t see the paths that got them there and in truth it often starts with a tiny step. For instance, one Stanford professor seems to have dedicated his all career to this idea with of tiny habits as a way to bring a positive change to your life.

#21 Fail hard, fail often – in my world I translate this to “do not be afraid to deploy” 🙂 Honestly, I don’t do this enough in my life, but when I do, the benefits are very visible. Failing hard and often means trying often and if you combine that with learning from failures that means you are just getting better at what you are doing.

Here are some items on the list that I am reluctant to do, or haven’t done as often as I think I should (#21 is already mentioned above):

#11 Relationship is the place to give – only after having children did I start to learn to live life more selflessly and give to others. It’s still a work in progress and outside of my children I tend to be more reserved and not involved.

#14 Do something that scares you – this one is a tough one. I can count on my one hand how many times I did a scary thing in the last 5 years. That’s a troublesome realization. I need to keep this in mind the next time I get that “this is crazy, let’s not do it” or “I don’t know how to do this or if I should do it” feeling.

#18 Start selling – that’s an interesting one. Couple times in my life I actually did do some selling and was pretty good at it. First experience was selling candy in the market when I was 14-16 years old during summers. Made nice amount of money for cool school supplies and other knickknacks that my parents would not buy. Then later in my life selling my stuff on eBay until I sold all of the things I wanted to get rid off. My first job out of college was private software consulting and writing various programs for a patent lawyer. And then I kind of stopped but I do remember enjoying the process immensely. Just getting a kick out of somebody placing an order and me following through with it and giving back great service and great customer support.

Hope you enjoyed the quora post and my thoughts on it. I am very thankful for people who share their ideas and expertise that they have gathered in their lives. Hopefully all of us can find useful information and learn and share it with the rest of the world.

Having options – not always a good thing

It struck me this past weekend how having options  can be a hindrance to getting things done. I was doing something where a window of “free” time was coming up in the next two hours. As I was about to start reading a book, I thought, “well, what if I did some programming instead?” And of course a debate followed in my head which one to do next. “Couple hours, not a lot of time to do programming, maybe I can respond to emails instead, so I don’t have to do it later? But then reading would be good too. Which one should I do?”

I ended up reading, but this made me think how planning ahead helps to avoid mental debates on what to do next. I usually plan my day a night before but had skipped it for that day and voila. Couple hours might not seem much, but if you are a top performer and keep yourself very busy, couple hours are quite precious.

This situation brought back the memories of times when I was a kid and there usually was only one thing to do. It allowed me to buckle down, and do it. Even if the task was boring, you just kind of did it because there was nothing else to do. It is an extreme in an opposite direction, but something that made me remember how a lack of choice got one moving without too much mental effort in deciding what to do next.