Monday, March 28, 2011

Friend's Wedding

Today I received an invitation to one of my best friend's wedding. I have never once attended a wedding before, and so this is an exciting opportunity for me. The wedding is well after I finish my summer job, and just before I start school again in September.

The wedding will take place in Calgary, which is the Bride's hometown. I have only been to Calgary once when I moved to Vancouver from Ontario with my dad. We drove to Vancouver in a U-Haul moving van with all our stuff, and only passed through Calgary briefly, so I didn't really get to see much of it. Hopefully when I go to the wedding, I will have more time to explore Calgary and get the full "Calgary experience". I also have some friends who live in Calgary so this would be a good chance for me to go visit them.

I hope that I can behave myself during the ceremony. Ever since I was a kid, I've had trouble with laughing at inappropriate times, which I've gained some control over as I grew up, but still struggle with at times. I can just picture myself now chuckling to myself during the ceremony and embarrassing myself. There must be something I can do to prepare myself for this so I won't feel like laughing, but I guess I have nearly four months to prepare. In any case, I'm happy that two of my best friends are getting married, and should try to help make the wedding as happy for them as possible.

Sunday, March 27, 2011

Microsoft ASP.NET

During the summer I will be working with the ASP.NET team at Microsoft. I do not know much about ASP.NET but hopefully during this blog I can convince you otherwise. ASP.NET is Microsoft's latest server side programming language, for their .NET framework (see my previous post on .NET). What do I mean by server side programming? This is an internet concept that is perhaps best described with an example.

Nowadays there is many different kinds of content available on the internet, which you interact with in different ways. One type of content is typified by Youtube. When you watch a movie on Youtube,  your computer starts running Flash code to display the movie in your web browser. Flash code is an example of client side code, code that runs on your computer at home. If you don't have flash installed, you will not be able to watch the video, and if your computer is too slow then your experience will be impaired

Another example of internet content is the Google search engine. When you type a query into Google, that query is sent to the computers at Google's headquarters in California, and those computers do some work to find the content you're looking for. None of this work takes place on your computer at home, which is the difference between the Google search engine and Youtube. Code that executes on a some external computer is called server side code, and ASP.NET is an example.

Microsoft .NET

While I'm working in Redmond, I will probably need to learn about Microsoft's .NET framework. Today I will describe what .NET is from my limited knowledge. The .NET framework is a set of tools and services that allow software developers to rapidly develop new applications. This is useful because many applications have similar requirements, like reading and writing files to disk, retrieving information off the internet, or displaying information in a window to name a few. With these tools already available, the application programmer does not have to expend time and effort in writing these tools from scratch, and testing them to ensure reliability.

The .NET framework is reminiscent of the Java Runtime Environment (JRE), which allows computers to run any Java program on any computer on which a JRE has been installed. Since there are implementations of the JRE on almost every popular platform (Windows, Mac, Linux), Java programs are considered to be platform independent. One big difference between the JRE and the .NET framework is that the .NET framework is not implemented on all platforms. Microsoft only has developed implementation of .NET on the various Windows operating systems, but not for any other. An open source implementation of .NET for Linux is in progress, called Mono, but at this point is not 100% completed. Due to this limitation, the .NET framework is not considered to be platform independent, but Windows specific.

Thursday, March 24, 2011

Software Developer and Test (SDET)

At Microsoft, there are three roles they hire interns for: Project Manager (PM), Software Developer (SDE), and Software Developer and Test (SDET). Over the summer, I will be working as an SDET for the ASP.NET group. Today I want to describe what the SDET role is, and compare it to the other roles.

Almost all software companies have PMs and SDEs, the PMs work on the design of the software system, and manage the team working on the project. The SDEs do the programming, they write the code that makes the software work. Their challenge is to write the best code possible, using the best techniques, algorithms, and programming languages, but also, senior SDEs can be involved in the design process with the PMs because they have their own perspective of the software system.

Generally speaking, the SDETs are in charge of testing the software. That means a lot of different things at Microsoft, and includes testing the design of the software for potential bugs, testing the functionality of the software product, testing usability, portability, and a wide variety of other factors important to the customer. Also, SDETs try to break the software to uncover bugs, which often involves a lot of programming to produce test cases. 

Software testing is a very important part of the software development process, but is a part that is woefully ill-practiced at most small software companies due to time and budget constraints. Testing at Microsoft, however, is very important because they produce large, complex software which is used by hundreds of millions of people. In other words, code correctness and reliability are of the utmost importance at Microsoft, and they hire almost as many SDETs as SDEs to obtain a high standard for code reliability.

Microsoft Interviews

One week today I had interviews at Microsoft at their main office in Redmond, WA. Yesterday I received a job offer from them for the position I interviewed for, and I'm very excited about working there this summer. The interview day was very fun for me for a lot of reasons. Microsoft paid for my flight to Seattle, paid for my hotel and taxi service, and also provided me with a generous food stipend for the day. I stayed for three days and really got pampered, I had dinner the night before my interviews at the hotel and had a big steak and baked potato, and had breakfast in my room the morning of the interviews. The breakfast consisted of scrambled eggs with ham, hashbrown, and toast. This was probably the most memorable breakfast of my entire life.

I had talked to a few people who had done the intern interviews in preparation for mine, and they told me that it was the hardest day of their lives. As for me, I had a lot of fun. I had great conversations with all of the interviewers, asked them some really good questions, and I did very well answering all of their questions too. I think they were very impressed with me, at least that's what they said when they offered me the job.

I think the question I'm most proud of was a Tester question involving HTTP. The thing is, I didn't know much about HTTP and told the interviewer that, but he wanted to see how I answered the question anyways. He wanted me to test the protocol he wrote on the board, but only testing one keyword in the code (the GET keyword). Even though I don't know much about HTTP, I came up with some advanced test cases that he said he would expect from senior testers, so I was very proud of my answers. In particular, I pointed out potential problems with character encodings and version numbers. He seemed very impressed with that, and I think I impressed the other interviewers as well. Well, I suppose I must have since I got the job!

Wednesday, March 23, 2011

Future of Books

The Kindle is a handheld electronic device for reading eBooks manufactured by Amazon, and has attracted a lot of attention lately. This is mainly because the device is not designed to be multipurpose, like the iPad or tablet computers, but is designed specifically for reading books. In particular, the screen is not a backlit screen like most other devices, and is easier on your eyes when reading. I've never used one, mainly because I'm too cheap to buy one and frankly don't read books often enough to justify buying one anyways, but I've seen a lot of them at school or on the bus, and I am impressed with them.

This technology could influence how we distribute print media in the future. A lot of print media has already been replaced by electronic media, with posters and billboards (and even restaurant menus) being replaced by large flatscreen displays, but the Kindle and other eReaders allow you to carry all your print media with you in one tiny package. And since print media is so compact in digital form, you can literally carry millions of books in your pocket. I think that there is a certain appeal to the physical book form still, in particular the action of flipping pages to quickly access information feels good to people, and is intuitive. At this point in time, I don't think that eReaders can match an old fashioned book in terms of feel and ease of use, but I also think that it's just a matter of improved software designed and touch screen interfaces before they reach that level.

Switch to Windows

Well, I have accepted a job offer at Microsoft, and will be working pretty closely with .NET for three months this summer. This means that I will probably want to start using Windows again, because I believe it's a good idea to develop on the same system that you're developing for. I actually really like Windows 7, and I think that I will be happy using Windows as long as I can find some decent replacements for features I'm used to in Linux.

For example, I will probably look into command line features in Windows. I know about Cygwin, which is a POSIX compliant shell for Windows, but my past experience with Cygwin isn't very good. When I used Cygwin before, I found it was pretty slow, and was missing a lot of features I was used to. Probably I will want to look into more native solutions for Windows, and not a hack to use Unix programs. I would like to be able to open programs using ALT-F2 like in Linux, which I think is a useful feature, and also scrolling in windows that don't have mouse focus is a feature I'm very used to in Linux which is not the default behaviour in Windows.

I know that a lot of the programs I like in Linux are also supported in Windows, like Vim, Google Chrome, Open Office, Latex packages, ssh, and even 3rd party MSN Messenger clients like Pidgin, Empathy, and Emesene. In any case, I think working at Microsoft will provide me with the opportunity to become more familiar with Windows tools.