GDQuest / learn-gdscript

Learn Godot's GDScript programming language from zero, right in your browser, for free.
https://gdquest.github.io/learn-gdscript/
Other
2.08k stars 155 forks source link

This is just general feedback from someone who learned GDScript as their first programmig language #64

Closed golddotasksquestions closed 2 years ago

golddotasksquestions commented 2 years ago

Is your feature request related to a problem? Please describe. The production value of this app is really impressive and is incredibly high, but personally I feel like it's missing it's mark towards it's target audiences.

There is way too much text and not enough gamification (almost none). It's not fun to go through the lessons. It feels like I'm reading documentation. Wordy explanation and jargon explanations, reading the same things multiple times. Lessons are not interactive at all (other than pressing "run" here and there), practical examples feel like a chore: I'm doing the same thing over and over (like writing functions to draw a square), I have to do exactly as I'm told, with methods that don't even exist in GDScript. Hence, there is very little exploration in these practical sections.

There is not enough variance in interacting with the app or with the challenges. I'm not informed enough about my progress or my goals. To me it feels like a app made by programmers for programmers (meaning people who like to read documentation) rather than an app that tries to teach people who know nothing about programming and don't like to read lengthy documentation about the principles of programming in a light, fun and engaging interactive manner.

The drawing turtle only makes sense to people who already followed a GDQuest programing beginner course. There is no turtle in this app. Also why would a turtle draw anything? And why am I learning these methods if I can't do these things in GDScript or Godot? Both drawing and movement in Godot and GDScripts works completely differently. It feels like I'm learning a simple made up pseudo language I can do nothing with for the purpose of learning yet another simple language (GDScript). Why not teach me GSDcript methods instead?

Describe the solution you'd like I expected this to be much more like duolingo or other similar gamified mobile learning apps. Achievements, goals and a strong reward system. Constant progression, fast pace. More doing, much more variation, less reading. Learning GDScript day one with the first lession. Much less fluff text, much more interactive practical examples with actual GDScript. Things I can immediately do in Godot. If as a complete programming beginner I would want to read so much text, I would buy a text book or just read the documentation.

While this feedback is very critical, I still think overall this is rather fantastic and a huge leap in making Godot and GDScript more accessible. By it's production value alone, I think it might attract people who are new to programming and hesitant to give it a try. The fact that GDQuest decides to publish it for free is amazing! Also, I don't think I mentioned how I think this app just looks really fantastic too.

YuriSizov commented 2 years ago

I'll let our content creators address the structure of the course, but I want to put it out there that too much gamification, instant gratification that replaces actual progression and learning, and quick actions that shorten your attention span is the reason why I dropped every language learning app, including duolingo. I think calmly and thoroughly reading the explanation and seeing the examples in the article part is important to understanding and learning, and doing simple tasks in quick succession is detrimental.

But there are many ways to teach a course and no two students are the same. I trust Nathan, Jad, and Johnny to know how to best give the material to our target audience. Also, do note that the course is about learning to code, not about learning Godot per se.

xix-xeaon commented 2 years ago

You both raise valid concerns. Duolingo is extremely well optimized for engagement and other metrics that keep people using it and enjoying it, but it's terrible for actual learning. That's because real learning requires hard work for delayed gratification. They even have a GDC talk where it's pretty obvious how hard it is for them to improve learning because it almost always degrades their engagement metrics (which are King).

At the same time, the course is definitely heavy on "walls of text" which would've done just as well, or better, as a simple website. As a teacher myself I know how important and useful reading is for learning. But as is pointed out in the course itself; programming is a skill - it's something you do - and practice is the number one key to learning it. It cannot be learned by just reading about it.

Reading and Doing must be tightly woven together. Every concept, every few paragraphs of text, should have an interactive example related to it. Simply pressing play does not count as interaction, but those could be improved greatly if the student could change the code and was encouraged to do so.

Being able to play with the code while reading about it is both more engaging and better for learning. It also prepares the student for the proper "practice" at the end of the lesson. There should be lots of other mini-exercises throughout the lesson as well to illustrate concepts interactively.

I don't think there's too much text, not at all. But there needs to be more to do as well.

On the subject of turtles and custom functions; This is a teaching-style focused on allowing the student to quickly be able to do things. An other way is to start with fundamentals like literals, operators, expressions, variables and datatypes but it tends to be boring so I certainly understand the use of this style - despite the custom functions that may not be useful for "real programming / gamedev".

But again, the student needs to be able to do more with it. Add a function to set color and have the student just play around with drawing things. Fun and engaging while also educational.

YuriSizov commented 2 years ago

Simply pressing play does not count as interaction, but those could be improved greatly if the student could change the code and was encouraged to do so.

They should be able to change all the code in the in-article examples, by the way. We even discussed it as a nice feature to have, but maybe not every snippet has that enabled? Either way, that's easy to enable, because the code there is not just for show, it is actually used to run the example.

Edit: I've been informed it didn't make the cut for the beta, but it's something that we should definitely enable in future version!

golddotasksquestions commented 2 years ago

boring for me is to do the same thing over and over again that has absolutely no use. The reason why I was able to pick up GDscript as my first programming language and why I failed at any other attempts before with other languages, is precisely because I could immediately apply whatever I learned in a fun rewarding game context.

I can't apply move_straight(value) anywhere after I finished this 2h demo. Yet I have to write it at like 12 times before I even realize how and why this is not something that will work in Godot or GDScript out of the box. Instead this this app could have taught me move_toward(value), and I would have immediately gained a useful tool in my GDScript belt while learning the same fundamental principles.

Also about gamification @pycbouh There is already a large amount of programming beginner documentation and tutorials which don't have gamification. If that's the way you like to learn about programming, then you will have no shortage of suitable material. Also the official documentation is not that bad for those people. However for people who shy away from learning programming exactly because of the very academic text heavy nature it is commonly taught, there is hardly anything. Godot and GDScript could be the perfect entry point as it would be nothing short to ideal for a playful learn environment.

For a game-focused software, it's really a shame how little we make use of game mechanics and game theory to help people find a fun easy diversified entry point into programming and keep them engaged. My hope was this app would aim to change that.

YuriSizov commented 2 years ago

@golddotasksquestions You are comparing this course to teaching yourself how to code with Godot. If you are able to teach yourself, you may not be the target audience for a course that tries to help people get into coding and coding games specifically. You suggest things that work for people who can pull themselves by bootstraps, but, at least in my eyes, we make a course for people who can't quite do that. Frankly, I can use your own argument on yourself: if you can teach yourself (which you say you did), there is already plenty of material out there for that.

And this course is stated to target absolute beginners, people who may not know anything about CS, software development, programming, game logic, general logic, etc. We are trying to help people who need to be taught everything. And repetition is very very good for that. In fact, the aforementioned duolingo makes you repeat the same tasks day after day. It gets at least that right, you need to practice and practice again.

The fact that the course doesn't teach Godot API is deliberate. move_toward works with Vector2/3. You don't throw Vector2/3 at absolute beginners. You need to lay the groundwork for this. For concept of functions, arguments, variables. Then, later on, for concept of 2d and 3d space, transitions, rotations. That's a whole lot of work that needs to be taught methodically.

We do in fact employ a lot of game theory and approach this course with game mechanics in mind, but they are not in giving students participation accolades and achievements. They are in the structure of the course itself, in the way the material is presented. In the substance, not in the flair.

golddotasksquestions commented 2 years ago

@pycbouh

I have no idea what you are talking about. Precisely because I had to painfully go through this without suitable resources for my background and without any programming experience, I know very well what would have helped me and what is still missing in terms of learning aids for people like me who don't particularly enjoy reading through lots of text and documentation.

I'm not voicing my opinion from the perspective of someone who already knows a lot about GDScript, but from the perspective of someone who went into it without knowing anything about programming. I'm writing this from the perspective of someone who always wanted to know about programming as tool, as means to design and make games, not from the perspective of someone who wants to become a programmer.

For people who want to become programmers and don't mind reading a lot of documentation, there are already lot's of resources. Also lot's of Godot specific ones.

What Godot and an app like this could provide is a playful way to learn about programming for everyone without feeling like you would do the tedious work of learning. This is what game design and gamification is so great at. Yes you won't graduate from duolingo with a diploma and expert language skills, but this is not the point of such an app. The point is to get more people into starting to learn lowering the barriers of entry and make it an overall fun rewarding experience.

As game designers we should use our skills to help people over this edge of getting started, to make fundamental programming skills more accessible in a diverse, rewarding playful interactive manner, not by writing yet another textbook, doing what has already been done so many times for people who already have a lot of the same kind of resources available already.

NathanLovato commented 2 years ago

Could we use the discussions tab for long discussions like these? It'd be more appropriate than an issue.

The most important metrics regarding this project, for me, are:

And we should measure those eventually to refine the app and course. Until then, we should listen in priority to absolute beginners, that is, our target audience.

Why there's so much text

The majority of people need to understand what they're learning before they practice it. We've been at it for a long time and those "why" or "you don't explain why xyz" come back all the time.

Regarding text, we want as little as possible, but to actually answer the students' needs, we need quite a bit.

Note we tested the app before beta release with absolute beginners, shorter lessons and had to add explanations because they had questions and expected us to answer them in the lessons.

It's not like we do what we think would be good. We work with the target audience directly and will keep doing so.


Maybe what you're looking for already exists. It sounds like Code Combat. It's more of a video game.

We have plans for educational video games on specific topics we feel we could teach well interactively (examples: data structures and algorithms, computer memory). But GDScript coding foundations aren't one of those, to us.

I think that with another language and technology you could do that much better than with Godot.

NathanLovato commented 2 years ago

I'll open a discussion tomorrow when I'm back at work. Note I do understand the idea of an app that'd be more gamified and more focused on practice. I'll explain a bit more about what we have to deliver with this project but also budget and ideas for other projects.

We do have some ideas for things that would be a bit more like what you're looking for, but they're more like projects for Q3 2022.

Right now I'm on mobile so it's a little inconvenient.

NathanLovato commented 2 years ago

I opened a discussion thread here and mentioned the issue. We can continue the discussion there if you'd like: https://github.com/GDQuest/learn-gdscript/discussions/85