Stop learning and start doing, that’s the only real way to figure out the gaps in your knowledge.
Im typing a long one, give me like 15 min
for
loops are one of the loops I haven’t learned yet, Like I understand how it works (Ex. for i = 3 numbers of your choice), but I don’t understand anything more than those bare-bone basics.
As for return
I know what it basically does (albeit it took an excruciating amount of time) What does "return" do in a function? I'm clueless
Other than those 2 things though, yeah! I have a basic understanding of what both of us consider “the basics”,
and Scratch, never tried it (If you’re referring to the programming website), but will it help me develop more of an understanding on the Roblox Lua scripting basics?
To give you a little context about myself, I started my journey with Roblox development back in 2012 when I was just eight years old. Over the years, I’ve had the opportunity to contribute to the development of several popular games and have worked on exciting projects for Tower Battles, Sanked, Ronopoly, and Bankrupt. Despite dropping out of college, I’ve carved out a successful career as a full-time software engineer at a financial company. This path has had its fair share of challenges and sacrifices, but every step has been worthwhile.
Returning to your issue, one key insight I’d like to share is that a considerable part of coding extends beyond the act of writing code. In fact, it involves a lot of research. In my day-to-day work, I spend a significant portion of my time studying documentation and theorizing potential solutions to various problems. Furthermore, quality software development includes a significant amount of planning, design, and creativity.
With that, here is some stuff I wish someone told me when I really started digging into software:
- Comprehend Design Patterns: Design patterns can be thought of as template solutions to common programming problems. They’re well-tested methods that experienced programmers use to tackle issues they come across often. By understanding and applying these patterns, you can simplify complex problems and maintain a clean and organized codebase.
- Learn and Apply SOLID Principles: SOLID is an acronym representing five key principles that help programmers write more maintainable and scalable code. These principles are fundamental to good software design, but before you delve into them, I’d recommend building a robust understanding of Object-Oriented Programming (OOP). You can find several articles I’ve written on these topics on my profile.
- Master Data Structures and Algorithms: These are the building blocks of efficient coding. By understanding different data structures and algorithms, you can write software that performs at its best. This knowledge can help you optimize your code, making it run more efficiently and effectively.
- Understand Memory Management: A fundamental part of writing efficient code involves understanding how memory works within a computer. You should be familiar with concepts like the stack and heap, and know how to leverage the CPU to write fast, efficient software.
- Explore Concurrency, Parallelism, and Data Oriented Design: These advanced topics become crucial as you delve deeper into coding. Particularly when dealing with high-volume data transactions, understanding these concepts can make a significant difference in the performance and efficiency of your programs.
- Practice, Practice, Practice: There’s no substitute for hands-on experience. The more you code, the better you’ll understand how different concepts fit together. Take on small projects or participate in coding challenges to apply what you’re learning.
- Learn from Others: Engage with the coding community. This can be through coding bootcamps, online forums, or local meetups. Other programmers can offer valuable insights and different perspectives.
- Don’t Fear Failure: Mistakes are a natural part of the learning process. Don’t be disheartened when your code doesn’t work. Instead, use it as a learning opportunity. Debugging your code can help reinforce what you’ve learned and deepen your understanding.
- Stay Curious and Keep Up with Trends: The world of tech is ever-evolving. New languages, tools, and techniques are continually emerging. Stay curious and open to learning to keep your skills up to date.
Now a fare bit of warning, if you want to be the best of the best, you need to study constantly. And it is a struggle, but its all worth it.
Now, where did I learn this stuff from? I read books, and a lot of books, here is a list of them:
- “Clean Code: A Handbook of Agile Software Craftsmanship” by Robert C. Martin: This book offers principles and practices to follow for writing code that is easy to read, understand, and maintain.
- “Design Patterns: Elements of Reusable Object-Oriented Software” by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides: A classic text in the field of software development. It describes 23 design patterns that can help solve common programming challenges.
- “Refactoring: Improving the Design of Existing Code” by Martin Fowler: This book offers practical advice on how to improve the structure and design of your code without changing its external behavior.
- “The Pragmatic Programmer: Your Journey to Mastery” by Andrew Hunt and David Thomas: This book offers practical advice and strategies on a wide range of topics, from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse.
- “You Don’t Know JS” (Series) by Kyle Simpson: This is a series of books diving deep into the core mechanisms of the JavaScript language.
- “Introduction to the Theory of Computation” by Michael Sipser: A comprehensive overview of computation theory, including formal languages, automata, and complexity classes.
- “The Clean Coder: A Code of Conduct for Professional Programmers” by Robert C. Martin: This book focuses on the non-technical aspects of professional programming, including work ethic, personal responsibility, and project management.
- “Code: The Hidden Language of Computer Hardware and Software” by Charles Petzold: This book is a gentle introduction to how computers work at a lower level.
- “Cracking the Coding Interview” by Gayle Laakmann McDowell: This book is a practical guide for anyone preparing for a software development interview.
- “Head First Design Patterns” by Eric Freeman, Bert Bates, Kathy Sierra, and Elisabeth Robson: An easy-to-read guide for understanding design patterns, using visually rich formats to engage the reader.
Look, I appreciate you all trying to help me (and I’m not intending to say any of the following out of spite), but just like what I’ve already said at the beginning of the main post,
I have a solid understanding of variables, properties, certain loops, if/then statements, functions, and parameters, but that’s literally it
Regarding that, here’s a list of more problems I’m having that are hindering me (which I should’ve elaborated more on in the main post, that’s on me)
-
I’m terrible at terminology. I know people would just say “just google words you don’t understand” which makes sense, but when I do that, the definitions of said words contain even more words I don’t understand; next thing you know I find myself in an endless rabbit hole. (I always have trouble reading long things in general)
So please, if anyone else sees this post and wants to comment on it (which I doubt since this post is 6 days old, that’s alright), please avoid using that kind of stuff. -
What do you all mean (and expect for that matter) when Nyrion, and all of the other responses I’ve seen from other forum replies similar to his, say something along the lines of “just practice more”?
Like, I’ve already stated, I don’t know that much about scripting (variables, properties, you know the rest), and everyone essentially telling me to “practice” with the stuff I know right now just sound counterproductive. How will that help me learn better? Is there anything else left that I understand Luau that there is to “practice” with? Am I missing the point on what you’re trying to tell me?
There is no defined path to learning. Many developers have grown by experience, not just reading docs or following tutorials.
The best way to learn is to simply experience it. Start a project, work on what you do know how to do, and slowly find gaps where you’re not completely sure, and work on that area until you’re comfortable.
The learning process is natural — you can’t expect yourself or anybody to know exactly what direction to go. It’s up to you to find those holes in your knowledge. Everybody learns at their own pace.
once you start doing, you can branch out. as long as you have a goal in mind anyway (project). if you are just mindlessly “practicing” youre not gonna get anywhere tbh
i remember starting from essentially nothing, my first goal was to make a round timer system. rudimentary at first–while loop that would then have a for loop counting down. Then I thought I need teams so I learned how to handle teams at first using teamservice. then I thought they need guns, able choose equipment, vote a map etc… all of which I learned on the fly and refactored as i got better.
One concept I touched on very recently was AI, I always had it lingering in my head but it seemed very complicated and I never wanted to touch it until I encountered open source guidance (it was a simple ai bot module) and it piqued my interest–eventually I started and finished an AI project commission starting from meager roots. Though it was very difficult–as it should be.
Other than that you can learn from peers i guess.
Set goals for yourself, start trying to script on your own and get more independent, practice basically, if you wanna make something, try to make it, if you dont know how, learn it.
Thats how i got here, asking for help and aiming high in the skies for my goals, sometimes back then i looked in toolbox scripts to see what the stuff does or etc etc.
I’m going to have to ask elsewhere. I keep getting the same “figure it out” responses from you all, and I don’t think you all understand where I’m at right now. Thank you all for trying though.
If you were to read my reply you would have an answer to your question. The only way to learn something is to practice, practice, practice. Most of the concepts in software engineering in general are theoretical and heavily computational. You don’t just sit down and code something, you sit down and code while taking into account everything about the system you are working with, how many CPU cores you have available, how much memory certain operations take, how immutable the data types you are working with are, how fast your CPU is, how much memory you have to work with, and how many users and players you need to support. Then you need to take into consideration how scalable, and sustainable you want your system to be. This requires you to read and watch videos on design patterns.
I HAVE tried practicing when trying to learn new things in scripting (in this case, watching tutorials explaining the basics because every other form of media I’ve tried doesn’t make sense and/or is incredibly hard for me to follow along with)
When watching tutorials, I would have Roblox Studio open and follow along with what they are doing. After the video ended, I would rewatch it, and instead try and change things up by doing different things that weren’t shown in the video.
For example, the first ever set of Youtube tutorials I began watching (that made sense) was from Peasfactory, and I started watching these a year ago.
My learning went something like this:
Parts 1-2: Properties “I’ll change other properties that were not showcased in the video like ‘Locked’ and ‘CanTouch’!”
Part 3: Printing “Not much I can do with printing, but what I CAN do is utilize the newly learned ‘wait’ command to change properties at a set time!”
Part 4: Variables “I don’t understand the importance and usage of ‘Values’ in the workspace, but I know that I can ‘name’ things now. It’s not much at all but it’s something I guess.”
Etc…
Everything was going along very smoothly, but when I eventually got down to more advanced things like ‘return’, ‘loops’ , ’events’, and ‘tables’, Everything. Falls. Apart.
It’s probably because I don’t understand both what these things are, and above all, what use they even have. On top of that, The definitions for scripts like these on the roblox documentation, tutorials, and other forum posts are always saying things like “function” this and “value xy” that, instead of showing realistic, functioning examples; and when I DO try and experiment with this kind of advanced stuff (despite not knowing what it’s used for), I always get errors in the output that I never understand.
THIS is where I’ve been for the past several months. There is nothing “practice” can do for me as of now until I figure out what these more advanced things even do, so that way I can practice and discover more of what they can do, because as of now, all I can do on my own is change properties. I’ve been in this endless cycle ever since and no one seems to understand that even when talking to experienced people in-person.
I don’t think it’s so much as of “I don’t know how/what to learn next” but more of “I got nothing to showcase these skills” iykwim. Just make a game from scratch. Yes, from scratch. Meaning EVERYTHING is made by you, e v e r y t h i n g. I kind of got stuck like this but then I made a game similar to Little Nightmares and it went ok I’ll say. Make a character from scratch, rig it, animate it, script it, etc. Yea it’ll be more than just scripting, if you’re up for it go and try it. Else just take free models and try and make a similar game to one of your favorite games. I have so many games in the making and I know they won’t be finished because so many ideas just keep popping into my head and I procrastinate but yeah. Do what you can or just don’t do nothing for a while and your head will pick up scripting again after a while, has happened to me many of times. gl.
I already finished all the building for a very simple game months ago; which basically consists of collecting coins from all across the map, which will unlock a key to an “exit” that will crash your game when you touch it. The only thing left unfinished and completely untouched is, of course, the scripting, for basically the same reasons I’ve stated in the last post above.
As for getting in a scripting mindset, I’ve been there several times. I’d think about trying to get back into scripting feeling as confident as ever, but when I try and tackle the advanced stuff I don’t understand, I still get stuck on it. Next think you know I’m back at square one trying to relearn the small assortment of stuff I already know cause that’s all I can do.
I taught software engineering and mathematics to students in classes ranging from 1 to 250. Add me on discord.
Tag:
samdev22
For return, it’s pretty much variables computed at runtime. Try starting with stuff like this:
funtion favouriteNumber()
return 18
end
Then, get used to
function(val)
return val
end
Then, start doing basic calculations:
function (val)
return val+5
end
The end goal is to understand that return is made to allow function to be variables but computed realtime, with parameters to control the output.
Events pretty much say when things happen. When starting out, don’t worry about once or wait, just use connect. A touched event is Roblox notifying you when a part touches something, and changed notifies you of property updates. Events are notifications.
Edit: parameters explained
It’s pretty much clarifying on a request.
Without parameters:
Can you please give me some food?
With parameters:
Can you please give me pizza, water, and bread?
ok then, how about helping me solve a problem i met? If you know how to do it, I will be very appreciated, if you don’t, then you get a good thing to learn:
I know this may sound like weak advice, but I’d recommend you go out there and make something you’ll be proud off, that way you’ll find challenges and learn how to fix them along the way. In my opinion the best way to learn new things.
Edit: It sounds like you haven’t come very far, for me it just suddenly clicked in my head. Just know that not everything has to do with the code alone. One thing that can help you with the game you described earlier is this: BoolValue | Documentation - Roblox Creator Hub This is a class which allows you to store a simple true or false value that you can access between scripts. For your keys you can use the Touched event and change these values. You can put them anywhere, but I’d recommend putting them in the player. From there you can work out how you can make the door function. Tell me if you encounter any errors, finding solutions to your problems is the best way to learn.
To sum it all up: Learn the basics and work your way up from there.
Introduction:
The best way to developing your scripting knowledge further, is to put your scripting knowledge into action, by practising making games out of it. Along the way, you may indeed encounter some issues with your coding workflow or issues that you have to try to solve and work around to get something to work the way you want it to work, but that is all part of the process of developing and learning from your own coding knowledge further, which can also improve your workflow’s flexibility.
By overcoming challenges along the way, you will learn more about the general process of scripting, including any of your own general scripting knowledge of writing code; even if this does not mean that you code completely unaided. You will then use both of your existing scripting knowledge, including any new knowledge of scripting you have learnt on the way, to be put into practise further and to help by learning and improving on it further.
Learning curves:
Think of it as this: every new game and every new script that you create within your game, comes with a new learning curve, especially if you try to challenge yourself hard enough. Of course, if you feel like you don’t have many learning curves then challenge yourself harder and more frequently by creating an even more complex game or a complex feature within your game, positively transforming your game and therefore positively transforms your coding knowledge further, than from before. Moreover, it’s also acceptable to have lots of little new learning curves too, and as any types of learning curve, are better than no learning curves at all!
Determination:
Additionally, and this is also a very important one: you need the DETERMINATION, to succeed in learning in the first place. There’s no point in developing your scripting knowledge and knowledge of coding, if you don’t have any passion or determination for developing scripts and/or creating games in the first place. Additionally, you also need the courage and determination to overcome any obstacles that may become apparent, in your way when your either testing your game out for the first time, or from testing out your game so many times and trying to find out what and why something isn’t working the way it should be. However, if you ever find yourself in the situation where your trying to get something to work but can’t get it to, then you can always look for, or find online resources. Even after you’ve tried your hardest to fix or solve a problem that still isn’t working, you can always step back knowing that you’ve put the effort and determination in on your behalf to get something to work, and that it is sometimes all you can do at that point in time and that is okay to feel that way but don’t give up the determination to try something else, try something new or to try finding a workaround and continue to learn by learn in smaller steps instead, rather than always having larger or bigger chuncks to overcome that you just don’t have the knowledge to and that you can’t at that moment in time.
Of course, if you want to learn quicker in bigger chunks then it can always sometimes be better to learn from it by somebody else. On the flip side though, learning by yourself can also be good too, of which that I have explained in more detail and thoroughly, down below.
It can also be good to try and learn solo and to try and solve smaller problems by yourself, rather than directly looking at answers for help, unless your stuck of course; (especially if you are more familiar and experienced):
Lastly, to some extent I believe that learning by yourself can also sometimes be better, than from learning by somebody else, as you are the one that knows where you are within your coding journey and your the one who knows the most about how much you already know about coding, even before you can start learning to code at a greater depth or level. You may learn quicker from yourself, by yourself, rather than from somebody else so don’t be surprised if that is the case.
I’ve gotten stuck a lot in my scripting journey, not feeling like there’s anything else for me to do etc. I managed to get out of that mindset when I watched a spiderman movie and really wanted to recreate it, so I made it in roblox. Getting inspiration from things you’ve seen and making them in roblox is a very good way to find things to do. And while you’re making these things you may stumble upon issues that will require a higher level of scripting knowledge, and when that time comes you can do a little bit of digging and subsequently learn more. I also watch other people develop games and wonder how I would make it myself, that’s a very good way to get into a scripting mindset.
Another thing I did was work on modules for things I would probably use in the future, it provided good practice and allowed me to work on a lot of different things without dedicating myself to a whole game.
I also want to add that it’s fine to take weeks or months working on something instead of completing it as fast as possible.
Pick something you would like to do/learn and just program it out. 1/2 of programming is knowing how to research. So pick something hard and challenge yourself. Even if you stumble you will learn more.
Knowing how to program and understanding concepts are two different things.