What upper division undergrad courses for CS?

In summary, the individual is entering their final semesters and needs to choose 5 courses that will make them marketable after graduation. They are interested in Software Engineering, Aerospace, AI, and Gaming, but their primary concern is employment. They have contacts at various companies and have constructed a list of available courses at their university. They must take at least one course in Compiler Construction and four courses from a list that includes Human Factors of Computer Systems, Parallel Programming, Software Engineering Project, Computer System Security, Practical Gaming Design, Introduction to Artificial Intelligence, Embedded Computer Systems, Internet Software Development, Theory of Automata, Computer Networks, Introduction to Data Mining, Introduction to Database Systems, Unix Systems Programming, Software Testing, Introduction to Graphical User Interfaces
  • #1
Of Mike and Men
54
3
Hey everyone,

The Short Story:
I need to choose 5 classes from the below list that will make me marketable after graduation aside from an internship.

The Long Story:
I'll be entering my final semesters this coming year. I, mostly, have only electives left. I have to take at least 5 courses.

There are courses I am interested in from a theoretical standpoint, but because I am an little bit of an older student (I will be 30 at graduation, almost 31) I'd like to do something that makes me marketable at graduation. I plan on going to grad school eventually, but I want to pay off my loans first and get experience in the industry. I'm interested in Software Engineering, Aerospace, AI, and Gaming. However, my primary concern is employment at graduation. While I'm mostly interested in those careers, it doesn't mean that I will be discouraged if I do not end up there.

I have close (family and long-term good friends) contacts at Riot Gaming, Google, NASA, Boeing, the FAA, TSA, and a cyber security firm (can't remember the name off the top of my head). I mention that in case that influences your recommendations since I will likely use these people as future references.

I've constructed a list of available courses at my University:

I must take at least one from the following:
Compiler Construction
Description: This course investigates theoretical and practical issues in the design and construction of modern compilers. Topics covered include lexical and syntactic analysis, syntax-directed translation, type checking, intermediate representation, code generation, and runtime systems. A major portion of the course involves implementing a compiler from scratch for a C-like programming language.Human Factors of Computer Systems
Principles and methods in human factors and ergonomics applied to the design and use of computer systems.Parallel Programming
This course teaches practical aspects of parallel programming. The covered topics include multi-core processors and shared-memory programming, hardware accelerator programming, and distributed-memory machines and message-passing programming. The students will gain the knowledge and skills needed for developing parallel software by writing programs for a variety of parallel computers.Software Engineering Project
Students undertake a software development project. They work in teams, developing requirements and designs which they will implement and test.Computer System Security
Course covers practical aspects of computer system security including managing and producing code for secure systems. Theory, such as cryptography, is introduced as needed.
I must take 4 from the following:
Practical Gaming Design

Course teaches practical aspects of computer game design and implementation. Topics include graphics game engines, game physics, AI methods applied to games, and software architectures for computer games. Students will gain knowledge and skills needed for game development via team projects.Introduction to Artificial Intelligence
An introduction to the basic concepts of artificial intelligence; search techniques, knowledge representation, problem solving.

Embedded Computer Systems
Description: This course studies the architecture of embedded systems, micro-controllers, their peripherals, languages, and operating systems and the special techniques required to use them.Internet Software Development
Description: A course providing foundations for the construction and design of static and dynamic Web pages with database applications. This will include server-side and client-side software development.Theory of Automata
Description: An introduction to automata theory, computability, and formal languages.Computer Networks
Description: A survey of network architectures and their components. Emphasis will be on media access, network and transport layer protocols.Introduction to Data Mining
Description: This course covers fundamental concepts and techniques in data mining and information retrieval. Data mining topics include classification, cluster analysis and pattern mining. Information retrieval topics include Boolean retrieval, vector space model, and Web search.Introduction to Database Systems
Introduction to database concepts, data models, file structures, query languages, database management systems.Unix Systems Programming
Fundamentals of Unix operating systems, Unix file system and environment, C memory allocation, development tools, processes and signals, threads, device drivers, and programming for securitySoftware Testing
The concepts used in a formal testing of safety critical and high-quality software applications are investigated. Topics include, but are not limited to, test design, static and dynamic testing tools, and formal testing documentationIntroduction to Graphical User Interfaces
This course covers abstract and practical foundations of graphical user interface design, evaluation, and implementation. It discusses the fundamentals of computer graphics and interactive computer/human interfaces. The course includes a survey of usability measures, the major GUI standards, and GUI toolsIntroduction to Recommender Systems
This course covers the basic concepts of recommender systems, including personalization algorithms, evaluation tools, and user experiences. We will discuss how recommender systems are deployed in e-commerce sites, social networks, and many other online systems. Additionally, we will review current research in the field.Introduction to Green Computing
Reducing energy consumption of mobile devices, cloud computing platforms, and supercomputers is a paramount but daunting problem. This course covers fundamental concepts and techniques in green computing, including a hardware energy efficiency roadmap; energy efficient software design, resource management, and storage solutions; and green data centers and mobile computing.

-------

The ones recommended to me so far are Software Engineering Project, Recommender Systems, Compilers, Parallel Programming, and Software Testing.

I appreciate any advice.
 
Last edited:
Physics news on Phys.org
  • #2
Compilers, Operating Systems, GUIs, Security...
 
  • Like
Likes Of Mike and Men
  • #3
berkeman said:
Compilers, Operating Systems, GUIs, Security...

Thanks, I appreciate it.

Also, I modified the post. Operating systems was already a required course -- not an elective. My bad. :)
 
  • #4
I didn't see a course in heavy duty number crunching (often taught by the math dept as numerical analysis), but when I worked at Cisco Systems, this was the most valuable course in my arsenal.
 
  • #5
Dr. Courtney said:
I didn't see a course in heavy duty number crunching (often taught by the math dept as numerical analysis), but when I worked at Cisco Systems, this was the most valuable course in my arsenal.

They have Numerical Analysis in our math department. I’m a math minor (completed this part of my degree) and took other courses (mathematical proofs, linear algebra, derministic operations research, and probability). I don’t have enough finances to take more math courses or I would (I’d really like to double major.
 
  • Like
Likes Dr. Courtney
  • #6
What are you interested in doing?

If you want to pursue riot games, please make sure you take the practical gaming design course, but that will not be as useful if you want to work for nasa.

For almost any route take software testing! Operating systems will be important for all.

If you're going to take the GUI course human factors will be useful as well. Human factors is one of the new big things, even in the defense industry. Human factor covers things like usability, which is important even when designing test systems for other engineers to use. But if you want to be a low level (compiler level) programmer, human factors won't be as important.

Data mining will help give you tools to use in the future. Every engineer needs to learn how to extract data from a data-set. Often it is only remove 20 bad data-points out of 500 in an excel document, but data mining will give you methods to deal with larger problems. As an electrical engineer I use data mining methods a lot, even for hardware design.

embedded system could be valuable, depending on what you are working on.

computer networks will be very valuable anywhere.

Things like security, internet software, AI, and database systems depend on what you are interested in.

So if you want a list...

Software Testing
Operating systems
computer networks

Then pick two in subjects that you're interested into "specialize"
 
Last edited:

1. What are upper division undergraduate courses for CS?

Upper division undergraduate courses for CS (Computer Science) are typically courses that build upon foundational concepts in computer science and require a deeper understanding of more advanced topics. These courses are usually taken in the third and fourth years of a CS degree program.

2. What topics are covered in upper division CS courses?

The topics covered in upper division CS courses can vary depending on the specific course and university. However, some common areas of study include advanced programming languages, data structures and algorithms, computer architecture, artificial intelligence, and software engineering.

3. Are upper division CS courses more difficult than lower division courses?

The difficulty level of upper division CS courses can vary, but they are generally more challenging than lower division courses as they require a deeper understanding of complex concepts. These courses may also have more rigorous assignments, projects, and exams.

4. Can I take upper division CS courses without completing lower division courses?

In most cases, it is not recommended to take upper division CS courses without completing the lower division courses first. Lower division courses provide important foundational knowledge that is necessary for understanding the more advanced topics covered in upper division courses. However, some universities may allow students to take upper division courses with special permission or if they have demonstrated proficiency in the subject area.

5. How can I prepare for upper division CS courses?

To prepare for upper division CS courses, it is important to have a strong understanding of the fundamental concepts covered in lower division courses. You can also practice coding and problem-solving skills, as these are essential for success in upper division CS courses. Additionally, you can review the course syllabus or reach out to the professor for recommended readings or resources to prepare for the course.

Similar threads

Replies
2
Views
884
  • STEM Academic Advising
Replies
12
Views
1K
  • STEM Academic Advising
Replies
4
Views
987
  • STEM Academic Advising
Replies
5
Views
859
Replies
4
Views
1K
  • STEM Academic Advising
Replies
3
Views
1K
  • STEM Academic Advising
Replies
2
Views
1K
Replies
16
Views
2K
  • STEM Academic Advising
Replies
1
Views
778
  • STEM Academic Advising
Replies
6
Views
854
Back
Top