A Visual Guide to Hiring Software Talent From University of Waterloo & Conestoga College
2019-04-15 - By Robert Elder
Introduction
This article is intended for business leaders in the Kitchener/Waterloo startup community who are interested in understanding the many different terms used to describe 'software developer' roles. Businesses commonly make significant hiring mistakes by sourcing talent from the wrong academic programs simply because they see the word 'software' or 'computer' in the candidate's education history. These terms will also be discussed in terms of how they relate to the various academic programs at the University of Waterloo (UW for short) and Conestoga College.
Having personally graduated from the software engineering programming at UW, and having also taught at Conestoga College in the embedded systems development program, I can offer a unique perspective that may be valuable to those who are building tech companies in the area.
Let's first review the most common interpretations of the following terms (with a bias toward what is taught in these programs at the University of Waterloo):
University of Waterloo Programs
Electrical Engineering
When you think 'Electrical Engineer', think of someone who works with these kinds of things:
|
|
||||||||
|
|
Computer Engineering
For a 'Computer Engineer', you'll note that there is a lot of overlap with electrical engineering, however computer engineers are more likely to focus on low-voltage DC circuits since that's what computers use. They are also more likely to have detailed knowledge of how CPUs are actually made and how they work. As a result, they are likely to know more about the process of CPU fabrication (how to turn wafers of pure silicon into something that 'computes') and the quantum mechanical knowledge required to understand how transistors in CPUs work. Although the academic programs for electrical and computer engineering focus heavily on hardware, students in these program frequently end up in co-op placements similar to those in software engineering or computer science. As a result, your average electrical or computer engineering graduate likely has a bit more software experience that what is depicted below, although this depends entirely on their job experience.
|
|
||||||||
|
|
Software Engineering
Software Engineering (SE for short) has some overlap with electrical and computer engineering with respect to hardware design, but only enough for graduates to be able to write software on any piece of hardware and to be able to communicate with electrical and computer engineers. For example, software engineers that graduate from UW are unlikely to have significant experience with breadboarding circuit prototyping. Instead, software engineering focuses on how to build large-scale software systems that many software developers work on at the same time. For example, large cloud software applications require that many different independent servers, applications, databases and web sites communicate with each other. Maintaining a system like this with minimal down time requires standardization, documentation, test cases, and design patterns employed by software engineers that help ensure things run smoothly at scale. Something worth pointing out is that for software engineering and computer science, 'web development' isn't included at all in the course curriculum, although most graduates of these programs usually end up learning at least some web development from co-op experience. Some students enrolled in SE end up switching into computer science. CS allows more flexibility, so it can be more or less difficult than software engineering depending on what electives the student chooses. Therefore, it's not possible to make a strictly 'more difficult than' comparison of software engineering and computer science.
|
|
||||||||
|
|
Computer Science
Computer science (CS for short) at UW has a lot of overlap with software engineering, but with less emphasis on being able to communicate with other engineering programs. CS students also take one additional stats course. Computer science students also have more electives than software engineers at UW so their exposure to different topics can vary more than those in software engineering. Also, the co-op program is not mandatory in the computer science program at UW, but it is for software engineering. Therefore, you can be guaranteed that a software engineering grad from UW will have relevant work experience, but for CS you may need to double-check. Both students from computer science and software engineering compete for and obtain the same jobs at Google, Facebook, Microsoft etc.
|
|
||||||||
|
|
Keep in mind that these descriptions are only meant to give a general picture of what you should expect graduate of these programs to be able to do. Individual students, however, may pick up a much broader set of skills from the co-op program. This is particularly true for electrical and computer engineering with respect to learning software development. If you'd like to read about UW's own comparison of these programs, you can read about it direct from the source.
Commentary From Patrick Lam
I reached out to Patrick Lam, director of software engineering at UW and asked him to provide commentary on this article. Some of his thoughts where: "[CS is] more open to students choosing their own path. The math content is pretty much the same (except CS students take 1 more stats course). SE students are [considered] CS students. The algorithm analysis content between CS and SE is now identical ... What you write about computer engineer is accurate, although ECE is trying to also emphasize embedded systems development as well."
Conestoga College
Since there are so many different programs at Conestoga College, I created the interactive visualization shown below to help you get a feel for how long each program is, and see the relative focus they have on software development. Last updated April 12, 2019.
The presentation shown above makes general assumptions about the subject matter of the course base on the course code prefix. For example, courses that start with 'PROG' or 'INFO' generally include some programming component to them, and courses that start with 'MATH' are generally about math. There are a couple exceptions where this colouring heuristic doesn't completely work, so consider the above presentation only as a rough guide. This is especially true when considering 'physical sciences' courses coloured above since the focus of this article is on software development. Another consideration is that some courses also include electives which may end up being more math or more electronic based, depending on the choice of the student. It is also true that some of the electical engineering courses (green) include major software components as well.
For a full listing of the course sequences associated with each of these programs, see the School of Engineering and Information Technology Full-time Programs and also School of Applied Computer Science & Information Technology Full-time Programs and click on an individual program. To see the course list, scroll down to find 'Program Courses' and click on the plus sign to expand the full course list.
In general, my perspective of the programs offered at Conestoga College is that they are generally much shorter that those at UW and focus more on teaching hands-on exposure to individual technologies being used today at the expense of lacking the highly-theoretically but extremely transferable problem solving techniques that UW offers. For example, in the software engineering program at UW, there is no course that explicitly focuses on web development technologies even though many graduates of Waterloo software engineering or computer science end up writing some form of web software. However, at Conestoga College the 'Software Engineering Technology' program does have a couse 'PROG200 Web Design and Development' which focuses on specific web technologies like CGI, PHP and ASP.NET. or AJAX. The advantage of learning the specific technologies of the day is that you can hit the ground running if the skills you've learned match the job description, but the down side is that as technology evolves, you'll need to eventually learn the more general theory in order to adapt anyway, and a more solid theoretical foundation helps you do this. Even in this specific example, things like AJAX generally aren't written from scratch anymore, and the web development world is notorious for changing extremely quickly.
As a concrete comparison of the difference in program lengths, Software Engineering at UW consists of 8 study terms and 6 work terms, whereas a program like the 'Software Engineering Technician' program at Conestoga College consists of 4 academic terms and no work terms. The advantage of this is that shorter programs can provide quick hands-on exposure to current technology before the knowledge becomes stale. The software development landscape can change quite a bit in the time it takes to get a longer 4 year degree.
Finally, another observation I've made is that there is much higher variability in the skill level of students at Conestoga College. By my own estimation, the difference between the skill level of the top three students and the bottom three students in each class is likely to be much greater than that of UW. I would attribute this to a higher degree of variability in the backgrounds of students at Conestoga College. In fact, some of the students who enroll at Conestoga have already graduated from a university-level program where they studied another branch of engineering. As an example, at Conestoga, one of my students was previously a professor from Brazil. He had significant industry experience, and had written a number of books on assembly language programming, and was already very accomplished in his career. This was, of course, the exception rather than the rule, but it's worth pointing out since, Conestoga is often overlooked in comparison with UW. If you're keen enough to be able to spot talented people (and fast enough to hire them), then you'll find that there are opportunities to hire great people at Conestoga despite UW's overshadowing reputation.
Other Commonly Used 'Software Developer' Terms
Since there are even more commonly used terms that describe 'software developers', I felt it would be appropriate to include this section as a mini-glossary of commonly used software development related terms to hopefully further cut through the confusion jargon of this industry:
- Embedded Systems Developer - Someone who knows enough about electrical engineering to write software for small dedicated 'computers' that control circuits other than desktops, laptops, or phones. Examples are: Cameras, Smart TVs, Internet of Things devices, TV remote controls, drones. Usually, this means working in very low-level programming languages (like assembly, C or C++). Embedded systems programming requires knowledge that most web developers would not have.
- Web Developer - Someone who does either front-end or back-end web development (many people do both).
- Front-end Web Developer - A person who builds the user interfaces that you see and interact with when you use a web page.
- Back-end Web Developer - A person who builds everything that you don't see that's required to make web sites work.
- Dev Ops/Server Administrator - A person who works to keep your web site/service up and running. They do things like: Install updates, monitor resource usage, deploy emergency fixes. This person is also likely to work closely with a back-end web developer (and to a lesser extent the front-end developer) in order to get updates deployed and tested.
- Data Scientist - An individual, much like a 'regular' scientist who seeks to develop a hypothesis about some data-driven business goal. For example, a 'Data Scientist', might do a high-level review of data collected on ad conversion costs vs. interest categories, and see evidence that older people convert better than younger people, even though the business was marketing to young people. A data scientist could then do more detailed statistics to validate whether this hypothesis is true or not. They may also delegate some of this task to a 'Data Engineer'.
- Data Engineer - An individual, much like a 'regular' engineer who seeks to construct an experiment that will answer a 'data science' question that has been posed by a 'data scientist'. Using these definitions, the role of understanding domain knowledge about the customers, product, and data itself is delegated to the 'data scientist' whereas the role of setting up servers, databases and algorithms to actually make measurements is delegated to the 'data engineer'. The 'data scientist' and 'data engineer' can often be the same person.
Conclusion
Hopefully, you've found this article helpful in understanding the differences between software related programs at UW versus Conestoga College. I recognize that this topic has the potential to be 'controversial', so if you're a graduate of either institution and you'd like to suggest a correction or clarification, please email me at 'robert@robertelder.org'.
Silently Corrupting an Eclipse Workspace: The Ultimate Prank
Published 2017-03-23 |
$1.00 CAD |
XKCD's StackSort Implemented In A Vim Regex
Published 2016-03-17 |
What is SSH? Linux Commands For Beginners
Published 2017-04-30 |
What is Git and Why Is It Useful?
Published 2016-12-15 |
Strange Corners of C
Published 2015-05-25 |
Virtual Memory With 256 Bytes of RAM - Interactive Demo
Published 2016-01-10 |
Can You Use 'ed' As A Drop-in Replacement For vim, grep & sed?
Published 2020-10-15 |
Join My Mailing List Privacy Policy |
Why Bother Subscribing?
|