Take the 2-minute tour ×

Like all the undergraduate students, who are studying in a college. They have to learn many things in one semester. For example right now I am having Java, DBMS, Operating-Systems and Computer architecture in my syllabus. I am concentrating more on Java but DBMS and OS are also important subjects.

So how can one master all the subjects? Should one go for only one subject and leave others to study only in exam time or study all subjects with same interest and give all subjects the same time. If one give same time to all subjects then he/she would not be able to be master in all but if he concentrates on only one subject then he/she can be a master in that.

What do you guys suggest?

share|improve this question

closed as off-topic by durron597, jwenting, Ixrec, MichaelT, GlenH7 Apr 25 at 17:28



6 Answers 6

up vote 7 down vote accepted

You're not going to master any subject in one semester or two. It takes years of hands-on experience.

What you're supposed to do is to learn the basics of several subjects so that you have some ground to build on when you find what you actually need in a given project. In the field of computing there are zillions of technologies, and they change continuously. That said, there are some fundamentals that are relatively stable. Computer and OS architectures and DBMS are among them. And while Java is just one programming language among others, it's not going to go away any time soon. So I think those subjects are equally important and should be studied with equal vigor.

Learning the basics of several subjects moves you from the "you don't know what you don't know" state towards much better "you do know what you don't know" state. When working on a real world project, one of the most important skills is to know what can be done using what, even if you don't know exactly the details. You can then dig deeper to the subject, once you know where to dig.

For example, if you have no idea about the basic principles of achieving concurrency, you're going to waste tons of time when you need that, because you're missing the link from the need to the approximate solution. But once you know that concurrency can be done with threads, and that you need to be extra careful when accessing mutable data shared among >1 threads, you already know a lot. Then just check out the details from somewhere.

share|improve this answer
I agree totally. The most useful thing I learned at university was exactly how ignorant I was about computers and programming. –  Joeri Sebrechts Sep 26 '10 at 13:27
Nah, not even with years of actual experience will you master anything. You might gain the right to call yourself an expert, but there are always new things to learn about a subject. –  Anto Apr 27 '11 at 19:51
@Anto: Well, if you want to define mastery that way. But then there are absolutely zero masters in the world. I think the word "master" usually means someone who's notably accomplished and experienced. –  Joonas Pulakka Apr 28 '11 at 6:47

The thing to understand is that graduating college with a Comp Sci (or any) degree does not mean you've mastered the subjects. It means you are now in a good position to actually start learning them. So if you are getting out of college and dont think you really know a whole lot, well, you dont.

Consider a 3 credit class. Thats 3 hours /week for what, 15 weeks. Take out some time for tests and snow days and whatever, and you get 40 hours. Thats not even a full work week for a lot of people. You could spend all your optional credits on a specific technology... so what? Thats maybe the equivalent of a few months work experience, if you're lucky.

So my advice, dont sweat it. Learn what the technologies are, but dont over-concern yourself with the details. By the time you graduate, a lot of that will have changed anyways (look how fast NoSQL db's are catching on).

share|improve this answer
"does not mean you've mastered the subjects"? or "does not necessarily mean..."? Technologies usually just evolve rather than disappear without a trace within the span of a couple years. And the more adept one is at the older technology, the faster one can catch up to whatever new starts to gain ground. Merely one example of NoSQL db's isn't at all enough for someone to "not sweat it". And schools don't just teach you specific languages/implementations, they also teach you technologies that you have to have the basic knowledge of to understand newer things. -1 –  Muhammad Mussnoon Sep 26 '10 at 13:03
+1 for doing some math I never considered. –  Pops Sep 26 '10 at 21:50

I would suggest that you concentrate more on the core Comp Sci subjects - these will build your base as a programmer. Btw, Java is not a "subject" - certainly not in the sense that DBMS, OS and Computer Arch are. The latter are far more important than learning any language. Learn Java (or any other language), by all means - but learn it to implement your ideas - whereas you need to learn the other core subjects to build your programming foundation.

share|improve this answer
Indeed. Learn concepts, not languages. Also, don't learn the way to do something, learn how to decide which way is right in each case. –  configurator Sep 26 '10 at 5:32

Just in relation to studying, a recent study has shown it is better so study multiple subjects for a short period than one over a long period i.e. if your studying for 3 hours it is better for your retention to study 3 subjects each for an hour than one subject for 3 hours.

Here is a link to the paper for anyone interested.


I wouldn't leave any subject to the last minute. Cramming doesn't work. You will forget everything an hour after the exam.

share|improve this answer

Studying is just a fraction of learning and helps you get a grip on the fundamental concepts and interdependencies of the various sub-topics.
However, in my opinion, real understanding only comes from practice.

As a Chinese proverb attributed to Confucius says,

Tell me and I'll forget; show me and I may remember; involve me [or: let me do] and I'll understand.

A good way that helps you master many subjects at a time is working projects that somehow involves them and that go well beyond the scope of the usual course exercises, for example writing a useful application in Java that heavily relies on a database to function.

You will learn a lot from designing and implementing such a thing, and questions will automatically arise seemingly out of nowhere which will drive you further in your learning process.

If you feel that you do not have enough knowledge and experience to do such a project, approach it in a top-down manner, for example (speaking of a software project):

  • What do I want to create ?
  • How is it supposed to work ? What should it do ?
  • How could I implement a particular function ? What do I need to accomplish my task ?

Additionally, you can also learn a lot from reading other people's code.
I found it useful to take an open source program I use and ask myself how it performs a particular task, going through the application step by step to see what it does, why it does it and why it does it that way and not differently.

On understanding operating systems concepts, well... that may be a bit more difficult but I think that getting good at software design and hands-on experience with multiprocess/multithreaded architectures are probably important because you will understand the problems OSes have to deal with – knowing the question helps you find the answer.

share|improve this answer

As others have said, the value of school should not be what you learn. It should be that you learn how to learn. It's the problem solving skills, the ability to decompose and analyze a problem, to come up with an approach for solving it - those are the skills you should be mastering in school.

share|improve this answer
