In college, what will I learn as a computer science major?

Started by
7 comments, last by TheUnbeliever 14 years, 2 months ago
It seems to me that high school education regards computer science as basically programming. I looked over the course listings for my high school and also at AP Computer Science; all of them are about learning to program in Java. Yes, only Java, and nothing else. However I think there's something wrong with this. Isn't programming supposed to be more than just programming or the act of learning programming languages? When I think of computer science, I think about combining one's knowledge base in computers with his or her problem solving skills to solve intriguing, challenging problems. Unfortunately it seems like high school computer science education is not the same. I'm going into college two years from now. What can I expect to learn as a computer science major in college? I know that I'm going to programming, of course, but what else will I learn about? Networks? Database? Computer security? Software and hardware? Are computer science classes in college vastly different from those that you see in high school? How? What about computer engineering?
Advertisement
i really dont know what kind of computer classes are in high school since i havent been in high school in a long time.

but i got my computer science degree from nc state in 2002.

your college will teach you at least one programming language. maybe two. but alot of what you will learn is how to solve problems. solving problems can be done in lots of different programming languages, it is the algorithms behind the programming that is important to learn. then implement the algorithm in whatever language you prefer.

as far as databases, operating systems, ect... that depends on what electives you want to take. but the core classes will be something like a programming language, maybe the advanced version of it, data structures, lots of math, and software development.
High School computer science courses will usually amount to the freshman level "Computer Science 101/201" courses you take which teach you C++, Java, or whatever the language of choice is at your university.

After that, a typical load includes math courses in Calculus and formal logic (discrete mathematics) as well as computer science theory based courses such as Operating Systems, Algorithm Analysis, and Data Structures. You'll also tend to take courses like Programming Languages which expose you to other types of programming languages that are unlike C++ or Java.

And then you'll also be able to take courses like those you mentioned. Database Design, Computer and Network Security, Artificial Intelligence, Compiler Theory/Design and many other electives you might opt to take. You won't get a lot of hardware knowledge in a computer science degree short of understanding how hardware works at the most rudimentary level (logical gates or digital circuits and such).

You will most definitely utilize programming throughout many of your courses for projects - but only to apply knowledge learned in those courses. They aren't going to hold your hand and teach you the intricacies of the language that may be needed to accomplish the project outside of what you learn in the basic intro to CS courses where you learned C++/Java. It is expected you will advance your knowledge and skill in those languages on your own.

I can't speak for a computer engineering degree, but the above described most of my computer science undergrad.
In my university years (at a level which would be college in the US) I had Java in the intro courses but some courses assumed familiarity with C (this applies especially to the "close to hardware"-courses).

So making sure you know the fundamentals of C wouldn't be a bad idea, most probably. Learning C++ also would help you with C obviously (though good C code != good C++ code), but C++ is a beast which takes more than a course to truly learn, and here it's not required for any college projects for good reasons.

As for the specific areas of CS, there were well covered by previous posters.
You might be interested to read one of Antheus' posts from the other day. His is a somewhat extreme take on the matter, but certainly worth consideration.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

I finished a 2 year computer engineering course back in 1998. The first year was a lot of electronics theory, math, C++, and an intro to assembly language. But the second year really kicked ass with microdesign, digital electronics, digital measurement and control, and some Win32 programming (it was more useful back in the day), and some network stuff.

I loved it, especially the second year. I found it all incredibly fascinating and was everything I ever wanted to know about computers. Unfortunatly though, my career ended up going towards IT and I found that other than the programing, none of it was that useful to me. I'm sure there's tons of jobs out there that'd use all that stuff a lot more but I just didn't end up going that direction.
Quote:Original post by Ntvu
What about computer engineering?
Keep in mind that there are 3 disciplines here (although they all overlap to a certain extent):
- Computer Science: theoretical study of computing (more math than programming)
- Software Engineering: practical study of solving problems using programming
- Computer Engineering: practical study of developing computer hardware

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Quote:Original post by swiftcoder
Quote:Original post by Ntvu
What about computer engineering?
Keep in mind that there are 3 disciplines here (although they all overlap to a certain extent):
- Computer Science: theoretical study of computing (more math than programming)
- Software Engineering: practical study of solving problems using programming
- Computer Engineering: practical study of developing computer hardware

Just think Woz the guy that built the original Apple from the original circuit breadboard all the way up or the guy that founded Nvidia. They both had a computer engineering degree. A lot more math required since courses usually taught by the engineering department.
:: Software Engineering / Computer Science Difference :
[size="2"]Don't talk about writing games, don't write design docs, don't spend your time on web boards. Sit in your house write 20 games when you complete them you will either want to do it the rest of your life or not * Andre Lamothe
Look at university websites, they'll have this information in detail (look at both sections for prospective applicants, as well as for current students) - I found it varied quite a lot in the UK in terms of theory vs. software engineering balance.

My first year course looks roughly like this:


  • Digital electronics (Boolean algebra, designing circuits and state machines)

  • Discrete maths (sets, proof, functions and relations, induction and recursion)

  • Operating systems (computer architecture, design principles, case studies)

  • Floating-point computation (see "What Every Computer Scientist Should Know About Floating-Point Arithmetic")

  • Foundations (intro. to types, functions, basic complexity using SML)

  • OOP (using Java)

  • Software Design (this and the previous are basically combined 'software engineering' courses)

  • Algorithms (sorting, general classes - dynamic, greedy, etc, data structures)

  • Probability

  • Regular languages and finite automata (defitions, FSMs, pumping lemma)

  • Maths (linear algebra, calculus of multiple variables, DEs, complex numbers, sequences; aimed at problem solving rather than proofs and rigour)

  • Elective (typically science-based)



There's scope to specialize more in theory or hardware in second and third year.
[TheUnbeliever]

This topic is closed to new replies.

Advertisement