I recently graduated from UCSD’s Computer Science & Engineering department with a MS in computer science:
In this post, I’ll be sharing my ucsd mscs review & experience in the program with every quarter, and hope to provide some commentary on classes prospective students will be taking. This post ends with a review of the UCSD MSCS program overall. I worked part time (30hrs) while finishing the degree, you will be busy and expect to work 7 days a week but it is doable, and allows you to take advantage of an employer’s tuition reimbursement program. If you are looking to take a break from work, an MS in CS is still a valuable way to spend time productively, so long as you ensure you can learn new things from the coursework. I opted to take 2 courses a quarter since I was part time resulting in 5 quarters to complete the program, however most students can take only 4 quarters (but may stay longer if there is a class that interests them).
Overall, your peers/classmates will all have strong technical backgrounds already, or if they have a non CS undergraduate background, really demonstrate a strong work ethic. There will be PhD students in your classes as well, and these students will really inspire and set the bar as the admissions is far more difficult for them. Unlike undergrad, the majority of your classes will not be lecture based but more smaller class sizes and direct interaction with professors. The CSE building itself is nice with adequate lab space, and meals are easily accessible in nearby Price Center. I had done my undergraduate computer science degree at U.C Berkeley, and from a difficulty standpoint I would say the upper division undergrad glasses matched the graduate classes at UCSD, so the workload/difficulty of the program is not as intense as you may find at more well known institutions.
I was interested in embedded systems and robotics as I came from a C++/hardware background, so this would be a theme for courses I took (and ended up choosing “robotics” as my track to graduate). There are two ways to get your degree after completing your units, a masters thesis or taking comprehensive exams (special tests at the end of a given class, ranging from extra projects, extra tests, or certain scores on finals / course projects). Most students opt for the comprehensive exams, as this is the easier approach. A student will rarely fail a comprehensive exam if they have been paying attention in class.
CSE 276A: Introduction to Robotics
We used a picar as a learning tool, probably one of the best classes in terms of material. we started with learning about modeling a mobile system with kinematic equations (i.e bicycle model for car in which only one axel turns) to estimate your position over time based on internal measurements such as wheel angle and calibrated velocity. You then learn the principles of open vs closed loop (a reference to controller architecture, do you incorporate external input into your actions?). We then incorporated the onboard camera and used QR codes to help steer towards a target with opencv, and although we didn’t use it could have used optical flow techniques also to aid in localization (knowing where the car is). The most challenging part was implementing our own Extended Kalman Filter to manage localizing our robot in space based on unique landmarks aka QR codes in our environment, intuitively we combine what we sense with what we expect from our models and use the two to manage error (“predict” step and “update” step). We also briefly touched on some computer vision techniques, as well as how simple convolutions such as a Laplacian kernel can lead to complex results in image processing such as boundary/edge detection in an image. If I had more time, I would probably take more computer vision courses, as UCSD has a strong computer vision department. 10/10 learning rating, high workload.
CSE 291: Top/Computer Sci & Engineering: Embedded Computing & Communication
New to academia and grad school I had not read research papers before, so we read dozens of papers in this class in a small group and discussed them, as well as having a quarter long research project. I used my background in RF radios and tried to come up with the mini research project of determining if we can profile items between two radios based on the attenuation / signal loss between the two, specifically in the context of food waste. We tried to estimate food waste using RSSI, promising results but too many noisy outliers to conclude anything, that rough paper I put on the preprint server arxiv. I would recommend the discussion based courses for exposure to research paper reading / synthesizing. 8/10 learning rating, low workload.
CSE 237A: Intro to embedded computing
This broad overview covered everything from different styles of volatile and non volatile memory on the market, to how ADCs actually worked, the heterogeneity of processors in todays systems, different processor architectures, FPGA vs DSP vs GPU. Major projects included bringing up a raspberry pi and developing a custom linux kernel module performance monitor and a sensor project in which we came up with a project to interface a variety of sensors using a variety of protocols such as i2c, one wire, and GPIO pins. Something new I learned about was the existence of scratchpad memory, essentially a free cache that sits on most processors, saves you from fetching data from main memory which is slow. Learned for the first time about processing in memory/computing in memory, this seems like a really revolutionary paradigm to me. Old von Neumann style computer architecture lays out processing and data separately, with read instructions required to fetch data before you could perform operations on them. This leads to in modern processors the bottleneck is no longer processing clock cycles but the time it takes to fetch the data “off processor” for certain data intensive tasks. There were some problem sets with realistically no relevance in industry that were more “pen and paper” style which were not great. 9/10 learning rating, high workload if you do all the required reading.
CSE276B: Human Robot Interaction
This was essentially an intro to ROS class, initially I thought robotic operating system was an actual OS, learned it was simply what I would consider a tailored messaging framework with publishers, subscribers, topics, fixed message formats ect. We got to use a turtlebot as a platform to test code, such as interpreting point cloud data to simulate following behavior, and then ended without own project of testing human operators if they would steer a robot better with a wheel or a phone. 9/10 learning rating, average workload.
This was the first all remote quarter, due to covid19. I considered this quarter a wash, took two classes that happened to be crosslisted with undergrads, course content was very light (take these classes if you need light course load).
CSE 237D: Design Automation & Prototyping
This class was more about presenting technical designs and progress, so unless you need experience in this area I would not recommend it to learn anything new. I was however able to use a work project for my class project which was a win if you are working part time in the area. 8/10 learning rating, average – low workload.
CSE 276D: Healthcare Robotics
This class did not teach much of anything, perhaps as an undergrad if you have never worked with research papers or microcontrollers it could be cool, but would not recommend for graduate students. 6/10 learning rating, average – low workload.
CSE 210: Principles of Software Engineering
Eye opener with the concept of a software factory and how to complete a project theoretically & in practice from start to finish. From the design and mock up / user story stages, to building an MVP, test suite & CI/CD pipeline this course covered many stable concepts a software engineer encounters. At my existing company at the time I was not exposed to many SW practices outside of my team, so this was good general knowledge for those going back to industry. Course long projects are done in teams. 9/10 learning rating, average – low workload.
CSE 202: Algorithm Design & Analysis
I dreaded taking this course but was the most common to fulfill the theoretical cs breadth requirement, workload was insane comprised of weekly problem sets involving algorithm design + analysis with proofs, used overleaf to write up problems in a group. Enjoyed working in a group, and gives you opportunity as a master student to work together with the Phds at the school which are all extremely talented. Finding a reliable group is key for this course, I did so by posting for a group the first time Piazza for the course was released, and only got people who check/do things early on my team as a result. 8/10 learning rating, very high workload.
CSE 276E: Robotic System Design & Implementation
Although cross listed, this is a high workload class, halfway through the quarter there were only 10 people left in the class (5 teams of 2). Robotic system implementation aka quadcopter class, this was another one of my favorite classes that really just tied everything together from the last few quarters, combining knowledge of embedded systems with robotics. We designed the PCB in eagle for the quadcopter, assembled it, programmed both the remote and flight control board, wrote a PID controller and interfaced with the onboard LSM 6 axis IMU to develop stable flight while using complimentary filters to help with the noise. Before taking the class I didn’t realize control theory was such a big and well studied domain, it changed my perspective on how technology like drones works, and how microcontrollers/boards are designed & fabricated. 10/10 learning rating, very high workload in the first few weeks, tapers off at the end.
CSE284: Human Genomics
This course taught how how DNA sequencing companies like 23&me actually work, and to perform basic genome analysis yourself in python. Use of Jupyter notebooks for all homework with templated problem sets was nice, but the heavy bio jargon made it hard for a pure CS student. For a final project wrote a web app based on an exported 23&me file to predicted traits such as eye color, hair color ect. 7/10 learning rating, average – low workload.
Overall as a California resident paying in state tuition, If your unsure of where to apply, I would conclude there is tremendous value in a masters in computer science from UCSD as its large department size and various specializations offered guarantees you will find courses you enjoy while studying here. I rate the UCSD MSCS program a 5/5 for value & education, and would recommend it. While I did tour and prefer the architecture and feel of campuses on the east coast (had admits to the ME/MS programs like Cornell, UPenn, Brown, Columbia ect), the weather is another plus to UCSD. It did not seem though that the masters program has a lot of “prestige” as the large class size (~600 active students) does dilute the degree with the tremendous number of graduates, so if prestige is what you are after look elsewhere. I will say the majority of classmates did place in top tier tech companies (FAANG, Tesla ect) after graduating, but this is more a reflection of their general work ethic and technical aptitude than anything you will learn from UCSD coursework directly. If you are seeking to maximize what you can/want to learn, or get the most value out of graduate dollar spent, this is the place for you.
Do you have a specific question about the program? Feel free to leave a comment with a question below!