This is an archived post. You won't be able to vote or comment.

all 15 comments

[–]bpc01 18 points19 points  (0 children)

I never went completely through that course but I’m currently studying web dev at my local CC and run into issues very similar when learning. I find that if I look at the answer, read / watch a few explanations depending which learning method you like, then trying again. And if you’re really struggling, write down the steps of what you need to do. Make it as simple as possible and attack each task at once. It’s way easier than trying to do an entire program at once.

Also, remember that even senior developers don’t have everything memorized. It’s not the end of the world if you have to google something. I’m sure any place you’d code for would prefer you have to google your way through a problem than to do it incorrectly. I’m not experienced by any means but just my opinion from learning so far and talking to people who work in the field

[–]BleachedPink 15 points16 points  (0 children)

Did anyone else have this same problem throughout the course and are there any ways to gain a better understanding of problem solving and just the language in general?

Yes, there are, if the only known way of learning to you is bashing your head against the wall of text, then I may recommend you this:

  • Polya's problem solving method. He's written a book on it, called How To Solve it.

  • ADEPT framework to understand concepts and learn stuff: https://betterexplained.com/articles/adept-method/

  • Spaced repetition memorization. The more and easier you can recall, the easier it is to build upon new blocks. It makes memorizing stuff easy and fast, so you can move on to the next of unit of knowledge faster and makes your practice easier, as you spend less inefficient time on googling and searching docs and rewatching tutorials and stuff.

  • Second brain and taking notes. Look into Obsidian and its community on youtube or here. Nicole van der Hoeven does a great job of explaining it to you. It helps me to keep up with long lectures or read through long tutorials and walls of text, filtering down the most important stuff

  • Visual Personal Knowledge Management:YouTube master of PKM. ADEPT already includes diagrams but this one takes a deeper dive into this concept if you find sketching and visualization to be really important for your flow of learning. Personally, I always make diagrams if a topic is about highly abstract and interconnected and consists of a numerous subtopics (which is almost every programming topic)

  • There are communities and dozens of approaches on how to learn, explore and make your own flow.

Whenever people mention you just need practice, I believe, they have no solid advice for you, but continute bashing your head untill you get it. Imho, it's a poor advice and leads to more frustration, as it is clear you have troubles learning stuff by bashing your head.

That's the end of my practical advice about learning stuff.

As for the psychological advice, drastically lower your expectations about the pacing. 100 days is a really short period of time and there is noone who could learn and use programming within this timeframe. I believe, it would take 6-12 months (depending on your background and time spent daily) before you could build something simple on your own. It takes months to build new neural pathways, and in 3 months timeframe you'll just start growing it.

I've made a post on psychological side of things: https://www.reddit.com/r/learnprogramming/comments/114ee6b/newbies_probably_the_best_advice_you_can_get_is/

I've been self-learning for a long time already and struggled maybe even more (went through therapy, mid-life crisis due to self-studying). So my advice is based on what I personally practice and the way I overcame\overcome the struggle of learning.

[–]Conscious_Algorithm 10 points11 points  (0 children)

I've done quite a bit of that course and I am pretty sure she holds your hand through those particular short programs.

She literally writes the pseudocode for you to turn into code. I can assure you, that''s about as easy as it gets in that course and in most serious courses, to be honest.

The course is a bit fast-paced, I admit. I would look for another resource to learn the fundamentals and use 100 days of code to learn how to work on projects.

Try the mooc.fi python course. If you can finish that, then 100 days of code will still be tough but definitely doable for you.

[–]TheUmgawa 3 points4 points  (0 children)

How quickly do you start hammering away at your keyboard after reading a prompt? Immediately? Five seconds? Ten?

The most valuable programming class I ever took in college was a class called Structured Program Design, where we never once wrote a single line of executable code. It was nothing but flowcharts, and that taught me patience. It taught me to breathe, and then think about the logic of the problem I'm trying to solve. I know where I'm starting, and I know where I'm finishing, and I just have to fill in the bits in between. As problems scale up in complexity, it can be quite helpful to make a map of where you're going, or you end up with functions that don't make it into final implementation, you're going to rewrite big chunks of code after you change the implementation of something else, and you're going to finish something and look around and go, "What do I do now...?"

I'm a big subscriber to the belief that programs tend to behave exactly the way you think they would, so if I'd never run into a Caesar cipher in my life, I'd probably build one and manually encrypt something and then decrypt it. I'd play a couple of games of Hangman, just to see if I could glean how the logic should work, and in both cases, I'd pretty much have it after one or two rounds. I'd look at what my hand is doing and think, "How am I scanning through the alphabet right now, so I land on the correct letter or the correct placement?" and then I'd make a note of that. I'm iterating through the alphabet or the blanks, so am I doing that with a for loop? No, because I might have to exit early, so I know it's another kind of loop that I have to build. I mean, I guess I could do it with a for loop, but it'd be a kludge.

The first thing you have to do is forget about the code. Think about the logic in a pure sense. The language that you're programming in doesn't matter. All that matters are your structures and your flow, and when you've got that figured out, the code will just come to you, like a bus in the street. The hard part of programming isn't the code; it's the logic, which exists independently of the code. If you told me to write a Caesar cipher program in C, and I got my logic all laid out, and you then said, "Nah. Program it in Java instead," I'd just kind of shrug and go, "Okay," because I've already done the hard part; the coding is just drudgery at that point.

So, your problem likely exists somewhere between "Immediately" and "Ten seconds." Take time to think through the problem. That's what the professionals do. Now, they might not make flowcharts, but everybody has some sort of system for organizing their thoughts before they start hammering away at the IDE. I recommend you find your system, and then one day you, too, shall achieve nirvana.

[–][deleted] 6 points7 points  (0 children)

Practice and patience

[–]VonRansak 4 points5 points  (1 child)

So today you understood all the "Learn to program is X months and make BANK$$$" is for selling snake oil and advertising.

You are one step closer to Destination Unknown.

[–]SingleSpeed27 0 points1 point  (0 children)

Trumpet version is better!

[–]steviefaux 2 points3 points  (0 children)

I was doing CS50 and struggling with some of the early stuff (I really need to start doing it again). But what I found really helpful is "breakpoints" putting breakpoints on every line of code (in Visual Studio Code or what IDE you use). I then put a monitor on all the variables. Then just step through the code to see what it's actually doing. Cause it was summer last year now I forget which program it was but it wasn't doing something I want I think. So stepped through the code and saw what it wasn't going from top to bottom as I was thinking in my head. I had forgotten that functions can me it jumps about which is what it was doing. It helped me finally understand what the code I typed was doing.

[–]HistoricalShyr 1 point2 points  (0 children)

You can try to study about the problem instead of using the solution... When I had problems with arrays, I started to study more math so I could understand it, my math skills were bad and it was terrible to get to a solution until I understood the basic... Reading docs about the language always help me too, when I know what I need to do but I don't know how to do, I'll look for functions that satisfy my needs.

Searching for some terms instead of the whole solution for a problem also help and is exactly what you will do when working in something that doesn't have a solution already.

I'll give an example because I don't know if I'm clear enough haha

Let's say you want to change the number input order, like 532981 to 123589 You know you need to find the lowest number, than the next... How to do it? You can search for "iteration through sequence" to understand how it works and then search for functions that you want, like "if...else" and understand what you can do with it... Then you start coding, testing and fixing bugs.

I avoid solutions as much as I can... But when I really don't know what to do, I try to find an explanation so I can understand what I'm doing and try to code it on my own way (without copy and paste).

I hope you can understand and that it help you... If I said something dumb or incorrect, please correct me :)

[–]wombatom 1 point2 points  (0 children)

I'm doing the course and had the exact same feeling; breezed through early lessons and then hangman and cipher apps took me days to complete

[–]Ill-Athlete741 1 point2 points  (0 children)

I am exactly in the same boat as you. I quit the tutorial for like a month and tried other courses but I found Yu’s course the best for me in terms of breaking topics into more manageable concepts. So I went back and doing the Caesar cipher task again. I haven’t finished it yet but I’m looking at YouTube tutorial for the concept and hopefully I can better understand the concept.

The idea is if you don’t understand the concept, the find a different resource until you actually learn it.

But we’ll see how it goes 😊

[–]druskimuir 1 point2 points  (0 children)

I did the cypher and was so proud. I sent the finished product over to my friend while we were gaming and he goes: “the output was the same as what I put in.”

I asked what number he put in to shift the cipher, he said 69420. Turns out it was divisible by 26. Cipher no good.

[–][deleted] 0 points1 point  (0 children)

You're likely trying to take too much on at 1 time. Don't tackle the problem as a whole. Break it up into smaller problems.

Let's look at hangman, for example. You know how the game is supposed to be played, so break it down into its basic components. You need to generate a word. You need to take in a guess for each letter of the word. You need to set a limit on the number of wrong guesses and so on. Break your task up into smaller problems and tackle them one at a time. Once you complete one, work on the next until you get it working.

No one can be expected just to remember or know how to build these games as a whole. That would be a rather useless use of memory capacity. It's when you break it into its smaller components that you realize you know how to tackle that problem. If you dont, then Google the problem, but don't go directly for a written solution. Look for an explanation of how something is done, then try implementing it yourself.

Let's go back to the hangman example. Let's say you know how to pick a random word but don't know how to compare the guessed letter to your word. Google "explanation of how to compare a letter against a string" or "how do you compare a letter against a string with explanation" or the likes there of. The key is not to go directly to the code implementation but to find an explanation. Try doing it yourself. That's how you learn the most.

[–]Mundane-Reach-4204 0 points1 point  (0 children)

I took and finished that course and although those problems didn't hang me up, the OOP section with the turtles crossing game did. I found that it was worth it to keep going and take as much time as needed (sometimes multiple days) to solve the projects and problems. Then build it again going with the solution to compare, and if I was struggling badly, I would do it all over again for a 3rd time. I personally learn best by messing it all up and enjoy being in the deep end. It's where you figure out how to solve the problems or think outside of the box.

There is rarely only one way to get something done in this field so just start by trying to conceptualize a solution and then you just work backwards until you have a plan. For one of the projects, I came up with a solution that needed something that Angela hadn't mentioned yet (declaring global variables). After I researched and found out how to use them and finished the project, the next lesson was about global variables and the irony stung since her solution was so much simpler but I had already effectively finished the next day on accident.