Sunday, August 11, 2013

What I read and learned in July 2013

Given that I have been doing more important tasks, I am satisfied with this month's progress. I could not study the patterns book but utilized the commuting time and went through many articles.

Chapters I read from "Patterns of Enterprise Application Architecture":

Chapter 4. Web Presentation


Articles on various topics of Software Engineering:

+ The Clean Architecture

+ Don Knuth and the Art of Computer Programming: The Interview

+ 3 Easy Ways To Market Yourself as a Software Developer
+ Martin Fowler's Bliki on ContinuousDelivery
+ API_Copyright

* Difference between MVC and MVVM architectural patterns: I found the following articles good:
- Overview of the ModelView – ViewModel (MVVM) pattern and data-binding
- MVVM vs MVP vs MVC: The differences explained
- Channel 9 Video MVC,MVP and MVVM: A Comparison of Architectural Patterns

* Difference between Data Science and Business Intelligence: It seemed to me that most of the articles from the search results omitted the fundamental difference. The following article puts it straight: "BI pros apply their skills to data in order to provide answers to pre-existing questions. Data Scientists look at data as a blank slate, searching for answers to questions nobody has even bothered to ask before."
+ Can Business Intelligence Pros “Learn” Data Science?


Miscellaneous:

+ Career Advice: At age 25, would you pursue a good paying corporate job that makes you unhappy or a hobby that makes you happy but has no guarantee to pay the bills?
Those of us who are determined to make our own future will definitely get food for thought from this post.

+ Life: How do people react to moving from a low to a high standard of living?
I was amazed after reading the top-voted answer. The following realization is so true!
"My Grandad's greatest worry is to see all that he built break up. My  Dad's  greatest worry is not having enough savings for his family. My  greatest worry is being  stuck in a routine lifestyle, with the same old  people in the same old job."

+ Sessions of goto conference on Professional Productivity:
I liked most sessions of Linda Rising and Scott Hanselman. They are eloquent, humorous and able to get across the point easily.

- Should I Quit My Job?


LinkedIn Influencer Posts I liked:

+ Early Employees: Bob Poniatowski & TiVo
Although this post is about the success story of start-up company TiVo, for me, it was reminder of a few important things - team bonding/camaraderie, focusing first on the most important thing, professional networks.

+ Planning to make the most of guessing in product development
I found Steven Sinofsky's write-up thought-provoking and insightful. This post's topic is what kind of plan we should prepare to get started with and how we should adapt it later. First he talked about influence of particular methodologies, namely Waterfall and Agile, on product development plan, their pros and cons and how we can exploit the best of both. Then he moved on to when we should adapt the plan, how we should address the feedback on checkpoints/after an iteration. "Activity is not always progress. Change is not always improvement." --- is the quote to remember for later phase.

+ The Best Way You Can Really Affect Change
Liked only this - "...we don’t build statues to worship the exceptional life, we build them to remind ourselves what is possible in our own."

+ The Conscious Lifestyle: A Leader Must Know What to Do (Part 2)
A collection of effective leadership advices that we should always keep in mind.

+ How to Make Yourself Indispensable
Valuable advices:
1. Keep expanding your skills every year
2. Solve problems that never go away.
3. Be a starter or a finisher – don’t get stuck in the middle.
4. Set the tempo.
5. Give more than you get.

+ Best Advice: Learn to Listen to Your Team
"... the most important thing to remember is that on the most fundamental level, leadership is about service to others.... I was struck that Alan’s counsel was one of utmost simplicity: Serve, listen, humbly ask for advice, and improve."

+ 25 Quotes to Inspire You to Become a Better Leader
Great quotes to read again and again!

+ Why Weirdos Outperform Normals
Although it talks about traits of weirdos, these are essentially successful people's characteristics. Weirdos:
- see the world as a blank slate for them to paint their masterpiece.
- don’t see anything as impossible.
- think differently and act even more differently. Normals try to fit in.
- aren’t driven by money.
- don’t care what others think.

+ How to Turn Your Weaknesses Into Strengths
Interesting! A weakness can be viewed as a strength from a different perspective such as
Disorganized ---> Creative
Inflexible ---> Organized
Stubborn ---> Dedicated

+ My Mother's Daughter
A poignant narrative of an extremely hard-working woman's experience about how her mother instilled values and work ethics in her and how it felt when she lost her dear mother.

+ When a Valuable Lesson at Work Became an Invaluable Lesson in Life
Family time is an extremely important thing - a fact we often overlook in the name of career and work. This article has reinforced my consciousness that I should not take for granted the recourse, confidence and endless joy I receive from my family.

+ Your Career Success Hinges on One Word -- Do You Know It?
This article got me into thinking of how I should describe myself if I were to do it in less than 4 words. The following questions are important:
What are you best at? What are you the go-to person for? When colleagues describe you to someone else, do they say you’re the queen (or king) of X? In what areas of your field do you have critical knowledge others lack?

+ 11 Lessons for Accelerating Your Career
We know almost all of the lessons described here. However, these should be brought into our consciousness frequently and acted upon regularly:
1) Develop a network suitable for my goal, career.
2) Create a career development plan with well-defined goals and tactical steps. Review each year.
3) Do your job well.
4) Go long on industry knowledge. Increase both depth and breadth of knowledge.
5) Chase opportunities and take intelligent risk.
6) Participate in professional and leadership development programs.
7) Spend at least 10-15% of your time working on projects outside the scope of your job title or immediate team.
8) Identify one or more internal mentors and sponsors in whom you believe and trust.
9) Be ambitious but humble: Make sponsors, mentors and senior managers aware of your long-term ambition.
10) Identify successful leaders whom you admire and model their behavior.
11) Have short-term and long-term career goals. 

Thursday, July 04, 2013

What I read and learned in June 2013

I have done better in June than in May.

I finished learning the refactoring techniques from the famous book "Refactoring - Improving the Design of Existing Code". I was amused to find that I had already applied at least half of those techniques in the projects I worked. But the difference was that I did not write any test code. From now on, I shall first write test code, then proceed to refactor.

I have started reading "Patterns of Enterprise Application Architecture" by Martin Fowler. Regarding articles, I have gone through around 50 articles. Almost all of them are LinkedIn Influencer Posts. I enjoyed only a few. Now here goes the list!

Refactoring Techniques: From the famous book "Refactoring - Improving the Design of Existing Code". I really enjoyed this.

- Introduce Parameter Object
- Remove Setting Method
- Hide Method
- Replace Constructor with Factory Method
- Encapsulate Downcast
- Replace Error Code with Exception
- Replace Exception with Test
- Pull Up Field
- Pull Up Method
- Pull Up Constructor Body
- Push Down Method
- Push Down Field
- Extract Subclass
- Extract Superclass
- Extract Interface
- Collapse Hierarchy
- Form Template Method
- Replace Inheritance with Delegation
- Replace Delegation with Inheritance
* Big Refactorings
* Refactoring, Reuse, and Reality
* Refactoring Tools
* Putting It All Together

Chapters I read from "Patterns of Enterprise Application Architecture":
- Chapter 1: Layering
- Chapter 2: Organizing Domain Logic
- Chapter 3: Mapping to Relational Databases

Articles I Enjoyed:

- Careful! These 25 Quotes Might Inspire You
I am a lover of inspirational quotes :-)

Class of 2013: Here Are the 3 Secrets of Highly Successful Graduates
The slideshow mentioned in the article conveys some thought-provoking messages. "Uncertainty about your future, it won't ever go away."

- Is Your Job Driving You Nuts?
Liked the following perplexing contradictions that the article started with:
Be a team player but focus on your job.
Take risks but don´t fail.
Think out of the box but follow procedure.
Tell me the truth but don´t bring me problems.
Value employees but fire average performers
Help customers but spend less time with them.
Work more hours but mind your home life

Other Articles I Went Through:

- My Best Mistake: Not Telling My Boss He Stank
- My Best Mistake: Fired In Less Than 60 Minutes
- How to Make Employees Care? Show How Your Company Cares
- What I Schedule, What I Don't Schedule
- Always Late? 7 Tips To Arrive On Time
- How To Respond To Criticism (Part 1: Verbal Aikido)
- Sharing Some Learning – Observations from D11
- 5 Career Lessons I Learned in the Amazon
- 40 Years, 25 Lessons
- Getting Things Done > Grade Point Average
- Watching a Team Come Together
- I Can't Say No to The 'Yes Man'
- Looking To Advance? Don’t Say This In An Interview
- The Secret of Great Work: Play
- Make Workplaces More Awe-some
- Why You Should Ask For Help – and Offer It
- 3 Ways Social Media Can Help You Land a Job (And Keep It)
- Practical Wisdom: The Right Way to Do the Right Thing
- What I Schedule, What I Don't Schedule
- 5 Mentor Archetypes I’ve Met – And How to Spot Them
- The Difference Between Managers and Leaders
- Want Rock Star Talent in Your Company? Look for These 5 Key Elements
- The Marshmallow Test: Mastering Self-Control for Success
- 7 Must-Have (Free) Mobile Apps to do Your Job Better
- 8 Things Productive People Do During the Workday
- Stop Using These 16 Terms to Describe Yourself
- 10 Things To Do Every Workday
- The Five Blogs I Couldn't Live Without
- Company Culture: Why Little Things are Big
- The Secret to Putting Together an Insanely Successful Team
- Every Leader's Job: Discover Tomorrow Today
- Is it Ever Worth Pulling an All-Nighter?
- My 7 Steps to Getting More Done
- I Can't Code, and You Can't Sell Crap
- If You Don’t Ask, You Don’t Get
- The Secret to Communicating More Effectively: Metaprogram #1
- Want to Influence Someone? Find Out If They Have an Internal or External Frame of Reference
- Metaprogram #3: Who Comes First – You, or Others?
- Why we need Google Glass
- Three Reasons Every Leader Needs a Blog
- To The Teacher Who Inspired Me
- The Gift My Mother Gave Me
- Is America In Permanent Decline?
- Class of 2013: The Graduation Speech I Didn’t Give
- My Best Mistake: It's Not Enough to Be "Right"
- Why Employees Shouldn’t Have Hours
- 3 Ways to Avoid Decision Quicksand



Tuesday, June 04, 2013

What I read and learned in May 2013

I have not been consistent in this particular practice, I admit. I could do last month. Here it goes!

Refactoring techniques I read in the book Refactoring - Improving the Design of Existing Code:

- Replace conditional with polymorphism
- Introduce Null object
- Introduce assertion
- Rename method
- Add parameter
- Remove parameter
- Separate query from modifier
- Parameterize method
-Replace parameter with explicit methods
- Preserve whole object
- Replace parameter with method


Articles I enjoyed:
- 10 Leadership Nuggets from Mayor Ed Koch
"If you agree with me on 9 out of 12 issues, vote for me. If you agree with me on 12 out of 12 issues, see a psychiatrist."

- The Conscious Lifestyle: A Leader Must Look and Listen and Know How to Resolve Conflicts (Part 2)
"Groups that are doing well competitively need greater challenges. Their motivation is to keep proving themselves."


- The Push and Pull -- Possibility vs. Necessity: Metaprogram #6
I found it interesting because I could relate the topic - distinction between "motivated by necessity"  and "motivated by possibility" - to some people I know.

- Where I Work: Surrounded By People (and Swimming in Tea)
"... there is no real difference between work and play – it’s all living. So your workspace can simply be wherever you are, whatever you are doing."

- If You Want New Ideas: Hit the Road
"... come home with new perspectives on old problems." Aptly points to the importance of looking around and learning from others.

- When stopping is the best way to go: the 3 step personal off-site
"Take a moment or two (or three) to assess the situation in a systematic and structured way to get a real picture of what needs to happen to get the best result. ... ... . We are driven to act, but sometimes the best course of action is to stop for a moment or two."

- Failure Is Not The Worst Outcome, Mediocrity Is
"Failure lets you move on, mediocrity stalls you and keeps you from reaching your potential."
"Pursue something so important that even if you fail, the world is better off with you having tried."

- How to Optimize Every Decision in Your Life and Accomplish Nothing
"... done is better than perfect. It's more important to keep moving forward with a good decision than to slowly optimize for the best decision every time."

- 5 Questions Great Job Candidates Ask
4 out of 5 interesting questions that gives a good indication of company culture:
- What do you expect me to accomplish in the first 60 to 90 days?
- What are the common attributes of your top performers?
- What are a few things that really drive results for the company?
- What do employees do in their spare time?


- The Power of No + Structured Time in a Large Company
Some good advices on time management.

- On Time Management
Bolstered the principles of time management I apply each and every day!

- The Disciplined Pursuit of Less
I liked the diagram very much. My highest point of contribution is that tiny area where my passion, my talent and market converge. Worth keeping in mind always.


Other articles I went through:
- What Does It Take to Convince Someone? Metaprogram #5
- 5 Career Game Changers To Win Relevancy and Rewards
- Facebook Graph Search: First impressions
- The Conscious Lifestyle: A Leader Bonds Emotionally
- Bangladesh is promising big things from a growing small software industry
- Five of Steve Jobs's Biggest Mistakes
- Where I Work: The Office as an Extension of Myself
- Where I Work: Three Decades of Deals at One Desk
- Where I Work: A Fishbowl Into the Newsroom
- Why the College Campus Experience Still Matters
- The Conscious Lifestyle: A Leader Must Be Aware
- How two scientists are using the New York Times archives to predict the future
- The Conscious Lifestyle: A Leader Must Be Aware (Part 2)
- Want to Get Through to Others? Listen Deeply, and Adjust Your Approach
- Bottom 10 Software Engineering Challenges
- How to Make Love (for your subject) Last
- When There Is Always Something Better To Do
- 10 'Due Diligence' Tests: Ensuring you get the Right Job
- The Secret of Love (Spoiler Alert)
- 12 Steps to Make Exercise a Lasting Part of Your Life
- If You Don't Design Your Career, Someone Else Will

Saturday, October 20, 2012

What I learned in September 2012

Plan for September failed. I had no other option. I have been working more than 12 hours a day on average including weekend. No wonder the plan went awry.

Working 12+ hours leaves little for breathing time when you consider 8 hours for sleep and 3 hours  for commuting. While commuting, I could not stick to the plan as much as I wished because of fatigue.

No plan for October. I am still doing over-time without compensation. I must take rest when this streak of over-time and weekend work come to an end.

Notwithstanding, I read the following articles:

# Programming Achievements: How to Level Up as a Developer [jasonrudolph.com]

# I went through a few blog posts of Matt Welsh. I enjoyed most of them, especially the one on code review.
Programming != Computer Science
Software is not science
Research without walls
Making universities obsolete
My love affair with code reviews
Google's Hybrid Approach to Research
In Defense of the Scientific Paper

# I read an article on procrastination:
BBC News - Viewpoint: Why do we procrastinate so much?

Two suggestions were made in the article. However, I have been following another way to avoid procrastination - keeping a todo list. It feels great to remove an item. I am using Remember The Milk and I love hitting Complete button :-)

# Another article on personal improvement:
Look at yourself objectively (Aaron Swartz's Raw Thought)

# A few other articles/blog posts that I actually did not enjoy:


# I often got confused between software reverse engineering and re-engineering. I brushed up the difference. I found the wiki page useful.

# I wanted to know where exactly the line between software architecture and software design is drawn. I read several StackOverflow posts on this topic and got a superficial idea.

# Came to know what Google Glass is about.

# Software Artifact.

History of Linux

Friday, September 07, 2012

What I learned in August 2012?

I think I did a poor job in time management last month to learn/practice new things. As usual, I have performed root cause analysis. The failure lies in the absence of a plan in the first place - no yardstick to measure my productivity with.

However, there is no harm in outlining the topics of last month. Then I shall try to chalk out my plan for this month.

TopCoder competitions in software development:
I have always wanted to expand my skill set in the software development arena. TopCoder is a nice place for this. I have got familiar with different types of competitions that span across the skills of a solution architect, a software engineer, a quality assurance engineer. At first I was confused about which competition I should start with. After much thought, I would better start with component development, then proceed with assembly, test suite, reporting. An experienced engineer should have non-trivial QA knowledge, at least the way it should be conducted. So I shall then move on to competitions that focus on QA - test scenario, bug race, bug hunt. I shall then try the competitions covering highest abstractions of software, moving upwards - component design, architecture, specification, conceptualization. These cover the SDLC pretty well!

Some utility tools:
I have started using some utility tools like:

# Dropbox : file-sharing service. Very convenient.

# Delicious : social bookmarking site. I have created an account, saved all the links I frequently use at office and home.

# StumbleUpon: created an account. Hope to stumble when I have free time.

# digg : social news aggregator. I do not feel its need right now. May be sometime later.

# SlashDot : tech news aggregator. I have joined!

# Pinboard : social bookmarking site. I am using delicious now. May be later.

# Instapaper : "Read Later" bookmarking. Liked it and created an account.

# Todoist : I have started doing time management with this great simple app.

Effective C++: (book)
I went through 2 items and participated in "Knowledge sharing session" conducted within the team immediately after lunch.

Plan for September 2012:

I would like to lower the bar a bit this month. Because if I can achieve the next goal, then I shall get encouraged to move higher.

First thing first. I am excluding weekends because I have other plans.

On a working day, how much time is usually available after returning home from workplace? 3 hours at most. At present I am busy with something else that consumes most of the time. I shall squeeze half an hour. I commute regularly and spend around 2 to 3 hours in the office transport. No doubt, 2 to 3 hours a day is non-trivial.

The sum is 2.5 to 3.5 hours on a working day. We have 4 weeks. 4 * 5 = 20 working days. 2.5 to 3.5 hours each working day amount to 50 to 70 hours a month. (one week paid job with overtime :-P )

Let's do the easy part first - time spent in traffic jam on my return to home in the evening. It is almost dark then. So I cannot read book. I can only use internet on my mobile. I can read blogs, articles and the like. I shall save the links and ponder. Target - one article a day.

Half an hour after returning home: I downloaded Stanford Programming Paradigm lecture videos long ago but did not watch. I shall brush up and learn programming paradigms this month. Target - 3 lectures a week. 3 * 4 = 12 lectures in September.

I strongly feel that a software engineer should be expert (deep understanding, beyond know-how) of at least one programming language. My choice is C++. I want to learn all the effective ways Scott Meyers has told us! I shall study one item a working day. So I shall go through 20 items this month.

Summary:
20 items from the book Effective C++ by Scott Meyers
12 lectures on Programming Paradigms from Stanford
20 interesting articles

Wish me luck!

Wednesday, August 22, 2012

Tracking Time at Office

Before being a team lead, I used to work on a single task, in addition to the usual office chores. Now things have changed a lot. I find it hard to keep track of time during office hours. At the end of day, I wonder how much time I actually spent on my assigned task, how much time I worked with other teammates. I felt the need of a time tracking software.

In my previous software firm, Structured Data Systems Ltd. - an offshore branch of AfriGIS, South Africa, employees were encouraged to track time by using a software named Klok. A free version is available. I have started using it.

I intend to try out other related softwares later.

Here is the template I am using now:

Office chores
  > Check office mail
  > Daily scrum meeting
  > General office meeting : occurs occasionally
  > Lunch
  > Refreshment : 2 times a day - at around 11 am and 5 pm.
  > Table Tennis : we play TT at office!
 
Team work
  > Check client issues at JIRA and update TRAC
  > Check teammates' yesterday's work at TRAC
  > Today's task assignment
  > Retrospective meeting: weekly event
  > Work with teammates: I frequently do this. Tracking time for every teammate will enable me to find a trend about with whom or on what task I do pair-programming for a given period of time.
  > Knowledge sharing session: I greatly encourage to do this immediately after lunch when everyone is relaxed. I am planning to practice this more vigorously.
  > Meeting with Product Development Manager (PDM): occurs everyday intermittently.

Wednesday, August 08, 2012

Checklist Before You Join a New Company

Sometimes I browse the job sites to find out companies for better opportunity. When a job circular seems good, many questions pop up in my mind. Often, I can manage someone familiar working there and I get to know about that particular company.

I think it is a good idea to have a checklist for this. Here it goes!

PROJECT:

1) How many projects are currently going on?

2) What is the average age of the projects?

3) Which technologies does the company work with?

4) How important is the project (for which recruitment is going on) to the company?

5) What are the application domains of the ongoing projects?

6) What is the average experience of engineers working there? I mean years of experience for most of the engineers.

WORK CULTURE:

1) How do you think the company provides a good learning opportunity for an engineer?

2) Do you feel sportive at office? or it feels like a conventional office (everyone working at his desk, no adda, few brainstorming among colleagues)?

3) How many hours do you "actually" need to work a day, on average? I mean, productive hour.

4) How frequent is overtime?

5) How frequent is working on weekend?

6) Do you feel that your job is secure?

7) How friendly is the relationship among the engineers?

8) How cooperative is the relationship between engineers and management?

9) What do you think a unique quality of the company that sets it apart from the other companies in the market?

10) Do you follow any software development process? If yes, what is it?

REMUNERATION:

1) What is the salary range for a fresher?

2) How many times in a year do your company give salary increment?

3) What is the average percentage of increment?

4) Is project bonus a regular phenomenon?

5) What are the other benefits?