ID:996084
 
(See the best response by Genesismagician.)
I really want to know how most people learned to program on this. I'm asking this basically to see what results I get and to choose how to learn it. I know there is a complete tutorial on it in the forums, but I think it is possible people learned from different ways, or sources.

I really want to learn programming, so I can get started on making games. Please reply with how you learned programming.
Best response
I learned from a source, so I can tell you from experience... Don't do it that way. Read the tutorials and learn it the right way. If you try to learn from a source, you'll eventually have to relearn everything anyways... Just do it right the first time...
I learned from learning C# in college.
I was thinking about doing that, but I wanted to see what everyone said first.
The best way to learn coding is, like Genesis said and read tutorials. Once you have some basics down like "Hello World," proper understanding of Input/Output, a grasping of Object Oriented Programming you would be able to further your understanding by creating applications for different situations. I first started learning DM when I decided to create a GUI check list that involved MouseDown() in order to change the icon state of the check mark box.

Once you have the knowledge to start a program, you will increase your knowledge far more than listening to a lecture or reading a tutorial. Your brain works harder and processes information better when you're solving a problem than when you're reading someone's notes. That being said, start with tutorials, then make applications.
I read the DM Guide and various libraries/articles.
I learned from a Zeta source. :O

By learned from a Zeta source, I of course refer to having knowledge of how horrible those sources are and not trying to emulate the codes presented and instead working to improve those codes until satisfied. Needless to say, that takes awhile and isn't the best or easiest way to go about it. However, I did gain a bunch of experiance in finding sh-t wrong in code snippits.

Before that, I took half a year of computer progamming using Java. It was worthless, only thing I learned was how to make a calculator and a calender. I learned more off on my own in a week than I did in those months.
I read the DM guide twice, studied various sources and libraries, and read a tutorial or two. I can honestly say I only made it harder for myself, and made it even more time consuming to learn too.

If I had to go back and do it all over again, I would read the first tutorial I ever read, maybe a couple more, skim over the DM reference for anything I came across that I could need but didn't understand, and just program like that. I'd start with simple things, like a chat system, and go on and on; reading tutorials or the reference wherever need be.

Libraries are good with big stuff you're having trouble working out, but mostly just to get a vague idea of how things could be done. Developer help is good there too. Then you find your own way. Maybe its similar, maybe its worse, maybe its even better, but you gotta find your own way. You've got to program everything yourself, or you won't remember it all well enough.

That's why I had to read the DM guide twice, and it was so boring to read that much that it barely stuck with me anyway. I just liked the little quotes at various parts, that's all.

Edit: http://www.byond.com/forum/?post=36143 That is the first tutorial I ever read. If you want more tutorials, you can find the best ones in the BYOND Resource Repository located here: http://www.byond.com/developer/articles/resources

I highly recommend the ones by Forum_Account, but a lot of people seem to go with the ones by Falacy.
<.< Technicalities. I meant that's what my current self would tell my old self to do. That the way I described is how I should of done it, and how I'd want to if I had to do it all again.
I don't think you should learn from the tutorials right away. The current ones out there now are only good after you have learned all the basics. The problem with them is that they don't really teach you how to program. They teach you how to follow directions and make games, but none of them really tell you the core concepts. The DM Guide is supposed to be there to tell you those things, but I don't think it does a good job at it. It starts out as a nice introduction to the language, but then it just becomes too wordy, too drawn out, and not concise enough. Furthermore, it's full of all these pointless poetic phrases that just distract you from what the guide is trying to explain.

To put it another way, the DM Guide doesn't just get right to the point and tell you how to program. Despite all that, it is however, a good resource, but for these reasons, I would recommend NOT reading the whole guide all at once. Instead, you should dissect the chapters in the guide, and learn them in a more incremental order, step by step, while also referring to the corresponding parts of the reference.

This is an outline of the path that I have been trying to take in learning the DM language. This list might not be 100% complete, and may or may not work for you, but through experience, this is the best way I have found to learning DM. I would recommend trying this path to see if it works for you. All along the way, you should refer back to the corresponding sections in the DM Guide and the DM Reference for each step. Also, remember that you can ask here on the forums if there's something you can't find the answer to anywhere. Here is the outline:

1. Learn how to make simple chat programs.

2. Learn how to return things and cause them to loop output in different ways.

3. Learn how to use operators to change and transform the values of vars.

4. Learn how to make conditional statements using the different conditional procs, such as if().

5. Learn how to make event triggers and chains using what you have learned so far, and incorporate unique procs to perform specific actions.

6. Learn how to make, destroy, maintain, and transform lists and their contents using the list procs, while outputting or making use of the list data in other procs.

7. Follow tutorials to make simple games with your new level of understanding, and review anything that you don't remember.

8. Download and examine libraries other programmers have made. Tweak them a bit and see if you can figure out how they work.

9. Come up with ideas, and start making small games on your own. Use what you have learned to try and make them as complete and polished as possible.

10. Read through more advanced lessons, and learn how to write better, more efficient, and well organized code.

11. Start brainstorming and planning for a big project. Make checklists and flowcharts to visualize how you plan to implement core systems.

12. Begin a big project and become a DM programmer!

I hope this list will help some of you who are feeling lost, and don't know where to start. The important thing here is that when you are just starting out, DON'T start by trying to make simple games. I know that it's tempting and there are a lot of tutorials around that will encourage it, but in my opinion, I don't think that's a good start. Games are complex programs, and before you try making complex programs, you need to start with simple ones, that do only a few things. As you learn more, you will be able to make more and more complex programs, until you are ready for actual games. So, when you get to that point, following the tutorials will come naturally to you, and you will understand what is happening, instead of just following directions.

I am not any kind of advanced programmer or DM guru, but from my experience so far, I believe this is a good path to take, for those new to programming.
In 2002, I learned like this:

- I read the DM Guide. I didn't bother to try to absorb it all. I just read through it and focused on the key things like syntax, how procs worked, the type system and the general working of the language. I'm not saying to skip chapters or skim, but don't sweat the details too much; just keep reading. Some things are a little dated, but DM is still DM. Read it. It has 19 short chapters. You'll be lucky to ever see another programming book so short.

- I downloaded Deadron.StepBYOND and Dantom.YourFirstWorld --- I still recommend both of them. Read through the sources. Make copies (preserve the originals) and customize the games to do your own bidding. Tinker. They're not flashy games, but beginners should hardly focus on doing advanced things.

- If you read through the two sources listed above, a common theme is to reference the DM Reference. This is the most important tool in learning DM. Press F1 in Dream Maker. With the exception of a few advanced, hidden interfaces, this is a comprehensive guide to all of the vars and procs and various other shenanigans in the DM language. Whenever I write in DM, I still reference this.

- Be inspired. Think of something cool you'd like to do in BYOND and do it. It's as simple as opening Dream Maker and going to File->New Environment. If there's a demo for it already, download the demo and read the source. In 2002, when I first started, I was really inspired by Spuzzum's Meter Snippet and I invested some time learning exactly how it works and made several projects based on it to create and display all kinds of nifty meters. These aren't necessarily the kinds of projects you release---learn from them! They also might serve as useful references later.

- Comment! I never liked writing comments when I started out, because it was a little more time consuming and sometimes I'd get in a "zone" and type away code that seemed to just fit. But when you comment, you teach about the code you're writing. You even teach yourself, both while you write it and when you look at it much later down the road.

- Solve problems. Like the Meter Snippet demo, I was inspired by many things on BYOND. In 2004 I stumbled upon Gughunter's Sidewalk Santas, which inspired me to conquer the problem of getting cars to drive around two-lane streets automatically, which led to me writing Two-Lane Cars. It wasn't the most efficient system, but the important point for me was that I solved the problem I set out to solve, and it worked. So set challenging programming problems for yourself, and solve them.

- As an extension of the last point, "Solve problems," read the forums! I used to frequent "Developer How-To" and "Code Problems" before they were merged into "Developer Help." Plenty of people post their code snippets on the forums. I had a special DM project dedicated to this purpose---if their snippet could be tested as a standalone (i.e. didn't require the rest of the project), I would transcribe it into my own "test" DM project. Then I'd figure out what was wrong with it and debug it until I got it to work. Sometimes I would post my solution to the forums, sometimes I would not. Many times, in the time it took me to solve the problem, someone else would do so much more quickly. But I always learned something, and over time and repetition I developed my ability to quickly spot code problems by simply looking at the snippet overall.

- Learn another programming language! By learning other languages, I've learned a lot more about programming in general. Before I began using object-oriented languages such as C++ extensively, I never saw the value in user-defined datums in DM. I've learned programming paradigms in C, C++, Python, and so on that have completely changed the way I write code today. The more programming concepts you expose yourself to, the better a programmer you'll be overall.

Create. Make all kinds of projects. Make a full-featured chat program. (I have.) Make a short game---something fun like IainPeregrine's Plunder Gnome. Make something a little more involved like DDT's Last Robot Standing. Make the game that you dream of making. The point is, the more code you create yourself, the better you'll get at it.

(- Be persistent.)

- Try to solve all your own problems if you can, and ask for help if you can't. Ask on the forums, or join whichever chat program is popular at the time and ask around on there. I used to hang out on the chat programs all the time and discuss all kinds of programming ideas and concepts with other like-minded poeple. People will be more inclined to help if you're regularly chatting with them, as opposed to if your interaction is "_____ logs in. ; _____: How do I fix this? ; _____ logs out."

- Good luck!