I'm an undergrad Computer Science student and studying online. There is a lot of self study, independent research and practice i have to do myself. I wonder how beneficial would it be to choose this subject combination in pr开发者_Python百科ogramming:
- Data Structures
- OOP
- Assembly Language & Computer Architecture
Although i also have the option to take DLD (Digital Logic Design) or Data communication courses instead of Assembly Language. My interest lies in programming and i'm also working as a programmer at local software house. Can anyone give me some good advice and suggestions.
Digital Logic Design and Computer Architecture will both help your understanding of low-level computer concepts and your appreciation for the awesome work optimizing compilers do for you. The listed courses sound like a good combination to me.
The only thing on your list you might consider delaying is OOP. I am careful to distinguish between object-oriented design and object-oriented programming:
Object-oriented design is today's term for learning to program with data abstraction. It is an essential part of every programmer's toolbox, and it should be part of any good course in data structures.
Object-oriented programming is the art of reusing implementations through inheritance. Years of experience teaching undergraduate students have shown me that this is a difficult, advanced topic, except perhaps in very specialized settings like building two-dimensional graphical user interfaces.
Get as much OO design as you can, as early as you can, but steer clear of inheritance until you have more experience.
Finally, assembly code and machine architecture are essential topics if you are to develop a deep understanding of and an intuitive feel for computational costs. These topics are highly recommended. Definitely take this course instead of logic design (an honorable topic, but distant from programming) or data communication (whatever it is).
As at least one other poster has observed, once you have these topics under your belt, some functional programming would be good.
That looks fine. If you can learn some functional programming while you are at university I think you should do that, as this is going to broaden your horizons.
If you want to get a programming job at the end of this, you might want to consider joining an open source project and getting some real world experience too. You'll learn a lot more about programming and the tools programmers use by actually programming for a real project than you will by learning how to program in the classroom. Although having both the theoretical knowledge and the experience are important.
The first two subjects (Data Structures and OOP) seem to have a dependency - you should understand OOP before going into Data Structures.
The last subject(Assembly Language & Computer Architecture) would be fine to take concurrently with Data Structures - but I would take a basic programming class and learn OOP before diving into assembly.
For reference, this is the structure my school's honors program takes(and it's been great so far):
1st Semester:
Data Structures and Algorithms
Intro to Logic
2nd Semester:
Intro to Computer Architecture
Discrete math
3rd Semester:
Advanced Computer Architecture
Application of theory(e.x. compression, encryption, error correction)
Programming languages
4th Semester:
Operating Systems(done in x86, uses MIT course material) - challenging but very fun and rewarding class
Sometime after 4th semester:
Algorithms or Automata Theory
After the fourth semester at my school, you're pretty much free to take whatever you want(as an honors student) - most people take grad classes at this point.
My point in listing this out is to demonstrate that my school uses a "two track" model of theory(logic, discrete match, etc.) and implementation(architecture, operating systems, etc.). If you're interested in CS, it's important to be well-skilled in both. You need to both understand the theory and how to implement it well to be a good "well-rounded" computer scientist.
My advice would be to follow a similar model. Take architecture classes, but also take theory classes.
An Algorithms course is necessary. A compiler-design course is also quite useful. And then there is the vast and interesting field of Artificial Intelligence.
精彩评论