PEY - The Good, the Bad, and the Ugly

Part 1 - The Facts

The Professional Experience Year (PEY), is a 16 month internship program offered by the University of Toronto (U of T), as an alternative to traditional co-op programs offered by such establishments as Waterloo University and Queen's University. The student spends 16 months with a cooperating company, complete with salary and possible vacation time, depending on the company. Many students and administrators agree that the PEY program is in many ways superior to the other co-op programs because there is usually opportunity for the student to grow with the company and contribute substantially to one specific project from start to finish as a full-time employee would.

Specifically, I was working for PCI Geomatics, a small company situated in Richmond Hill, Ontario, with offices located all over the world. PCI Geomatics creates and sells software for satellite and radar image analysis (in general, remote sensing image analysis), cartography (map production), as well as specific software for agricultural and geological related fields. Their products range from collections command line driven batch programs (a legacy from the "elder days" in the early eighties) to feature rich, GUI intensive image processing application suites. They are one of the leading companies of their kind in Canada and also one of the most venerable; they have been in existence since 1982 and were one of the first to offer the type of services they do. They have also recently made the list of the top 200 most profitable software companies in Canada.

My title while I was with them was "Software Analyst", which is simply a euphemism for "run-of-the-mill programmer". I had worked for them the summer before, so I was already somewhat familiar with their software and how they ran the place. In some ways, my job description for the first eight months or so was extremely simple: I did C++ coding in a Linux and SGI Irix environment, some design work and a small amount of HTML documentation. This job description would change somewhat over the next few months, but more on that later. In any case, from the get-go I was treated like a full-time employee. Almost before I even sat down, I became a full blown member of the JOLT team, JOLT being the code name of one of their most important projects in a decade (it stands for Joint Object Library Toolkit). It basically provides a core set of programming services that are necessary for some of their newer products to work, chief among them being the Common Viewer (CV), an attempt to consolidate geomatics-type functionality that had been hitherto duplicated in five or six different product lines. I worked on the JOLT project and the CV throughout the year, implementing key features at both a high GUI level and a low "basic functionality" level. I attended meetings, offered opinions and generally acted as if I were an equal member of the team. After about three months, in recognition of my "near full time" status, I was offered my own office, with my own personal computer, bookcase and telephone.

It is nearly impossible to describe specific duties without sounding technical (plus, it doesn't sound as cool), so I'll just go ahead and do it. Assignments included the creation of a front end geographical transformation and image installation program intended for distribution on a CD package of high resolution encrypted satellite images (for which I received a financial bonus for my work), the design and implementation of digital image filtering algorithms for use in a tile-based image processing pipeline (as opposed to a framebuffer architecture), the creation of the front-end access to those same filtering operations, and the porting of a fair amount of functionality from PCI's old architecture to the new and improved one. These included a raw image display panel, and a scatterplot viewing tool. Duties also included routine bug fixes for existing software, HTML documentation of existing routines, and presentation of certain programming techniques to the R & D staff.

In addition, informal duties included training full time employees in the use of PCI's new code base. These "full-time employees" also included my boss for the last eight months I was there. There's a long story associated with this. When I first started working at PCI my supervisor - the leader of the JOLT/CV project and it's main designer and programmer - taught me enough of the new architecture to start using it to do useful things. I learned the rest myself, doing assignments as they came. The pertinent point here is that whenever I had a question or a trouble I could always go bother my boss and he would knowingly show me the error of my ways. Such is the way it worked for six months. Then, within four months, three of our top JOLT/CV people left the company to pursue other interests, including my former supervisor and two other team members. In a five person team, a three person gap is sharply felt. This meant that there was only one person left to go to for help if I had any problems with my code, but he was often busy with other essential stuff and, in any case, his expertise was fairly narrow. This also meant that my new supervisor (who was not part of the original team) was not really in any position to give me any pointers on how to properly structure any programs involving the new software. Instead, the position was reversed: I ended up, pretty much by default, because the other JOLT team member was so busy, becoming a definite authority on the JOLT/CV framework. I became one of the main people to see if you had a question about the JOLT toolkit. So I inevitably became an informal tutor for full-time employees. This situation only strengthened my status as something more than "just a student". In fact, a few staff members expressed surprise when they were informed that I would be going back to school in September. They were under the impression I was there for good.

Part 2 - The Evaluation

All in all my PEY experience was a positive one and given a second chance I would do it all again, employee departures and all. Even putting aside everything else, the money alone would be enough to convince me of the value of the internship. I managed to pay off my entire student debt within the first four months, and had enough left over to pay the rent, come up with tuition and book fees and invest a sizable chunk of money in mutual funds and stocks. Money, of course, wasn't the only thing I gained; I also gained over a year's worth of valuable programming experience that will look very good on my resume. Furthermore, I learned a fair bit about corporate politics and what happens when prolific, established programmers decide to leave a particular company. I also learned what kind of job I might want to apply for in the future. Specifically, I would like to work for a company that makes at least some use of commercial and/or external software libraries, instead of exclusively creating the libraries themselves. This will ensure a gentler learning curve when new employees are hired. It will also increase the value of the skills I learn there.

So, in closing, let me summarize the long and the short of it: PEY was a positive experience. I earned lots of money, I learned many things, and I gained valuable experience and the whole thing will likely help me find a good job in the future. What more can be said? If you're debating whether you should take the plunge, I can offer only one piece of advice: DO IT!