How is your CS curriculum structured?

<p>Hi all</p>

<p>I am curious to as how other schools structure the CS Major as I feel like my school has a shaky structure or at least teachers that don't know how to teach, but that is just my opinion.</p>

<p>For us, we start out learning Java which is pretty basic with arrays, loops etc. Then the class after that is another class that uses Java that introduces use to the basic of oop and data structures. Theses two classes were fairly straightforward. Then the next class has us working in all kinds of programming languages C, C++, prolog and scheme. This class is what completely screwed myself as well as other students. Within a semesters time we were just thrown in to learn these languages. The teacher rushed through all of his lectures and the tutors were too busy helping 20 other students in class that are just as confused as I am. After taking that class, everyone is expected to know C/C++ since the majority of the upper division classes uses those languages (with the exception of Database, and a few others). Once we finally got to the most important class in my opinion Data structures and Algorithms, I felt completely lost programming any of the Data structures in C++ since we only had about a month exposed to C++ in the previous class. I felt bad cause, I think my professor felt suspicious as to how my programming grade was so low compared to my test grade. I knew how the data structure worked, just I don't know how to program it. Now, I am in a class that is called introduction to software engineering and we are excepted to program a full website in a month in languages and tools we don't know. We just turned in our first deliverable which is the outline of what we want to do and this has not been approved yet. </p>

<p>So enough ranting, I find that I teach myself the material a lot and go to the internet for help and references. Is this normal in CS? Do you guys happen to end up teaching yourself the material just to get through the class? And I don't mean looking up extra stuff just to know more programming, I mean having to look up stuff because the lectures are completely useless. Also how are you guys taught programming languages and what languages are you guys taught? How are your software engineering classes like? Curious to know if it is the same at other universities.</p>

<p>You can take a look at these courses for comparison. CS 61A, 61B, 61C is the usual introductory sequence for CS majors. CS 10 is for those with no programming experience and for non-majors, though some students are enticed into majoring in CS.</p>

<p><a href=“CS10 : BJC | Spring 2014 | UC Berkeley EECS”>http://www-inst.eecs.berkeley.edu/~cs10/sp14/&lt;/a&gt;
<a href=“CS 61A Spring 2014: Structure and Interpretation of Computer Programs”>http://www-inst.eecs.berkeley.edu/~cs61a/sp14/&lt;/a&gt;
<a href=“CS 61B: Data Structures - Shewchuk - UC Berkeley”>http://www.cs.berkeley.edu/~jrs/61b/&lt;/a&gt;
<a href=“CS61C Spring 2014: Great Ideas in Computer Architecture (Machine Structures)”>http://www-inst.eecs.berkeley.edu/~cs61c/sp14/&lt;/a&gt;&lt;/p&gt;

<p>Also how do your Professors teach would also be helpful</p>

<p>Look around in those course pages, since there may be links to videos of lectures.</p>

<p>You get a lot of help nowadays. You don’t need to depend on teachers much. And it’s probably going to be like that going forward. </p>

<p>Languages shouldn’t be a problem for CS. It’s the structures, program design and concepts that are important which is why they don’t emphasize languages and expect you to pick them up yourself. If your teachers are expecting you to pick up concepts on your own then there is a problem and there wouldn’t appear to be much reason of being at college beyond the slip of paper.</p>

<p>Yes, the internet and books should be enough to learn a language. If you want to make it as a coder, you’ll have to get use to learning stuff on your own. Nobody’s going to hold your hand when people are paying you money to write code for them</p>

<p>We start with Scheme (actually, Racket, specifically). The main research focus of my university is programming languages, and the language was originally developed by some of our profs. The goal of the first semester CS class is to teach good programming concepts and design. So no one can test out of it, no matter how much programming experience they have. Because of the school’s PL focus, we also learned to kind of hate Java (which is really a mess) (even though the 2nd semester CS course is Java).</p>

<p>That first course is massive - 400 students over 5 sections, 10 lab sections, 11 TAs (I’m one of them), and 30 tutors. Just for that class. It’s apparently considered one of the hardest freshman classes at the school. But no one told me that when I took it, so I enjoyed it as a fun and easy class!</p>

<p>I eventually came to the conclusion that many schools start with Java simply because low-level CS classes aren’t only for CS majors. C++ is a better first language - once you understand C++, pretty much every other language is trivial to learn. But there are also a lot of students who take only two semesters of programming, so Java is for them. After two semesters you can actually write useful and high-quality Java code. Not so with C++, which takes more effort to appreciate.</p>

<p>Java is much easier than C++.</p>

<p>The idea behind using a language like LISP/Scheme/Racket or Python first may be to introduce CS concepts without getting hung up on syntax details in a language like Java or C++. But then Java can be brought in for data structures, and C or C++ and its pointers and other lower level features can be brought in for computer systems/organization/structures.</p>

<p>CS is not an easy degree for most people, so having struggles is nothing unusual.</p>

<p>When I was getting my CS degree in the early 80s, my first two programming classes (Fortran and Pascal) were great. After that, most of my classes were confusing. We had a “Survey of Programming Languages” class where we covered four or five languages (Lisp, APL, Algol, I forget what the others were) in a semester, and I barely had a grasp on any of them. I thought for sure I was going to flunk data structures, but thanks to a massive grading curve where something like 40 out of 100 was an A, somehow passed. The “bad professor” complaint seems to be fairly common in CS programs, but that may be because CS is one of those areas where it’s hard to learn the concepts from a lecture. You have to try things out by writing code in order to actually understand them.</p>

<p>I’m not personally a big fan of Scheme,since it’s a language you’ll likely never use once you get out of school. Seems to me Java is a perfectly good language to start out with. It’s widely used in the industry so it’s practical, and you can learn basic programming concepts from Java as well as you can from any other language. Stanford teaches Java in its introductory programming class.</p>

<p>Trying to cram C and C++ into a class with Prolog and Scheme seems nuts if the expectation is you’re supposed to come out of the class with a working knowledge of those languages. I can easily see C being one semester-long class, and C++ being another semester-long class.</p>

<p>Of course, in industry jobs, you may have to pick up new programming languages quickly when choosing the most appropriate tool for the task. That may be the point of using more than one programming language in the introductory sequence, or a “survey of programming languages” course.</p>

<p>The people that I work with who graduate from UCSD CS told me they learned C and C++ and everything else they could pick up in less than a week.</p>

<p>That’s nonsense, Dr. Google.</p>

<p>Not to them. Maybe you went to the wrong school. :))
I asked them and they told me they spent a week learning Objective C, and some other stuff I don’t remember. But basically you don’t have to learn every single language.</p>

<p>simba, I reread your post #11, I learned Basic, Fortran and Assembly language in college. Almost every language in your post I picked up after college.
C, C++, Pascal, Ada, Java, Perl, Lisp.</p>

<p>Thanks for the insight everyone! Haha Dr. Google, I feel like I went to the wrong school. As you said, UCSD students learn C and C++ and I think that gives a strong foundation to learn other languages. I agree, languages should be easy to pick up later and you can just learn online. I guess I’m just frustrated since our professors expect us to know the in’s and out’s C++ after just spending a month on it. Right now in one of my class, (this is probably off topic) we are expected to make a web application where we have not been taught anything about how to make it (both front-end and back-end), how to do unit testing, etc. The professor just lectures about the definitions and topics and not on how to do it. Granted, I don’t mind searching tutorials on the internet, but I just feel like I’m getting cheated for my education and money if I have to teach myself.</p>

<p>Dr. Google, almost the same with me. I learned Fortran, Pascal, Assembly and Cobol in school (along with quick tastes of other languages.) C, C++, Java were all learned after I graduated. C++ and Java weren’t even invented until after I left school.</p>

<p>I haven’t had to learn a new language in a long time. Most of my time spent these days is trying to keep up with the latest web technologies. It seems like just when I get one figured out, it’s obsolete and I have to learn something else.</p>

<p>ChocoMint, UCSD also teaches Java as a first language. But no Python, my daughter has to teach herself that language.</p>