Regardless of where you are in the CSCI curriculum, it is critical that you review the concepts taught in your previous (prerequisite) courses before starting classes each semester. As an incoming UGA student, you should also make sure the course you are considering is appropriate for your experience level. This guide will help you select the appropriate CSCI course to begin with at UGA. The School of Computing provides a Course Information Sheet (CIS) that outlines the learning outcomes and major topics covered for each course in the curriculum. Before taking any courses at UGA, we recommend carefully reviewing the Course Information Sheet (CIS) for all prerequisite courses to ensure you are adequately prepared. For example, if you plan on taking Software Development (CSCI 1302), you should first review the learning outcomes, major topics covered, and their associated knowledge levels in the CSCI 1301 CIS. If your introductory course was taught in Python, you would need to take CSCI 1301 at UGA to build up your foundational Java knowledge before moving to CSCI 1302. If the learning outcomes for a prerequisite course are unfamiliar and/or the major topics weren’t covered at the required knowledge level at your previous institution, you are not ready to move into the next course. Instead, you should start by taking a course at the appropriate level to build your foundational knowledge before moving ahead. Remember, pushing forward without adequate preparation can lead to a much larger setback than starting in the right class. In some situations, the setback can extend the time required to earn your degree by up to a year. If you have questions about which course is right for you, please email your academic advisor for advice. Remember, pushing forward without adequate preparation can lead to a much larger setback than starting in the right class. Course-Specific Information: You can find the Course Information Sheet for each course in our CSCI course list or by following a specific course link below. Simply click the course you plan to take and then scroll down to the “Course Information File” pdf on the School of Computing website. Here, we outline course-specific details along with the required prerequisite knowledge for each course. We highly recommend clicking on the link for each course, reading the high-level list of concepts covered and then reviewing the full Course Information Sheet (CIS). Click a link below to jump directly to a course you are considering: CSCI 1300: Introduction to Programming with Python If you are a non-major or are considering a Computer Science degree, minor, or certificate but are unsure if it is right for you, this is a great place to begin. The course has no prerequisites and is a gentler introduction to programming than CSCI 1301. CSCI 1300 does not fill any major requirements. It is taken only as an elective. CSCI 1301: Introduction to Computing and Programming Prerequisite: MATH 1113 (Precalculus) If you are a Computer Science major but haven’t taken an equivalent course at the college level or if your introductory course was not taught in Java, you should start here. This course does not assume you have any prior CS knowledge. However, any prior experience will be beneficial. If you still aren’t sure if this is the right course for you, take a look at the CSCI 1301 Course Information Sheet for more details about the course. CSCI 1302: Software Development Prerequisite: CSCI 1301 If you completed CSCI 1301 at another institution (or in high school) and you received UGA credit for the course, we still recommend that you review the CSCI 1301 Course Information Sheet and speak with your academic advisor before taking this course. The course is a rigorous follow-up to CSCI 1301 taught in Java. It covers the topics listed in the course information sheet at a deep level and students are expected to be able to implement software solutions that incorporate all of the topics from CSCI 1301 along with new topics in CSCI 1302 in a Unix terminal environment. There is little time spent on reviewing concepts from CSCI 1301. However, your instructors will send out instructions outlining how you can review and practice your programming skills a few weeks before the course begins. Keep an eye out for their email and make sure you take their advice! CSCI 1730: Systems Programming Prerequisite: CSCI 1302 If you completed CSCI 1301 and CSCI 1302 at another institution and you received credit for both courses, we recommend that you review the CSCI 1302 Course Information Sheet and speak with your academic advisor before taking this course. We also recommend that you review chapters 1 through 12 in the textbook that is used in CSCI 1301 (Java: An Introduction to Problem Solving and Programming, 8th Edition, ISBN: 978-0134462035). This course focuses on the C programming language which is considered a lower-level (closer to the hardware) language than Java. Students taking CSCI 1730 are expected to have significant experience in a Unix command-line environment and be well-versed in CSCI 1302 concepts. We recommend that you complete the online tutorials for Unix/Linux at https://info-ee.surrey.ac.uk/Teaching/Unix/ and the built-in Emacs tutorial (or any online tutorial for Emacs) prior to your first day of class in CSCI 1730. The knowledge gained from this course is critical for success in our other systems-level courses like Operating Systems, Architecture, and Computer Networking. CSCI 2610: Discrete Mathematics for Computer Science Required Prerequisite: Math 1113 (Precalculus) Recommended Prerequisite: CSCI 1301 Students in Discrete Mathematics will start to build the theoretical foundation for other courses in the discipline. Topics taught in this course pop up regularly throughout the CS curriculum. Discrete Mathematics at UGA puts a higher emphasis on proof-writing techniques as they are an important skill in CSCI 2670 and certain courses throughout the curriculum. If you are a Computer Science major but haven’t taken an equivalent course at the college level or if your Discrete Mathematics course did not cover proof-writing techniques, you should start here. You can find more specific topics in the CSCI 2610 Course Information Sheet. We highly recommend waiting until you have successfully completed CSCI 1301 to take this course as many of the CSCI 1301 concepts will come up periodically throughout the course. CSCI 2670: Introduction to Theory of Computing Prerequisite: CSCI 2610 If you completed CSCI 2610 at another institution and you received UGA credit for the course, we still recommend that you review the CSCI 2610 Course Information Sheet and speak with your academic advisor before taking this course. This course is a rigorous follow-up to Discrete Mathematics. It covers the topics listed in the course information sheet at a deep level and students are expected to come in with a strong understanding of the topics covered in Discrete Mathematics, including the proof-writing techniques. CSCI 2720: Data Structures Prerequisite: CSCI 1302 and CSCI 2610 Data Structures assumes students have significant experience (at least two semesters) working with the Java programming language and at least one semester of experience using a Unix command-line interface. Make sure you have a deep understanding of all of the prerequisite concepts listed in the CSCI 1302 Course Information Sheet and the CSCI 2610 Course Information Sheet before registering for this course. Students with no Java experience at the college level should begin their studies in an earlier course. This course assumes students have a working knowledge of Java Generics, Inheritance, Polymorphism, and Interfaces and does not provide a review of these topics. The course focuses on designing, analyzing, and implementing data structures and their algorithms. While students in the introductory courses often focus on getting their programs to work correctly, students in Data Structures will learn to focus on both correctness and efficiency. The majority of 4000-level Computer Science courses require Data Structures as a prerequisite. The knowledge obtained in this course is critical for Computer Science students. It is used in every professional setting, advanced CS course, and even technical interview questions often come from topics taught in this course. Questions? Do not hesitate to reach out to your academic advisor with any questions. They may not know the answer, but they know who does know the answer. Everyone at UGA wants you to succeed, but in order to do so, it’s important to reach out for help when you need it!