Frequently Asked Questions (undergraduate advising)

Contents

Declaring a Major or Minor

Declaring the CS* Major

Q: I am currently (majoring in [xxx] | undeclared) but I have decided I want to be a CS major. How do I declare the CS major?

A: CAS advisors in Tykeson Hall (Scientific Discovery and Sustainability flight path) can help you. They can work with you to make a graduation plan, and they can work with the CS department to activate your new major. See: https://advising.uoregon.edu/connect-advisors . Your Tykeson advisor can also assess whether your situation requires additional consulting with a faculty advisor in CS, and will refer you to the CS advisor if needed. Then send email to advising@cs.uoregon.edu, cc your Tykeson advisor, and be sure to include your student number. It is a good idea to check in with a CS faculty advisor at some point within a year of declaring the major, but it is not required before declaring the major.

*Note: Until fall 2022 the name of the degree program and department was “Computer and Information Science”. Starting fall 2022, they have changed to “Computer Science.” While the prior name was accurate, unfortunately the abbreviation “CIS” was often confused with “Computer Information Systems”, a less technical degree program typically offered in schools of business. The shortened name and its abbreviation “CS” avoids this confusion.

Declaring a CS/CIT Minor

Q: I am currently (majoring in [xxx] | undeclared) and I would like to add a CS or CIT minor. How do I declare the CS minor?

A: While you are not required to see an advisor before declaring the minor, CAS advisors in Tykeson Hall (Scientific Discovery and Sustainability flight path) can help you work out your graduation plan and make sure it is feasible. Then send an email to advising@cs.uoregon.edu. Be sure to include your student number.

Q: Can I declare the CIT minor if I am a CS major?

A: Normally the CIT minor cannot be combined with the CS major, because of excessive overlap between the major and minor. A CS major who wishes to add the CIT minor, or a CIT minor who wishes to add the CS major, may petition to the Undergraduate Education Committee of the Computer Science department for an exception. The petition should explain specific reasons, typically career goals, for selecting this combination. If the exception is granted, it may be conditional on other course choices (e.g., specific selections of CS 400-level electives) that are consistent with the stated reasons for combining CIT with CS. Note also that a minor in CIT will never be accepted as a substitute for the science requirement of the CS major.

Starting points

Starting points for most students

Q: Where should I start if ...

I don't intend to major or minor in computer science or a computing-related field. I can take only one or two courses in CS. I want a basic background and some practical skills.

A: CS 110 and/or CS 111 are good starting points for many students in other majors.  CS 110 is an Understanding Digital Technology course, with a broad, high-level introduction to various “digital world” topics, e.g., hardware, software, the internet, privacy, security, etc. CS 110 also covers web programming using HTML code. It has no pre-requisites. CS 111 in an intro to web programming using Javascript. CS 111 has a Math 101 pre-requisite. CS 110 is a recommended pre-requisite for CS 111, but 111 can also stand on its own.

CS 111 and CS 110 are in the Science core education group.  CS 111 is also a B.S.-satisfying course.

CS 122 is an introduction to general purpose programming using Python, the same language used in CS 210 (see below).  CS 122 has a math 101 pre-requisite. It is a gentler introduction to Python programming than CS 210, with less breadth and depth. Whereas CS 210 focuses on computer science topics, CS 122 focuses more on general problem solving with computing. CS 122 is useful by itself or as preparation for CS 210. 

CS 122 is a Science core education and B.S.-satisfying course.

I would like some exposure to computing and computing-related topics, but without a programming focus.

A: CS 110 Understanding Digital Technology (see above), CS 102 Introduction to Computer and Information Security, and DSCI 101 Foundations of Data Science focus on computing topics and are Science core education courses.

I intend to major in Computer Science, Data Science, or Math and Computer Science (MACS), or to study more advanced computer science for use in my major field. Math is fine!

A: You may want to start with CS 122 (see above), or you might be able to jump right into CS 210. CS 210 is the first required course in the CS major. It has a Math 112 prereq and focuses heavily on programming (Python) in the context of CS topics. Students who have not programmed before, but who took calculus in high school or college, typically can keep up with CS 210, but it is intense and moves very quickly. Data science majors who have not finished calculus should enroll in calculus (Math 251) concurrently with CS 210; computer science majors should enroll in either calculus or discrete math (Math 231).

If you find yourself struggling in the first week of class, talk to your instructor … CS 122 and CS 210 classes are deliberately scheduled at that same time so that it is straightforward to transfer from one to the other in the first week of class.

CS 210 is a Science core education and B.S.-satisfying course.

Starting points with AP credit

Q: I received AP credit for CS 210 and CS 211, but I am worried about my readiness for CS 212. How can I determine whether I am ready?

A: If you scored 4 or better in your AP CS A course and earned credit for CS 210 and CS 211, you are probably prepared for CS 212. Your experience with Java will not be the same as many of your classmates’ experience with Python in CS 210 and 211, but it won’t necessarily be better or worse. Your CS 212 classmates, like you, will mostly be encountering the low-level C language for the first time. They will be as challenged by it as you. That said, some students, especially with a score of 4, find it helpful to start with CS 210 and 211 at the UO, to solidify understanding of intro CS topics in the context of a new language (Python).  If you find yourself struggling in the first week, talk to your instructor.  CS 212 and CS 210 are deliberately scheduled at the same time so that it is straightforward to transfer in the first week of classes. 

Starting points for Post-Bacc / Second Baccalaureate students

Q: I have a prior degree in [xxx], but I have decided that I would like to make a career change into software development. Should I take a pursue a second bachelor’s degree in CS? How long would it take?

A: The time to earn a second bachelor’s degree in CS varies widely, depending on your prior background (both academic and experiential). The computer science curriculum, as in many STEM fields, is highly sequential, so if you start from the beginning (CS 122 or CS 210) and proceed all the way to a degree, it may take up to three years. It is best to talk with a CS faculty advisor to consider your options, which might include different starting points as well as different end-points.

Before that meeting, here are some things to think about:

  • Is the degree important to you, or would you be happy to establish enough skills for your career goals?
  • Do your longer term goals include a graduate degree in computer science?  If so, you may want to consider foregoing the second bacc degree in favor of preparing and completing a master’s degree, especially if you have already taken computer science courses.
  • Are you more concerned with the duration of your study (minimizing time to finishing by studying full-time), or would a somewhat longer program with a more modest course load work for you?
  • What attracts you to computing? Are you motivated more by the intellectual challenge and interesting problems, or by a stable long-term career, or something else? (This may be helpful in considering some of the prior questions.)
  • Are there aspects of your prior study or job experience that you would like to combine with new skills and knowledge in computing, or would consider?

Starting points for self-taught programmers

Q: I have been programming for X years [ for my own projects | in my job ] and feel that CS 122 or CS 210 may not be the right starting point for me. Is it possible to start at a different point in the curriculum? Is there a placement test or another way to find the right place to start?

A: There is no placement exam, but we often work with students to find a starting point at which the student has a good chance of success but is not just repeating familiar material. This can be tricky because quite often a student is advanced in some aspects of programming but missing some other fundamentals. The best way to explore this is to talk directly to a CS advisor. The advisor will probably ask you about your preparation in mathematics as well as computer science. You may also be asked to do some self-assessment by trying projects and exams from past offerings of classes. The advisor may also quiz you on some computer science concepts and techniques, but this is not an exam that you “pass” or “fail”; it is your interest as well as ours to find a suitable starting point, and identifying the boundaries of your knowledge is necessary to that end. Often it takes more than one advising session, often with some self-study or small projects between sessions, to get a good sense of the best placement, so it is important to connect with an advisor as early as possible. Note that a more advanced placement will not reduce the number of CS credits that you must earn for a major or minor in CS, but it might help you get to more challenging material sooner.

CS Science Track options

Students are encouraged to take a minor or a second major, and in many cases the minor or second major can be accepted by petition as a substitute for the CS science track requirements. As stated at https://scds.uoregon.edu/cs/undergraduate-programs/major-requirements#cs-major, approval is not automatic. A petition should be filed before a student commits to a minor or second major.

  • It is not possible to use mathematics minor as a substitute for the science track. A completed second major in mathematics may substitute.
  • Examples of minors and second majors that have been accepted in lieu of the science track requirement include business and music technology. However, approval is not automatic. The coherence of the overall plan of study and justification provided in each petition for a substitution is considered individually.
  • Other majors and minors might be accepted with a good rationale. Good justifications for accepting a major or minor in lieu of the science track requirement may include:
    • A concrete, realistic plan to use computing in another field. For example, a student with a second major in archeology might make a thoughtful, plausible case for applying approaches and concepts from computer science in archeology. Mere mention of the existence of computational branches of another field does not suffice.
    • A thoughtful, realistic plan to apply knowledge from another field in computing. For example, one could imagine a minor or major in linguistics tied to study of human computer interaction. Evidence of a thoughtful plan would typically include specific course choices or research in the minor or second major field, e.g., it may be easier to make a case for psycholinguistics than for comparative linguistics.

Q: Can the Clark Honors College science colloquia count for the CS science requirement?

A: No, the CS department requires a full year (three courses) of study in one field of science or a computing related discipline. The CHC science colloquia are excellent, but each colloquium is on a distinct topic or subfield, so they don’t fulfill our goal of making sure you have a solid foundation in a related discipline.

Transfer credits

Transferring from Oregon universities and community colleges

Q: I am (taking|planning to take) CS (161 | 162 | 260 ) at (Lane | Linn Benton | ...). How will this transfer to University of Oregon?

A: Introductory sequences at other Oregon universities and community colleges transfer as follows:

CS 161

CS 210 (currently using Python at UO)

CS 162

CS 211 (currently using Python at UO)

CS 260

CS 212 (currently using C at UO)

While you could transfer at any point, some points are smoother than others. CS 210 and CS 211 are closely integrated, making a transfer after CS 161 / CS 210 and before CS 162 / CS 211 difficult, particularly if CS 161 is taught using a different programming language. If you take CS 161 at a community college, it is probably best to take CS 162 at the same community college. Transferring in at CS 212 (CS 260) works well because UO students are changing programming languages at that point, and of course transferring in after CS 212 (CS 260) is also fine. It is ok if your CS 161, 162 courses use a programming language different from Python as long as you don’t jump into the middle at CS 211.

Transferring other computer science courses

Q: I have taken or plan to take course XXX at University of YYY. Will this course transfer as CS ZZZ at University of Oregon?

A: Transfer equivalencies from many universities can be found in a transfer equivalence database. The transfer equivalence database should always be the first check. Occasionally a course may be accepted to satisfy a CS requirement even if it does not transfer as the UO CS course satisfying that requirement. For example, CS 195 (web authoring) at Lane Community College does not transfer as CS 110 at UO, and does not satisfy all requirements that CS 110 satisfies (in particular it is not a Science core qualifying course at UO), but it may nonetheless be used in place of CS 110 for the CIT minor.

Substitutions of course XXX for ZZZ to meet a CS requirement, when XXX does not transfer as ZZZ, require a petition to the UEC. The petition should include a copy (preferably a link to) the syllabus of course XXX, and the student may be asked for example work (projects, exams, etc) to help CS determine whether course XXX sufficiently meets the learning objectives of ZZZ.

Q: I have just one or two courses left for the degree, and because ____ I’d really like to move to / remain in ____ . Can I take my remaining courses at another university?

A: It may be possible to finish your remaining coursework at another university, but it requires care. First, check your degree guide in Duckweb. It has an entry for the UO residency requirement, which looks something like this:

If your residency requirement has not been satisfied (like the example above), then you must take additional coursework at the University of Oregon. In addition to the UO residency requirement, the CS department requires that you take 24 credit hours of CS courses at UO.

If you have satisfied both the UO residency requirement and the CS requirement of 24 CS credits at UO, then you may be eligible to take your remaining coursework somewhere else. But be careful! It is essential that any course you plan to take elsewhere take be pre-approved as a course that could be transferred to the UO to meet major and degree requirements. For the Computer Science major, this would be via petition to the CS Undergraduate Education Committee. Please include any information about the university and course that would help the CS UEC make this determination, e.g., a course website, syllabus, schedule, text, and similar information.

Characteristics of the Program

Q: Does University of Oregon offer online courses?

A: While there are some online and asynchronous courses at University of Oregon, most of our courses for computer science majors are offered synchronously and face-to-face in a classroom. We understand that face-to-face classes won’t work for everyone. We take advantage of real-time interaction for approaches and activities that we can’t duplicate in an asynchronous format. Some other universities offer more asynchronous and remote courses, which may be more accessible to some students.

Math Pre-requisites

Q: I want to take (CS 111|CS 122), which has a math 101 pre-requisite. I took math 101 in high school. How can I get approval to take the CS course?

A: As you have taken Math 101 in high school you can meet the CS 111 prerequisite by taking the free, online ALEKS Math placement test and scoring at the prepared-for-Math 111 level. Your score will serve as the prereq for CS 111 or CS 122, and you can register in the usual way.

Q: The ALEKS math placement test places me at “ready for XXX”, but I have already taken courses at least through XXX in high school. What should I do?

A: Brush up and retake the ALEKS exam! Many students are disappointed in their initial ALEKS exam result, especially if it has been a few years since they took a math course. You can retake the exam up to four times, but you should use the ALEKS practice materials to freshen your knowledge and facility with the material first. Plan to spend at least an hour on the prep module before giving the ALEKS exam another try. You can find more information and a link to the prep module here: https://testing.uoregon.edu/math-placement#improve-score

Portfolio Projects and Self-Study

Q: What can I do (over summer | between terms | in my spare time) to improve my skills and prepare for a career and internships?

A: Always be programming. You can do projects on your own or with friends, on topics that interest you. As you get into the upper division of CS classes and start looking for internships and career opportunities, at least some of your independent projects as well as the class projects you are proudest of can be kept in a portfolio in a public repository like GitHub.

You might choose a project in an application domain you care about, or as a way of pursuing a technical topic (e.g., functional programming, programming in Rust, embedded programming, etc). The projects don’t need to be big, but you’ll want to scale up a bit as your expertise grows. And failure is not a catastrophe, provided every failure helps you see more clearly what you need to learn to be able to do the things you want to do. Try to fail on small enough projects that you can learn quickly and move on to success … sometimes that means purposely picking something small but hard to learn from. (Your portfolio should show off your successes rather than your failures.)

If you were learning clarinet or drumming or juggling, the things you would need to practice and get better at would be just a little beyond your current level of competence, and you would need to also practice the skills you already have. Programming is not so different. Don’t jump into something that is way beyond what you can tackle, but also don’t limit yourself to what you already know. Make modest steps. And do something that you find fun and intrinsically interesting. You wouldn’t want to just practice scales on the clarinet or rudiments on the snare drum. You’d want to practice your scales and rudiments, but also learn a musical piece that would give you pleasure and make you feel accomplished, something just difficult enough to move you forward. The same with programming.

What computer will I need?

Q: Do I need a computer? What kind should I buy?

A: While the University provides access to computer labs, a laptop computer will be very useful to you, especially for courses in which you write programs … which is a lot of your computer science courses. Lab spaces provide useful equipment when you don't have your laptop with you, and are excellent collaboration spaces even when you bring your own computer. These include Deschutes room 100 dedicated to students in upper division CS courses and available to CS majors 24 hours a day. It is not unusual to see students working together in the lab with their laptops while the lab computers sit idle beside them.

A tablet without a keyboard is not conducive to programming, and may not run the software tools you need for your courses. A netbook (e.g., a Chromebook or similar) is also unlikely to be satisfactory. On the other hand, a desktop computer is not handy when you need to work with classmates somewhere on campus. A laptop computer running MacOS, Windows, or Linux is really the sweet spot.

We don’t recommend a particular brand or configuration of computer. Many students use Mac laptops, many use Windows, and a smaller number use Linux. Any of those will do fine.

Although computers are not changing as quickly as they did in prior decades, they still improve quickly enough that it is best to anticipate replacing a laptop after about 3 years. If you have a good-enough working laptop, you may want to postpone purchasing another until you need it. If you do buy now, don’t overbuy.

CS 122, CS 210-212, and CS 313-315, 322, and 330 are typically the first two and sometimes the first three years of CS courses. For CS 122, 210, and 211, pretty much any recent consumer-grade laptop will be adequate.  You will be programming in Python, initially using the IDLE programming interface that comes with a Python installation, and then moving to an integrated development environment like PyCharm or VSCode. It doesn’t take a lot of computational oomph to run these tools, but they run a little more smoothly if you have a good deal of main (RAM) memory.

In CS 212 you will start running Linux environments in virtual machines, and similarly for some subsequent courses. Those definitely run best if you have a generous dose of main memory. How much is enough? If you have a laptop with 4G of main memory, it is probably adequate. If you are buying a new computer in 2022 it would be better to get 8G of main memory. That keeps changing, much more quickly than CPU speeds are going up, and this is one of the main reasons to not over-invest in a laptop before you need it. These current minimums (as of 2022) may well double before you graduate.

Don’t ignore ergonomics. Good keyboards matter. Good displays matter, especially when debugging. An external monitor with a much larger display than your laptop is a pretty good investment. You don’t need an expensive 4K+ monitor, or a huge display, or multiple monitors. Two or three hundred dollars will buy a monitor that gives you much more screen real-estate than your laptop.

Mac or Windows? Either can be fine. An advantage of MacOS is that it is a Unix-based operating system, so it is more similar to the Linux environment that you will be using in later classes than is Windows. On the other hand, modern versions of Windows come with a Linux subsystem, so you can definitely get used to working in the Linux command-line environment from either side.  This will hardly matter at all until you hit CS 212. Regardless of what your main working environment is, you will be working a lot with virtual machines that run Linux from CS 212 forward (but not in all classes).

Don’t rush, and particularly don’t rush out to buy more machine than you really need to get started. If you have a decent working laptop now, maybe wait half a year or a year. If you don’t have a laptop now, or you think the laptop you have now is likely to be insufficient for your needs, don’t overbuy. Trying to buy a computer that will last through four years is probably a bad idea. You’ll be better off buying an adequate but modest computer now (if you need one), and planning to replace it in three years or less.