Guide to Landing Your Computer Science Internship and What to Expect
Back as a freshman I wasn't sure what courses I should take. There's a bunch of required major courses and college requirements to graduate, but which ones should I take? You can work with your guidance counselor on drafting a 4 year plan, but I think it's more useful to see a 4 year plan from an actual alumni.
I was admitted to Revelle College in UCSD in Fall quarter of 2012 as a Computer Engineering major. I actually started out as a Computer Engineering major and switched to a Computer Science major. You can learn more about the difference in this article.
I didn't have that many AP credits so I couldn't skip a lot of college requirements. To give you guys an insight on the courses I took during High School, I'll list out some of the AP courses & Summer courses I took and their UCSD equivalent.
|AP Chemistry||CHEM 4|
|AP Calc AB||MATH 20A|
|AP Physics B||PHYS 10|
|Computer Programming (Community College)||CSE 8A|
This isn't a comprehensive list of all the courses that can be transferred. If you're curious on which credits you can transfer over check out these links: Transferable AP Credit and Transferable Credits from Other Universities.
I'm not going to list the Professor since a lot has change since 2012, but I'll mention some noteworthy professors to avoid or recommend. I would use RateMyProfessors to check for any red flags when figuring out which courses to take and with who.
You guys are probably wondering what is that SDCC course. Well UCSD has this "UC Entry Level writing requirement" and I didn't satisfy that requirement coming in so I had to take a make up course. At the end of the quarter, you'll need to take an exam and if you pass that exam you'll fulfill that requirement. Unfortunately, I didn't pass that exam so I had to take it again in the Winter Quarter.
When I took CSE 11, we had weekly coding projects and quizzes. I didn't find it too difficult since the assignments were coded in Java and I was already familiar with Java. This class is meant for students who passed their AP Computer Science course. I would suggest taking CSE 11 if possible since you'll be able to skip both CSE 8A and 8B saving you an extra quarter.
I took ANTH 1 to fulfill some of Revelle College's Social Science Requirements. I honestly don't remember too much about this course, but majority of the content came from lecture.
While this looks like a lot of courses, I honestly think this wasn't that much workload. I honestly don't remember too much about CSE 91, but every week a guest author would come and talk about their experiences in the Computer Science industry. CSE 91 has no coding assignments so the bulk of my work came from CSE 12. I probably could've taken another course and made it out alive.
Thankfully, I passed SDCC this quarter. I still struggled with it my second time, but I'm glad I passed the course.
CSE 12 and 15L were pretty difficult at the time. These courses go over the basics of Object Oriented Design and Data Structures. Be sure to learn these concepts since you'll use Arrays, Linked Lists, and Graphs the rest of your career. Interviewers love to ask questions surrounding these concepts!
I took MATH 20D since it was required for ECE 35 and it's not a requirement for Computer Science majors.
I also had to take PHYS 2A so I could take PHYS 4B which was a prerequisite for ECE 35 as well.
I really disliked CSE 20 since it was theory based. I wrote a bunch proofs and learned about number systems and induction. Even though I got an A- in this course, I honestly don't remember a thing from this course.
CSE 30 is no joke. Having to learn assembly has a big learning curve and many consider CSE 30 and CSE 20 to be a weeder course. I'll agree with those statements. To be honest, at the time I thought this was the hardest course I took yet, but things got much more difficult from this point.
|HIST 4B (Foothill)||B||4.0||HUM 4 or 5|
|PHYS 4B (West Valley)||A||4.0||PHYS 2B|
During the summer, I took the equivalent to PHYS 2B at a community college so I take ECE 35. I also took a course on Western Civ (4B from Foothill College) which could be used for one of my HUM courses.
CSE 21 was also very theoretical. It also felt like a precursor to CSE 101. I learned some basics for writing proofs for runtime analysis and probability in this course.
ECE 35 was definitely the hardest course I took at UCSD. The course started with like 200 students and over 50% dropped the course. I changed my major from Computer Engineering to Computer Science and switched it to Pass/No Pass since I wasn't sure if I was going to pass the course.
I also took Korean and Photography to start fulfilling some of Revelle's College requirements.
The Humanity courses are no joke. I had to read the entire Old Testament in one quarter and the course is worth 6 units! I got a B+ that quarter and it dropped my GPA a bit. HUM 1 was seriously a lot of work and I hated that course with a passion.
If you're a CS major, I recommend paying attention in CSE 100. You'll start to understand Leetcode Medium questions by taking this course. You'll learn the basics of Heaps, Graph Theory, and Graph Search algorithms.
CSE 110 was one of my favorite courses at UCSD. The professor gives you guys a theme and you form a group with other students to build an app on that theme. My team built an Android App that sent you reminders when you reached certain destinations.
HUM 2 isn't any easier than HUM 1. You'll have to read a bunch of novels and epics and write a ton of essays.
CSE 101 (Design and Analysis of Algorithms) was pretty difficult to understand. You'll learn the basics of Graph theory like DFS, BFS, and other graph algorithms. I took the course with Professor Dasgupta and I wish the course spent more time on coding the algorithms rather than writing proofs. To be completely honest, most people who take this course relearn this material on their own. I used the following resources to learn advance Algorithms and Data Structures.
|HIST 4A (Foothill)||B||4.0||HUM 3, 4, or 5|
|MUSI 1 (Foothill)||A-||4.0||MUS 4|
|MUSI 3A (Foothill)||A-||5.0||MUS 1A|
I actually started my first Computer Science Internship during the summer of 2014. I would recommend reading this article to learn more about Computer Science Internships.
I also took courses over the summer to make sure I was on track to graduate in 2016. I mainly took those Music courses to satisfy the Fine Arts Requirements and so I could take MUS 173.
You're probably wondering why I took so many Korean courses. Well Revelle has a Language Requirement and I needed to complete 4 quarters worth of Language courses.
I honestly don't remember why I took CSE 90. I think it might have been required if you wanted to tutor for CSE courses. I don't think I even had a final or actual assignments for this course.
CSE 103 was the Upper Div course for Probability and Statistics. You'll learn about counting and basic fundamentals of statistics.
CSE 120 was a pretty difficult course since you'll need to learn a lot of low level concepts. There were a bunch of Masters students taking this course along with us too.
You can only take 2 HUM equivalent courses outside of UCSD (excluding HUM 1 and HUM 2). Thankfully, HUM 3 isn't as difficult or time intensive as HUM 1 or HUM 2. It's still a lot of work since you need to read a lot, but don't expect it to be as extreme.
I started to wrap up most of my General Electives by this quarter so I started taking a lot more CSE courses.
Computer Science majors are required to take 7 electives. Read more about it here. Up until this point, I was taking my required Core Courses. I took CSE 132A to fulfill some of those elective requirements. I recommend taking at least one Database courses like CSE 132A to get familiar with SQL and good DB practices.
CSE 140 was one of those courses I wondered why Computer Science students were required to take. After working in the industry for a couple of years, I can better appreciate this course. I advise you to avoid taking this course with Professor Orailoglu if possible. We used Verilog to understand basic digital hardware abstraction and logic gates.
CSE 105 was one of those courses where you had to write a bunch of proofs. Since I was really bad at that, I decided to slim down on the number of CSE courses this quarter. This course contains material regarding deterministic algorithms, turing machines, and finite state machines.
CSE 123 one of those courses I took to fulfill the Upper Div Electives requirement.
I took BILD 3 to fulfill some of Revelle College's Natural Science Requirements.
I did a summer internship during 2015 while taking CSE 197. CSE is an easy 4 unit Pass/No Pass course that counts towards your Upper Div Electives. You're eligible if you're doing a Computer Science internship and all you need to do is blog about your internship experience.
Unfortunately, CSE 141 is another one of those hardware related courses. CSE 141 delves mainly into the theory, but CSE 141L is more hands on with coding. You'll learn a lot about CPU design from logic gates. CSE 141L is definitely the more difficult of the two since you need to code using Verilog.
I took COGS 187A and MUS 173 to fulfill my Upper Div Electives. I couldn't find MUS 173 as an acceptable elective on this page anymore, but I would check with your guidance counselor to confirm.
MUS 173 was mainly about electronic music production. You'll learn how to create music using Ableton Live.
I highly recommend taking COGS 187A if you're into Front End Development. You'll learn about core principals regarding information architecture, navigation, and interaction. I believe this is really important to learn so you can develop good products for real users.
CSE 130 was a fun course. You'll learn about functional programming and play around with different programming languages.
I took both CSE 136 and CSE 135 for finish my Upper Div Electives. CSE 136 was pretty similar to CSE 134B and CSE 135 was pretty similar to CSE 132A. I mainly took those courses because I was already comfortable with those concepts and I knew I would spend my entire quarter focusing on CSE 131. One diff between CSE 135 and 132A is that you'll actually make a Web App and Server that uses a SQL database. I honestly preferred this course over 132A.
CSE 131 was the hardest course I took at UCSD. It uses everything you learned in CSE 105, CSE 141, and CSE 120 to build a compiler from scratch. Each project builds on top of each other as well. Usually, when you finish a project you start a new one from scratch, but in CSE 131, you'll need to make sure your previous assignments are functional to continue your current assignment. I'm pretty sure I spent over 40 hours a week on the assignments.
Keep in mind that requirements change year over year. Back in the day, we had more requirements which is why I have a lot more courses counting towards Upper Div Electives. I think we also needed to take CSE 120 and (CSE 123 or CSE 124) and those didn't count towards the Upper Div Electives. Here's a list of all the courses I took that count towards the Upper Div Electives requirement.
|Upper Div Electives|
Graduating isn't an easy task and having a plan will definitely help you stay on track. I hope my 4 year plan has given some insight on how to structure your own plan. Did you graduate from UCSD as well? What did you do to graduate on time? Let me know in the comments section below.
All products recommended are selected by our team. If you buy something through one of the links on this page, you'll be supporting our team to keep doing what they love.