Updates from a prolific coder

My technical chronicle

The curse called visa sponsorship

March 10th, 2010. Published under Interview. No Comments.

Working for a growing start up has always been one of my dream jobs because it would offer multitude of chances to learn, experiment, contribute and work hard. More over since  I could be working a product from ground-zero the satisfaction of creating something would be priceless. I know most of the founders will not enough resources to even rent a place let alone hire a lawyer but I am not asking for a c0-founder positions but for founding employee positions. In the last month I interviewed/send resumes/got callbacks to over 5 companies, all of them were happy with my resume and could potentially hire me, but for my visa status.

Why is this becoming so big an issue? Its been done in past and could be done now. Are start ups so unstable they don't know if they will be able to go through any lawyers? Or their paperwork so crappy that they can't say that they have a plan for future? Or is it some psuedo patriotism?

For whatever the reason today is my tipping point - I got a response from a local startup with in a day of sending my resume and scheduled an interview. I emailed them before the interview letting them know that I would need a visa sponsorship. Since they didn't reply I assumed that they are ok with it and was waiting for my interview. And the guy would not call, after 15 mins of scheduled time I call him and reminds him of the interview. He said that H1b is a deal breaker for them! What the hell was he talking 1) Didn't I email him first? 2) Needn't he inform me before? 3)Why would he waste my time? I prepared for the interview for over 2 days. Where are your manners Mr.CEO. I hope your start up fail miserably and your VC's sue you.

For all of those to whom I sent my resumes, know this - I would require a H1b sponsorship its not a big deal some money ($2500) and some time (10-15 hours). If you are not willing to spend that time on a future employee please don't respond to my emails. Just know this - America's greatness is created by immigrants who left their home lands in search for innovation and liberty. Many of the technology startups are created by them . If you just plainly reject candidates just by this basis, reflect on what you could be loosing. I am not an illegal worker who entered this country. I paid 2 years tuition to an educational institute of this country and was awarded MS in computer science.

Reject from Microsoft without an interview

February 16th, 2010. Published under Interview. No Comments.

This is really hilarious. I did not expect that HR is this dumb, they count number of years of experience and number of times the word 'Test' appear on your resume.

So this is what happened. I talked to a HR 'after' a technical interview and I thought she is going to talk about scheduling onsite interview. She goes like you seem not to have much testing experience and not a single word of 'Test' on your resume and I go like well I worked as a developer but have an aptitude for testing and would do good. She says okay and that she'll contact me on Friday.

I email her on Friday no response, I again email her on Tuesday and goes we looking for DEEP testing skill and experience. So a HR can judge and rule out a hiring manager. He knows pretty damn well that I was a developer for 2 years and I can answer testing questions as good as anyone. And why the hell did he move me to the next round?

I lack testing experience - whatever that means. So in summary, MSFT again wasted 20 days of my life, with their corporate hiring policies.

Migrating from gmail to google app domain

February 16th, 2010. Published under Tips. No Comments.

I have my own google app domain malugu.com from 3 years now and I haven't bothered to make it my default (both using externally and sending email) till few months back. I've never imagined changing emails is so painful and it takes a lot of effort both psychologically and physically.

Previously I had a filter to send all incoming mail to malugu.satyajitATgmail.com and its very hard to kick off that habit.

These are the steps I've planned to do this change

  1. Explicitly use my domain name at all the places that are relevant now. This include business cards, new sites that I am signing up, updating email address in websites that matter - facebook, linkedin, mailing lists etc..
  2. Export filters from gmail to domain using export filters lab feature.
  3. Create an explicit bookmark in all the browsers to my email login page and delete gmail.com from browsing history.
  4. Remove the automatic forwarding and do a reverse forward to this domain.

I have been doing step 1 for a while now. And I just did step 2 and 3. Step 4 is risky, I could miss important emails or worst job interviews. So I will take at least a month before going to step 4.
Have you done any thing other than these? Any tips. Happy migration

Use case testing compared with Behavior driven testing

February 11th, 2010. Published under Interview. No Comments.

As I mentioned in my previous post the Practioners guide for testing is teaching me lots of new and practical things like Domain analysis testing and use case testing. Today I also started highlighting points from RSpec book. In some ways use case testing is reminding me of BDD and its goals. (As a side note I am actually able to publish my google doc as a blog post, awesome!).

For example the value of use cases are capture users fuctional requirements, develop system and acceptance tests, involving customers actively. I got a feeling that Dan north got his inspiration from this kind of testing and tweaked it a bit to create Behaviour Driven testing. One glaring difference between these two methodologies is that use case testing is bulky - it requires a 25 columned template to fill in values with and it can't directly be converted to test cases. On the other cucumber the specification itself are a bunch of actual tests and their language is much more customer friendly.

So, to me it seems like cucumber has its roots in use case testing or at least both of them are trying to solve the same problem differently.

Review of RSpec book

February 11th, 2010. Published under Interview. No Comments.

Chapter 1

  • Why did BDD start?
    • Developers had a tough time understanding TDD as a test tool and more mental blocks to adopt it
  • TDD
    • Red green refactor principle
    • Creates emergent design
  • TDD negatives aka BDD positives
    • But TDD creates a dependency on internal details of the object (like the object is an array or hash)
    • We are testing the object instead of testing what it does.
    • It relates more to the customer 
    • Real values lies in behaviour not the structural details.  
  • RSpec
    • Created to capitalize on the dynamic nature of ruby language to provide more readability and describing behaviour at unit test levels
    • it() should() are method names
  • Cucumber
    • Cucumber gives us a language and a format through which we can communicate with the customer.
    • A form of Acceptance test driven development
  • BDD cycle
    • Focus on the scenario
    • Write failing step definitions
    • Fall down to RSpec
    • Write failing example (in Rspec a test in called example)
    • Get the example to pass
    • Refactor
    • When step is passing
    • Come back to cucumber
    • Refactor
Chapters 2-7
  • Introducing the many features and capabilities of cucumber and RSpec including
    • Cucumber scenario outlines
    • Scenario backgrounds
    • Scenario examples through tables
    • RSpec introduction of mock objects and stubs
    • Modify the code gradually but in baby steps to meet all the examples and features.
Chapter 10
  • Reasons why traditional projects fail
    • Delivering late or over budget
    • Delivering the wrong thing
    • Unstable in production
    • Costly to maintain
  • Necesseties of software development
    • Planning
    • Analysis
    • Design
    • Code
    • Test
    • Deploy all of these phases are necessary evil and cumbersome
  • Lots of formalized design specifications, templates etc..
  • Requirements keep chaning at each of the above phases
  • Exponentially expensive after each ste
  • The process itself is causing the exponential cost of change!
  • Metaphor of civil engineering does not work well with software.
  • Agile development
    • Individuals and interactions, working software, customer collaboration, responding to change.
    • Deliver working software frequently in short timescale.
    • On time delivery because there are no strict deadlines - everything moves in small chunks of iterations
    • no longer wrong thing because stakeholders are looking at the software all along
    • since we are delivering every iteration, we will become good at building and deploying. 
    • After the first iteration every cycle is maintainence. 
  • Challenges of agile
    • Outcome based planning
    • Streaming requirements
    • Evolving design
    • Changing existing code
    • Frequent code intergration
    • Continual regression testing
    • Frequent production releases. 
    • Co located teams.
Chapter 11
  • BDD is about implementing an application by describing its behaviour from the perspective of the stakeholders
  • Principles of BDD
    • Enough is enough - the least possible amount of design
    • Deliver stakeholder value - do only something that's delivering value or increasing your ability to deliver 
    • Its all behaviour - Same thinking and linguistic constructs at code level, application level or beyond
  • At the start of the project we create a shared vision
  • Decompose requirements into features and then into stories and scenarios - day to day rhythm. 
Chapter 12 and 13 RSpec
  • RSpec is an unit testing framework that allows you to describe behaviour in a conversational manner using methods such as it, describe, should, should not
  • Almost like writing psuedo code
  • It has example groups, before and after filters, predicate matchers

Chapter 14 Mocks

  • Test doubles stand in for a colloborator and can be used with different names - mocks, stubs, fakes, spies, imposters depending on how they are used.
  • Method stubs and message expectations are method level while test doubles and test specific extensions are object level concepts.










Brief tour of C++ basics

February 10th, 2010. Published under Interview, Microsoft. No Comments.

Since its going to be a Microsoft interview and its traditionally a c++ based company, today I reviewed some basics about C++ pointers in context of strings and arrays.

Somethings I learned/remembered today

  • Use the using statement 'use namespace std' to save lots of typing
  • Also be sure to include iostream header file
  • Functions should be declared or defined first before they are called in main program.
  • Popular ways of defining strings
  1. char *str="this is a char pointer with null termination"
  2. char str[]="this is a character array"
  3. string str="not used much"
  • We use strlen() function to get the length of char * type string.
  • There are subtle differences between char pointer strings and char arrays. (1&2)
  • For interview purposes stick to char arrays, they are simple to access and most intutive
  • cout is overloaded to take any of 1 & 2 to ouput them

This online book - http://oreilly.com/catalog/pcp3/chapter/ch13.html#36884 has lots of basic info. I know things only get complicated with trees, graphs, structs etc. So unless the interviewer forces me to code in C++ I will stick to C#. Since this is a testing position and my last coding experience in it was more than an year ago they might let me use it.

State transition testing for Vending machine

February 8th, 2010. Published under Interview, Testing. 1 Comment.

After the positive news from my phone interview I started reading A practitioners guide to software test design. Its exactly as it name says less theory more examples and useful case studies.

One new thing I learned from it  state transition testing and I was able to grasp its importance. I wanted to try my hand at the popular vending machine testing because it has outer world interaction and some internal processing that can be suitably represented as states.

I have designed for the following workflow (based on the vending machine that I use often)

  1. First the entered prompted to enter item selection
  2. Then user is prompted for money
  3. The system waits until the user enters all the money
  4. When an invalid currency is entered it returns it back
  5. If more money is paid the change is returned back
  6. Now the item is dispensed
State transition diagram vending machine

State transition diagram vending machine

I know I might be missing lots of things like - the showing the amount entered, also I am not able to represent wait state properly. But now I can appreciate why testing is considered hard.

Practice code on github

February 7th, 2010. Published under BDD. No Comments.

After my expedition into the rails world, I found how useful git and github are for development. After a brief search for git for visual studio 2010, I found gitextensions. It wasn't a straightforward configuration but was able to make it work after, I created one more ssh key for my windows setup and configure it with peagent for putty. This post was very helpful during the setup.

So, I created a new repository on github and pushed my practice code onto it at - http://github.com/satyajit/practise/tree/master/Practise/ Later I added a .gitignore file so that I don't upload unnecessary files. Gitextensions work pretty nicely from VS2010 and I am happy with how it shows differences before commit.

Git in visual studio 2010

Git in visual studio 2010

Toodledo- A comprehensive organizing tool

February 5th, 2010. Published under Microsoft, Tips, WPF. No Comments.

I am a big fan of organizing my life, tasks, work and tried many online services for accomplishing this including Remember the milk, google tasks and outlook tasks.

But my wife and I am currently using toodledo and we like it a lot. As she said, what stuck out for us is the easy and simple viewing of tasks and multiple ways to configure them. My biggest winner is goals and to make the tasks that we doing count towards something important. It looks bare bone and what more does a programmer want? It integrates nicely into google calender, outlook and all that crap.

We want to use its advanced features like subtasks that we decided to try the pro version for 30 days. I hope that this investment would be worthwhile.

My actual intention of paying for the service is creating an awesome client application that runs in windows using WPF. A very nice attempt has been made by Mark Brownsword. But I would like it do more and be more appealing - seesmic look has shown us what's possible with windows and WPF. I want to create or atleast use a GTD application that is rewarding and entertaining.

Interview with Microsoft

February 5th, 2010. Published under Interview, Microsoft, Testing. No Comments.

With the help of my wife I was able to get an interview with Microsoft windows for an SDET position! This is fantastic as I have been liking windows products lately especially windows 7 was exceptional, it would be really great to work on its code base for the next edition of windows. So, I would pause my adventures into Rails/Vim world and brushing up my C#, C++ skills. Also since the position is mainly testing I should harness/bring out that acumen.

For this preparation I would be using lots of websites, books learning things I would like to chronicle them here, so it serves as a devil's advocate and some one might actually find it useful. Better if any improves on them and let me know.