Tuesday, August 11, 2009

The College Choice

I’m back… Sorry for not posting in almost 5 months. Time flies when you are writing code…

I travel back to Tennessee several times a year, but during one time each year, I manage and run the technology the Tennessee Future Business Leaders of America State Leadership Conference. After the conference, a student came up and introduced himself to me. We talked for a few minutes about his event, and I offered to help him prepare better for it since he would go compete at the national level. He did not require my help and was able to place in the top 10! It is a huge accomplishment when you compete from the best of the best from across the country.

Recently, he found me on Facebook and proposed a question (summarized) that I have thought about for a long time:

I’ve decided that computer engineering is something that I want to take seriously, and I would like to know what you thought of your experience at University Bar. Do you think I would be better off going to University Foo, or perhaps another school even out of state?

[Soapbox Warning] For those that know me, I went to the University of Tennessee at Chattanooga and majored in Computer Science. I have been very impressed with the level of education that I received. The professors are top notch, intelligent, and work hard to ensure their students receive a world-class education. The facilities are excellent, and it allowed me to explorer some interesting topics in computer science.

While working at Microsoft, I have had the chance to meet engineers from all over the world and recruit at universities across the United States. These experiences have taught me one thing: the university you attend is meaningless… to me. It’s harsh, but it’s true. Remember, this is only my view. For others, they may have a different opinion.

When I look at a resume, the school the student attended has no bearing with me. I do not believe that attending a certain school shows that one student is “better” than another from a different school.

There are many factors that influence a student’s decision to choose one school over another.

A chief judge for dancing tells his judges to not discount a dancer because they may wear an outfit that is not as pricy as an outfit from another competitor. They may not have much financial means to purchase nicer clothing. He tells judges that they must find a dancing reason to separate competitors.

So with that factor in mind, universities have differing costs associated with them. The location could be a major consideration for a student. Feel free to name your differing factor.

I have had one philosophy with higher education that a high school teacher once instilled in me: once you reach college, the level of education that you receive is up to you. Colleges offer courses and professors assign grades, but you ultimately have the power to decide how much education you receive and what you take away from it. After all, you are paying for your education at this point.

I took the opportunity at UTC to utilize their facilities and leverage the faculty to get the most of my education. Could I have done better? Absolutely. There is more I could have done. However, I decided to focus on certain aspects of my education and try to excel when it meant most to me. Did I succeed? Absolutely!

So back to the question at hand. A few years ago, I noticed that some recruiters get excited when students from a prestigious university applies for a position, and those students often received higher priority and status with the recruiter. However, I am seeing that trend change for the better. It is a huge shift. So while some recruiters do prefer a “brand name”, others are seeing the potential with students from lesser known universities.

Ultimately for a recruiter, they look at how well you fit with a position and your risk level for becoming a long-term employee. I will have another blog post on reducing your employment risk soon. Students from “brand name” universities have less risk because students before them have done very well and showcased that the school produces great talent. Now all the recruiter has to do is find out whether you would be a good fit for their open positions.

For someone from a lesser known university, it can be tougher to get noticed by a recruiter. How do you get noticed by recruiters? You need make yourself stand-out and reduce your risk.

You should first define what your objectives are for higher education. Some thoughts for objectives while you are in school:

  • Determine your focus,
  • Focus on those aspects of your education,
  • Take advantage of any opportunities that come your way,
  • If no opportunities present themselves, make them yourself,
  • Leverage the faculty and facilities as best as you can,
  • And most all, have fun!

Overall, you should choose a university that offers what you want to learn.

  • Look at the courses that the universities offer and determine if they fit your career path.
  • Take advantage of student visit days.
  • Schedule some time to talk with the professors about how they teach, what they teach, and what they expect you to take away from their courses.
  • Talk with students that graduated to see how the courses helped in their quest for higher learning.
  • Talk with current students about what they are learning and how they use leverage the facilities.

Determining the right university can be tough. I wish students well in finding the right university and their future job searches. It’s a tough market… just be yourself!


Sunday, March 15, 2009

Interviewing – Design Questions

One of the side tasks I do at Microsoft is interview college students for full-time and intern positions remotely.  We do this over LiveMeeting.  If you haven’t used LiveMeeting before, it is an application that allows you to allow multiple users worldwide to hear audio and view slide decks.  It also allows the users to simultaneously modify a text document or whiteboard.

During the interviews, depending on what I see from a resume, I may ask either a design or coding question.  This design area is one that a lot of colleges don’t focus on: how do you design software?  I have found that having solid design skills can lead to a solid developer.  You must be able to rationalize your thoughts before coding and one of the best ways to do that is to design your solution first.

I mostly ask intern candidates to code while full-time candidates get design questions.  I expect that intern candidates may not have had many design projects in college yet.  Full-time candidates, more than likely, have had the opportunity to design.  Usually this comes from a senior project class.  I’ll blog about coding questions in the future.

During the technical portion of the interviews, interviewers often ask a question and leave it vague.  We want you to get more clarity on the issue we want you to solve.  You should be asking questions to help understand the true problem.  There isn’t a magic number of questions to ask.  You need to understand the complete problem before trying to solve it.

Here is a sample design question someone could ask: Design an automobile.

Design an automobile?  I thought this was supposed to be a technical question?  It still is.  How would you design an automobile?

There are lots of questions that you could ask about this design question.  ASK THEM!

  • Why do you want me to design an automobile?  There are already plenty of automobiles in the market.
  • Who is this automobile for? Know your customer!
  • What type of automobile? Hybrid, truck, SUV, electric…
  • Where will this be sold? One location may have certain requirements, like the steering wheel needs to be on the right-hand side of the automobile.
  • When does this need to be release? There is always a timeline involved that will restrict how you use your resources.
  • What is your budget and what resources do you have allocated to you? Money, human resources, space, etc… more constraints.

As you can see, these questions all start with the 5 ‘W’s: who, what, where, when, and why.  This is a great way to get answers to a vague design question.  However, you have to be the one to ask them.  From here, you can come up with a feature list and a potential design for the automobile.

One thing to be ready for is to potentially turn a part of your design into code or your design leading into a coding question.  I do this often during interviews to make the coding portion relevant to the design.

How could you make a coding question out of designing an automobile? Just about any automobile has a radio… and a radio has stations that you can program for easy access.  How do you design a structure to hold a radio station for the automobile?  Can you write the code for it and some helper functions?

We want you to be free thinking and understanding not only how to code… but how do you design great software that is maintainable, reliable, efficient, and reusable.  You could add others there, but you start running into tradeoffs.  If you see that you need to make a tradeoff, explain it in detail to the interviewer.  We want to know what you are thinking and why.  The only way for us to know this is if you to tell us.  The interviewer may at times ask you to explain yourself or remind you to express your thoughts verbally.  Don’t worry when this happens… we just want to understand what you are thinking.


Thursday, March 5, 2009

How to Setup a Mapped Drive on your MCX with a Domain-based Computer

Abstract: With the development of Media Center Extenders (MCX), you can not join the Media Center PC to a domain. This document will outline steps you can take to create a mapped drive for a MCX when media files are stored on a domain-based computer’s shared folder.

NOTE: This article assumes you have shared the proper folder on the domain computer and set the permissions correctly for the user account on the domain. Within the article, the password will be exposed in plain text in a batch file. If you do not wish to have your account’s password shown, it is recommended to create a new domain account.

NOTE: You may have seen this on http://blog.vanosdale.com/.  That was my old blog, and I have since taken it down.  Well, I have set it up to redirect to here soon…

Determine User Accounts for Media Center Extenders

You need to determine what user account is associated with the MCX for the mapped drive. If you have only one MCX or want all MCXs to be mapped with the same share and credentials, you can skip over this section.

  1. Open Media Center Extender Manager (Start -> All Programs -> Accessories -> Media Center -> Media Center Extender Manager).

  2. Choose the MCX from the list and click Properties.

    1. If you do not know which MCX is the one you want, you will need to match it up with the Device ID from the MCX.

      1. From the MCX, go to Settings -> Extender -> About

      2. Match the Device ID with the one in the list. Device IDs in the list are in bold print. Also, the status should show Connected for the device.

  3. Write down the user account from the Media Center Extender Properties dialog box. It should be in the form of MCXn where n is a number.

  4. Close out of the Media Center Extender Properties dialog box and the Media Center Extender Manager.

Create the Batch File

You will need to create a batch file to handle the drive mapping process.

  1. Start Notepad (Start -> All Programs -> Accessories -> Notepad).

  2. Enter in the following text:
    net use z: SHARE PASSWORD /user:ACCOUNT /persistent:NO

  3. Replace SHARE with the share on the domain computer using the following syntax:

  4. Replace ACCOUNT with the domain account using the following syntax:

  5. Replace PASSWORD with the password for the account.

  6. Open the Save As dialog box (File -> Save As).

  7. In the Save in drop down menu, choose the drive where Windows is stored (most PCs use C:).

  8. Create a new folder called Scripts.

    1. Click the New Folder icon.

    2. Type Scripts to replace New Folder.

      1. If this does not work, right-click on New Folder and choose Rename.

  9. Select the Scripts folder and click Open.

  10. In the Save as type drop down menu, choose All Files.

  11. In the File name text box, type in MCX.bat

  12. Click Save.

  13. Close Notepad.

Share the Scripts folder

You will need to share the scripts folder as the NETLOGON shared folder. This will help enable logon scripts for the local Media Center PC.

  1. Open the Run dialog box (Start -> Run).

  2. Type in the following:

  3. Replace X with the drive letter chosen in the previous section.

  4. Click OK.

  5. Right-click anywhere in the white space and choose Properties.

  6. Click on the Sharing tab.

  7. Click the Share this folder on the network check box.

  8. Type in NETLOGON in the Share name text box.

  9. Click OK.

  10. Close the Scripts folder window.

Set a Logon Script

You will need to set the MCX.bat file be the logon script for the MCX user account.

  1. Open the Start button.

  2. Right click on My Computer and choose Manage.

  3. Expand the Local Users and Groups tree (click on the + symbol).

  4. Click on Users.

  5. Right click the user account that you wrote down in the first section and choose Properties.

    1. If you did not write one down, choose the first MCXn account listed, where n is a number.

  6. Click the Profile tab.

  7. In the Logon script text box, type in MCX.bat

  8. Click OK.

  9. You can either do this for each MCXn account listed if you want all MCXs to access the same content on the folder or close the Computer Management window.

Add the Folder for a Media Center Experience

Now that you have the drive mapped, you should be able to add the drive using the Add Music, Add Pictures, or Add Videos wizard.

  1. If your MCX is turned on, turn it off and then back on.

  2. Select the experience you want to add media. For instance, My Music.

  3. Press More Info or Details on the remote and choose Add Music.

  4. Select Add folders and choose Next.

  5. Select Add folders on this computer and choose Next.

  6. Select the Z: folder and choose Next.

  7. Choose Finish.

Friday, February 27, 2009

Code Reviews – Why Do Them?

I’ll start off my code review series on why you should do code reviews.  I’ve doubted myself on why I should write this entry.  After giving it some more thought, I found out that many college students do not conduct code reviews while in school.  Most industry hires will have done code reviews.  If you have been an independent developer, you probably have not done them.  So this post is geared towards those who have not done them.

Code reviews are a great way to find out everything from nitpicks to design changes to security flaws that may exist in your code.  When I started as an intern, I had not completed any code reviews in college.  When I did my first code review with Office, I found out quickly just how little I knew about my coding.  It was like a wake-up call.  Almost all code reviews coming back to me have some great feedback, either with a security issue, styling, design, performance, etc.  Or even something I never realized about the code (could be that I’m working in new code).  The experienced developers will say that I should have sought out the advice from other developers before making the change.  While that is true, I’m still learning and getting better at that.  That is something for all junior developers to keep in mind: seek out the advice and help of those more senior to you.

You learn from other developers; many times developers more senior (not in age, necessarily) than you.  For the majority of them, they are senior for a reason.  They know their stuff and want to make sure that you understand the issue fully before trying to implement or fix it.  You should actively seek out their knowledge on the subject and be willing to accept their criticism and feedback about what you have done.

When you are in college or doing your own coding with no thoughts about a code review, you tend to have a different mindset when you develop.  Think about that for a minute.  You tend to think differently when you know others will be reviewing your code.  That’s an important take-away.  You have pride as a developer.  Most of us do.  So we want to make sure that we show that pride to other people.  I do… and I am sure you do as well.  If you are coding independently, you may cut some corners, not be as efficient, leave an Easter egg behind, etc.  These, and more, will be called out in code reviews.

There are a couple of different levels of code reviewing:

  • Grammar, spelling, variable names, syntax, comments, spacing, and argument checking
  • Design issues and security flaws

With code reviews, you should definitely think about how all the different components (not just different classes, but methods in the same class) use the code and ensure they will not be broken or affected.

To wrap this up, I do have advice for professors: students need to be performing code reviews while in classes.  They should start in their introductory computer science class.  Students need to learn quickly that fellow colleagues will be reviewing their code in the industry.  Students can definitely be critical of other students, so they should be taught good code review practices.  Technical writing courses should focus on ways to structure their comments to not offend the submitter.  I’ll have more to say on code reviews in more posts.


Thursday, February 19, 2009

Another blog? UGH!

Yes, this is YAB, yet another blog.  I’ve wanted to get back into writing, share my thoughts with others about my experience in the tech industry, and create an avenue for discussion of topics that interest me.

My goal (like many other bloggers) is to create a post once a week.  However, it may come down to about once every two weeks.  Regardless, I do have some thoughts on the first couple of posts in mind.

If you are interested in why “enOZero”, many of my colleagues and coworkers call me Oz.  It’s from my last name.  I would like to thank the staff of the Microsoft Intern Game for giving it to me and the other Andy who forced the group to come up with a nickname for me.  That’s the Oz part.  The other part is one and zero, just one flipped around so that I could use OZ for the middle.  As for the pronunciation of enOZero, it is “e-no-zero”.

In the mean time, sit back and relax… If you have any ideas for blog posts, please feel free to post a comment.  I will do my best to read every comment that appears.