<p>IMHO, you have not &quot;identified your bottleneck&quot;. 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).</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>What are your plans for the future?</p>
<ul>
<li>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?</li>
<li>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 (&quot;I'm one of the main contributors to &quot;).</li>
<li>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.</li>
</ul>

CC BY-SA 4.0
2023-07-24T13:27:28.017Z
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.
zeeshanseikh
CC BY-SA 4.0
2023-07-24T17:03:06.323Z
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).
Ralf Kleberhoff
CC BY-SA 4.0
2023-07-25T01:51:21.133Z
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.
zeeshanseikh
CC BY-SA 4.0
2023-07-28T09:48:17.387Z
I'm meditating hope that helps in learning
zeeshanseikh
CC BY-SA 4.0
2023-07-24T10:28:36.807Z
2023-07-24T10:28:36.807Z
Ralf Kleberhoff
<p>In your original question, you asked somthing like,</p>
<blockquote>
<p>I want to study:</p>
<ul>
<li><p>Operating Systems (OS)</p>
</li>
<li><p>Database Managements Systems (DBMS)</p>
</li>
<li><p>Computer Networks and the Internet (CN)</p>
</li>
<li><p><em><strong>Data Structures and Algorithms (DSA)</strong></em>.</p>
</li>
<li><p>Artificial Intelligence (AI)</p>
</li>
</ul>
</blockquote>
<hr />
<h2>Data Structures and Algorithms</h2>
<p>For Data Structures and Algorithms (DSA), I recommend reading the following book:</p>
<blockquote>
<p><a href="https://en.wikipedia.org/wiki/Introduction_to_Algorithms" rel="nofollow noreferrer"><strong>Introduction to Algorithms</strong></a> by Cormen, Leiserson, Rivest, and Stein</p>
</blockquote>
<p>I will nickname the book  <em><strong>CLRS</strong></em> in the remainder of this answer to your question.</p>
<p>Please note that <em><strong>CLRS</strong></em> is more than 30 years old.</p>
<p>Due to its age, <em><strong>CLRS</strong></em> contains some anachronistic features.</p>
<p>If you decide to read the book, then I recommend that you:</p>
<blockquote>
<ol>
<li><p><strong>NOT</strong> write <em>proofs of correctness</em>.</p>
</li>
<li><p><strong>NOT</strong> read <em>proofs of correctness</em> either.</p>
</li>
<li><p>that you do draw lots of pictures of linked-lists, trees, etc...</p>
</li>
<li><p>Make a few simple examples, and play with your examples. Avoid mathematical generalities or vagueness .</p>
</li>
<li><p>Re-write the pseudo-code in the book with the <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself#:%7E:text=%22Don%27t%20repeat%20yourself%22,redundancy%20in%20the%20first%20place." rel="nofollow noreferrer">do not repeat yourself</a> 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 <code>LinkedList.insert()</code> 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 <code>LinkedList.insert()</code> should be compartmentalized into its own little compartment or re-usable module.</p>
</li>
<li><p>Re-write the pseudo-code in the book in a real language, like python.</p>
</li>
<li><p>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: <strong>ONE</strong> an interface which checks the inputs for validity. <strong>TWO</strong> 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.</p>
</li>
</ol>
</blockquote>
<p>There are some very complicated data-structures in the book I refer to as <strong>CLRS</strong>; it's not just arrays and linked lists.</p>
<p>For example, in the appendix of one of the older editions of the book they have Tarjan's <a href="https://en.wikipedia.org/wiki/Splay_tree" rel="nofollow noreferrer">Splay Trees</a>.</p>
<hr />

CC BY-SA 4.0
2023-11-04T02:21:53.747Z
2023-11-04T02:21:53.747Z
Samuel Muldoon
<p>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.</p>
<p>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.</p>
<p>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.</p>

CC BY-SA 4.0
2023-07-22T14:22:24.177Z
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.
zeeshanseikh
CC BY-SA 4.0
2023-07-25T10:39:24.100Z
@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.
Scott Rowe
CC BY-SA 4.0
2023-07-28T09:48:22.100Z
I'm meditating hope that helps in learning
zeeshanseikh
CC BY-SA 4.0
2023-07-22T14:18:48.620Z
2023-07-22T14:18:48.620Z
Ben I.
<p>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).</p>
<p>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.</p>
<p>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.</p>
<p>I've identified the bottleneck in my learning and I want to improve. How do I do it?</p>

CC BY-SA 4.0
2023-07-24T00:54:11.490Z
I learn by solving exercises, but the issue is I'm unable to solve exercises for these subjects questions.
zeeshanseikh
CC BY-SA 4.0
2023-07-24T01:08:10.377Z
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.
zeeshanseikh
CC BY-SA 4.0
2023-07-24T01:29:57.790Z
I'm a learner who learns by doing exercises. And video based learning than text reading.
zeeshanseikh
CC BY-SA 4.0
2023-07-25T10:35:48.920Z
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.
Scott Rowe
CC BY-SA 4.0
2023-07-30T23:19:35.930Z
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.
Scott Rowe
CC BY-SA 4.0
2023-11-17T16:09:41.653Z
If you have an interest in electronics, consider diving deep into embedded systems. If you also happen to have a fondness for Linux, you've got one of the golden tickets. The demand for Embedded Linux Engineers is significant, and there's a vast market for it. The bonus is that everything is open source, allowing you to learn on your own.
Most major projects have substantial support, so you won't feel lost. Just grab a Raspberry Pi, one or two sensors, and explore the possibilities. Whenever you encounter something you don't understand, delve deeper and uncover what lies beneath.
YCN-
<self-learning>
How does one overcome "Computer Science Learning Plateau"?
# How does one overcome "Computer Science Learning Plateau"?

(Asked by: username_0 on 2023-07-22)

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?

**Tags:** self-learning

> **Comments:**
> **username_0**: I learn by solving exercises, but the issue is I'm unable to solve exercises for these subjects questions.  
> **username_0**: 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.  
> **username_0**: I'm a learner who learns by doing exercises. And video based learning than text reading.  
> **username_1**: 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.  
> **username_1**: 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.  
> **username_2**: If you have an interest in electronics, consider diving deep into embedded systems. If you also happen to have a fondness for Linux, you've got one of the golden tickets. The demand for Embedded Linux Engineers is significant, and there's a vast market for it. The bonus is that everything is open source, allowing you to learn on your own. Most major projects have substantial support, so you won't feel lost. Just grab a Raspberry Pi, one or two sensors, and explore the possibilities. Whenever you encounter something you don't understand, delve deeper and uncover what lies beneath.  

---

## 3 answers

### Answer by username_3 on 2023-07-24. Score: 3

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.

> **Comments:**
> **username_0**: 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.  
> **username_3**: 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).  
> **username_0**: 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.  
> **username_0**: I'm meditating hope that helps in learning  

---

### Answer by username_4 on 2023-11-04. Score: 2

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**](https://en.wikipedia.org/wiki/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](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself#:%7E:text=%22Don%27t%20repeat%20yourself%22,redundancy%20in%20the%20first%20place.) 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](https://en.wikipedia.org/wiki/Splay_tree).

---


---

### Answer by username_5 on 2023-07-22. Score: 2

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.

> **Comments:**
> **username_0**: 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.  
> **username_1**: @username_0 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.  
> **username_0**: I'm meditating hope that helps in learning  

---

