Student Blogs

MS in Software Engineering, Technical Track Student

Wondering if a Carnegie Mellon degree is right for you? Read about our students' experiences through the MS in Software Engineering, Technical Track program.

Minh is a second-year grad student, a Software Design Engineer at Microsoft, a Vietnamese community activist, a cat-lover and passionate fan of film music.
Nick is a Software Engineer at Google and a first-year grad student at Carnegie Mellon West. He loves hiking, gaming, and both really extremely good and extremely bad movies.
Tuesday, May 20, 2008

Wrapping up Construction III and Starting the Practicum


Whoa—I haven’t blogged for 6 weeks now. Time flies when so many things are happening at school. For one, we’ve completed the Construction III mini. Like I already mentioned in my last blog, I thought that that class was one of the best classes at Carnegie Mellon West.

Our team architected the actual movie recommendation engine that is to be used in our MovieRecommender website. It was a complex architecture, the algorithms were highly mathematical, and our team prided itself in coming up with a beautiful design that would accommodate for all the requirements, all while making use of previous work and research done by more than 20+ classmates in previous semesters. We then constructed the Java-based recommendation engine, plugged it into our existing Ruby on Rails-based MovieRecommender website and then coded several recommendations algorithms that together provide movie recommendations for you based on your past ratings and social network.

It was a very fun and cool project, and I am very proud of what our team has accomplished in this little time.

After Construction III, we had a 1-week vacation (that I spent in Vietnam) and then started the last semester in my 2-year adventure for my master’s degree: the practicum.

The practicum is our opportunity to apply all that we have learned so far to a real project from a real customer. The practicum used to be a requirement for the technical track, but the curriculum was changed so that one could replace it with another elective. I don’t know why anyone would want to do that though, because I can’t imagine something more useful and hands-on than a project with a real client and real risks, scope and deadlines.

I chose to do the practicum because I imagine that I will benefit and learn the most doing an actual project with an actual company, and I will strive to really apply all the best practices and knowledge that I have gained at CMU West so far. At a practicum fair last month we were introduced to several projects with companies such as PayPal, Nokia as well as internal projects with Carnegie Mellon West. Through a selection process, I was matched with the website-development project with PayPal, which was actually my first choice since I miss doing production-level web development.

My team is currently negotiating with the PayPal managers on the scope of our project, and are in the process of gathering requirements and producing UI mockups, but I am very excited to hear that we have decided on coding in C#, ASP.NET, Ajax and Silverlight – all of which are technologies that I very much enjoy. I can’t tell you more about the specifics of the PayPal project (well, I could, but then I have to kill you afterwards). However, I’ll be sure to blog about the experience of this practicum as time goes on.

Next time: Visiting Carnegie Mellon University (Main Campus) for Commencement Ceremony

posted by Minh Nguyen @ 1:48 PM  0 comments

Friday, April 18, 2008

Requirements Engineering - Second semester wrap-up


This semester was definitely a remarkable change of pace from the first one. In the first one, we took one course, Foundations of Software Engineering. It had mainly been focused on things that I already understood, like coding and some design patterns. This semester was something else entirely. We took a course called Requirements Engineering. We focused on gathering requirements and then prioritizing them for a release. I have never done anything like this before, even at my day job at Google. I learned how to conduct user interviews, how to do UI design, how to develop use cases, how to do usability tests, and how to prioritize and maintain requirements as they change. In addition, we had excellent readings and discussion on how to improve meetings, with the wonderfully named Death by Meeting as an introduction to the problem. This course's newness to me really made it significantly more mentally challenging than the previous course. I'm very excited that I've actually learned some things about how to design features that users will actually want instead of those that engineers think they want.

Specifically, we worked on a movie recommendation product that would leverage social networking to give people personalized recommendations. At least, that's how it began. During user interviews, nobody we interviewed said they would bother figuring out yet another social network. So we had to push back on our VP of Marketing (role-played by one of our faculty members) to revise the vision from a social network like Facebook or Myspace to one where the social network was one-way. That is, you could look at another user's reviews and say you agree with that user, but the other person has no need to know who you are or approve you. Then, a personalized recommendation can be built based on your history and those of the users you agree with. That let us build a system more like Amazon's recommendations but for movies instead of something like a Myspace for movies. The whole process was really interesting.

Looking into the future, we have the Gathering coming up, where all the students fly in to Carnegie Mellon West and meet up in person. This will include my teammate from this semester who consistently dialed in from Saudi Arabia, so I'm pretty excited about that. Our next course is architecture, building on the Movie Recommender product from before. During the Gathering, I'll be learning more about the specifics.

posted by Nick Lynn @ 10:30 AM  0 comments

Wednesday, April 2, 2008

Construction III – The Best of All Worlds


This has got to be one of the most awesome classes at Carnegie Mellon West. It’s the accumulation of all we have learned in previous classes and we are putting all our theory and previous work into practice. You see, in the past year and half, we have developed this concept of a “Movie Recommender” product that provides recommendations for movies to watch based on your movie ratings. In the Requirements class last spring, we gathered the requirements, came up with UI mockups for a website, ran it through usability tests and worked with the VP of Engineering (remember, this is a role played by one of the faculty members) to negotiate a list of requirements that we deemed to be reasonable to implement. In the Architecture class last summer, we designed several architectures for a recommendation engine framework and how it would interact with the website layer. During Construction I last fall, we actually built the presentation layer in Ruby on Rails—both for the web as well as the cell phone.

Well, this is the semester we are putting everything together, and it’s an absolute joy and a very exciting project. Our team, “Team Gang of Six,” has studied prior research made by other teams in previous classes on all the above-mentioned aspects of this product, and our vision of the final product encompasses the work that so many different students had done previously: our Movie Recommender website was designed and incepted and prototyped by Team TMate in ASP.NET/C#. The event-based RecommendationEngine framework as well as the service-oriented integration point between Ruby on rails and Java was architected by Team Pantheon, the actual weighted/collaborative-filtering-based algorithm was proposed by Team 365, the actual migration of the ASP.NET prototype by Team TMate into Ruby on Rails was already previously done by Team TripleT during Construction I. Our current team is now putting all these ideas and prototype code together and are actually implementing the final Movie Recommender website and the Java-based recommendation engine, all while trying to apply software engineering best practices we have learned so far, including agile programming, SCRUM and design patterns. It’s really a firework of a project whose pyro is made up from the great work of some 20+ schoolmates (who might not even know that we picked up on their research).

The beauty of Carnegie Mellon West was also that this project was negotiated between the students and the faculty. Last semester, some of the students in Construction II were dissatisfied with the content of the class, as we felt we weren’t really learning any new concepts. So, we came together and approached the faculty and suggesting focusing on construction activities, and through some negotiation were able agree on several construction projects. In addition to allowing teams to work on constructing a product of their choosing (though it had to be approved), we also got to learn quite a lot about best practices. The plenary sessions consists of student-led presentations about different design patterns (iterator, abstract factory, template, façade, strategy, singleton, decorator, you name it), as well as some very interesting software engineering topics and discussions such as post-mortems, V-testing, software quality testing, code inspections, code reviews, good design heuristics, code coverage, code documentation, bug patterns, etc.

In a way, this class already feels like the practicum (which is yet to come this summer actually). We are given a lot of autonomy, and if you give a bunch of enthusiastic, opinionated students the freedom to code on what they want to do—you are going to get a bunch of students who enjoy the class, put in extra hours to make the product perfect and have full ownership of the product. Very cool!

posted by Minh Nguyen @ 10:30 AM  0 comments

Monday, March 3, 2008

Construction II – Wrapping Up Thick Client Development


Last week I wrapped up the 7-week Construction II class concentrating on thick client development on the Nokia N95. My team decided to build a J2ME-based application that allows you to use your Nokia N95 to take pictures on a vacation trip, organize them into albums, and allows you to share albums with other Nokia N95 users via Bluetooth and eventually present a slideshow (along with audio) directly to the TV from the device. Pretty cool, eh? It is an interesting product, albeit not necessarily innovative, but it did give my team ample opportunity to familiarize ourselves with J2ME development.

Comparing J2ME development with .NET CF development, I must say that J2ME development is much more complicated and troublesome. You really have to code everything from scratch or by hand, including the user interface. One can’t rely on graphical user interface development where you can graphically position your elements. Debugging on the device via Eclipse isn’t as pretty and straight-forward as I am accustomed to in the .NET CF world, and it also seems that J2ME/MIDP development is still relatively new - so the majority of sample or source code available on the web either is incorrect or just doesn’t even work. My team struggled a lot when we implemented the Bluetooth transfer of pictures and audio narrations, as the code also seemed somewhat unintuitive or more complex than it should be.

As far as software engineering processes, we did something differently this year. We developed a product from inception, and requirements engineering, to design and construction using an iterative approach. Unlike what we had learned in the requirements engineering class last year, when it was pounded into heads that one should do usability tests before any coding, this class encouraged coding user interfaces first, and then doing usability tests along the way to iteratively come to an effective user interface. The motto here was to show an early product out to potential users early and often. Like we did in the requirements engineering class last spring, we also videotaped our usability tests (that we conducted on co-workers, friends and significant others) and analyzed them afterwards to improve the usability tests.

In the end, after 7 weeks, my team delivered a working product that allows you to take pictures, annotate them with audio narrations, and transfer images; and we made a user story-centric presentation to faculty. The product also made use of the built-in GPS to geotag each image. In retrospect, I feel that we spent more time on requirements gathering, usability test and UI improvements than what I would have expected from a class focusing on construction, but I suppose the idea was to give more autonomy to the students in preparation for the practicum later this year. However, besides J2ME, the technology, I didn’t really learn much that we haven’t already covered in previous classes, so with Construction III starting next week, we will try to apply more software design patterns to our development, and I am looking forward to that.

posted by Minh Nguyen @ 3:25 PM  0 comments

Thursday, January 31, 2008

Construction II – Building a Thick Client for the Mobile Phone


I started the year by missing school. Great.

While the majority of all Class of 2008 students in both tech and development tracks gathered on campus for the “Second Gathering” earlier this month, I was down in Kuala Lumpur, Malaysia for a different conference, and regretfully was not able to attend the once-per-year event to personally meet all the students in our program again. If you wanna read up on what went on, Rom has a good summary on his development track blog here.

I flew back from Malaysia and missed the first class meeting as well, but I was informed by my team that we will be shifting our focus this semester on building a thick client application for the mobile phone. In particular, we will be using J2ME to implement some application that uses the audio/video, GPS, and Bluetooth capabilities of the Nokia N95 cellphone. For those who don’t know (and that included me just a few months ago), the Nokia N95 is one of those extremely fancy and expensive phones that has all these technical gizmos and gadgets in it. Besides having a very clumsy and unfriendly user interface, it’s a very powerful device, so coding an application against it will probably be an interesting activity.

Just like every year, I find myself stepping out of comfort zones yet again. When I was finally starting to getting used to coding Ruby on Rails code with NetBeans to create websites, I now have to learn how to program in J2ME using EasyEclipse and transfer, deploy and debug the code on a physical mobile phone. Some of our students don’t appreciate the constant change in this class, and I have mixed feelings about it too. For one, I do love the idea of learning new things and new technologies. If you don’t embrace change in Silicon Valley, you’re as old-school as of 23 minutes ago, so I welcomed the opportunity to have learned Ruby on Rails last year, as it turned out to be a good thing, because I am passionate about web development. However, with J2ME, it’s a slight different story. I am not really gung-ho about mobile development. While I think mobile phone industry is about to skyrocket in the next years as the United States is slowly catching up with the Asian markets, I feel that it sucks to be a mobile developer, given the harsh restrictions on UI and hardware—and that’s going to be the challenge this semester.

Our team has put together a proposal for an application that allows you to take pictures on a holiday trip, annotate them with captions and audio logs and play them all back as a slideshow directly from your phone. Our adjunct professor this year is an employee of Nokia, so her expertise in mobile development will hopefully help us getting up to speed with this type of development. So far, I think that J2ME development really sucks compared to .NET Compact Framework development for PocketPC, but oh-oh, I just opened up a can of worms. Let the flames start.

posted by Minh Nguyen @ 12:22 PM  0 comments

Friday, January 25, 2008

Once More unto the Breach


Well, a new semester has just begun here (well, it began two weeks ago, but close enough.) The course for this semester is Requirements Engineering, which is gathering and deciding on requirements for a product. In our case, this is a movie recommender. Imagine Netflix meets RottenTomatoes meets Amazon (or something close).


I'm on a team with one of the same teammates as last semester, a coworker at Google, and a student in Saudi Arabia (complete with an 11 hour time difference). For at least the first few weeks, I'm the group leader, which is more challenging than I'd thought initially. Still, I think the team overall is pretty solid, and we've had effective meetings so far. I'm not quite sure how my Saudi Arabian teammate manages to wake up early for some of the meetings, but he has definitely been a key member of the group. We're gathering our own ideas for the product now and will soon be conducting user interviews to refine and obtain even more potential requirements for the final product.

The culmination of the work for the first half-semester will be a rough UI design, as well as a comprehensive list of user stories and scenarios that help to define the project. I'm excited as this is not anything I've ever done before. I hope it gives me a great deal of new insight on a reasonable way to gather requirements when I need to do it professionally.

So, while my school routine is back up and running, my job is giving me even more to do, and some kind of demolition is occurring at 7:30 AM underneath the apartment where I sleep, I think I can keep things under control (and the demolitions should be done by this weekend) and am looking forward to getting this semester underway.

posted by Nick Lynn @ 9:58 AM  0 comments

Saturday, December 22, 2007

Wrapping up Construction I – Wohoo!


Last week I finished the first mini of our 3-mini Construction class (a mini is half a semester), and I must say that Construction has been all that it was promised to be—exciting, fun, a lot of cool stuff—all while learning many new things. In just over seven weeks, my excellent kick-ass team put together a prototype of a social-networking based MovieRecommender website that provides movie information, and the ability to purchase movie tickets on the web as well as the phone. We took parts of the requirements that we had gathered in the Spring 2007 semester and in SCRUM style we have iteratively planned, managed and implemented the product backlog items one week at a time. In the end, our team not only has developed a product that we are very proud of, but we’ve also over-delivered because we got so excited about this product and the technologies. Ruby on Rails was the savior in developing multiple views for our application: from HTML for the web, to trimmed-down versions in XHTML for advanced mobile phones, to WML views for old-fashioned cellphones, and … get this… VXML for voice-recognition!

VXML? Voice-recognition? Yup, you heard it right. What happened is that our team got ahead of the game pretty early; we were the first one to deliver the mobile views, getting the unit tests to run, and getting the integrated build systems to work. After already delivering the purchase-tickets feature or showing maps of movie theaters on the cellphone via GoogleMaps or even geocoding zip codes into “nearby theaters” by using Yahoo’s GeoCoding webservice, we decided that the last task of allowing users to reserve restaurants was just too boring for us, and that we wouldn’t learn anything new. So, we sat down with our faculty and negotiated with him to deliver the VXML/Voice-recognition instead. With much research and fun we used Tellme Networks’ free VXML-development environment to develop a voice-solution that allows you to call a 1-800 number to access movie information. Tellme’s call server would access the necessary movie information by accessing the VXML files that we developed and hosted on the Carnegie Mellon West web servers. How cool is that? In fact, the stuff that we do in our technical track has become so cool, that two students in the development track have already decided to switch to the technical track!

This example demonstrates again that CMU West ain’t your typical master’s program. Where else do you get to develop with state-of-the-art technologies and practice new software development lifecycles in a safe environment, increase your breadth of technical knowledge so rapidly, all while having fun and even getting to have a say on the curriculum’s content and direction? Welcome to Carnegie Mellon West.

Happy Holidays!

posted by Minh Nguyen @ 3:38 PM  0 comments

Previous Posts Archives
Information Sessions
Info Request
Apply Online
Master's Programs
Careers at West
Faculty and Staff
News Room
Professional Development Center
Introduction to Carnegie Mellon West
About the MS Programs
Tips for Prospective Students
Reasons for Choosing an MS Program
ROI on an MS Degree
Carnegie Mellon West - (866) 401-WEST (9378)
Building 23
Moffett Field, California 94035
Contact Us

©2008 Carnegie Mellon University. All Rights Reserved.