Take the 2-minute tour ×

Feeling slightly underwhelmed with the content in my degree path of Computer Science at my University, I have been attempting to learn on my own. I am looking for direction into topics that will be helpful to know when going into the working world.

As a senior I've learned basics of data abstraction, and basics of C++, vb.net, and php.

share|improve this question
How are we supposed to know what your future brings? Every topic could potentially be helpful, and that specifically includes non-computer related subjects. –  GrandmasterB Jan 25 '12 at 21:56
Possible duplicate: programmers.stackexchange.com/questions/130628/… –  daniels Jan 25 '12 at 22:50
add comment

closed as not a real question by Matthieu, GrandmasterB, Walter, gnat, JeffO Jan 26 '12 at 19:15


4 Answers

up vote 6 down vote accepted

These are just off the top of my head.
Notice, my list mentions very little about programming languages and nothing at all about specific ones.

CS topics (Discrete math)

  1. Discrete Math basics
  2. Data Structures
  3. Algorithms (from Big O notation to how to do a quick sort, to how to analyze and construct algorithms in time constraints.)
  4. Model of computation (Recursive definitions, lambda calculus, grammars, and junk)
  5. Graphs / Artificial Intelligence

Software Engineering topics:

  1. Patterns
  2. Development methodologies
  3. Source control
  4. Programming Paradigms
  5. Databases

Computer Engineering topics.

  1. Basic logic, etc.
  2. Binary, floating point stuff, and ASM
  3. CPU design, registers, clocks
  4. Memory, Cache, etc.
  5. More CPU design- tomasulo's algorithm, register renaming, superscaler, Instruction-level parallelism

Applied CS

  1. Systems Programming. (Threads, pipes, fork, IPC, shared memory)
  2. How OS's work, etc. (scheduler and stuff, basically internals of systems programming)
  3. Parallel programming.
  4. Networking. (sockets)

Practical Experience.

  1. Using compilers, Make files, etc.
  2. Linux/Unix tools
  3. Working knowledge of networks and the internet.
share|improve this answer
The theory of concurrent systems (very much pure CS) is useful. A lot of it turns out to be useful for understanding OO too… –  Donal Fellows Jan 25 '12 at 22:43
add comment

Looking backward i would start earlier learning the design patterns and the refactorings. These two are nearly everywhere in software development. Knowing and mastering them brings you to a higher level of thinking about software and how it should be... (and mostly isn't :))

share|improve this answer
If you don't have the requisite knowledge of algorithms and data structures you won't understand the design patterns anyway. So Software Engineering course which include design patterns are usually start late Sophomore or Junior year once you've gotten through your basics. –  Karlson Jan 25 '12 at 21:31
add comment

If you have had basics of Data Structure/Algorithms and also programming languages I don't see how you could be a senior with a Computer Science Major. Better programs in CS would also get you through you can take a look at 300 or 400 level courses here:



Stanford's courses also include quite a bit more then what you mentioned:




With a break down like this: http://cs.stanford.edu/courses

So if you want to learn more of the Computer Science concepts I might just go onto this page too see the lectures. Sorry no assignments are announced.

share|improve this answer
Since stanford and purdue have some sort of 'prestigious' feel to them. I would like to outline that any university should also cover these topics. I chose a random state that isn't special or anything: (Sorry iowa cs.uiowa.edu/undergraduate-programs/courses/course-descriptions) –  user606723 Jan 25 '12 at 21:12
You're right the CS programs in all Universities should be offering the similar courses I picked 2 schools in the top 20 CS programs in the US according to this: usnewsuniversitydirectory.com/graduate-schools/sciences/… –  Karlson Jan 25 '12 at 21:33
add comment

Computer science typically doesn't teach many specific languages or SDKs, focusing instead on giving you the tools to be able to create your own implementations.

You should have a grounding in the theory and design of: operating systems, languages, data bases, data structures, algorithms, networking and some math. I feel that you may be focusing on specific languages and syntaxes instead of getting at what lies underneath and makes them work which is why you feel underwhelmed.

Look at it this way: give a man a fish and he eats for one day, give that man a computer science degree and he can design a multi-platform fishing simulation to feed the whole tribe. Or something like that, you get the idea.

share|improve this answer
No, the only thing he can do is prove that such a thing might exist. He doesn't have any of the tools or experience necessary to actually produce such a thing. –  DeadMG Jan 25 '12 at 21:43
@DeadMG Well said =) –  Patrick Hughes Jan 25 '12 at 21:59
add comment
