What do I do If I'm Struggling in Computer Science?

Below is an exerpt from an email that I once sent a student who was struggling through my CPTR 328 course.


Here comes a bit of fatherly advice - success in computer science requires that you approach learning computer science properly.

  1. Never spend less than an hour studying. CS (and in fact any science worth its salt) is harder than that. You just can’t get it in 10-20 minute chunks of time. The result will be miserable frustration. I usually never spend less than an hour reading something. To do so will just be a waste of time!
  2. Unless you are reading something for the first time, never, ever, gloss over a word (or term or concept) you don’t know. Science in general is built on layers of knowledge and understanding. You have to know the concepts in your mind (not in google’s cache of information, both correct and incorrect). In the world of education we know that you can’t understand if you don’t remember, that you can’t apply if you don’t understand, that you can’t analyze if you can’t apply and that you can’t evaluate if you can’t analyze and last but not least you can’t synthesize if you can’t analyze. This last bit is the tip-top of difficult thinking and you guessed it, in computer science that is commonly where we work. Programming is synthesis. Google won’t even get you to level 1 - remembering. This brings me to #3 1.Read! Successful computer science professionals spend 3 to 5 times as much time reading as coding or solving problems. That means if you take the time to read the chapter in your book, you can count on spending 1/3 to 1/5 of that amount of time doing your homework! Do you know what that means? You could probably be spending much less time on this class than you have already and get better grades. Of course these first three need to be done without interruption! How do you read something for the first time? Skim: read the heading, the first sentence and last sentence of every paragraph. Is it obvious? Yes, good – move on to the next thing. If its not, mark it right there in your book and keep going. When you come back for a second (third, fourth, etc.) read, you’ll know where to concentrate!
  3. Down time? Yes, down time is very important. After you have read that chapter, section or exceedingly difficult algorithm for the second or third time, stop! Walk down the promenade and think about something else for a while. Look at the trees, enjoy the birds, find a girlfriend (it says you are single online). When your mind is done processing what you have read, it will let you know; you just need to be in tune with it. You get in tune with your mind by doing something else – I prefer doing something physical, like walking or riding a bike. When your mind naturally comes back to your problem, concept, skill whatever, take some time to think about it again. This brings me to my last point.
  4. How do you think about problems? Layers! If there is some concept or word that is bothering you look it up! Remember networking handles extreme complexity by layering and abstracting information. If the book says that something is true and you don’t know why, stop there and figure it out first. I like to work on problems from the bottom up, but that’s because I have a wealth of time spent learning solutions that I can put together and build into a more complex solution. If you need to, start from the top down and ask yourself what problems do I have to solve to solve this bigger problem. Enumerate then, analyze them and find a solution to each one. If you need to, break those problems down and continue this process until you find a problem you can solve. When you do, stop, remember, understand, apply it to the problem above (this is just a tree of problems that get simpler as you break them down). Analyze how the problem you just solved fits with the remaining problems on that level. Evaluate – am I making progress towards my goal or am I off on a tangent. If you are on a tangent, your analysis should lead you in a better direction. If you are on the right track, try to remember what you did for future problems, make sure you understand how it worked for you so that you can apply it again later when you need to solve something similar.

Now the kicker, this information that I’ve given you is true no matter where or what you study! Are you frustrated because you are failing or are you really disenchanted with computer science? Think long and hard before you answer that question. When you are successful, does it give you that wonderful feeling of looking at something and saying wow, I created that! Or do you look at it with a certain amount of distain and hope you never have to do that again. If the former, there are techniques of study that I can help you learn easily that will give you many more of those wow moments. If the later, then you need to ask yourself what do I really enjoy doing.

I really enjoy looking at problems I’ve solved and get a big kick out of that, but leading up to that, sometimes my brain really gets tired. If you don’t know what that feels like, you probably have never experienced a real ah-ha moment that gives you that wow feeling. Before you give up, you should strive for that feeling at least once. Success is addictive and you need to experience it for real, not just a C or B but an honest to goodness, wow, 100% that works, and I can show someone else.

You have a break now, and I suggest that you try this out with your project. Read the project template from top to bottom first. Now think of a simple game you could do. Checkers, Chess, Stratego, or any number of card games (but two player games are easiest). Now write it up, turn it in on eclass and email me that you have completed that. After you bask in the glory of increasing your grade from a F to a C, go read through the chat program I gave you (there is a link on eclass to GitHub). Run it, step through it, and keep analyzing it until you understand it. I expect this to take you 2-5 hours – it took me about 2 hours to write the first time last year. DON’T MOVE ON UNTIL YOU UNDERSTAND IT! Once you fully analyzed and understood it, evaluate what you can use to complete your game. Break your game up into pieces. Got it? Good! Do those pieces come together to create the game? Yes, great! Now go try to code them. You will be amazed! Steal from what I have done and change it to fit your needs. If you understand it, then you are properly using my work. And, when you do understand what I did in the chat program (client and server), you will be able to code a project that will get you 100%. Last word of advice: don’t code until you understand!

StrugglingInComputerScience (last edited 2021-10-21 00:41:13 by scot)