, ,

How to learn — or not learn software development

Been reading a lot about the healthcare.gov software development headaches lately.  I am using it as a personal case study of how/when/why software development goes wrong, and how I might be able avoid these issues in any of my projects at the labs.  I have been using the Mythical Man-Month (MMM) as my guide and it is very enlightening how one can learn by observing the examples or misfortunes of others.

What would I do different?

I would seek out the expertise of anyone who has had the experience of rolling out a massively wide scale web service.  Hmmmm… who could that be?  Amazon.com immediately comes to mind.  I am very surprised that the administration didn’t seek them out.  I am not privy to the bidding process so maybe they did; maybe they didn’t.  I get the sense (and this is just my opinion) the administration believes that if you throw a bunch of tech-savvy people at a problem, magical and amazing things will happen.  Obviously that is not always the case and it violates of one of the tenets of MMM.  Another idea: tour several silicon valley companies; how do they utilize the power of the tech-savvy to create amazing things?

An Idea on How to Learn How to Program

Seeking the guidance of an experienced expert, such as Amazon is also a great way to improve your programming skills.  I had the opportunity to meet a few developers at the Amazon booth at a security conference last August.  They had these programming puzzles similar to below (can you spot the issues?):

wchar_t *fillString(wchar_t content, unsigned int repeat)
    wchar_t *buffer;
    size_t size;
    if (repeat > 0x7fffffffe)
        return 0;
    size = ( repeat + 1 ) * sizeof content;
    buffer = (wchar_t *) malloc ( size );
    if ( buffer == 0 )
        return 0;
    wmemset(buffer, content, repeat);
    buffer[ repeat ] = 0;
    return buffer;

They had many of these and I had fun solving them; learned some new programming techniques in the process.  I thought: wouldn’t this be a great way to learn how to program?  What if we compiled a puzzle book of code with various topics and challenges?  One chapter could be on proper syntax and constructs to help with spotting common errors and to teach debugging strategies.  Another chapter could be on pointers where you play the role of the compiler/computer and “run” the program to see if you understand pointer arithmetic.  A chapter on simple data structures where you draw out the logical implementation of a linked-list or a hash table.  And of course a chapter on security with snippets like those above.  And if we could format the book in such a way that at the start, you are ignorant of the language, but by the end, you could start using your new skills to make things.

I have several friends who play chess and they use puzzle books to improve their game play.  They claim they learn how to spot patterns for end-game scenarios and how to mate in 3 or 4 moves.  Perhaps we could do something similar  but with code.  Perhaps I should consult Amazon.com and see if any such books already exist.