Thursday, June 30, 2011

Concepts I want to Master


I would like to list here concepts, language specific usage of data structures, algorithms. I believe that to become a Master Craftsman, we need to have deep knowledge of the fundamentals. It is a beauty to arrive at a level where its a choice to see the forest or the tree and interchanging the two effortlessly. My objective is to log here the things I will be learning on my journey.



JavaScript
  • Memoization

Java
  • Concurrency

Python

Data Structures:

Algorithms:

Wednesday, June 29, 2011

Book review: Pragmatic Thinking and Learning

Cover Image For Pragmatic Thinking and Learning
Pragmatic Thinking and Learning: Refactor your wetware
by Andy Hunt 2008
ISBN-10: 1-934356-05-0


Finished Reading on: June 18, 2011

This book aims at a person who would like to excel in his craft. It explains the path one has to take to become a Master Craftsman. It uses Dreyfus Model for defining levels of skill acquisition.

It acknowledges the keys to becoming an expert through harnessing and applying your own experience, understanding context,and harnessing intuition.
In the path to become an expert, “You don’t just “know more” or gain skill. Instead, you experience fundamental differences in how you perceive the world, how you approach problem solving, and the mental models you form and use. How you go about acquiring new skills changes” as observed by Dreyfus Brothers

Novices -> Advanced Beginners ->Competent ->Proficient ->Expert
Novices need rules, should be given clear instructions to follow and provide problems as context free so that they don’t have to worry about the domain.

Advanced Beginners have difficulty troubleshooting. They don’t want the big picture but fast answers.

Competent practitioners can now develop conceptual models of the problem domain and work with those models effectively. They can troubleshoots problems on their own. They can begin to seek out and apply advice from experts and use it effectively. Their work is based more on
deliberate planning and past experience. They can mentor the novices and don’t annoy
the experts overly much.
The practitioners are still not ready to apply agile methods since they lack the ability for reflection and self correction.



Proficient practitioners need the big picture. Proficient practitioners make a major
breakthrough on the Dreyfus model: they can correct previous poor task performance.
They can reflect on how they’ve done and revise their approach to perform better the next time.
Up until this stage, that sort of self-improvement is simply not available. They can learn from experience of others. Along with the capacity to learn from others comes the ability to
understand and apply maxims, which are proverbial, fundamental truths that can be applied to the situation at hand. Maxims are not recipes; they have to be applied within a certain context.
They can apply effectively the software patterns at this level.

Expert source of information and knowledge in the field. Constantly looking for better methods and ways of doing things. Experts work from intuition, not from reason. Although experts can be amazingly intuitive—to the point that it looks like magic to the rest of us—they may be completely inarticulate as to how they arrived at a conclusion. They genuinely don’t know; it just “felt right.”
The expert knows the difference between irrelevant details and the very important details and is very good at targeted, focused pattern matching.

The book warns against second-order incompetence that is, the condition of being unskilled and unaware of it. Better self assessment comes along with knowledge, hence once you truly become an expert, you become painfully aware of just
how little you really know. The sad fact of skill distribution is that many people remain all their lives as advanced beginner “performing the tasks they need and learning new tasks as the need arises but never acquiring a more broad-based, conceptual understanding of the task environment.”

Deliberate practice for 10 years into learning a craft will make you a Master craftsman in your field. Deliberate practice, according to noted cognitive scientist Dr. K. Anderson
Ericsson, requires four conditions:
• You need a well-defined task.
• The task needs to be appropriately difficult—challenging but doable.
• The environment needs to supply informative feedback that you can act on.
• It should also provide opportunities for repetition and correction of errors.

Capture your ideas: Every body has great ideas, capturing those ideas constantly on paper or electronically, reviewing them and acting upon them is the key.

Human Brain:
Linear mode and Rich mode.

Characteristics of L-mode Processing
L-mode processing is comfortable, familiar, geek turf. L-mode gives you these abilities:
Verbal:Using words to name, describe, and define
Analytic: Figuring things out step-by-step and part-by-part
Symbolic: Using a symbol to stand for something
Abstract: Taking out a small bit of information and using it to represent the whole thing
Temporal: Keeping track of time and sequencing one thing after another
Rational: Drawing conclusions based on reason and facts
Digital: Using numbers as in counting
Logical: Drawing conclusions based on logic (theorems, well-stated arguments)
Linear: Thinking in terms of linked ideas, one thought directly following another, often leading to a convergent conclusion

Characteristics of R-mode Processing

This side of the house is nonverbal. It can retrieve language but
can’t create it. It favors learning by synthesis: putting things
together to form wholes. It’s very concrete, in the sense of relating
to things just as they are, in the present moment. It uses analogies
to evaluate relationships between things. It likes a good story and
doesn’t bother with timekeeping. It’s not bound by rationality in
that it does not require a basis of reason or known facts in order to
process input—it’s perfectly willing to suspend judgment.

The R-mode is decidedly holistic and wants to see the whole thing
at once, perceiving the overall patterns and structures. It works
spatially and likes to see where things are in relation to other things
and how parts go together to form a whole. Most important, it’s
intuitive, making leaps of insight, often based on incomplete patterns,
hunches, feelings, or visual images.

Intuition—the hallmark of the expert—is over here.

R-mode Sees Forest; L-mode Sees Trees

Why emphasize R-mode for software developers?

We want to use R-mode more than we have because the R-mode provides intuition, and that’s something we desperately need in order to become experts. We cannot be expert without it.  The Dreyfus model emphasizes the expert’s reliance on tacit knowledge; that’s over here in the R-mode as well. Experts rely on seeing and discriminating patterns; pattern matching is here too.
R-mode’s analogic and holistic thinking styles are very valuable to software architecture and design—that’s the stuff that good designs are made of.
And you might already be reaching for synthetic learning more often than you think. When faced with a difficult design problem, or an elusive bug, good programmers generally have an urge to reach for code and build something that they can learn from.

That’s R-mode synthesis, as opposed to the L-mode analysis. That’s why we like prototypes and independent unit tests. These give us the opportunity to learn by synthesis—by building.

Pair programming
In pair programming, while the driver is locked in verbal mode at a particular level of detail, the navigator is free to engage more nonverbal centers. It’s a way of using R-mode and L-mode together at the same time, using two people.The navigator is free to see these larger relationships and the larger picture. And most of the time, you cannot see these relationships if you’re driving. So if you aren’t pair programming, you definitely need to stop every so often and step away from the keyboard.

White board discussions
When you talk to another person or work hand in hand with someone at a whiteboard or a paper, your thinking tends to get more abstract. You are more likely to discover new abstract patterns, which is what all of us programmers are trying to achieve.

Engage your R-mode:
Add sensory experience to engage more of your brain.
Your brain is always hungry for this kind of additional, novel stimulus. It’s built to constantly adapt to a changing environment. So, change your environment regularly, and feed your brain. Any sort of extrasensory involvement is probably helpful, whether it’s a long walk though crunchy leaves with your dog, opening your window and listening to the day’s weather (and actually smelling some fresh air!), or just walking to the break room or down to the gym (the air there is less fresh, but exercise is also very helpful for better brain function).


Learn Deliberately:
At our current state of technology and culture, your ability to learn may be your most important element of success. It’s what separates getting ahead from just getting by. It’s the constant learning that counts.

SMART: Specific, Measurable, Achievable, Relevant, and Time-boxed

Specific: Goals have to be concrete e.g. I want to weigh 80Kgs, have 20% fat, 40cm arms, 110cm chest and wear 32 inch waist trousers

Measurable:  It’s hard to measure something general and abstract but much easier to measure something concrete and specific—using actual numbers. If you think you can’t measure your objective, then it’s probably not specific enough. But be sure to take small bites and measure steady, incremental progress.
e.g. Measure myself every week

Achievable: A goal or objective that you cannot attain is not a target; it’s just a
maddening, soul-sucking frustration. Some things are just not possible for most people—competing at an Olympic level, for instance. Others are possible, but at a disproportionate commitment of time and resources (say, running in a marathon).
Make each next objective attainable from where you are now.


Relevant: Does it really matter to you? Are you passionate about it? Is it under your control? If not, then it isn’t relevant. It needs to matter and be something that you have control over.
e.g. The above attributes are desirable.

Time-boxed: Giving your self deadline is very important. This way it will not hide under piles of other things to do and daily exigencies. Give your self many attainable small milestones. It gives you motivation and satisfaction on attaining those small goals.

e.g. Every month: loose 2kgs, 1% fat reduction, +1cm arms, +1cm chest, -1cm waist


Pragmatic Investment Plan (PIP)

Have a Concrete Plan use SMART technique in creating a specific plan. It can be short term e.g. Today: learn clojure in javascript or long term i.e. 5 years: be a software architect and Master craftsman

Diversify: When choosing where to invest in, you have to conscious effort to diversify your attention. You want a good mix of languages and environments, techniques, industries, and nontechnical areas (management, public speaking, anthropology, music, art, whatever).

One major difference between knowledge investments and financial investments is
that all knowledge investments have some value. Even if you never use a particular
technology on the job, it will impact the way you think and solve problems.

Active, Not Passive, Investment: Evaluate your goals and judge how it’s going. You may have to revise your objectives or change your goals in the light of new developments.

Invest Regularly: You need to make a commitment to invest a minimum amount of time on a regular basis. Create a ritual, if needed. Escape to your home office in the attic or down to the coffee shop that has free wi-fi. Not all your sessions will be equally productive, but by scheduling them regularly, you will win out in the long run. If instead you wait until you have time or wait for the muse, it will never happen.


Enhanced Learning Techniques

Read Deliberately with SQ3R
• Survey: Scan the table of contents and chapter summaries for an overview.
• Question: Note any questions you have.
• Read: Read in its entirety.
• Recite: Summarize, take notes, and put in your own words.
• Review: Reread, expand notes, and discuss with colleagues.


Visualize Insight with Mind Maps
1. Start with a largish piece of unlined paper.
2. Write the subject title in the center of the page, and draw an
enclosing circle around it.
3. For the major subject subheadings, draw lines out from this
circle, and add a title to each.
4. Recurse for additional hierarchical nodes.
5. For other individual facts or ideas, draw lines out from the
appropriate heading and label them as well.



Learning by teaching: A straight forward and effective way to learn something is to teach it. Teaching also means going to your co worker and explaining your problem in a descriptive way. Many times going to the white board and drawing the connections can lead to the solution popping in your head. It is a great idea to explain an idea to your spouse or to some body who does not share your domain.



Friday, June 24, 2011

Books I have been reading lately

  1. Good Boss, Bad Boss by Robert I. Sutton
  2. Pragmatic Thinking and Learning by Andy Hunt
  3. Coders at Work: Reflections on the Craft of Programming by Peter Seibel
  4. The Passionate Programmer by Chad Fowler
  5. Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover
  6.  Rework: A better, easier way to succeed in business by Jason Fried and David Heinemeier Hansson
  7. Joel on Software by Joel 
  8. Being Geek: The Software Developer's Career Handbook by Michael Lopp
  9. Pomodoro Technique: The Easy Way to do more in less time by Staffan Nöteberg
  10. Land the Tech job you love by Andy Lester
  11. 97 Things Every Programmer Should Know,  Edited by Kevlin Henney
  12. Even Faster Web Sites by Steve Sauders



cover

Good Boss, Bad Boss

Bob Sutton's latest book is a great read, and is filled with vivid examples of leaders who do things right, or wrong. Sutton is a talented story teller, and brings bosses to life in his descriptions of real life executives and managers, and also draws on his deep knowledge of psychology to explain, in clear terms, why the actions of bosses are so impactful, for better or for worse, on the people who work for them. This book does what so few management and leadership books are able to- it balances "showing" through real world stories with "telling" through established theories of social psychology. Anyone who has a boss, or is a boss, will benefit from reading this book.

Books I want to read

JavaScript Mastery:
  1. JavaScript: The Good Parts 
  2. Eloquent JavaScript: A Modern Introduction to Programming
Software Development:
  1. Clean Code by Robert C. Martin
  2. Beautiful Code
  3. Head First Design Patterns
  4. The Art of Computer Programming: Donald E. Knuth

Inspirational:
  1. The flight of the creative class by Florida, Richard L.
  2. Leonardo's Laptop by Ben Schneiderman
  3. Thinking Strategically: The Competitive Edge in Business, Politics, and Everyday Life by Avinash et al.
  4. weird ideas that work by Sutton, Robert I.



Honing Programming Skills:
  1. Data Crunching: solve everyday problems using Java, Python, and more
Skills:
  1. Secrets of Mental Math: The Mathemagician's Guide to Lightning Calculation and Amazing Math Tricks by Michael Shermer
  2. Presentation Zen by Guy Kawasaki
Interviews and Resumes: