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


Sunday, December 25, 2005

Good and Bad Procrastination

http://paulgraham.com/procrastination.html

This article continues on the same theme as Brian Tracy ( Eat the frog ) and "Don't check your email in the morning"
It emphasizes that you must work on the most important problems you could work on : Think what you are doing right now, would it be mentioned in your obituary ?? Do not pass away time working on small errands and short term tasks. Interruption is very deadly and can greatly interrupt the flow for any significant task or project

People fear two things when working on bigger projects:
1. What if this doesn't work out ? It will be such a waste of time
2. There is no reward in the short term
Paul contends that this is almost always not the case. Working on big projects always lead to intersting directions and work.

You also have to be interested in the big problem. He emphasizes the "delight" factor for working on such a project. I also think discipline is an equally important component for doing anything long-lasting.

Three important questions we should ask ourselves are:
1. What are the most important problems in your field?
2. Are you working on one of them?
3. Why not?

Do not use errands as excuses to put off big and great work. Always work on the toughest and most difficult tasks, not the flimsy ones.


Another important point : To do big tasks you need a BIG chunk of time and the right mood. Value and create BIG chunk of times for yourself, don't fritter away the time ....

Saturday, December 24, 2005

Things I need to mainly focus on :

Tasks closest to the revenue line:

1. Finish my Phd. Work on Magnolia and PhD related stuff

2. Work with Madan on the web project

3. Learning time : Where I spend time learning about new stuff:
C++ , Coding, Code complete , Software Engineering. Books: Common C++ knowledge, Code Complete
Algorithms : Sedgewick
Networking : Computer Systems book , Kurose and Ross
Do questions found online

4. Javascript / Perl-DBI to create cool websites.


Reading the book "Never check your email in the morning"

I have realized one thing : I read too many books on different topics and that is just too damn confusing in the end.
I need to just pick one book and apply it to death. Only pick up another book until you are completely satisfied with all the gain you could get out of that book. Refer and read to the book as if your life depends on it.

This book I think will greatly help my work life. It focuses on 9 different competencies. The two competencies I have read till now is:
1. Focusing on the important tasks
2. Creating more time for these tasks

The main important points which I remember to apply right now are:
Competency 4

1. Work closest to the revenue line. Do not work on the unimportant 100s of differnet tasks. Focus on the dashes ( Morse code analogy) not on the dots. That is where the maximum value comes from in life. Read this section often
Ask yourself what is the most difficult task I have to do ? Focus on that. Don't shy away from these tasks.


2. Do not multitask. Focus on only one task at a time and help yourself both quantitatively and qualitatively

3. Stretch your time by Planning. Figure out what one thing you will be relieved to achive on a single day, if things went haywire. Just ONE, not two or three. And focus on doing that task. Figure it out the night before, not on the day. Indecision is the greatest time killer and creator of confusion.
Plan and find out your most critical tasks.

Also find your concentration threshold and identify what can you accomplish for that one slot. Focus on accomplishment which can also be reported later on to the powers that be,
Don't just work on a project, identify what you are accompishing in terms of milestones ( One hour milestones )

Competency 5

1. Stay away from email.
2. Create a structure for your day.

Don't remember others.





Focus on Discipline

Discipline is a necessary quality required for achieving anything long term in life. Without that all other qualities won't last and you won't be able to acquire newer habits/qualities too.

Focus on just one habit at a time and keep on working on it until you acquire it to a satisfiable degree. Do not confuse your mind by reading too much stuff and trying to grow up in many different areas at once.

I have to focus in adding discipline to my life: Focusing only on the critical tasks and adding structure to my life.

What is the discipline I am adding to my life:

1. Focus only on the tasks which are closest to the revenue line. Focus on the difficult and the most important tasks
2. Do not check email or unnecessarily browse the web. Stay away from the web
3. Focus on only one task at a time. More than one confuses the mind.



Wednesday, December 21, 2005

Bondalpati interview questions

Personality questions

PersonalityIt is best to read some website or a book for questions like these.
1. Tell me the courses you liked and why did you like them.
2. Give an instance in your life in which you were faced with a problem and you tackled it successfully.
3. What is your ideal working environment.
4. Why do you think you are smart.
5. Questions on the projects listed on the Resume.
6. Do you want to know any thing about the company.( Try to ask some relevant and interesting question).
7. How long do you want to stay in USA and why (I guess non-citizens get this)?
8. What is your geographical preference?
9. What are your expectations from the job.

The Guerrilla Guide to Interviewing

http://www.joelonsoftware.com/articles/fog0000000073.html

First of all, the #1 cardinal criteria for getting hired at Fog Creek:
Smart, andGets Things Done.

Here's a typical plan for interviewing a programmer:

Introduction
Question about recent project candidate worked on
In this question, I'm looking for one thing: passion. They get very
excited talking about it; they tend to talk more quickly and get animated. This
shows that when they are interesting in something, they will be passionate about
it.
In fact, you can even ask them directly to give you an example from their recent
past when they took a leadership role and got something done -- overcame some
institutional inertia, for example.


Impossible Question
C Function

Some signs of a good programmer: good programmers have a habit of writing their
{ and then skipping down to the bottom of the page and writing their }s right
away, then filling in the blank later. They also tend to have some kind of a
variable naming convention, primitive though it may be... Good programmers tend
to use really short variable names for loop indices. If they name their loop
index CurrentPagePositionLoopCounter it is sure sign that they have not written
a lot of code in their life. Occasionally, you will see a C programmer write
something like if (0==strlen(x)), putting the constant on the left hand side of
the == . This is a really good sign. It means that they were stung once too many
times by confusing = and == and have forced themselves to learn a new habit to
avoid that trap.


Good programmers plan before they write code, especially when there are pointers
involved. For example, if you ask them to reverse a linked list, good candidates
will always make a little drawing on the side and draw all the pointers and
where they go. They have to. It is humanly impossible to write code to reverse a
linked list without drawing little boxes with arrows between them. Bad
programmers will start writing code right away


Are you satisfied?
Design Question
Good candidates will try to get more information out of you about the
problem. Who is the house for?
Smart candidates understand that design is a difficult series of
trade-offs.

The Challenge
Do you have any questions?