Answers.Body: <p>The obvious answer is to get a good textbook on Java data structures. Some are better than others and a few will mislead you. I find <a href="https://rads.stackoverflow.com/amzn/click/0136078583" rel="nofollow noreferrer">John Lewis</a> to be trustworthy (and inexpensive as well).</p>
  
  <p>What you are probably missing is the notion of encapsulation of things in classes and specification by interfaces, both essential to Java and specifically to your quest on algorithms. Some understanding of generics will also help you progress, but that is secondary to encapsulation and the idea of separating interface from implementation. </p>
  
  <p>There are more advanced books on Algorithms, but the grounding, first, in building data structures and reaching the point where you can understand the java.util library is your current optimal path. </p>
  
  <p>I would suggest using Java first, rather than C++ as it has fewer traps for the unwary. Java is built at a somewhat more abstract level than C++ and so provides a better way to think about higher level concepts. </p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-11-06T17:18:30.957Z
Answers.Text: Hey! I'll look into this textbook during winter break. I think I need to review what encapsulation is and how it's used in the java language. I hope that once i understand encapsulation, i'll be able to bridge the gaps in my knowledge and become a better student. Thank you for  the help.
Answers.UserDisplayName: Farah
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-04-01T07:16:24.050Z
Answers.Text: Do you know best DSA source in C++?
Answers.UserDisplayName: Hamza
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-11-05T21:33:52.350Z
Answers.LastActivityDate: 2017-11-05T21:33:52.350Z
Answers.UserDisplayName: Buffy
Body: <p>I'm a computer engineering student. I definitely have my strengths and weaknesses like any other student. And, I would like to improve upon areas that I'm either struggling in or completely missed in my fundamental intro courses.</p>
  <p>This year I realized that there are few gaps in my knowledge specifically when it comes to programming. I understand most concepts, but sometimes I notice that I can't implement some concepts into code on my own.</p>
  <p>This is due to gaps in my knowledge. There were couple times when teachers in my intro programming classes didn't have time to cover all the fundamental materials so they skipped content. I didn't realize how big of a problem this is, until now, when I'm in higher classes.</p>
  <p>I'm still doing fine, but I'm scared this will grow into a bigger problem. I frankly have so much homework and studies and I can't dedicate time to go and start from zero again, especially because I know most things but missed on few important concepts. The problem is, I'm not exactly sure what all the concepts that I missed on are.</p>
  <p>How can I fill the gaps in my knowledge in timely and efficient way? I would like to take your advice and study old content during winter break.</p>
  <p>I learn better by practicing problems and reading books, and I don't learn well from coding websites. Are there any work books that I can buy and practice with, preferably workbooks that cover solutions so I can compare my answers?</p>
  <p>In particular, I have troubles converting algorithms from the textbook to source code in C++ and Java. Sometimes I struggle in implementing data structures such as queues/and stacks into C/C++ or java. I understand iterative programming, and I need to improve my understanding of recursive and dynamic programming techniques.</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2018-05-21T14:17:24.200Z
Comments.Text: How did everything work out?  Are you feeling better?
Comments.UserDisplayName: Ben I.
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-03-05T16:39:57.973Z
Comments.Text: It has been nearly 1 year and a half since this post and thank God I have learned so much in the past year and I feel more confident in my skills. Here are some things that helped me, for those who see the post later: (1) Get an internship. I did an internship over the summer. I was held accountable on a project, and because I was paid to complete, i felt a huge sense of responsibility to complete it successfully. (2) Connect with positive and humble developers  and try to learn a little bit from everyone (3)  be confident and do not undersell your skills (but please do not become arrogant)
Comments.UserDisplayName: Farah
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-03-05T16:47:38.077Z
Comments.Text: when I did my internship, I had more pressure to the fill the holes in my knowledge by learning quickly.  I would also recommend paired programming, as it is always faster to learn by doing, and have a person to converse with about any bugs in the code.
Comments.UserDisplayName: Farah
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-05T04:34:03.523Z
Comments.Text: I absolutely applaud your desire to fill in gaps in your knowledge before it all snowballs, but it's hard to even begin to give guidance without something to go on.  Could you give us a hint about a thing that you've had trouble with?
Comments.UserDisplayName: Ben I.
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-05T04:37:18.230Z
Comments.Text: I second Ben’s comment. Is there a particular language with which you have some facility? Are there things you *have* done with programming that you can build upon? More information as to what you *can* do will help us point you in the right direction.
Comments.UserDisplayName: Peter
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-05T06:04:49.853Z
Comments.Text: Thank you for wanting to help me! I have troubles converting algorithms from the textbook to source code in C++ and Java. Sometimes I struggle in implementing data structures such as queues/and stacks into C/C++ or java. I understand iterative programming, and i need to improve my understanding of recursive and dynamic programming techniques.
Comments.UserDisplayName: Farah
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-05T09:49:32.423Z
Comments.Text: With regards to programming, Java and especially C++ are hard languages to learn. And even harder to learn, when you are learning to program. Eiffel is a good language to learn Object Orientation.We had a question on here a short time ago about first languages. Another on books to read. I will but together some ideas when I get back. Can you tell us what your background is; What you have learnt so far; What you struggle with; what you are good at; what you enjoy.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-06T04:08:59.290Z
Comments.Text: I can't speak for c++ (last time I touched it seriously it was still a c preprocessor), but queues and stacks are built into the Java libraries. The only reason to implement them yourself is academic interest.
Comments.UserDisplayName: pojo-guy
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-06T11:06:56.297Z
Comments.Text: There are some good answers here https://cseducators.stackexchange.com/q/3916/204
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-06T17:11:08.010Z
Comments.Text: Thank you for the help! @ctrl My background is mainly c++ and java. I have also worked with system verilog before and lower level languages. I notice that i stuggle with OOP.
Comments.UserDisplayName: Farah
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-06T17:12:16.510Z
Comments.Text: @pojo-guy, that's true. My teachers doesn't let us use the built java libraries, so i have too be able to implement stack and queues from scratch!
Comments.UserDisplayName: Farah
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-06T17:34:13.960Z
Comments.Text: @Farah That fits the boundaries of "Academic interest".
Comments.UserDisplayName: pojo-guy
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-06T18:00:39.213Z
Comments.Text: I would defiantly recommend Eiffel as a language to learn OOP. How that will work when the teachers are trying to teach another language, I do not know. If using java, then see this answer for how to bootstrap into OO. Java is not 100% OO. Then try to stick to OO (e.g. no static).
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-11-07T00:09:43.990Z
Comments.Text: Thank you! I haven't heard much about Eiffel, i will check it out! :)
Comments.UserDisplayName: Farah
Tags: <best-practice><resource-request><self-learning><struggling-students>
Title: Computer Engineering student with holes in my knowledge (I want to improve)
ThreadText: # Computer Engineering student with holes in my knowledge (I want to improve)
  
  (Asked by: username_0 on 2017-11-05)
  
  I'm a computer engineering student. I definitely have my strengths and weaknesses like any other student. And, I would like to improve upon areas that I'm either struggling in or completely missed in my fundamental intro courses.
  
  This year I realized that there are few gaps in my knowledge specifically when it comes to programming. I understand most concepts, but sometimes I notice that I can't implement some concepts into code on my own.
  
  This is due to gaps in my knowledge. There were couple times when teachers in my intro programming classes didn't have time to cover all the fundamental materials so they skipped content. I didn't realize how big of a problem this is, until now, when I'm in higher classes.
  
  I'm still doing fine, but I'm scared this will grow into a bigger problem. I frankly have so much homework and studies and I can't dedicate time to go and start from zero again, especially because I know most things but missed on few important concepts. The problem is, I'm not exactly sure what all the concepts that I missed on are.
  
  How can I fill the gaps in my knowledge in timely and efficient way? I would like to take your advice and study old content during winter break.
  
  I learn better by practicing problems and reading books, and I don't learn well from coding websites. Are there any work books that I can buy and practice with, preferably workbooks that cover solutions so I can compare my answers?
  
  In particular, I have troubles converting algorithms from the textbook to source code in C++ and Java. Sometimes I struggle in implementing data structures such as queues/and stacks into C/C++ or java. I understand iterative programming, and I need to improve my understanding of recursive and dynamic programming techniques.
  
  **Tags:** best-practice, resource-request, self-learning, struggling-students
  
  > **Comments:**
  > **username_1**: I absolutely applaud your desire to fill in gaps in your knowledge before it all snowballs, but it's hard to even begin to give guidance without something to go on.  Could you give us a hint about a thing that you've had trouble with?  
  > **username_2**: I second Ben’s comment. Is there a particular language with which you have some facility? Are there things you *have* done with programming that you can build upon? More information as to what you *can* do will help us point you in the right direction.  
  > **username_0**: Thank you for wanting to help me! I have troubles converting algorithms from the textbook to source code in C++ and Java. Sometimes I struggle in implementing data structures such as queues/and stacks into C/C++ or java. I understand iterative programming, and i need to improve my understanding of recursive and dynamic programming techniques.  
  > **username_3**: With regards to programming, Java and especially C++ are hard languages to learn. And even harder to learn, when you are learning to program. Eiffel is a good language to learn Object Orientation.We had a question on here a short time ago about first languages. Another on books to read. I will but together some ideas when I get back. Can you tell us what your background is; What you have learnt so far; What you struggle with; what you are good at; what you enjoy.  
  > **username_4**: I can't speak for c++ (last time I touched it seriously it was still a c preprocessor), but queues and stacks are built into the Java libraries. The only reason to implement them yourself is academic interest.  
  > **username_3**: There are some good answers here https://cseducators.stackexchange.com/q/3916/204  
  > **username_0**: Thank you for the help! @ctrl My background is mainly c++ and java. I have also worked with system verilog before and lower level languages. I notice that i stuggle with OOP.  
  > **username_0**: @username_4, that's true. My teachers doesn't let us use the built java libraries, so i have too be able to implement stack and queues from scratch!  
  > **username_4**: @username_0 That fits the boundaries of "Academic interest".  
  > **username_3**: I would defiantly recommend Eiffel as a language to learn OOP. How that will work when the teachers are trying to teach another language, I do not know. If using java, then see this answer for how to bootstrap into OO. Java is not 100% OO. Then try to stick to OO (e.g. no static).  
  > **username_0**: Thank you! I haven't heard much about Eiffel, i will check it out! :)  
  > **username_1**: How did everything work out?  Are you feeling better?  
  > **username_0**: It has been nearly 1 year and a half since this post and thank God I have learned so much in the past year and I feel more confident in my skills. Here are some things that helped me, for those who see the post later: (1) Get an internship. I did an internship over the summer. I was held accountable on a project, and because I was paid to complete, i felt a huge sense of responsibility to complete it successfully. (2) Connect with positive and humble developers  and try to learn a little bit from everyone (3)  be confident and do not undersell your skills (but please do not become arrogant)  
  > **username_0**: when I did my internship, I had more pressure to the fill the holes in my knowledge by learning quickly.  I would also recommend paired programming, as it is always faster to learn by doing, and have a person to converse with about any bugs in the code.  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_5 on 2017-11-05. Score: 2 | Accepted answer
  
  The obvious answer is to get a good textbook on Java data structures. Some are better than others and a few will mislead you. I find [John Lewis](https://rads.stackoverflow.com/amzn/click/0136078583) to be trustworthy (and inexpensive as well).
  
  What you are probably missing is the notion of encapsulation of things in classes and specification by interfaces, both essential to Java and specifically to your quest on algorithms. Some understanding of generics will also help you progress, but that is secondary to encapsulation and the idea of separating interface from implementation.
  
  There are more advanced books on Algorithms, but the grounding, first, in building data structures and reaching the point where you can understand the java.util library is your current optimal path.
  
  I would suggest using Java first, rather than C++ as it has fewer traps for the unwary. Java is built at a somewhat more abstract level than C++ and so provides a better way to think about higher level concepts.
  
  > **Comments:**
  > **username_0**: Hey! I'll look into this textbook during winter break. I think I need to review what encapsulation is and how it's used in the java language. I hope that once i understand encapsulation, i'll be able to bridge the gaps in my knowledge and become a better student. Thank you for  the help.  
  > **username_6**: Do you know best DSA source in C++?  
  
  ---
  
  