When I entered Penn as a young and malleable freshman, I had very little idea as to which engineering major I would be choosing. Like many in the M&T program, I gravitated towards the Computer Science (CIS) major. It was a subject I had touched upon in high school but hadn’t had the opportunity to truly explore.
My experience with CIS 110 my first semester freshman year was pleasant, but lacking. It took until my second computer science class, CIS 120 second semester freshman year, for me to be able to pinpoint my concerns with pursuing a CIS major – namely, that I felt as though I was only being shown a part of the big picture. I am of the belief that a full understanding of any subject must include the foundations of the development of that subject as well as the more advanced, abstract concepts associated with the subject. That meant that if I were going to understand how computer science works, I needed to understand the hardware being programmed and the limitations of that hardware. I briefly considered the Electrical Engineering (EE) major, but my past and present tussles with the subject material of PHYS 151 quickly ruled that out. This is when I discovered Computer Engineering’s (CMPE) union of the CIS and EE curriculums.
The CMPE major afforded me the perfect opportunity to fully understand a subject I was interested in. Though not a common M&T choice, CMPE is a major I believe fits very well into the message of the M&T program – understanding problems from multiple perspectives. As a CMPE major, we connect what computer programming does at an abstract level with how circuitry is programmed at a very low level. We seek to understand what, why, and how our commands in a top-level programming language translate at the hardware level. A class that, in my opinion, showcases this union and one of my favorite classes at Penn thus far is CIS 240. CIS 240 takes a ground up approach to computer science. The journey from understanding binary logic and gates, to exploring the LC4 ISA, PennSim, and assembly language (the true basics of programming), all the way up into programming in C, provided fantastic clarity as to the flowchart of a line of code in the C programming language being translated into physical, electric pulses that change the state of the computer being operated. I guess what I’m trying to say is that CIS 240, as with the rest of the CMPE curriculum, went beyond just answering the “what”, it also answered the “why” and “how” as well.
Moving forward, I think the knowledge I gain from the CMPE curriculum will be invaluable. With the looming decline of the growth rate of processing performance predicted by Moore’s Law, major changes will be taking place in the programming and nanotech industries. The incremental innovation path in the hardware realm is fast becoming a non-option. Very soon, we will not be able to rely on separate improvements in microchip performance or code optimization to advance in the computer science realm. Very soon, all the common paths of innovation and improvement will be worn out and the only way to move forward will be to take the road less traveled. I think that in order to sustain continued improvement of our technology, we will need a radical innovation that bridges both software and hardware and I believe the CMPE major equips students very well to find solutions to this approaching problem.