Computer Engineering: A Graphical Overview

Computer Engineering: A Graphical Overview

Computer Engineering: A Graphical Overview

During my 4A term at the University of Waterloo, a set of events that I don’t fully understand myself resulted in me becoming the yearbook editor for the Computer Engineering 2009 (8-stream) class.  When I was putting together our pages, I stumbled across Wordle – a web application for generating word clouds – and thought that I could use it to sum up Computer Engineering at UW graphically.

For data, I used the ECE course descriptions from the UW undergraduate calendar, filtered down to only include courses taken by computer engineering students, and with the addition of the course descriptions for core non-ECE courses (e.g. those offered through math or science).  The result was a word cloud consisting of the top 50 words used to describe computer engineering courses at the University of Waterloo, sized by the number of occurrences in course descriptions.

For those of you with the 2009 yearbook, I encourage you to check out the result on page 169; for everyone else, a PDF link is below.  Besides the words ‘computer’, ‘engineering’, and ‘ECE’, which were artistically weighted to dominate the cloud, it turns out that the terms ‘design’, ‘systems’, ‘analysis’, and ‘control’ all play a big part of a computer engineers’ academic life.  Who’d have guessed?

Computer Engineering: A Graphical Overview [pdf, 538K]

Posted in Waterloo | Tagged , , | Comments closed

HP Mini 110 with Windows 7

HP Mini 110-1030CAAfter my previous laptop (an HP tablet) decided to pack it in for good after only 18 months of use, I decided to pick up a cheap netbook to tide me over until I’m finished my masters (I’ve got a desktop PC that fills my day-to-day computing needs, but I can’t take it with me to class).  After a lot of research, my choice came down to an Asus EEE PC 1005HA or a HP Mini 110-1030CA.  Due to licensing restrictions on cheap versions of Windows XP, every (cheap) netbook you encounter has nearly identical specs – 1 GB RAM and an Atom N270/280 CPU – which means there isn’t much to differentiate between models.  Initially, I leaned toward the Asus – it’s 10 hour battery life (versus the Mini’s 3) and slightly taller (by 24 pixels) screen make it a better machine, but also result in a higher cost (not to mention that finding a retailer with it in Canada was nearly impossible).  Both computers had above-average keyboards for netbooks – the Mini’s is often recognized as the best available on a 10” netbook – my only real constraint.  After some well-timed sales and a bit of price matching, I was able to track down the HP for $90 cheaper than I could find the Asus for, making it a much better bargain.  I’m crossing my fingers that it will last longer than my previous HP laptop – which had 3 major failures requiring service over its short lifetime, the last of which fell outside its warranty – but at only $300, it’s worth the risk.

Having used Windows 7 off and on since last October – and using Vista for the year prior to that – going back to the version of Windows XP that came with the Mini just wasn’t an option for me.  Windows 7 has thoroughly impressed me so far on all the machines I’ve used it on, not only on a newer Intel quad-core but also on my 7-year-old Athlon XP desktop machine.  So I decided to grab the RTM version of Windows 7 off of MSDN and install it on the Mini; a quick guide to the install process and my initial thoughts on the Mini with Windows 7 follow.

Installing Windows 7 on a HP Mini 110-1030CA

Step 1: Choosing an Install Method

Like Vista before it, Windows 7 comes on a DVD – an awkward proposition for netbooks, which usually don’t come with an optical drive.  There are three general ways of getting Windows 7 on to these machines; via external DVD drive, via USB key, or via a DVD drive on a networked computer.  Since I don’t have an external DVD drive and my largest USB key is less than the required 4 GBs, I decided to take the third option – doing a network install via a DVD drive on another computer – and that’s the process I’m describing here.  A quick Google/Bing search for ‘windows 7 install netbook’ or similar should yield you a ton of results on how to do it with a USB key if you’re interested in that route, though it seems much more complicated than doing it over a network.

Step 2: Share out your DVD Drive

If you’ve shared a folder on your computer before, then sharing your DVD drive should be pretty easy.  Go to the computer you wish to share the drive from, and insert your Windows 7 disc.  If you’re on Windows 7, open ‘Computer’ by pressing Windows-E on the keyboard (or choose ‘Computer’ from the start menu) and locate the DVD drive in which you placed your Windows 7 install disc.  Right click on the drive and choose ‘Properties’ from the menu that appears; then, click the ‘Sharing’ tab.  Then, share the drive (‘Advanced Sharing’ –> ‘Share this folder’).  Finally, check to make sure that your computer is set up to share files by opening the Network and Sharing Center (Start –> ‘Control Panel’ –> ‘Network and Sharing Center’ –> ‘Advanced Sharing Settings’) and checking to make sure that ‘File and printer sharing’ is set to ‘Turn on file and printer sharing’.  You might also want to make sure ‘Password protected sharing’ is set as well.  Then, make a quick note of your computer’s name by hitting the Back button to go back to the Network and Sharing Center, and write down whatever the name of the computer is in the network map at the top of the screen (it will be labelled ‘this computer’).  If you are on Vista instead, the above instructions should work, though some of the items may have slightly different names.  And if you’re on Windows XP, then the steps are completely different – follow this support article instead, except you’ll be sharing out a drive instead of a folder.

Step 3: Configure your hard drive

If you only want to have Windows 7 on your machine, this step isn’t necessary.  However, if you want to dual boot Windows XP and Windows 7, or want to keep your XP partition around for restore purposes (my HP Mini 110-1030CA didn’t come with restore discs or a restore partition), then you’ll want to partition the hard drive in order to create a separate partition for Windows XP.  I used the free version of Easeus Partition Master to do this, but there are other options (Partition Magic, GParted, etc.).  Using your partition tool, resize/shrink the Windows XP partition so that there is enough room leftover to install Windows 7 (at least 16 GB, though that won’t leave much room for applications – Win7 takes around 10 GB on its own).  Then, create a new partition in the empty space, formatted as NTFS.  Hit apply, wait for the changes to take place (a reboot is probably required), and once it finishes you’ll have two hard disk drives that show up, one (C:) your previous Windows XP drive, now smaller, and another one (D:, unless you’ve selected a different mount point) that’s completely empty and waiting for your Windows 7 install.

Step 4: Start the install process

Now it’s time to start the install.  Connect your Mini to the same network as the computer you are sharing the Windows 7 install disc from.  You may have to mark this network as a ‘Home’ or ‘Work’ network for the computer hosting the install disc, since by default Vista and Windows 7 don’t allow file sharing over public networks.  Then, on your Mini, open the ‘Run’ box by pressing Windows-R on the keyboard (or choose ‘Run’ from the start menu) and type two back-slashes followed by the name of the computer hosting the install disc (you wrote this down in step 2).  For instance, if your machine name was ‘dvd-pc’, you want to type ‘\\dvd-pc’ in the run box.  Then, press OK; after a few seconds, an explorer window should appear containing all of the shares on the host computer.  Double click on the share you created in step 2 corresponding to the computer’s DVD drive (by default, it’s a single letter matching the driver letter of the DVD device on the host computer).  The DVD should spin up on the host computer, and you should see a number of folders appear along with an executable named ‘setup.exe’.  Double click ‘setup.exe’, and wait as the Windows 7 autorun starts (it could take 30 seconds to a minute, depending on your network speed).  Once it starts, select the ‘Install Now’ option, and wait as the installer loads (another minute or two).  Follow the prompts that appear, selecting ‘Clean’ install and the drive you created in step 3 when asked, and then sit back and wait as the installer copies all of the necessary files off of the disc via the Mini’s network connection, reboots to perform the installation, and reboots once more to prepare everything for use.  Once it’s done, it’ll ask you to configure the time zone, license key, and password, then it’ll drop you into the Windows 7 desktop with everything installed.

Step 5: Windows Update

The first thing you should do after installing a new operating system is to update it to the newest version, in our case by running Windows Update.  Simply type ‘Windows Update’ in the start menu, open the program that appears, and press ‘Check for updates’.  Once it comes back with a list of things to be installed, ensure there is a checkbox beside all ‘Recommended’ items and any important ‘Optional’ items (there was a network driver waiting for me under ‘Optional’, but I didn’t need any additional languages), and then press update to download and apply the updates.

Step 6: Install Missing Drivers

Once Windows 7 has finished update, you’ll have to install any drivers it wasn’t able to install during the install or update process.  On my HP Mini 110-1030CA, Windows 7 was able to find all of the drivers it needed, but there is one driver it doesn’t get perfectly right: the touch pad.  Don’t worry – the touch pad still works, but the scrolling functionality doesn’t work.  To fix it, head on over to the touch pad manufacturer’s driver site and download the drivers for Windows Vista 32-bit Edition (or Windows 7 32 bit, if they are there – they weren’t when I tried it).  Once the drivers are finished downloading, double click to start the install, follow the prompts, and reboot.  If you’re not using the same Mini I am, head on over to the Device Manager (type ‘Device Manager’ in the start menu) and locate the drivers for any device with an exclamation point beside it.  Windows will expand any item that has devices with missing drivers, to if all of the top-level categories are collapsed, you’re good to go.

Step 7: You’re Done!

Yep, that’s it – you’ve managed to install Windows 7 on your HP Mini!  Before you finish up, consider un-sharing your DVD drive by reversing the things you did in step 1; however, if you have more CD/DVD based software to install, do that first.

Windows 7 on a HP Mini 110-1030CA: The Results

I’m pretty impressed with how well the machine runs. I’ve upped it to 2 GB of RAM over the stock 1 GB since I had a spare 2 GB stick – and 2G RAM sticks are cheap enough now to make it worthwhile in any case – which allows Windows 7 to use it to speed up program launches.  It’s not perfect, of course – the screen often feels small, and I have encountered the occasional slow down, but outside of that it’s surprisingly usable for just poking around the Internet.

The Keyboard

I'd prefer a full-sized left shift, please and thanks

I'd prefer a full-sized left shift, please and thanks

The keyboard’s pretty good (most places regard the Mini as having the best keyboard on a netbook, and I tend to agree), though my model has an odd copy of the ‘|\’ key where the rest of the left shift key should be which I keep pressing by accident when I try to type a capital.  It might be because I have a Canadian model (the keyboard has the French-Canadian keyboard markings too), though it’s something I’m sure I will eventually get used to (or I’ll learn to use the right shift key, which is full size).  In the meantime, I’ve used SharpKeys to remap the extra key to left shift so that it doesn’t interfere when hit by accident.  Incidentally, the other annoying key is the traditional ‘|\’ key; it is located on the middle row of the keyboard right before the two-row enter key, rather than above a single-row enter key.  Both my desktop keyboards have single-row enter keys, so this placement results in many accidental keypresses – and it’s not something SharpKeys can fix.  Outside of that, however, the keyboard has been great – a little smaller than I’m used to, but not enough to impact my typing.  The keys have a nice feel and travel, the arrow keys are arranged in an inverted T shape, both backspace and the spacebar are large, and the keys which have been removed from the keyboard to save space (home/page up/page down/end) have been function-mapped to easily memorable/accessible keys.  Surprisingly, HP didn’t function-map the number pad over the right half of the keyboard, but since I rarely use this feature I haven’t missed it.

The Screen

The screen is – as one would expect – quite small.  For web use, it hasn’t been a huge hassle; there’s just more scrolling than usual.  For regular application use, I’ve found it absolutely terrible at multiple windows.  At this point, I’ve basically given up using windows that aren’t maximized to the full screen size, and using more than one window at once is an exercise in alt-tabbing.  Even when using a single application, the small screen sometimes makes it difficult; there are a lot of applications that assume that vertical space is abundant, and fill it with 100+pixels of toolbars.  Careful selection and configuration can minimize this problem – I’ve found Google Chrome to be the fastest and leanest browser; Thunderbird (and Firefox) work better when using small toolbar icons, no toolbar text, no status bar, and this extension to get rid of the menu bar; Office’s ribbon can be minimized by double-clicking one of its tabs; and Windows 7 runs great with an auto-hide taskbar that’s mounted vertically along the side of the screen – but there are a few applications that perform poorly (I’m looking at you, Windows Live Messenger…).  Since more and more applications are on the web these days, the use of multiple windows is less and less of a concern.

The Horsepower

While I feared that the Mini would be underpowered, it has not turned out to be the case.  It’s not something I’d use for all my computing tasks, but for something small to tote around to check one’s email with and have something to do during otherwise wasted time, it can’t be beat.  The Mini has no trouble with regular-quality YouTube, even full-screen, though HD YouTube is too choppy to watch.  Microsoft Office runs great – heck, it’s even been handling Visual Studio admirably well.  With a Windows Experience Index of 2.0 (Processor: 2.2, Memory: 4.5, Graphics: 2.0, Gaming Graphics: 3.0, Hard Disk: 5.6), the HP Mini 110-1030CA is able to handle Windows Aero without trouble, too.  And it uses hyperthreading to present two ‘virtual’ processors to the operating system, which improves the interactivity of the system to the point where I haven’t noticed a foreground task being blocked by a heavy background one.  All in all, for the things I’m using the netbook for I can’t tell that this machine has significantly less power than the other machines I’ve used.

The Operating System

Windows 7 works great, no ifs, ands, or buts.  It’s modern, fast, and easy to use, and installing it (as the instructions above show) is a hassle-free experience.  And it’s certainly suited for netbooks – I’m running the Ultimate edition, and so far it has been consistently faster than the version of Windows XP that came with the Mini.  It responds instantaneously to keyboard and mouse input, and resuming from sleep or hibernate happens quickly.  With all of my commonly-used applications installed, it boots to the desktop in about 45 seconds, and it’s ready to go as soon as you see the desktop.  I haven’t experienced any stability problems, either with Windows itself or with the drivers it has loaded.  All in all, I’ve got no complaints whatsoever about Windows 7, and highly recommend that other netbook users out there install it as soon as they can get their hands on a copy.

Final Thoughts

Overall, I’m incredibly impressed with this little computer – and the emphasis there goes on both little and computer.  It’s sure easy to carry this thing around – it weighs just over a kilogram and measures 10.5” by 7.5”, making it smaller and lighter than most of my textbooks – and the battery life so far has been sufficient in every scenario I’ve used it.  And it’s an actual computer, not a glorified cell phone; I don’t feel myself avoiding typing on it or considering whether or not it supports something (Flash, Java, etc.), I just go ahead and do it.  The screen is large enough to read comfortably, and the speakers, while very definitely “laptop” sounding speakers, are clear and full.  Granted, there are some compromises one has to make – it’s certainly not a ‘desktop replacement’ laptop – but for me, those compromises are rare enough that I can work around them easily and still get a significant amount of utility from the Mini.  Final Vertdict: the HP Mini 110-1030CA is an excellent second (or third) computer for students and other people on the go, and works wonderfully with Windows 7.

Posted in Miscellaneous | Tagged , , | Comments closed

The Ideal Work Term Progression for Computer Engineers, part VI

With their Computer Engineering degrees now complete, my classmates (and I, in a sense) are now working at – or searching for – their first permanent full-time jobs.  Looking back on the journey that got us where we are, the one thing that stands out between my classmates is the experience they got while on their co-op terms, and the quality of their resulting full-time jobs.  I thought I’d take this opportunity to share what I’ve learned about what co-op jobs you should be looking for at each stage in the Waterloo co-op progression.  This article is the fifth in a series of 6 (parts I, II, III, IV, V, and VI) on what you should be doing for each co-op work term with the University of Waterloo in order to get jobs with the best companies in your last few co-op terms; this part covers your fifth work term.

This series is written for computer engineering students in the University of Waterloo’s cooperative education (co-op) program, which consists of a series of 6 work terms in a repeating 4 months school/4 months work pattern for four years of the student’s five year degree.  Most of the information presented here is not unique to UW students, however; students in a more traditional university program can still apply these tips by ignoring the term specifications and applying them in order to their work opportunities instead.  Longer (8-, 12-, or 16-month) work terms also fit into this model; aim to be done the same things as a 4-month UW co-op student would be at that level of work experience (for example, a 16-month intern should try to complete items up to the 4th work term level by the end of their internship).

Your Sixth Work Term – Teeing Up the Rest of Your Life

Return to your previous employer, get a better job, or try something different – it’s up to you.  If you were lucky enough to land a job with a company you could see working for full time – and don’t have any higher aspirations for a starting position – then certainly consider returning to this employer for your last work term.  As was the case on your fourth work term, doing two consecutive work terms with the same employer allows you to leverage the company experience you obtained in your previous work term and gain more responsibility with less ramp up time.  Unlike on the fourth work term, however, there isn’t any pressure from older students on the job supply, so if you’re not completely happy – or just want to try something different – then take the opportunity to go through the interview process one last time.  Most employers hiring at the fifth and sixth work term levels evaluate their co-op students against the same standards they use for new graduates; this turns out to be a huge benefit for UW students.  To start with, most co-op students have significantly more experience by their fifth work terms than students from other universities do by the time they graduate, making it very easy to surpass this standards.  Secondly, most employers are very understanding of you taking your sixth work term to do something different and then returning to them full time, and will provide you with the contacts you need to land a job with the company in the future.  When you combine these things, you end up with a situation that is incredibly advantageous for you, whatever you decide to do on this work term.  And as long as you got a job on all of your previous work terms, you can even take this term off (though I’d suggest taking time off once you graduate instead; employers are well accustomed to it, and you’ll likely already have a full time job lined up and can afford to spend more).

Get a job with a company you want return to.  Getting a job with a company via co-op is usually significantly easier than the process new graduates follow, so using your sixth work term as an opportunity to get into a company is an excellent strategy.  To give you an example, co-op students at Microsoft returning full-time to the same team usually have no other interviews than their initial 1 hour co-op interview, held on the UW campus.  Switching teams requires more interviews, but its often more of a “can we work with this person” interview lasting an hour or so; your work for your former team vets your technical skills.  New graduates who haven’t done an internship with Microsoft, on the other hand, face one or two 8 hour days of interviews – a very gruelling process – on the Microsoft campus, which requires flying all the way out there and back if the student is not from the area.  Not only that, students from other schools start from scratch on their first day with the company, while you’ll already be an old hand by the time your first (full time) day rolls around.  Using your sixth work term this way makes life a lot simpler, so consider it when applying for jobs.

Negotiate upward.  It’s hard to overstate the value of a co-op student returning to an employer; hiring good people is hard work, and your 4-month co-op term(s) with an employer serve as an extended audition.  You can take advantage of this to negotiate a better position than is traditionally available to new grads – with a few caveats, of course.  First, for bigger companies you’ll probably be entering on their standard “new grad” employment package, so negotiating salary/benefits/vacation time is not generally useful – college recruiters typically aren’t authorized to go outside the “standard” package.  Some companies have a range of “standard” packages, but the choice of package is based on how valuable you are to the company; there’s not much you can do to change it (besides doing well on your co-op terms, of course).  So what do you negotiate on?  Your position!  If there is a project area you want to lead, a committee you want to be on, a job description you want to have, whatever it is that relates to your job duties – just ask!  Especially if you are returning to the same team under the same management, you’ll often get good results by discussing with your current manager what you are looking for in a full time position, and so long as it is reasonable, most managers are willing and able to hook you up.  Even if it means working on a different team – talented people are good for a company, regardless of which department they work in – there is a good chance that your manager has been around long enough to develop relationships with the right people to get you a better job than you would normally get, and one that is precisely what you are interested in to boot.  You’ll still end up starting as a new grad just like all of the other new grads, but while the other new grads are getting up to speed, you may be leading a feature area – which looks especially good come review time.

Plan for the future.  If you’ve found a company that you would consider returning to, plant seeds for the future.  The people you meet may be your future colleagues, so make sure to network and do all of the things you need to do to start getting people on your side so that you have a pool of allies to help when you need stuff done.  Indeed, as a co-op student you have the neat ability to use the naïveté defence of “I’m just a (dumb) co-op”, so you can even get away with asking senior people questions without repercussions – so forge relationships with some of these people by asking their advice.  And since there are likely aspects of your job that will rely on the goodwill of others, make sure to start contributing when others need help.  Always put your best effort into everything you do – you don’t want a colleague shooting down an idea of yours in a few years because their only experience of your track record was a couple of shoddy projects you did while you were a co-op.  The boundary between co-op and fulltime employee becomes blurred on the last few co-op terms – especially if you return to the company full time – so make sure to take note and foster the image you want to have as a full time employee.

That’s it – have fun!  In the end, everybody’s co-op experience is different, and there is no right or wrong way of doing things.  I hope this series has provided some guidance for the things you need to do and think about when you are working your way through co-op so that you can put yourself in a good position for a fulfilling (and lucrative) career in the computer industry.

Each work experience provides a different viewpoint on the set of skills necessary to make it to the top.  If you’ve had experience in co-op and want to share your thoughts or (dis)agree with any of the points I’ve made, post a comment or send me a note (‘contact’ at this domain) and I’ll amend these posts with your feedback. 

Posted in Waterloo | Tagged , , , | Comments closed

The Ideal Work Term Progression for Computer Engineers, part V

With their Computer Engineering degrees now complete, my classmates (and I, in a sense) are now working at – or searching for – their first permanent full-time jobs.  Looking back on the journey that got us where we are, the one thing that stands out between my classmates is the experience they got while on their co-op terms, and the quality of their resulting full-time jobs.  I thought I’d take this opportunity to share what I’ve learned about what co-op jobs you should be looking for at each stage in the Waterloo co-op progression.  This article is the fifth in a series of 6 (parts I, II, III, IV, V, and VI) on what you should be doing for each co-op work term with the University of Waterloo in order to get jobs with the best companies in your last few co-op terms; this part covers your fifth work term.

This series is written for computer engineering students in the University of Waterloo’s cooperative education (co-op) program, which consists of a series of 6 work terms in a repeating 4 months school/4 months work pattern for four years of the student’s five year degree.  Most of the information presented here is not unique to UW students, however; students in a more traditional university program can still apply these tips by ignoring the term specifications and applying them in order to their work opportunities instead.  Longer (8-, 12-, or 16-month) work terms also fit into this model; aim to be done the same things as a 4-month UW co-op student would be at that level of work experience (for example, a 16-month intern should try to complete items up to the 4th work term level by the end of their internship).

Your Fifth Work Term – Making a Name for Yourself

Apply for your dream job.  If you’ve been following the tips so far, you should be in striking range of your dream job – apply for it!  If the job is offered through the university’s Jobmine system, it’s likely that your employer is familiar with the co-op process – so be sure to participate in all of their activities.  Employer information sessions, group interviews, interview prep sessions, etc. – all are important to attend, even if they aren’t taking attendance (your competition is there, and employers often share tips about what it takes to impress them).  For the same reasons, consider going to the employer information sessions for other employers of similar calibre; though each person has their own opinions on what makes a good resume and what to ask during an interview, most of the top-tier employers agree on a common subset of these items, and their tips can ensure you nail every one of them.  Remember too that your goal is still to stand out, so be sure to introduce yourself to the recruiter, spend time on a good cover letter and tailored resume, and include a link to your portfolio – the top positions easily see more than 200 applicants a term, and while your experience to this point will get you on to a much shorter list of candidates they’d actually consider, you want to use every technique at your disposal to ensure you are in their interview set.  If instead you’ve decided that your dream job is with a company that doesn’t do co-op hiring through Jobmine, you’ll face a lot less competition but a lot more work.  First off, start early – landing an out-of-system job can take 3 months or more to set up, so make sure to start working at it midway through your previous work term.  Second, make it easy on the company you’re looking to work for – make sure your cover letter clearly explains why you want to work for them, when you are available to work, and how the co-op process works (if you get a response from a company you contacted, CECS can help out with the specifics).  Finally, be prepared to do everything yourself; you’ll need to arrange your visa if you are working out of country, you’ll have to find housing, and you’ll have to coordinate with CECS to ensure your work term gets counted for credit.  If it’s truly a dream job, though, the rewards should be worth it – and at the very least, you’ll get experience that no other student on campus has!  Regardless of where you’re looking for a dream job, the fifth term is the term to do it – in the best cases, you’ll have two terms to spend with the company (or one term with each of two companies); in the worst case, you’ll likely to still end up with interviews for a few of the top positions – which is great practice for your sixth work term interviews.

Be passionate.  The one thing that struck me about top-tier job interviews is how little they focused on the routine stuff (the “will this person play nicely with the other employees” type questions); in some fifth work term interviews, no questions of this type are asked.  Rather, they tend to be focused on technical details, and specifically, determining whether a person is passionate about technical details.  A lot of this is exposed through tricky technical questions – for those in the .NET world, it’s questions like those in this list by Scott Hanselman – but some also focus on what I like to equate with passion.  Looking back, I’d say that most of the questions I got while interviewing for my fifth work term were an attempt to figure out how passionate I was about technical things – though in most cases, I’d wager that the interviewer themselves didn’t realize that it was passion they were specifically looking for.  I only picked up on it through an interview with a technical architect on the Microsoft Office team, who repeatedly drilled me for more and more detail on my previous work term, where I had done a lot of work in WPF.  At the time, I couldn’t figure out why he was so interested – he admitted having no background in WPF – but he still rooted around in the details, had me justify why certain decisions were made, what was wrong with our project after we had finished, what we would do differently given different constraints (more people, more time, etc.), and generally poked around for technical details that had no apparent utility to him.  It was only afterwards that I figured out what it was he was doing – he was finding out whether I was interested in the details, whether I was motivated enough to figure out why things the way they were before making a decision that depended on them, and whether I was cared enough to see the flaws in my project – or broadly, whether I was passionate about the software I was building.  Whether or not I was passionate about the things he or his company did was secondary; his primary goal was to find out if I had the capacity to be just as passionate about his company’s products.  To a competent engineer, the technical aspects will come naturally out of that passion; if you encounter a problem where you need to know some arcane algorithm, then your passion to do your job well will result in you learning what you need to know to make a great product.  After recognizing this, I began seeing this search happening in other interviews, often not so explicitly but with the same (implicit) end goal in mind – if hired, will I care about what it is the employer does?  So be passionate about the things that you do, and make sure it shows in the interview.  Don’t just memorize the answers to common interview questions – know how they work and why your answer is correct.  Be able to provide more detail on any question you answer, and admit that you don’t know when you don’t have sufficient knowledge to give a defensible answer.  If passion isn’t one quality you possess about the work you are doing, then perhaps it’s time for a career change – the best employers will certainly be able to pick up on this, so don’t count on being able to land a great job without passion for what you do.

Be an expert.  By the time you’ve made it to your fifth work term, you will have accumulated more than a year’s worth of work experience – and three years of university – which is plenty of training to understand just about any practical technical topic out in industry.  However, it’s highly likely that your technical knowledge is spread out over a number of different areas, and it’s certainly the case for your academic experience, which may include such varied topics as physics, calculus, software, hardware, communications, controls – and the list goes on.  While a broad base of experience is always a good thing to have, detailed knowledge in a particular area (or areas) is more and more important as you progress through the co-op process.  The simple fact is that businesses hire employees to solve their problems, whatever those problems happen to be (from improving efficiency of the company itself, to figuring out what their customers want, to building things that solve their customers problems).  People who have detailed knowledge in solving a particular set of problems tend to come up with better solutions than those who don’t, and do so faster; both of these qualities are beneficial to a business.  Becoming one of those people with detailed knowledge in an area can make you a very valuable asset to the companies you work for, so find an area you are interested in or working on, and go deep.  Learn everything you can about it, by reading books and blogs, following industry developments in that area, and practicing your hand at it.  Often, some of these areas will develop naturally for you as you are assigned work in them, but you still want to make and effort and take steps to improve your knowledge.  Secondly, you want to volunteer your assistance in your expert areas to your co-workers; if your company can’t use your skill, then it effectively the same as you not having it.  You want to be the go-to person for people looking for details on topic X; it doesn’t matter how specific or broad topic X is, just that you are the go-to person for it.   Not only does it make you somewhat difficult to replace (for your current employer), but it’s one more defining characteristic that potential employers can use when hiring.  And the skill of being an expert in an area is often the first skill you will have that your interviewer doesn’t – they’ll have more overall experience, sure, but might not know your area of expertise to the same level you do, making you an attractive hire.  In my opinion, being an expert in an area is one of the most important characteristics of an employee; not only am I free from the responsibility of needing to know about everything and can instead rely on the experts nearby, but I am also secure in the knowledge that whatever it is that we’re building is the best that it can be, since each aspect was checked by an expert. 

Network.  For me, networking is all about outsourcing, in the quite literal sense of the ability to outsource some of your tasks to a network of friends, family, colleagues, coworkers, etc. instead of completing them entirely on your own.  Granted, in order to maintain your network, you are often required to contribute to the tasks of others, but the primary benefit your network has for you is its ability to outsource.  My network is most efficient at two sorts of outsourced tasks: knowledge gathering or transfer and distributed job hunting.  The network you build might have other capabilities, but those two are the ones I’ve found most useful.  The first, knowledge gathering, is all about asking your network for help on a specific problem you are encountering that you cannot find the solution to.  When your network is made up of experts (see above), this is an incredibly effective technique to use when you get stuck.  For example, on my last work term my demo machine started freezing when WPF applications were launched.  After a couple hours of fruitless investigation, I asked my network, and was quickly directed to one of the team testers, who found the problem in minutes.  As it turned out, it involved an early version of Windows 7, an early version of the multi-touch API, and buggy touch panel drivers – a combination I never would have suspected, much less identified as fast as he did (nor would I have been able to come up with a fix).  In a similar vein, those who had trouble finding jobs (or wanted a particular good job) often got great results by using their networks to get them into a good position to do so, either through references or through direct introductions by someone who already works at the company.  Even now, when jobs are scarce, my network is still working to identify job opportunities for those still without; often, those opportunities haven’t made it to the open market.  Building a network that is capable of taking some of your most difficult tasks and producing results is incredibly valuable – there is a lot of truth to the notion that “it’s not what you know, it’s who you know”.  I’m not going to go into any strategies for actually going out and building a network – there are plenty of resources on the topic already – but it’s something you should be especially focused on during your last couple terms.  Your network could very well mean the difference between an good job and a great one, so cultivate those relationships and use them in your times of need.

Posted in Waterloo | Tagged , , , | Comments closed

The Ideal Work Term Progression for Computer Engineers, part IV

With their Computer Engineering degrees now complete, my classmates (and I, in a sense) are now working at – or searching for – their first permanent full-time jobs.  Looking back on the journey that got us where we are, the one thing that stands out between my classmates is the experience they got while on their co-op terms, and the quality of their resulting full-time jobs.  I thought I’d take this opportunity to share what I’ve learned about what co-op jobs you should be looking for at each stage in the Waterloo co-op progression.  This article is the fourth in a series of 6 (parts I, II, III, IV, V, and VI) on what you should be doing for each co-op work term with the University of Waterloo in order to get jobs with the best companies in your last few co-op terms; this part covers your fourth work term.

This series is written for computer engineering students in the University of Waterloo’s cooperative education (co-op) program, which consists of a series of 6 work terms in a repeating 4 months school/4 months work pattern for four years of the student’s five year degree.  Most of the information presented here is not unique to UW students, however; students in a more traditional university program can still apply these tips by ignoring the term specifications and applying them in order to their work opportunities instead.  Longer (8-, 12-, or 16-month) work terms also fit into this model; aim to be done the same things as a 4-month UW co-op student would be at that level of work experience (for example, a 16-month intern should try to complete items up to the 4th work term level by the end of their internship).

Your Fourth Work Term – Being an Asset

Consider returning. The fourth work term is an interesting time for co-op students.  Though the best students are sometimes suited to the top-notch jobs, older students are still competing for jobs and – with their extra terms of experience – tend to shrink the supply of top-notch jobs significantly.  As a result, students looking for their fourth work term positions aren’t often able to get jobs that are materially better than the jobs on their third term – an aspect that is both good and bad.  If you are lagging the rest of your class in the competition for jobs, then the fourth work term gives you the opportunity to even the playing field and play a bit of catch-up.  However, if you are doing well, I would consider returning to your third work term employer; in some cases, you’ll be able to negotiate a better position than you would get going through the interview process.  Why?  You’ve already amassed all of the company knowledge you need in your previous work term, so they can get you started without a ramp-up period.  And they already have four months of proof about how good of an employee you are and how much you can handle – something a new employer won’t have.  Use these facts to your advantage, and discuss with your third work term employer the possibility of returning with expanded responsibilities.  Many employers will be glad to oblige – full time employees are on a similar progressive responsibility ramp, so starting you down that path makes business sense.  My previous advice still stands: even given all of the above, don’t return unless you believe that you’ll be able to pick up more experience.  But at the same time, don’t discount the experience you’ll get from being handed similar projects with more responsibility – responsibility itself is a skill to be learned.  It can be a tough call very dependent on your situation, so do your homework and choose wisely.

Try something different.  If you’ve decided not to return, consider applying to some jobs that are slightly different than what you are used to.  That’s not to say you shouldn’t apply to jobs similar to what you’ve done before (you still should), or apply to jobs you wouldn’t be good at (avoid doing so); rather, think of it as an opportunity to expand your technical abilities.  I’d still strongly suggest taking whatever job that gives you the most experience, but given the competitiveness for jobs in the fourth work term, that level of experience might not be available in the field you are accustomed to.  Being “well rounded” is a desirable trait that is often bandied about, but it doesn’t only apply to one’s non-technical pursuits.  Being well rounded technically is also an asset; real-world technical problems are rarely confined to a single domain.  If you’re a hardware developer, knowing how software developers build software can help you make the best decisions when designing chips, and high level software developers can find a lot of applicable wisdom in the intricacies of low-level system development.  Though these two examples present polar opposite positions, how different that job is from what you are used to is completely up to you.  Even a slight difference gives you a different set of knowledge, and that knowledge may be the thing that gives you an edge over your classmates.   In my own experience, I’ve encountered software developers with the following extra skills that stand out above the rest: computer hardware (saving someone’s dead machine is a great skill to have in crunch times), networks (most software developers have no idea how the internet works), user interfaces (if the user can’t operate your product, then it doesn’t matter if you wrote it in Erlang/Ruby on Rails/Django/some other latest-and-greatest technology), math (the ability to do back-of-the-envelope calculations to determine a solution’s feasibility can save many hours of work), localization (knowing how to write a program that can be used in multiple cultures is a very rare trait – the English-speaking population is only so big), or even sales and marketing (building a program is very different from selling it).  Many developers get by without any of those skills – but most of the best developers I know have some rare knowledge for the field they are in that makes them stand out from the crowd of other good programmers. Taking a job that is slightly outside of the area you’re used to may be the thing you need to develop this knowledge and set yourself apart.

Be responsible for something.  Of all the things I’ve discussed, this is probably the most important.  As much as managers want to believe that they they are hiring an army of employees ready to act on their command, the best employers actually want something more akin to a worker bee: someone who can be tasked with a specific responsibility and given the flexibility to pursue that goal for the benefit of the entire organization.  Co-op students often don’t fit into this model very well; they often need lots of hand-holding and a close watch to ensure they don’t get waylaid.  But by your fourth work term, most employers will be comfortable enough with you to give you some amount of responsibility without watching your every move.  This responsibility is an important step – without being individually on the hook for something, the best employers are likely to pass you by for those that have.  It doesn’t matter what it is, how important it is to the company, or how much money someone stands to lose or gain; what is important is that, when given responsibility, you are able to step up to the plate and knock that responsibility out of the park.  Look for opportunities to be the person responsible for some aspect of the project you are working on, and make sure to do everything you can to make it a success.  Then, keep that aspect in mind when writing your resume (it should be on there) and in interviews (when the interviewer asks for an example, use it).  I’ve known people who, in their later terms, were set in motion at the beginning of the term and then evaluated at the end, without any direct supervision throughout the term.  Those scenarios are where careers are made, when a task is assigned and the some time later assignee comes back with something totally unexpected yet awesome.  The only way you’re going to get one of those assignments is if you can show you can handle smaller amounts of responsibility, so make your fourth work term count in that regard.

Produce measurable results.  Once you get to the fourth-work term level, some of your classmates will start making big contributions to the companies they work for.  They might be at the point where they can lead the team on some aspect of development, or they might be able to deliver a key component, or they might be able to save the company some amount of money – it really doesn’t matter what it is, the result is that they are able to show future employers that they are able to have a measurable effect on the company’s success.  Try to find an aspect of your duties where you can produce a measureable result; often, that aspect is the same thing you were given responsibility for.  You want something you can neatly draw a box around and say “I did that”.  With that experience in hand, you’ll be able to say to future employers that you can help them be successful by doing X, and you’ve already done Y to prove that you can.  This is a continual process, and one that doesn’t stop when co-op does; just because you did Z a couple years ago doesn’t mean you still can, or that Z is even still relevant to the current environment.  It’s the same reason why Steve Jobs is more desirable than Steve Wozniak; both Steves built Apple I and II in the late 70s/early 80s, but Steve Jobs went on to make Pixar a success, save Apple, and build the iMac, iPod, and iPhone.  If you had to make a bet on which Steve would be more likely to make your company successful, which one would it be?  And it’s exactly the same reason you should be trying to produce a series of measureable results – to show potential employers that you have the capacity to do it again, but this time for them.

Posted in Waterloo | Tagged , , , | Comments closed