3
$\begingroup$

I've reached a point of no return in my learning computer science journey. I know little bit of basics, but advanced stuff in computer science I really don't know. By advanced stuff, I mean subjects taught in 3rd and 4th year of typical CS degree (which are also called core CS subjects in some parts of the world, subjects like Operating System, Database,Computer Networks, Artificial Intelligence etc).

I'm really bothered by it. I want to learn Computer Science. I'm already graduated though, but I graduated from almost a degree farm (I didn't know when I joined), so my graduation doesn't mean much.

About me, I find Electronics part of computer science easier though. I finally want to study OS, DBMS, CN, DSA, AI etc like taught in college level course and I want to do it right. Feel confident in my learning.

I've identified the bottleneck in my learning and I want to improve. How do I do it?

$\endgroup$
6
  • $\begingroup$ I learn by solving exercises, but the issue is I'm unable to solve exercises for these subjects questions. $\endgroup$ Jul 24 at 0:54
  • $\begingroup$ I'll be repeating myself but no matter how hard I try, the concepts don't enter my brain for these types of subjects. The only way out for me is to have a great teacher be it online or offline. $\endgroup$ Jul 24 at 1:08
  • $\begingroup$ I'm a learner who learns by doing exercises. And video based learning than text reading. $\endgroup$ Jul 24 at 1:29
  • $\begingroup$ It does sometimes happen. Pick a specific thing to focus on mastering and work at that different ways until you get an insight. Insights will come quicker after a while. $\endgroup$
    – Scott Rowe
    Jul 25 at 10:35
  • $\begingroup$ Meditating helps. Deliberately closing your eyes helps you see better when you open them :-) Deliberately not sleeping helps your brain integrate what you learned, while you are sleeping. $\endgroup$
    – Scott Rowe
    Jul 30 at 23:19

3 Answers 3

3
$\begingroup$

IMHO, you have not "identified your bottleneck". You have found out that the field of CS is a very broad one, and that there are quite some sub-fields you haven't mastered (yet).

Let me tell you that you're not alone, that probably nobody in the CS field covers all the subjects you mentioned, and that's perfectly okay.

It is good to have a rough understanding of most of these fields, but you need to concentrate on just one subject and become fluent there, be it Operating Systems, Compilerts, Databases, IT Security, Artificial Intelligence, Embedded Control Systems or whatever. You should base that decision on your preferences, capabilities and of course the job market.

If you feel attracted to Electronics, then embedded control systems might be a way to go. There aren't too many developers out there capable of understanding both worlds, the electronics hardware and software development, so it might be an interesting niche.

What are your plans for the future?

  • If you want to add some more steps of formal education, look for an institution offering appropriate courses or programs, covering the specializations that are of interest to you. But you already have a degree, so do you think the new one will significantly improve your chances of getting a job, and not be a waste of time?
  • If you want to get employed as a software developer, start applying for jobs now, and in parallel, start some project of your own (or contribute in an open source one), so you get experience in bigger projects instead of small exercises, something that can be a door opener ("I'm one of the main contributors to ").
  • If you want to start a freelancer career, find some unique selling point, some specific experience, something that distinguishes you from the millions of other developers. And again, experience in handling bigger projects will be important.
$\endgroup$
4
  • $\begingroup$ My lack of ability to understand complex topics is hurting my career choices. That's the point I'm trying to make. I can't understand complex topics that are highly logical. $\endgroup$ Jul 24 at 13:27
  • $\begingroup$ Besides software development (which requires structured, logical thinking) there are other branches in the industry. Think of Sales, User Interface design, Quality Assurance, Project Management and so on. Get yourself advice from someone who knows the job market in your region and can assess your abilities (which probably are much better than you think). $\endgroup$ Jul 24 at 17:03
  • $\begingroup$ I'm good at Linux. And I work as linuxadmin. My problem is I'm ambitious and I want to learn all three core subjects of computer science at the very least. $\endgroup$ Jul 25 at 1:51
  • 1
    $\begingroup$ I'm meditating hope that helps in learning $\endgroup$ Jul 28 at 9:48
2
$\begingroup$

I'm not sure what you're asking, really. Choose one of the topics that is most interesting and begin there, and then absolutely commit to spending time with it regularly.

If it were me, I'd use an online course (such as the ones that MIT, Harvard, or CMU post) to get going, and supplement that with an approachable textbook and resources such as StackExchange, YouTube, and ChatGPT to help when the inevitable confusions arise.

The best textbooks for this purpose also come with exercises, though make sure that at least some answers are in the book (or posted elsewhere) so that you can get a sense of how well you're doing.

$\endgroup$
3
  • $\begingroup$ If I'm being precise: "Nothing is entering my head anymore". I'm currently learning about synchronization in operating systems(been 2 days only though), and I'm stuck at it. This is not the first time I'm learning it. (I learnt in college a little bit). I'm following online course for OS from Prateek Jain Academy, not sure if that's helping if any. I'm following multiple textbooks(whatever pops up in google books). I am following GATE CSE Previous Year Questions for practice. $\endgroup$ Jul 22 at 14:22
  • $\begingroup$ @zeeshanseikh work on it every other day. And get lots of sleep. Take naps. Your brain is trying to integrate something very foreign to it. It takes a while. But you can feel when it finally clicks. $\endgroup$
    – Scott Rowe
    Jul 25 at 10:39
  • 1
    $\begingroup$ I'm meditating hope that helps in learning $\endgroup$ Jul 28 at 9:48
2
$\begingroup$

In your original question, you asked somthing like,

I want to study:

  • Operating Systems (OS)

  • Database Managements Systems (DBMS)

  • Computer Networks and the Internet (CN)

  • Data Structures and Algorithms (DSA).

  • Artificial Intelligence (AI)


Data Structures and Algorithms

For Data Structures and Algorithms (DSA), I recommend reading the following book:

Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein

I will nickname the book CLRS in the remainder of this answer to your question.

Please note that CLRS is more than 30 years old.

Due to its age, CLRS contains some anachronistic features.

If you decide to read the book, then I recommend that you:

  1. NOT write proofs of correctness.

  2. NOT read proofs of correctness either.

  3. that you do draw lots of pictures of linked-lists, trees, etc...

  4. Make a few simple examples, and play with your examples. Avoid mathematical generalities or vagueness .

  5. Re-write the pseudo-code in the book with the do not repeat yourself principle in mind. The authors originally put all of there code inside of one function. Really, they should put code for inserting a node into a linked-list inside of a class method named somthing like LinkedList.insert() and call the method on an as-needed basis. At one point, the authors tend to repeat the same few lines of code all throughout a larger script in order to do some simple operation on a linked list. They are trying to do much more complicated than a linked list, so the code for LinkedList.insert() should be compartmentalized into its own little compartment or re-usable module.

  6. Re-write the pseudo-code in the book in a real language, like python.

  7. Make sure that fewer pre-conditions are required. Sometimes the authors made weird assumptions about how input data was formatted. In general, I recommend writing two methods: ONE an interface which checks the inputs for validity. TWO an implementation method which never checks inputs. For example, do not check that all numbers are greater than zero in the implementation method, but do check in the interface method.

There are some very complicated data-structures in the book I refer to as CLRS; it's not just arrays and linked lists.

For example, in the appendix of one of the older editions of the book they have Tarjan's Splay Trees.


$\endgroup$

Your Answer

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

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