Why CMPE at Penn?
I came from a high school that specialized in STEM. One of my electives there was Digital Electronics, which I found very fascinating. I enjoyed learning about the theory behind latches, flip-flops, and registers and then being able to prototype them right in the classroom with circuit kits. Throughout my high school years, I had some motivated friends who were heavily involved with web development and computer programming. After I had heard about the things they were making, from a rock-paper-scissors simulator to a web app that managed the school’s lunch orders, I took it upon myself to learn a bit of computer science, starting with Python. While applying to colleges, I was somehow certain that I wanted to pursue engineering but wasn’t sure whether EE or CS was the right move. I figured that CMPE would give me the best of both worlds and provide me with the opportunity to experience both and choose what to focus on.
What would you say is your favorite CMPE class?
CIS 121 (Data Structures and Algorithms) with Rajiv Gandhi was quite a fun course, despite the rather intense workload. It gave me insight into the essential processes that drive today’s software, like how Google Maps uses algorithms such as Dijkstra’s algorithm in order to find the shortest path between two locations. In the context of computer engineering, a solid foundation of algorithms is crucial. Sometimes a small software optimization can be more efficient than a massive hardware overhaul. I look forward to ESE 350 (Embedded Systems) where I can apply skills learned from my CS classes to programming devices that lie within larger, more complex systems.
How would you describe the CMPE to friends or family who aren’t familiar with it?
CMPE is an application of CS concepts to electronic devices. It approaches a double major between EE and CS because of the required breadth of the field. CMPE goes from as theoretical as graph algorithms to as low level as Op-Amp circuits. Furthermore, there are courses like ESE 350 and ESE 370 that zone in on applying software to embedded circuits and modeling components on the transistor level.
What do you think it takes to be a “successful” computer engineer?
I don’t think any background in electronics or programming is necessary to become a successful computer engineer. Experience surely helps, but the most important qualities are curiosity, creativity, and a passion for problem-solving.
What internships have you done? (Or for seniors, what are you doing next year?)
During my freshman summer, I interned as a Software Development Engineer in Test at iCIMS, a NJ-based company that specializes in talent acquisition software. I wrote scripts in Java to automate UI-based and API tests, which reduced the workload of the functional testing team. I believe test engineering is extremely important in numerous disciplines, from stress-testing a swing set to verifying the functionality of a REST API. From my internship, I learned a lot about the inner workings of a software company as well as the amount of teamwork necessary to maintain large-scale projects.
What other activities do you participate in at Penn?
I participated as a teacher for Access Engineering, a volunteer organization that provides a free engineering education to high school students in the Philadelphia area. I also partake each year in PennApps, where a few friends and I take an idea for a software or hardware-based project and just build it! In addition, I enjoy playing baritone sax for the Penn Wind Ensemble.