Career thoughts

Friday, January 06, 2006

Interesting things to focus on

1. principle of Speed Jam : To create a finished product in 24hrs, however crappy
2. Focusing on Today as the greatest opportunity and gateway to future
3. Remember the Law of Intimidation : Most results in our lives are not achieved mainly because we are intimidated by someone or something. Be the intimidator, don't be the intimadatee.
4. Be Mindful : Focus on only one thing at one time, DO NOT MULTITASK. BE MINDFUL even while climbing stairs
5. Work on cultivating discipline 24/7.

Speed Jam, Mindfulness, Today

Thursday, January 05, 2006

The art of Mindfulness

http://headrush.typepad.com/creating_passionate_users/2005/03/your_brain_on_m.html

DO NOT MULTITASK. IT CAN KILL YOUR BRAIN.

Give yourself hundred percent to the task : that is ultimate conclusion of anything. Give yourself fully to da task and do nothing else.

Be it either talking to someone, listening etc.

Anything else creates unnecessary noise.

So Beware !!!

Technique of speed jam

http://headrush.typepad.com/creating_passionate_users/2005/12/creativity_on_s.html

http://headrush.typepad.com/creating_passionate_users/2005/08/build_something.html

These two articles are awesome. The idea is to focus on finishing something with a short time frame say 24 to 48 hrs, however crappy it may be. Forget about crappiness, just finish it....thats the main goal.

It can be applied to your

1. Work

2. Learning : Learn somehting a build a prototype of something within 48 hrs.

It requires total dedication. The title of the article goes : "Build something cool in 24 hrs". Anything, however crappy it may be , don't worry about it.

Learn something New Jam

Build something new Jam

Write a chapter jam

---------------------

From now on My Life is a speed Jam. That's it. Everything is speed Jam


Tuesday, January 03, 2006

Watts Humphrey Articles : Writing Quality Software

Watts is a great software writer. His articles seem pretty good.

http://www.sei.cmu.edu/news-at-sei/columns/watts_new/2004/3/watts-new-2004-3.htm

One of his articles on time tracking made the point that we spend a lot less time on development than we think.
Interruptions, breaks, ad hoc activitities etc all eat up our time.

Best way to learn about your time is to do time tracking. Record where your time goes...

-------------------------------------------

Writing Quality Software

Good series of articles on writing great quality software. Read Two articles.

1. The Quality Attitude
He says that testing alone will never find all the defects in any piece of code. It is impossible.
He says that the developers have to develop a quality attitude , indepndent of tools/gadgets and testers.

2. A Personal Quality Strategy

There are five quality stages. We have personal control over the first three, for the next two we have to work with others.

Software quality and security are synonymous. So is safety.

The stages:

A. Basic Code Quality

Keep track of your errors and understand what caused them. Do not depend on the compiler to tell you of all the errors. Otherwise your error rate will not improve.

B. Detailed Design Quality

Do not design while coding.
Design the whole code and fucntions etc. Do code reviews.
Produce complete designs and have your teammates review them.

C. High Level Design Quality

Interfaces, interactions and interactions of your program with the other parts of the system.
Performance, security and safety.

Get the high level design specifications done for your module and get them reviewed.

D. Requirements Focused Quality
Understand clearly all the requirements for your software.

E. User Driven quality

Look for elegant creative solutions. Sometimes users themselves cannot specify what they want or they will not provide good ways of doing it.
Look for crazy ideas and creative leaps that may work.


Time Tracking

There doesn't seem to be the kind of time tracking tool I am looking for.

The main thing is maintain a time log : that is the most important thing....

Monday, January 02, 2006

C/C++ optimization tips

http://www.eventhelix.com/RealtimeMantra/Basics/OptimizingCAndCPPCode.htm

Read an interesting article containing some pointers for better performance coding.

1. Structure sizes should be powers of two ( easy to address arrays in those cases ).
2. Switch/case optimizations : Narrow range for switch labels.
3. Minimize local variables to avoid operations on the frame pointer. If everything fits in the register, thats great !
4. Declare local variables in the inner most scope.
5. Reduce number and size of parameters. Use const references to pass bigger structures.
6. Locality of reference for code and data.
7. Inline functions for 2-3 line functions.
8. Prefer int over char/short. Compiler converts it to int anyway.
9. Prefer inititalization over assignment. And prefer lightweight constructors.
10. Use Constructor Initializaition Lists instead of assigning in constructur body.
11. Minimize Virtual Functions



Note that c and c++ push function parameters in reverse ( right to left order ).

Microsoft Compute Server Edition

Two CDs:
1. Microsoft Server edition 2003 Compute Edition
2. Microsft Compute Server Tool Pack

1. Different topologies can be supported
2. MS-MPI : via Winsock interface different interconnect architectures can be supported.
3. Management and Deployment
4. Works with and integrates with Existing Microsft Software like Visual Studio, Active Directory

Microsoft Phone Interview points

I want to apply for two positions : 1. Program Manager 2. SDE

What types of projects have inspired you in the past ?

1. Magnolia - P2P search and user-centric search discovery.
2. BTP Project
3. DoubleTrust
4. Claytronics
5. 3D Graphics Rendering and Animation Package


What are some self-directed missions that may have influenced your career direction?

I have always wanted to make an impact on lives using great software and technology.
School days: selling the first software, software writing.
The thrill of programming and expressing creativity via that medium is very exciting

Did you have a moment of epiphany when you KNEW what you wanted to be when you grew up?

When a person inquired that he wanted to buy my software in 6th grade, I knew this is just cut out for me. I just found a natural attraction towards implementing and designing new stuff on the computer.
* Sold FLIP back in 8th grade : The floppy indexing software
* Success in IIT projects and programming contests at school level

How does Microsoft fit into your vision?

* A big company geared towards providing working solutions to the ability to have a great impact on a lot of people using my skills
* Working with great people : Great people together can build great products and I love that kind of enviroment. It was lot of fun doing that
* Microsoft is very diverse so opportunity to work on different products and technolgies and diversify. It gives me lot of confidence that I can work on some great stuff there.
* Microsoft is also focusing on the webside of the software world, which I personally find very exciting.


What are some things that excite and motivate you?
* Seeing other people use something I created or had a major contribution in
* Working with real good people alongside together
* Creativity aspects: Thinking of new ideas from scratch or ways to improve existing stuff
* Implementing stuff and making the ideas work
* Web applications
* Technical research

What was your best course and your worst course ?
Best course : my BTP project : best project award, Theory of Computation : Looking at computation at a much higher level of abstraction and solving problems at that level, Design of Algorithms

Worst course : Physical Chemistry/Equilibria : Could not understand what he said . CS course: Operating Systems , the way it was taught....

---------------------------------------
What are the different MS groups/products you find interesting ?
* Windows Client : Systems programing It says distributed systems, performance, file systems, clustering. Operating system, browser technologies,
* Servers and Tools : Microsoft Application Server ( the product is a bit old now ), Windows Compute Cluster Server - MS-MPI. Web Services and Distributed Technologies - Indigo; Web services
* MSN : Search/shopping/social networking technologies, Instant messaging, Mappoint
* Information Worker: Access ?, Collaboration, Sharepoint technologies

-----------------------RESUME----------------------
1. Read the HPDC and IPDPS paper to understand what you did.
2. Understand Reverse Hashing
3. Gossip Protocols project

-------------------CODING-------------
* Permutation, Combination
* Dynamic Programming
* Array/String Processing ( reverse words and stuff)

To reverse a string, only go till half the length and swap letters... , do not go all the way....


* Longest subsequence in array



--------------------TODO-------------------
* Get familiar with the resume...
* Get Familiar with MS different groups
* Answer generic expected questions
* Code a few coding examples
* Read the programming interviews exposed book