So you want to become a developer? well that\u2019s awesome! Developing apps for desktop, mobile devices, the web and even mods for your favourite game is a very exciting (yet sometimes daunting) experience. The biggest upside from developing anything, with the coding aspect in particular, is that you\u2019ll learn a new skill that is very useful in today\u2019s work field. Many programmers are self-taught and you could be too!\nOver the course of 3 guides, we\u2019ll be going through some general knowledge, getting your tools ready and setting the first steps in coding something.\nBefore we start\nYou will see me talking about coding and programming in this guide. I use the terms interchangeably although they both mean very different things (look \u2018em up). When I use them I usually mean:\n\nCoding: writing bits of code to make the computer do what you want. With trial and error, using other people\u2019s code and re-using code you will get the computer to do what you want.\nProgramming: thinking of what and how you want to tell the computer what it needs to do. This is something you can do without a computer, because you should already know what the computer needs to know. It\u2019s about structuring code and (for me) mostly about solving problems. When you\u2019ve finished thinking, you make a plan and start coding.\n\nIn this guide (and maybe some after that) I\u2019ll be taking you through the things a want-to-be developer needs to know. I\u2019ll also be trying to introduce you to a way of thinking for (some) programmers.\nIf you\u2019re looking for a straight-up \u201cI want to make a weapon for the game X\u201d, then this is not the guide for you (though I may make more specific guides at a later point). No, this guide takes you through the steps that may help you solve your own problems and hopefully become self-learning from other people's\u2019 code, problems and mistakes.\n\n\n\n\nRequirements\n\nA computer\nAn internet browser\nAn internet connection\n\n\n\nLearning goals\n\nA basic understanding of what a developer can do to solve problems\nhow to form a search query for a search engine\n\n\n\n\n\nLet\u2019s dive in!\nPeople in software development (and IT in general) seem to have a great knowledge of anything to do with their computer, programming languages and other IT-related aspects. The main task of these people is to solve problems and they seem to do a pretty good job at it. Probably the biggest benefit any developer has though is that 80% (this is a made up statistic) of the time they have the biggest resource of information at their fingertips: The Internet.\nGoogle is something you\u2019ll want to get familiar with, because it will help you a lot when taking your first steps. Simply typing a well structured search-query and pressing enter can save a lot of time having to go back and forth trying to figure out why something isn\u2019t working. Thousands of other people have run into the same problems you are going to run into and asked for help on websites such as www.StackOverflow.com (for software development), the FiveM Forums (for GTA V modding) and last but not least the Garry\u2019s Mod Lua Developer Discussion on Facepunch.\nThinking of a good query can be quite a task though! For example when you get the error: \u201cmyscript.lua:23: attempt to index a nil value (global 'surface')\u201d, what are you going to search? The whole error? Just \u201cattempt to index nil value\u201d? Close, but you\u2019re forgetting one thing: what are you working with?\nGenerally a search query will consist of the following parts:\n[su_label type="success"]<Language you are working with>[\/su_label][su_label type="warning"]<Specific implementation you are working with> [\/su_label][su_label type="important"]<part of the error that is not related to your script only>[\/su_label]\nOr:\n[su_label type="success"]<Language you are working with>[\/su_label] [su_label type="warning"]<Specific implementation you are working with> [\/su_label] [su_label type="important"]<description of problem occuring>[\/su_label]\nIn our example error you might type a query into Google like: Lua Garry\u2019s Mod attempt index nil value global surface\nOr: Lua GMod nil value surface\nIn an example where there is no error, but something weird is happening: Lua Garry\u2019s Mod ragdoll spazzing\nIf you read the problem the person posted you can see that it is very similar to your problem, which means you can now go have a look through the answers. Even if there\u2019s something in the answers you don\u2019t understand, you now know how to solve this! Simply think of a new search query and head of investigating again.\n\n"Learning to code (or becoming a programmer) isn\u2019t necessarily about diving into books and studying your ass off. It\u2019s about practice and learning gradually; the more you practice, the more you\u2019ll learn"\n\nWhen searching for information be sure to keep your problem in mind and filter results based on that, whilst also making sure you don\u2019t dive too deep into the documentation or even Wikipedia. Nobody needs to know that processors are essentially made of sand when the question was what variables are... (You\u2019ve gone too deep into Wikipedia, come back and finish what you came here for!)\nSearching can help you get a lot done with minimal effort, though sometimes a problem can be more specific to your implementation. This means you will have to go and \u201cdebug\u201d the code. Debugging is the process of removing problems from your code (called bugs) either by using special tools, or manually by checking parts of the code.\nIn most modding environments there is a lack of debugging tools, which mean you will have to manually make adjustments by trial and error to figure out problems. Luckily a console or even chat is usually available in games to which you can print information for yourself, to check if everything is working as expected.\nAn example with psuedo-code (non-functional):\nfunction whenSomethingEnters(entity)\n if(entity:IsPlayer())then\n local playerName = entity:Name()\n entity:MoveToShopLocation()\n end\n print(\u201cWelcome to my shop, \u201c + playerName)\nend\nThe problem that occurs is that the value of \u2018playerName\u2019 is not shown in-game. Maybe an error even occurs. You\u2019re almost certain it should work, I mean otherwise you wouldn\u2019t have written this bit of code. So to check whether everything works as you expect it, you insert some debugging code:\nfunction whenSomethingEnters(entity)\n print(entity) -- is entity what I expect it to be?\n if(entity:IsPlayer())then\n local playerName = entity:Name()\n print(entity:Name()) -- Is what I am putting into playerName what I expect it to be?\n entity:MoveToShopLocation()\n end\n print(playerName) -- Is playerName still what I expect it to be?\n print(\u201cWelcome to my shop, \u201c + playerName)\nend\nAfter writing this bit of debug information to yourself, you will find that after the second print, playerName is no longer working! With some digging in the documentation, searching online or even just good old \u2018trial and error\u2019 you find that the \u2018local\u2019-keyword in front of playerName is causing the variable to only exist within the `scope` of the if-statement.\nIf any of these terms (like variables, local, scope, if-statement) are unclear to you, I hope you took to Google and went to search for basic information on them ;)\n\nSo to finish this part up, you\u2019ll come to find yourself Googling a lot, learning new things and becoming a cumulatively better coder along the way. Don\u2019t be daunted by a lot of problems occurring, each of them are but a problem that needs to be solved and the reward of looking over a finished product that YOU made is very fulfilling.\nPro tip: Errors tend to snowball into more errors so always start by fixing the first error that occurs, because that will usually solve other problems as well.