Approaching Iterativity

Initialization

I recently came across an article in which Scott Hanselman responded to a reader who wanted to know how to determine if they were actually a developer or just a good Googler.

Until I read this I hadn’t even thought about it. Not in those terms anyway. I think of myself as a successful developer, i.e. I’ve been gainfully employed as a developer for years. However, I don’t know if I’m actually a developer. I’ve certainly met and read the code of much better developers, people I consider actual developers, so the concept interests me. I’m certainly not a good Googler (mediocre at best) which means I should strive to determine if I’m actually a developer.

To that end, I’ve decided to take the advice Mr. Hanselman kindly offered his reader and work on one of the Code Katas while documenting the reference material I use. Since I’m currently polishing my proficiency1 with JavaScript à la Node.js that’ll be the software context.

Condition

The kata I’ve chosen is transitive dependencies and, knowing that I want to do data entry via the command line, I hit up Google to see what I can get from Node.js. Stackoverflow, the result for most of my Googling, taught me2 about the process object as well as some npm modules .

Since I’m just doing a kata, not developing a general, all-purpose solution, I opted to adopt the technique illustrated by this article in the nodejitsu documentation. As you’ll see in the code, I went with the complicated “simple example”.

I should mention that I tend (i.e. rarely fail) to reference the language documentation about everything. For JavaScript I use the MDN. I did go to stackoverflow for some of the object property stuff. Specifically, this question and this question.

Increment

Here’s my first attempt with the code kata. I don’t like the nested loops and I’m sure my JavaScript is sloppy so I’ll be coming back to make some improvements in a later article.


var app = {
   deps: {},
   concatDeps: function(key,a,b) {
       var arr = [];
       var i = 0;
       for(; i < a.length; ++i) { arr.push(a[i]); }
       for(i = 0; i < b.length; ++i) {
           if(key !== b[i] && 
              !arr.includes(b[i])) { 
                  arr.push(b[i]); 
           }
       }
       return arr;
   },
   processLine: function (line) {
      var depData = line.substring(0,line.length - 1);
      return depData.split(' ');
   },
   graphDependencies: function () {
      console.log('Original Chart:');
      console.log(app.deps);
      for(var aKey in app.deps) {
         for(var bKey in app.deps ) {
            if(aKey !== bKey && 
               app.deps[aKey].includes(bKey)) {
               app.deps[aKey] = app.concatDeps
                               ( aKey,
                                 app.deps[aKey],
                                 app.deps[bKey] );
            }
         }
      }
      console.log('Dependency Graph:');
      console.log(app.deps);
      process.exit();
   },
   readDataFromCli: function() {
      process.stdin.resume();
      process.stdin.setEncoding('utf8');
      process.stdin.on('data', function(line) {
         var data;
         var i = 1;
         if (line === 'q\n') {  
            app.graphDependencies(); 
         } else {
            data =  app.processLine(line);
            app.deps[data[0]] = [];
            for(; i < data.length; ++i) {
               app.deps[data[0]].push(data[i]);
            }
         }  
      });
   }
};

app.readDataFromCli();

Statement

What I learned by both doing the code kata and tracking my resources is that my reference material didn’t tell me how to accomplish the task. I knew what I needed to look up by understanding the coding problem and my approach to its solution.

Maybe I misunderstood the initial question posed to Scott Hanselman. Was I supposed to use Google to find a solution? That option didn’t occur to me until just now. I’m going to have to work on my reading comprehension, seriously.

--
Randy


  1. I’ve written JavaScript (poorly) since the 1990s. I’ve just never had much opportunity to really dig deep since I don’t use it professionally
  2. This question launched the deep dive that ultimately led to the nodejitsu article. 

Leave a Reply

Your email address will not be published. Required fields are marked *