It's a known fact that computer science is inherently a tough field to grasp concepts because of its abstract nature and interdependency with lots of concepts at once.

What study techniques besides active recall, repetition(and those general study tips found in Ali Abdaal's youtube video) are useful to actually understand "tough concepts".

Some methods I've devised so far:

  • Start with exercises on textbook and study in order to solve them.

  • Study in Iteration Based Model. Example study chapter 1 in first iteration. Skip some topics. When you come back after ending the current iteration by studying every chapters to next iteration, you again study chapter 1's skipped topics.

What else novelty methods you follow? I find computer science too tough to "actually understand", easier to "bluff". The weird thing is that I am a Computer Science grad and I still feel lacking in "actual" computer science.

When I try to build softwares, write SQL, performance tune the system, develop games etc I always find myself coming back to the concepts of these subjects:

  • distributed systems, computing and algorithms

  • database management systems

  • operating systems

  • computer networks

  • network and web security

  • data structures and algorithms

  • computer graphics, linear algebra

  • artificial intelligence, neural networks

  • computer organization and architecture, embedded systems

etc. It bothers me a lot that I am not proficient in all of these things. I accept that these things are tough but I really want to learn no matter how much time it takes me. So I want to learn the study techniques for it.

For example: Today I was studying about 3d transformations(Guess which transformation is that? :D) and today I feel hopeless. This is not the first time I am studying about 3d transformations, I studied them in college few years back. Now, I am restudying computer science for my passion fulfillment.

I feel hopeless and feel that "I will never be able to learn", which is mainly due to my lack of belief in techniques to learn. I know this might be slightly off topic, but I want to note this point.

I love computers science and I've brought tons of books to study computer science, ranging from dbms, os, computer network, security, distributed systems, computer graphics etc. I recently thinking of purchasing a book on linear algebra as I feel math is the foundations for the most stuff in computer science.

  • $\begingroup$ Computer science is about the underlying math, not as much on what actual computers actually run. $\endgroup$ Mar 10 at 19:13
  • $\begingroup$ @ThorbjørnRavnAndersen Any guidance available? I'm really passionate about CS because of its heavy usage in real life jobs. $\endgroup$
    – achhainsan
    Mar 11 at 10:34
  • 1
    $\begingroup$ You are misunderstanding - computer science is about what is theoretically computable (Turing machines and complete etc), and not as much on how to do it (programming languages, databases, webservers). You may want to contact your local university to see if their CS department can help you with pointers to good learning resources. $\endgroup$ Mar 11 at 10:52
  • 1
    $\begingroup$ @ThorbjørnRavnAndersen And yet Computer Science advertises itself as very much hands on if you look at CS departments. Boasting about their robotics team, or the cybersecurity group etc... So are the ways that CS departments across universities portray themselves a lie? And implying that they are more hands on then they really are? $\endgroup$
    – Questor
    Mar 11 at 20:02
  • 1
    $\begingroup$ This is every CS department that I have looked at. From the community college to MIT, to Syddansk Universitet.. All of them advertise their CS degrees as teaching their student how to build something. make something... And then you talk to professors and they talk about how Computer science is the really about the theory of computation... And then you look at the code that Computer scientists at universities produce. And you realize why what they teach is the theory rather then the application. $\endgroup$
    – Questor
    Mar 11 at 20:30

2 Answers 2


It sounds like you are interested in the untaught discipline of software engineering. Untaught because the only thing that comes close is a CS degree, and the average CS professors wouldn't be caught dead doing something so plebian as engineering.

One book I recommend is Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin.

It has a lot of good advice that will teach you how to write professional code with practices that future you/ people who work on anything you build/maintain will thank you for.

Computer programing, is not a science. It is (when done correctly) engineering. The way you get better at engineering is not by reading books on engineering (though they help). It is by practicing engineering, by building things, making mistakes, and learning from those mistakes.

You want to become a good programmer? Start programming! Don't however follow a programming tutorial. Instead use a tutorial to decide what you are going to make (so that you don't try to make something to complicated) and then build it without following a tutorial (Looking up and researching how to build individual pieces) This will teach you how to build/implement/use the building blocks so that you can reuse them on other projects... Instead of teaching you how to build a website that you can post pictures on, or whatever the tutorial was for.


It's a known fact that computer science is inherently a tough field to grasp concepts because of its abstract nature and interdependency with lots of concepts at once.

I think computer science is tough for several reasons - but not necessarily because of its abstractness or the interdependency of many concepts.

An ill-defined and overly-general field

Computer science is an ill-defined field of modern vintage, that has arisen primarily so that academia can study and teach topics associated with the industrial and military application of computers.

Because a computer science curriculum doubles as a trade school for all kinds of professional roles in industry, there are many different demands made of it, which leads to highly general curriculums with teaching spread thinly, and with only smaller parts of the curriculum actually being relevant to any individual student/practitioner.

Courses would seem easier if more specific content was taught with an appropriate amount of time allocated, but then the course would no longer be "computer science" but something far more specific.

A field poorly understood by academia

The concepts and their relationships, and methods of teaching them, are still not really a settled "science" at all.

A large number of "styles" or "philosophies" of programming, for example, are often rooted in deep conceptual conflicts in the academic realm covered by computer science.

And although programming languages are typically covered by "computer science", few are willing to accept (for example) that the design or study of programming languages is at all "scientific".

Poor systems of teaching

Another problem is that professional practitioners who are also clear thinkers and excellent communicators, are often in market demand industrially, and this typically leads to a starvation of talent in teaching and academia where salaries and conditions have deteriorated over the decades, which then exacerbates the relative shortage of well-taught students amongst the next generation.

With poor pay and conditions, you then potentially end up with teachers and professors who are less suited to teaching this particular subject (and might even end up being drawn from backgrounds in adjacent fields of study, like mathematics, which are not full-square with computer science).

And many of the things first taught in university computer science courses, should probably be start to be taught to primary school children. You wouldn't expect to put a student on a university physics course who hadn't learned decimal arithmetic in school yet. You wouldn't expect to put a student on a university chemistry course who hadn't heard of the atom yet. Why should a university computer science course have to cover basic binary concepts?

Indeed, those who are effective as professionals are invariably self-learners, because there is a large amount of learning necessary relative to the small amount provided formally and effectively in school and university curriculums.

  • $\begingroup$ That's really a nice perspective. I never thought like that. Thanks. $\endgroup$
    – achhainsan
    Mar 14 at 11:50
  • 1
    $\begingroup$ I agree with most of what you've written, and much of it seems like what you might expect in a relatively new and rapidly expanding field. As more types of computing degrees are offered, some of this will sort itself out over time, though I wouldn't expect to see any serious stability until the state of the field is relatively stable, and that may still be a long time coming. $\endgroup$
    – Ben I.
    Mar 14 at 16:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.