Is this course intended for beginners (no programming experience)

Hi, I started this course in December and have been following along with the fundamental stuff, around here (not sure exactly which part) lessons feel like they’re getting much harder for me to follow, and I feel even after watching them over there’s a lot of stuff that I just don’t ‘get’ like you’ll write something out that we learned a lesson or two ago and I find it very difficult to actually use these concepts myself and have to rely on copying exactly what you type.

It just doesn’t feel like these concepts are going into my head in a way that I can use them without copying directly, like I’ll be able to identify an if statement, struct, etc. when I see it, I’ll be able to write one out but when you’re typing them in with everything else going on it really confuses me.

Some of the earlier stuff in this section (up to I’d say about 20-25) I can do just fine because we’ve gone over it and it’s really simple and easy.

The challenge part at the end of this video really threw me off too, I had no idea where to start typing things on my own, and I find that a little bit frustrating. Maybe I’m just a slow learner but I have to go over the same things several times.

2 Likes

I feel you, I’m starting to feel really drained and annoyed because there’s no rest from this information overload.
http://www.cplusplus.com/doc/tutorial/basic_io/

I’m reading through this site a bit and it’s helping, I guess beginners should really take it slow and not rush through the course.
Spend more time actually applying the stuff yourself on a seperate project.

1 Like

Hi Michael,

I’ve now hit this point myself!

I’m looking over everything I’ve typed from the course, it all works but I don’t understand why.
I guess it’s like most things, the more you use it the more it starts to make sense.
For now, I am just trusting that it works, I’ve ironed out errors but I still don’t understand it if I am honest.

You’re not alone

I believe every beginner will feel this way at one point with the part they are struggling. I myself am experiencing this as well. I understand what they are and why we are using them but having a hard time grasping the bigger picture. What helps though is not thinking too much into the concept or bigger picture. If you can’t get it just move on to the next lecture since it’ll come back and maybe then it’ll give you a better idea of how to use it. When it comes to making a game don’t worry about how you will use every bit of code you learned here in the course but rather focus on the content of the game like what it’s going to do and how you will play it and start breaking things down from there on how you will make each section of the game work using code and from there you’ll end up using code you know to make it work. Then you might have an “a ha” moment where you find out this part you learned that you didn’t get before works best on this part of your game.

Hope this helps.

Especially at the pace this course runs, if you come into this with no programming experience, you’re 99% sure to have a hard time. Find yourself a good YouTube C++ for beginners series and watch it a few times in conjunction with the course. Other than that, take every opportunity to work on your skills. You’re not going to get good at programming just by watching some videos. You have to put in the time, and it generally takes a LOT of time to get good.

1 Like

Wow, you know I started feeling this way when the lecture got into the header files and interacted with the .cpp files, using things between the two. I am struggling to subconsciously understand the relationships without really really having to try . So the last few lectures have been hard to say the least. But I thought to myself…“Hmm I wonder if I’m the only one having a hard time.”

Clicked on the discussions for this lecture. Your post was the first one. Its kinda comforting knowing there are others who are struggling. Not that I enjoy others struggling :slight_smile: but I take solace in the fact I’m not alone.

I’m debating on going and downloading the GitHub files where we started making the header files and .cpp files and really taking my time and trying to understand what is going on.

As a new student I just want to soak, soak, soak up as much knowledge as possible int he thinking that “ah I’ll hopefully understand this super well later as I try my own stuff. It’ll click.”

Then there is the other side of me. The super competitive side that says 'nah, don’t backtrack, keep that forward momentum. Thats how we will succeed."

Damn you brain…Damn you…Lol Good post to starts discussions though.

Kudos to all who have made it this far.

Peace

2 Likes

I think this is very normal. I am a complete newbie too.

I am now on Lecture 40 and I realized early on that this would take a lot of time.

One early lecture mentioned that you should “take control of your code”. I took this to heart and decided I would not move on to the next lecture until I understand or can somewhat explain the lecture to my rubber duck.

I keep a google doc open while watching the videos and explain everything also in writing. Speaking and Writing is a great way to not be overwhelmed because thoughts are random. This way you can formulate what you have learned.

Then before bed I’ll read over everything I learned over the day.

That said, I only understand how things work at a basic level, but still probably lack the knowledge of when to implement what I am learning. I trust that will come.

Each Lecture takes me up to an hour to get through.

I just accept this will take a long time, and remind myself that I am essentially learning a new language, so I gotta take it slow.

2 Likes

I think a great technique is to do the whole section of the course first. Even if you don’t get it much just try to understand but keep moving. Then once your done THEN redo the section and some things might stick out and make more sense the second time around. Just like when you watch a movie the second time and you spot things you didn’t the first time or parts make more sense the second time around.

1 Like

@Michael_Fox and all others in this thread that are having complications. As some have already said your frustration is normal. Don’t stop. This course is not really for the neophyte, but that doesn’t matter. Know that people like me are here to help explain in greater detail why the instructor is doing certain things. If you need help about commands, or concepts just ask. I want to see everyone succeed in this course.

I myself can not draw, I’m no artist, so for me programming is easy, designing 3d levels and art is hard. But that is why we as a community can help each other.

If you are a complete neophyte to programming that’s fine. Ask me anything. Ask me 100 times the same question until I explain it so you understand it. I have been programming for 37 years so I do know a thing or two. I’m no expert, but I know how to help the absolute beginner.

So as long as I’m going through this course with you, ping me on discord. I do not do voice, but I type pretty fast (mostly.) If you must I can always be reached at shortwind@yahoo.com.

Don’t despair. Don’t give up. The next “minecraft” is sitting there just waiting for the next neophyte to come along and change everything. You never know, it could be you. :slight_smile:

5 Likes

@shortwind You’re a champ! The community is lucky to have people like you

1 Like

In regards to header and cpp files, like many things in C++ they’re about organization so that code is more manageable as it grows. You could technically put all of that information in the same file as main, but imagine if you had 100 classes, and then tried to find something. What is happening in the header is that you’re declaring a class and all of its members. In the corresponding cpp file, you then define the members of the class. Going back to the idea that you could shove it all in with main… in order to use a function in main it has to be declared before main. But to keep your main near the top of your main.cpp file, you declare a function prototype, which allows main to use it. Then you specify the function below main. You could totally do it ALL above main, but it’s about organization. Same thing with classes. You stick all of the members in one file so it’s easier to see what is in it. You put the definitions separately so that it doesn’t fill up the class header with stuff that would make it harder to read. Here’s the confusing part: you’re #include-ing the header, but what about the cpp file? You dont have to. There’s a linker program that links the declarations to the definitions for you automatically. It knows to do this because you’re scoping your functions in the .cpp file to the class they belong to, like void FBullCowGame:: hope that helps.

I really appreciate this post. One of the most genuinely helpful yet selfless displays of kindness i’ve seen on any forum.

I think the confusing thing for me has been all the “we’re gonna go ahead and change that” going on. From my understanding its all about declaring, defining, and implementing in various accepted and unaccepted ways. I appreciate the sentiment of seeing why we shouldn’t code this way or that way but I do feel a sense of mistrust in the information because as a beginner I am not sure what will be the next thing to change. May I suggest to the instructor perhaps teaching a solid course on what to do first, then explaining which pieces are “take it or leave it” or “off limits” to the programming community. although inspired by shortwind, this comment certainly ended up longwind’ed :wink: cheers all

Yeah, This is the exact lecture where I realized that this really isn’t for complete beginners. You need to have some experience in programming for this to really sink in. Even with my actionscript background, I’m starting to feel really overwhelmed, and I realized halfway through this lecture that I wasn’t really learning anything anymore.

I need to take a break from this course and go to Lynda to tackle the basics before coming back to this. He technically covers the basics here, but it’s so brief, and so fast paced, that it’s more like a recap than an actual introduction.

Hey guys.

Have hope.

I did Ben’s C# for Unity course and felt the same way in many parts, it just didn’t make sense.

However something from lecture 36 for example would “click” by lecture 78 and I’d finally understand it. There’s no easy way to understand except repetition and practise. Once you’ve used a feature in 3-4 different ways you will begin to understand it.

Coding takes time, you just have to keep exposing yourself and eventually the ‘matrix’ begins to make sense.

I’m feeling lost as all of you are, but from the experience in the other course I’m confident to keep soldiering on.

I will admit this lesson in particular was not very well written / explained. Especially with the i == j stuff! I think that’s where most people got caught.

I have to agree with OP here. As a huge noob, I’m really struggling to understand the basic fundamentals of how all of this links together…

Ben seems to just rush forward without really explaining anything conceptually, but simply demonstrating syntax. For a beginner, the complicated webbing and weaving together of these concepts without any moment to pause and explain the basic concepts behind them and how they interlink is leaving me in a state where I am simply copying syntax just to progress - although I’d be 100% incapable of creating variants with the demonstrated code.

I’m basically having to supplement each video with some good youtube tutorials - Bucky’s C++ tutorials specifically - in order to make any kind of progression here.

Ultimately, I’ve reduced myself to not moving on from this video until I untangle the web of understanding this stuff. I’m peeking at definitions and making annotations one line at a time on every single line of code so I understand what’s happening.

I’m currently stuck on understanding this line:
FBullCowCount BullCowCount = BCGame.SubmitGuess(Guess);

what the **** does that do?

I gather that it’s passing in the user’s guess… via the function SubmitGuess, which is defined in FBullCowGame.cpp, which we were working on a bit earlier in the video… a function that has our loops in it… but Guess is defined a few lines up in main.cpp as an FText that = GetGuess(); … so i’m not sure which area this is pointing at, or what purpose we’re driving toward…

and that guess is now equal to FbullCowCount BullCowCount… still trying to understand what those mean… if my understanding is correct, BullCowCount is an object that is created here, just after the structure FBullCowCount…

So are we creating an Object (BullCowCount) that initializes the construct (thus resetting Bulls and Cows to zero) and pulling the functions from the header into the object?

I think i need to watch more youtube…

Hey Adam, I will try to straighten out some confusion. I’ve been in the same place as you, and the biggest problem is that Ben kind of treats all code concepts equally. In truth, you’re learning a couple code concepts without being able to tell the difference.

I will try to explain.

  1. There are code concepts that are almost UNIVERSAL. These are things like IF Statements, WHILE loops, Addition, Subtraction, bools, ints, strings etc.

  2. Then there are code concepts that are Universal to OBJECT-ORIENTED programming. These are things like classes, instances and inheritance.

  3. Then there are coding concepts specific to C++. This generally is the syntax. For example this is how you write “Hello World” in C++

    #include <iostream>
    using namespace std;
    
    int main() 
    {
        cout << "Hello, World!";
        return 0;
    }
    

and here is how you write “Hello World” in Python:

Print("Hello World")

Both share the same universal concept of printing a string, they function the same way, but the syntax is different.

  1. Finally there are concepts that ONLY apply to Unreal Engine 4 C++. These are things like FStrings and later on in the video you will be dealing with a lot of UE4 specific code, that wouldn’t work outside of UE4.

So the challenge for you is figuring out which 4 categories does a specific line of code sit in. Honestly, you’re doing the right thing. I learn a lot more by doing 1-2 videos a day and letting the information sink in, if I rush through 10 videos I forget a lot.

I will try and give you a head start by explaining the line your stuck on.

FBullCowCount BullCowCount = BCGame.SubmitGuess(Guess);

So lets break it down.

FBullCowCount BullCowCount

FBullCowCount is a struct, containing 2 integers (Bulls and Cows). If we only needed 1 integer instead of two we could simply write

int BullCowCount

So in psuedo code we’re just saying “I’ve created a new variable call BullCowCount and It’s a struct containing 2 integers named Bulls and Cows.” However these names are arbitary. We could have just written.

struct myStruct {int x, int y};

myStruct newStruct;

newStruct.x = 1;
newStruct.y = 2;

We just set the x and y values to 1 and 2 for the variable newStruct.

Okay so we know that the left hand side is just declaring a new variable of type FBullCowCount which is a struct! Remember from earlier a struct falls into our 1) category of universal coding concepts.

So what does this mean?

FBullCowCount BullCowCount = BCGame.SubmitValidGuess(Guess);

Well SubmitValidGuess is a method that is inside the class of FBullCowGame. However early in our code we made an INSTANCE of this class called BCGame. This is an example of 2) Object Oriented Programming. We don’t won’t deal with the literal class which is more like a blueprint. We want to deal with an OBJECT of the blueprint, which is an instance.

Okay so we have our instance of a class and we’re asking it to call a method called SubmitValidGuess. Well if you look at the method in the original file (FBullCowGame) You will see that it increments BullCowCount.Bulls and BullCowCount.Cows based on some conditions.

So to summarize. We declared a new struct called BullCowCount, and we made it’s value equal to the value returned by a method called SubmitGuess. The value that SubmitGuess returns is based on some conditions of the input. In this case the input is a string called Guess.



Now I’m a bit ahead of you in the tutorial so I will give you I will give you some tips for the upcoming sections.

An important thing to know about UE4 C++ is that Unreal Engine “coddles you”. It basically asks you to build on top of it’s existing code, rather than creating new code from scratch.

More specifically, it asks you to use its existing CLASSES. “We’ve made some classes for you to use, so please only create children of these classes”. Now UE4 comes with about 1000 of these “in built classes” but the one you use the most is a class called AActor. So UE4 asks you "If you make any object that can be placed in the world, like a light, or a door, or a sound, please make it a child of an AActor.

Why do we do this? Well the prebuilt AActor class already has hundreds of functions in it that are EXTREMELY useful. So we can make a new door class, called ADoorClass. ADoorClass INHERITS from AActor. Which means it has all the same methods AActor has.

So we can say ADoorClass.SetActorTransform(0,0,0) and just with a simple function we can set the doors location to 0,0,0. UE4 has already written the code for us. However if ADoorActor was not a child of AActor we would not have access to any of it’s cool functions.

So just be aware then you move over to UE4 you’re not swimming in an endless of ocean of C++ freedom (which is terrifying!) but you’re coding in the structured world of the UE4 framework.

So to summarize my long post. Even if you don’t understand the code, just try to think to yourself “Is this a universal concept, an object oriented concept, a C++ concept or just a UE4 concept?”

4 Likes

Wonderful breakdown, thank you so very much Simon!

On a single read through it clarifies a lot of my misunderstandings, but I think I’ll need to go over it a few more times to ensure I internalize the information.

Very grateful for this, thank you!
ADAM

Really struggling as well here but this comment, with the breakdown of that one daunting line, is very helpful. Thanks.

Just want to agree with the advice here - people shouldn’t get discouraged or feel stupid - it’s not an easy course!

Even though it’s “beginner” and all the information we need is presented to us, it’s so fast that if you’ve never encountered this kind of thing before it will be a while before you can wrap your head around it.

Go slow - I would suggest maybe trying some slower beginner coding resources first. This course goes WAY faster then the “Intro to C++” course I took at university, for example.

Once you have some more experience under your belt, come back to this and it will reinforce all the knowledge again. Don’t give up!

Privacy & Terms