Category Archives: CMU

Code Complete 2; The Missing Link in Software Education

CodeComplete2_thumb_3I recently bought a copy of Code Complete 2, one of the many books on software engineering that I’ve been meaning to read for a long time. It focuses on a very small part of what I’ve been studying and practicing at my MSE program; software construction. 

By construction the book means the actual writing of code. It is the central part of software development since the requirements elicitation that precedes it is aimed at finding out what is to be constructed, and the testing phase that follows aims to verify the construction.

After going through the table of contents and skimming some chapters, I was amazed at why I wasn’t taught anything like this in my undergraduate Computer Science degree. In fact, I think one of the reasons why programs such as the MSE program at Carnegie Mellon exist is to fill in the deficiency of sound software engineering skills in CS undergrads. During my undergrad program, even though we had a ‘software engineering’ course, we were still not taught about basic construction techniques such as version control, peer reviews, and managing quality at the code level. I’m pretty sure this is the case for a lot of other programs out there as well.

Perhaps it is due to the fact that software engineering is still a very young field, but there is a huge gap between what is being taught in Computer Science undergraduate courses and what is required out there in the industry. I’m not sure about the statistics on how many undergrads get jobs in the industry right away, but in countries like Pakistan where research is not a priority, I’m willing to bet a majority of CS undergrad students look for jobs in the industry instead of pursuing higher studies and research.

This is exactly why programs need to prepare students for writing industry ready code. Books such as CC2 are vital tools for polishing your skills as a software engineer. I firmly believe that we would have a lot less failed projects and more happy customers if people looking to write code for a living would catch up on their reading first.

Tagged , , ,

Integrating usability engineering techniques into the software development process

I wrote a paper on this topic for a course. Was a pretty interesting experience. Below is the executive summary. You can download the paper as a PDF as well.

Usability is an important quality attribute that has a great impact on the user experience of a software product. To the user, the interface is the product. Thus it is very important for software teams to ensure high levels of usability in their products for them to be accepted and liked by their end users.

There are a number of hindrances that prevent integration of usability tasks in the development lifecycle. The cultural gap between the fields of human computer interaction and software engineering is perhaps the underlying cause of many issues that arise when engineers are made to use usability techniques. Most teams are not aware the importance of usability, or are of the opinion that regular development staff can build perfectly usable interfaces. Management is sometimes of the view that usability tasks will be costly and time consuming. Education and training of engineers and management is required to overcome these issues, as well as customizing usability techniques so that they are cheap and lightweight, hence easy to adopt.

It is also important to define what the team understands by usability, since it encompasses a large amount of characteristics. Usability goals should be decided and usability characteristics of the system should be documented so that they are testable.

There are a wide variety of usability techniques and methods, each having its own strengths and weaknesses. It is important for teams to be able to make the decision as to which technique is required in a certain condition. This report looks at the different stages in the development lifecycle and which usability techniques are suitable therein. An overall approach to integrating usability techniques and practices into the different development stages of a typical iterative development lifecycle is presented. Planning activities and roles related to these techniques are also discussed. Usability integration with slightly different lifecycles, such as XP and ACDM are also examined.

For easier adoption of usability techniques at an organization level, it is important to introduce easy and cost effective techniques at the grass root level. This results in teams reaping the benefits of usability techniques without expending a lot of budgeted resources. In this regard, studies are looked at that highlight usability techniques that are widely used, cheap and easy.

Usability is an integral part of everything that is engineered, whether it be software or otherwise. With the increasing complexity of software systems, it is even more important to design interfaces that are easy to understand and use. Usability is also not something that can be slapped on at a certain point in time. Hence it is important to ensure that usability tasks are planned and carried out during all phases of the development lifecycle.

Amazing talk by Ricardo Semler @ MIT Sloan

A couple of weeks back we had a lecture on creativity and thinking out of the box. The instructor decided to show us a video and claimed that it would blow our socks off.

It blew my shoes off as well.

Ricardo Semler is the pioneering CEO of Semco and he talks about a revolutionary new way of managing a company. The numbers show that it has certainly worked for Semco.

I won’t reiterate what he says in the video. The guys over at 37Signals have covered it in some detail here. It really is a must watch, especially for people thinking of starting their own business or doing an MBA.

It has Begun (the Pittsburgh Winter)

Today was really cold. And I mean really cold. (at least for someone from the equator :p). It snowed intermittently pretty much the entire day. Having never seen snow before, I was really looking forward to it. And it gets really pretty when it starts snowing … only when you’re sitting in a warm comfy room and looking out the window :).

Some pictures of the first day of snow (well technically it snowed a couple of days ago, but it melted away really quickly)

Carnegie Mellon University - University Center

white 009

See the rest on my Flickr set.

The CMU Merry-go-round

photos 003 

Found this stuck to a wall in the cave. This is pretty much what everyone around me is going through. Even the beautiful city of Pittsburgh is starting to go cold and bitter. -_-

The fact that I’m posting this a good one to two months after I took this picture probably gives you a good idea of much time the MSE is leaving me for trivial pursuits such as blogging. *sigh*