Need advice on CS course selection

<p>I have to pick classes for next semester but I am not so sure if I should take another CS course or not. On the one hand I was going to double-major in it, but on the other hand the two courses I could take both have significant drawbacks. I apologize in advance that this is going to be a really long post.</p>

<p>I was lucky enough to take the two basic CS courses (intro and data structures) with a professor who does not teach. He is a really nice guy, he just seems to lack the motivation to come to class prepared to teach. To give you a first impression: he handed out an empty calendar as the syllabus…</p>

<p>(If you know anything about CS: After my Data Structures course, all I know about graphs is that they have nodes and edges; all I know about binary trees is that they have a breadth and a depth and that each element to the left/right of an element is smaller/larger than that element, and I can tell the difference between a balanced and an unbalanced tree; all I know about Big O-notation is that it relates to the speed of an algorithm relative to the amount of input data, but I have no idea how to compute it)</p>

<p>I talked to this professor and he pretty much told me the same thing he told me after the intro class (that the next class will be more structured, cover more material etc) but nothing changed after the intro class, so I am doubtful that the next class he teaches will be a lot different. I tried to talk to my Dean who did not believe me (“You are probably just bored because you already know everything that is taught in the class” - wrong!) and I talked to several CS majors who strongly recommended me to avoid this professor. </p>

<p>The problem: our CS department only has 3 professors, 1 of which is on leave for the current and the upcoming semester. To complicate matters, this professor is the department chair and I will be working with him this summer, so I don’t want to completely destroy my relationship with him.</p>

<p>Since I don’t know anyone else I could ask for advice at this point, I just have to make a choice. Because of some scheduling conflicts, I have the following three options for CS next semester:</p>

<li><p>Not take a CS course.
Pros: I wouldn’t have to worry about CS anymore.
Cons: I was going to double-major in CS and I wouldn’t quite know what classes to take instead. (My other major is math.)</p></li>
<li><p>Take another course with the same professor.
Pros: I know that I am “prepared” for the course and I know that it will be easy, and I would make progress towards the major (at least credit-wise)
Cons: I wouldn’t learn a lot… And three poorly-taught CS courses don’t make a good foundation for further studies.</p></li>
<li><p>Take Algorithms at Swarthmore through a cross-registration program.
Pros: I might actually learn something.
Cons: I don’t feel adequately prepared for this class at all. I just saw a sample midterm of Swarthmore’s Data Structures course and even though we supposedly covered all of the material, I am not able to answer a single question on their exam. I would not only have to self-study Data Structures over the summer but also learn Java, and that might be too much. In addition, the commute to Swarthmore is a royal pain in the ***.</p></li>
</ol>

<p>Any thoughts or suggestions?</p>

<p>P.S. It is not just me having these issues. Two of my friends came here to be CS majors and are now declared math majors because they are extremely disappointed by the rigor of the CS courses with this professor.</p>

<p>I think you should take Discrete Math at some point (that'll help you down the road with virtually every higher course in CS, and will even help you understand big-O for now). (For big-O, if you're analyzing an algorithm, then there are certain rules with for loops, recursion, etc. to figure it out... and you pretty much discard coefficients). If it's an equation, you can solve for C and find the limit as x-->inf (using l'hospital's rule if necessary). What are the next few courses that you'd be taking in the CS curriculum at your school? How good are the CS/Math departments at your school/at Swarthmore? I know a little bit about Swarthmore, but not much about their CS stuff.</p>

<p>And also, if you take a class at Swarthmore, is the course just for transfer credit? Or does it factor into your GPA? And... what language did they have you working in in your first year of CS, if not Java?</p>

<p>Thanks for the response!</p>

<p>Unfortunately discrete math is taught by the math department here and abused as a "bridge to higher math"-course. Since I have already taken higher math courses (abstract algebra), I am not allowed to take it for credit... That also means I will be missing out on the CS part of it. I was going to audit it, but it conflicts with the one math class I should really take for my math major next year (real analysis).</p>

<p>At my college I would be taking Principles of Programming Languages next fall and Intro to Unix/C next spring (fortunately this one is taught by a different prof!). Right now we are "working" in Python (we only had two short programming assignments so far this semester...). And yes, grades at Swarthmore would count into my GPA (yikes!). </p>

<p>All I know so far about CS courses at Swarthmore is that they are a LOT harder than our ours... and I am not so sure if that would be a good idea considering my weak CS background. The other options are another poorly taught CS course or no CS at all for one semester. What is preferable?</p>

<p>I don't really know much about CS, but you do realize that if you double-major in CS you'll be having the same problems with your CS department for the next three years. So taking a class at Swarthmore wouldn't really solve that long-term problem. Unless the professor who is on leave is much better than the others?</p>

<p>Another idea might be to take another CS class with the same professor, and in the meantime study by yourself so that the semester after that, you'll be better prepared to take a CS course at Swarthmore. How does that sound?</p>

<p>Hello,</p>

<p>I'm a CS major myself (actually EECS).</p>

<p>First of all I would look at WHY you want to double-major in CS again. What was your goal when you decided to do it? Is it just that you are interested in it? Do you think it will give you more/better job opportunities? Better chances for grad school admission? What do you think how important this double major is actually for your further career? If you're simply interested in CS, you could as well study these things on your own. As someone who studied almost everything on his own, I can tell you that it's far from impossible. There are tons of good resources out there (Lectures/Courses from Berkeley/MIT online, great books, etc). However, if you want to work after undergrad. school, there will probably be more job opportunities for someone with a CS Degree than for someone with a pure math degree. For grad school it might not matter that much...</p>

<p>If you think that the CS double major would be really helpful in your future career, I would take the easy professor. You might think you don't learn as much, but the truth is that how well you learn is up to you. That your professor does not teach well/much, does not mean that you can't read other books which actually teach you the material at the same time.</p>

<p>If you only worked with Python and don't know much about Data Structures anymore, then yeah, I think it would be hard to study both of these over the summer. On the other hand I think that Java is a very important language and that someone who was a minor in CS should know about it. If you have a CS Degree and only know Python, I guess that it would look a little strange to a possible employer.</p>

<p>Hope that helps a little bit.</p>

<p>Discrete Math here basically is a CS class. Some parts help immediately (big-Oh, graphs, trees, induction, recursion, etc.), but the other parts help down the line in higher CS courses (e.g., propositional and predicate logic).</p>

<p>I would probably be pretty frustrated with the CS department, too. I don't think just studying over the summer will solve the actual problem. But if you want to study over the summer, I don't think learning DS and Java would be too difficult. If you can get into Java and understand OOP, then you can read about different data structures in the API, and write your own implementations to get a better understanding of how they work... then there's algorithm analysis: for that, you'd need to understand big-Oh, and I guess the important algorithms to be familiar with are sorting algorithms. As far as only knowing Python and looking for a job... if you're educated in CS, you'll be able to pick up another language quickly.</p>