William J. P. Laboon
University of Pittsburgh
Department of Computer Science

            As a would-be software engineer, I was eager to get my feet wet in the “real world” of programming.  At the beginning of my sophomore year, I heard about the co-op program through friends of mine in Engineering.  Although I had minimal time to prepare everything, I rushed around writing my resume, interviewing with prospective companies, and the rest of the work that co-opping entails.  I won’t mince words – it was exhausting.  However, it was easily worth it.

            I decided to co-op for Medrad, Inc., located in Indianola, PA (about 15 miles northeast of Pittsburgh).  Medrad makes vascular injection systems, ancillary magnetic resonance imaging equipment, and other medical imaging niche market products.  We are the worldwide market leader in sales of vascular injection systems for Angiography and Computed Tomography (CT) and fast becoming the leader in Magnetic Resonance (MR) injection systems and MR coils.

FIRST ROTATION (January – May 1999)

I was brought on as Medrad employee with the Service Engineering department.  The Service Engineering department generates testing, calibration, and repair procedures for in-house and field service personnel, as well as creating hardware and software to assist them in these procedures.  Specifically, my assignment was to create an application that communicated with an EnVision CT Injector via its proprietary serial protocol, querying the system’s memory for a list of recent system errors and displaying these errors to the user along with auxiliary data, a description of the error, and the repair sequence to follow.  This would allow Field Service personnel to troubleshoot and fix problems with injectors more easily.

            This application took almost all rotation to finish.  As a medical device company, Medrad follows a very regimented software development policy, which I was not experienced with.  In addition, I was developing the application in a language I had never used before (Microsoft Visual Basic), using technologies I was unfamiliar with (RS-232 serial port communications and SQL, among others), and interfacing with an injector which I knew little about.  I just sat down and talked with various people to get information, as well as reading and doing a lot of exploratory coding.  By the end of the rotation, not only did I have a working application, but knew quite a bit about EnVision internal software, Visual Basic, and other technologies.

            Not only did I receive practical experience, but also some theoretical background.  Part of the EnVision communications protocol involves calculating a Cyclic Redundancy Check (CRC) checksum on each packet.  The math I learned here directly helped me in CS 1501 Data Structures and Algorithms.

SECOND ROTATION (August – December 1999)

            During my second rotation, I had several responsibilities.  First was to change the EnVision calibration application to a version which could be used by non-Medrad technicians.  As it was written using 16-bit C++ and Microsoft Foundation Classes (MFCs) , I had to learn a lot of obsolete technology just to understand what was going on.  Shortly after comprehending the overall flow of the old application, I had a working, documented application which could keep track of the number of pot and pressure calibrations used on a separate, encrypted security key.

            Throughout my second rotation, New Products was busy developing the Spectris ISI (Imaging System Interface), which would allow Spectris MR Injectors to communicate with the imaging system in an MR suite.  For SDE-Test Group I performed software and hardware testing of this interface, using debuggers, logic analyzers, and other tools.  I also learned about the process of testing, and how to develop test protocols that would check a maximum number of situations and ensure that products met requirements.  In addition, studying the Spectris’s RTOS helped me out with CS 1550 Operating Systems, which I took the spring after my second rotation.

            EnVision and Spectris Injectors are built using similar architecture, and I mentioned to my supervisor that it would be relatively easy to expand my first application to transparently work with Spectris systems, as well.  In addition, other features that would be useful to Field Service, such as viewing keystroke logs and injection history, could be added.  I received the go-ahead to work on this project.

THIRD ROTATION (May – August 2000)

            During my third and final rotation, I was involved with multiple projects and acted as a resource for many other people at Medrad.  This is when it first hit me that not only is Medrad providing me with valuable experience, but I am providing them substantial support as a technical resource.  While I wasn’t exactly a guru, I had useful information for other people working on EnVision and Spectris injectors as well as more mundane computer technology.   For the duration of this term, I worked half-time for Service Engineering and half-time for SDE Test Group.

            For SDE Test Group, I worked with a team of other programmers to create a universal PC to injector interface to handle all the cases where Medrad personnel would need to work with the internals of our new injector line.  In the past, separate applications were created by Service, Manufacturing, R&D, and any other departments that needed to access internal data.  As my past experience was with developing Service applications, I was in charge of writing the Service user interface to this software, as well as the VBA “scripts”  (lists of commands for the injector to execute) that Service personnel would use.  Truth be told, this was the best part of my co-op experience – working with a team to solve a company-wide, persistent problem.

During the rest of my time with Service Engineering, I continued writing the EnVision/Spectris analysis software as well as laid the groundwork for a new version of our EnVision calibration software.  This was the first assignment that I was helping out with from the very beginning - seeing a need and designing requirements for a product to fill it.  This filled a big gap in my experience, and enabled me to state that I had experience with all stages of products’ life cycles.

CONCLUSION

            There is no way I would pass up an opportunity to participate in the co-op program.  The experience I have obtained as a co-op is more than just another line on a resume; it is proof that I can function in the demanding field of software engineering.  When I started out, I wondered if I could hack it... there were all these exceptional programmers around, talking about things I barely understood.  Some times, the lines of code on the screen were the same all day, with the only evidence of me being there a bunch of equations written on a notepad.  Eventually, however, the jumble of math and acronyms began to sound like English, and just when I was ready to switch my major to Theater Arts, I’d understand the algorithm.

            Medrad itself is a great place to co-op.  The environment is extremely friendly and jovial, while still allowing you to get work done.  Playing Wiffle ball during lunch breaks (my batting average is 0.400), my cubicle neighbors heckling any living organism in a 10-mile radius, weekly intern/co-op lunches: I’m going to remember these as much as how to calculate a linear regression.  Management is approachable and listens to employees.  In fact, when the CEO, John Friel, heard that I was thinking about going to his alma mater for graduate school, he set up a meeting with me to discuss it.  Some companies will throw you in a cubicle, not knowing what to do with you; Medrad typically expects you to act as a real software engineer.  It is a challenge, but the skills you get out of it are invaluable.  You can’t learn everything in the classroom.  I highly recommend the co-op experience, and co-opping at Medrad in particular.