Monday, December 6, 2010

Interview Preparation Links

I have compiled a list of interview books to read for preparing for software engineering interviews. This is mostly a list for someone who is interested in learning or revisiting concepts in algorithms and data structure. A few links deal with design the others are just helpful for preliminary phone interviews:

1. http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=alg_index Topcoder Tutorials on Algorithms - Some algos are really tough in this list, but this is still a fun list to read and practice a few questions. You can always create a tc account and do some of the questions in competitions.
2. http://www.parashift.com/c++-faq-lite/index.html C++ FAQ - A must read and follow guide for C++ interviews, I suggest to read this and understand why such design practices are followed.
3. http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions - Must read guide to clear phone screens
4. Programming Interviews Exposed - Read to get a decent idea of general thinking pattern required in an interview.
5. Professional C++ or C++ How to Program (Dietel and Dietel)- or any other C++ book to help clarify some basic concepts in C++.
6. http://people.csail.mit.edu/bdean/6.046/dp/ Dynamic Programming tutorials. DP is a must have for programming interviews. This link only works in firefox.
7. Effective Java - Essentially a Java book but most of this stuff is also applicable for C++.
8. If giving interviews for google, amazon or MS - Bing or another company which works on cloud ccomputing, make sure you read the papers that they have published on cloud computin.
9. How would you move mount Fuji - Not sure how useful is this book is nowadays, was useful for MS SDET interviews sometime back :) . It also has some nice puzzles.
10. Heard on the Street: Quantitative Questions from Wall Street Job Interviews - This book also has a bunch of good puzzles if at all you are interested in.

In the end writing a lot of code and following good design practices helps.

Sunday, May 2, 2010

Meditating Autorevs

While watching Ergo Proxy, a depressing cyberpunk set on a desolate earth, I saw meditating autorevs. An autorev, in ergo proxy universe, is just an android with no true "soul". However they get infected by a certain "cogito virus" and acquire a "soul". A "soul" is just a matter of self awareness, acquiring one makes them question everything from their purpose as an entourage, to their behaviour as a companion. While all of this might seem obvious; what struck me was given a life times experience, knowledge and a processing power of a million circuits, what would a being trying to discover itself do ? As in the anime, Eegi finds itself meditating and brooding over its own life as do a lot more of the androids. Well we have meditating androids essentially. Like meditating humans. What would normally an unexpected behavior for a machine, suddenly becomes acceptable both intuitively and intellectually. So consider this, what if we build a machine not essentially "self aware" per say, but capable of analyzing the history and the knowledge of at least an entire lifetime ? Would this give us the answer to universe, life and everything ? Well probably not !!
But it sure sounds interesting on what would it achieve on years of computation time spent on brooding. However, to answer the question we must formulate the question first. The formulation of the question is essentially expressing the process of meditation in terms of mathematical equations !! We probably know all the hows, but we need to know all the whys. Sure this will make another blog post sometime :)

Friday, April 16, 2010

Simulating Social Behaviour

For a long time I have been thinking of simulating life like creations. A-life seems to be an upcoming topic in Computer Science and elsewhere. I admit I havent read about it much. I have read a little bit about complex systems though. After attending a lot of CS courses and doing projects on AI/ ML and random processes as well as optimization (as part of EE ), I have developed a basic understanding that all AI / ML problems are essentially optimization problems. Each one a unique and a unique way to solve each. Quite Interesting.

What is more interesting is when we see our own life and try to see it in the aspect of an optimization problem. However our own life is not standalone but is influenced by that of others and is (figuratively) a sum total of all the states that are influencing our own state.

Now this is getting a bit vague.

To put it straight forward way I want to design a simulation of artificial life. Where I can spawn a number of individual entities and assign a separate optimization problem to each. Where the goal of each individual entity is to optimize its own problem. Now the deciding factor can be either CPU time, where entities compete for CPU time. But I guess this has already been tried. I think I want to relate them by their optimization functions not just to the environment but by each other also.

Obviously I need to formulate the optimization problem first and than hope that it can actually be solved :).
chow for now !