New article to appear in CSEE&T 2013!

April 11, 2013 at 9:20 PM

Eleni Stroulia and I have submitted a paper on a study that we conducted last year, where students used IBM Jazz to collaborate while developing their projects. We studied their behavior and how our visualization toolkit is useful in enabling inferences about the team’s collaboration.

The paper will appear in CSEE&T 2013, this May, in San Francisco.

Title: Understanding Individual Contribution and Collaboration in Student Software Teams

Abstract: Software development is an inherently team-based activity, and many software-engineering courses are structured around team projects, in order to provide students with an authentic learning experience. The collaborative-development tools through which student developers define, share and manage their tasks generate a detailed record in the process. Albeit not designed for this purpose, this record can provide the instructor with insights into the students’ work, the team’s progress over time, and the individual team-member’s contributions. In this paper, we describe an analysis and visualization toolkit that enables instructors to interactively explore the trace of the team’s collaborative work, to better understand the team dynamics, and the tasks of the individual team developers. We also discuss our grounded-theory analysis of one team’s work, based on their email exchanges, questionnaires and interviews. Our analyses suggest that the inferences supported by our toolkit are congruent with the developers’ feedback, while there are some discrepancies with the reflections of the team as a whole.

We are thankful to Isaac Matichuk who had a major contribution in the development of the visualization component of our system. This work was funded by NSERC, AITF (Alberta Innovates
Technology Futures) and IBM.

Full Preprint Available here

Things every software engineer should know #11

March 11, 2013 at 10:35 AM

A good programmer will should always be able to predict the output before running the code.

Don’t program by trial-and-error, kids.

At least they're pair programming.

At least they’re pair programming.

Things every software engineer should know #10

February 13, 2013 at 8:26 PM

I would advise students to pay more attention to the fundamental ideas rather than the latest technology. The technology will be out-of-date before they graduate. Fundamental ideas never get out of date. However, what worries me about what I just said is that some people would think of Turing machines and Goedel’s theorem as fundamentals. I think those things are fundamental but they are also nearly irrelevant. I think there are fundamental design principles, for example structured programming principles, the good ideas in “Object Oriented” programming, etc.

~ ACM Fellow David Parnas

Books I’m reading right now.. #2

February 10, 2013 at 10:09 PM

Last time I posted about books I mentioned a few books (not related to computer science) that I was flipping through. I started 2013, however, with a few software engineering/programming books just for fun:

1 – Growing Object-Oriented Software Guided by Tests

2 – Professional Application Lifecycle Management with Visual Studio 2012

3 – Patterns of Enterprise Application Architecture

4 – Pro C# 5.0 and the .NET 4.5 Framework

They’ll probably keep me entertained for a while :)

Where I am right now

November 12, 2012 at 12:43 AM

credits

Things every software engineer should know #9

October 29, 2012 at 11:14 AM

Test the code.

This is outdated:

This is acceptable:

“Testing” is the new “compiling”.

(image source:http://xkcd.com/303/)

The Ten Commandments of Egoless Programming

October 27, 2012 at 9:06 PM

Today I came across this great post from John Allspaw on his blog on what makes for a good senior engineer.

One of the parts I liked the most was the ten commandments of egoless programming, which all engineers should know and follow:

  1. Understand and accept that you will make mistakes. The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry. We can, and should, learn, laugh, and move on.
  2. You are not your code. Remember that the entire point of a review is to find problems, and problems will be found. Don’t take it personally when one is uncovered.
  3. No matter how much “karate” you know, someone else will always know more. Such an individual can teach you some new moves if you ask. Seek and accept input from others, especially when you think it’s not needed.
  4. Don’t rewrite code without consultation. There’s a fine line between “fixing code” and “rewriting code.” Know the difference, and pursue stylistic changes within the framework of a code review, not as a lone enforcer.
  5. Treat people who know less than you with respect, deference, and patience. Non-technical people who deal with developers on a regular basis almost universally hold the opinion that we are prima donnas at best and crybabies at worst. Don’t reinforce this stereotype with anger and impatience.
  6. The only constant in the world is change. Be open to it and accept it with a smile. Look at each change to your requirements, platform, or tool as a new challenge, rather than some serious inconvenience to be fought.
  7. The only true authority stems from knowledge, not from position. Knowledge engenders authority, and authority engenders respect so if you want respect in an egoless environment, cultivate knowledge.
  8. Fight for what you believe, but gracefully accept defeat. Understand that sometimes your ideas will be overruled. Even if you are right, don’t take revenge or say “I told you so.” Never make your dearly departed idea a martyr or rallying cry.
  9. Don’t be “the coder in the corner.” Don’t be the person in the dark office emerging only for soda. The coder in the corner is out of sight, out of touch, and out of control. This person has no voice in an open, collaborative environment. Get involved in conversations, and be a participant in your office community.
  10. Critique code instead of people: be kind to the coder, not to the code. As much as possible, make all of your comments positive and oriented to improving the code. Relate comments to local standards, program specs, increased performance, etc.

It’s definitely a must-read for all software engineers. Go read it.

Things every software engineer should know #8

October 9, 2012 at 9:50 AM

“Programming is only the medium through which you will pursue what truly motivates you. Step one is to find that passion, and step two is to have the motivation to keep at the pursuit of your dreams. It isn’t about knowing each programming language in depth (although more power to you if you do), because alone that gets you nowhere. Inspire yourself to use your abilities to make a difference.” – source

Recent Projects

October 4, 2012 at 4:26 PM

I’ve added to my website today a list of the recent projects (with exception of my thesis project, which will be included after I defend it) I’ve worked on, alone or with partners, over the past few months. Publishing it here/there purely in the hope it benefits someone out there. It would also be interesting to hear if anyone has any thoughts on them.

(Course Project) Chronopedia – Timeline Search Over Wikipedia

Information extraction deals with extracting meaningful and structured information from unstructured text. But most articles have a temporal attribute associated with them. All the facts have a temporal validity. Thus the temporal information helps us to get an idea of how the facts evolve with time. For example, Beckham has played for many clubs during his career. We need the temporal information of when he played for each club to present this information. Hence temporal information is a valuable aspect of information extraction. One source rich in information along with temporal information is Wikipedia. Wikipedia contains a very large collection of documents about various entities. The articles do not use relative temporal elements like “yesterday” and “last month”. But the text in Wikipedia is highly unstructured and this poses problems when extracting facts from Wikipedia articles. In this project, we worked on Chronopedia, a system that can extract facts along with their temporal information from Wikipedia articles.

(Course Project) SEAS: Extending Jazz For Software Evolution Analysis

Collaboration in software development is a challenging task and has drawn a lot of research attention in recent years due to its potential to improve efficiency and reduce costs in software development. Understanding how collaboration works and how software evolves is a key point in this con-text, and hence there is an increasingly need for tools that provide such insights. In this project we proposed a set of services that team members can use to understand communication, collaboration and design evolution within a project. Specifically, we created services to answer questions about how team members interact among themselves, how team members interact with different project artifacts and how the software evolved in time through various refactoring operations.

(Course Project) Gossiping for Cache: An In-network Routing Mechanism for Sensor Networks

Motivated by industrial applications, the number of sensor network deployments has rapidly increased in recent years and it is an active area of research due to its many challenges. It is widely known that wireless sensor networks have limited memory, processing and, above of all, energy resources. Because of this, it is often desirable that the nodes know about their neighborhood in order to minimize communication burdens and hence improve the network lifetime. In this context, this project introduced a routing mechanism based on information sharing among nodes, where nodes proactively share information so that they can answer on behalf of each other when appropriate. We introduced our gossiping mechanism, where our gossip term slightly differs from the meaning generally used in the literature and finally we presented the results and show how our method minimizes the energy cost for query processing, ultimately improving network lifetime.

(Pet Project) Wavly – A Platform for Building Real-time Multi-user Collaborative Web Systems

Wavly is a pet project of mine and I work on it when I’m bored, want to have fun or learn something new. It was described previously on this post.

Things every software engineer should know #7

September 27, 2012 at 4:07 PM

From Tomek Kaczanowski’s blog:

Code reviews. Very helpful if done right, completely useless if done recklessly.

Below you will find a mindmap of “code review” (using Xmind). I simply sat down and tried to gather everything related to code reviews. Hopefully you will find some food for thought here.