Learning Programming
Hey Guys
As my knowledge in this field is yet a bit limited, thought I would pose this question to some more knowledgeable people.
If I were to embark on learning a language with the goal to code games, specifically 2d platformers/side scrollers, what language would you guys recommend I start out with?
Appreciate any feed back, thanks :D!
As my knowledge in this field is yet a bit limited, thought I would pose this question to some more knowledgeable people.
If I were to embark on learning a language with the goal to code games, specifically 2d platformers/side scrollers, what language would you guys recommend I start out with?
Appreciate any feed back, thanks :D!
Comments
I found a book by Joyce Farrell which is really cool and she explains C# in a way that is easy for beginners to understand.
If you want to make 2d platformers also look at game maker, which many of the guys on this forum love. But that won't really teach you a programming language, which you said you are interrested in doing.
If any of the more seasoned programmers on this forum has any better advise, I too would appreciate some insight into what language you guys are using, and why.
Gamemaker does have its own coding language, GML, which is basic, but quite powerful. While learning GML may not be useful in of itself, as @FanieG perhaps believes :) , it can teach you several programming concepts that you can apply to new coding languages if you move on to them.
It's a bit of bastard language, GML is, so many coding languages you move onto may feel similar to it. :)
Essentially: if you just want to make games, use Gamemaker. If you want a gentle start to coding, also use Gamemaker. Otherwise, just learn a coding language that interests you - C# and C++ are the most prolific, I believe.
There's a few people on this forum who use Gamemaker, so if you decide to go with it, don't hesitate to post/ask questions :).
@Adonias - C++ is a very powerful language (as LittleBear suggested), but you should note that it does not have a garbage collector like C# so it could prove a bit trickier for a beginners like me and you.
@Adonais: The important question is what do you want to learn how to do? If you want to learn how to make a platforming game work, then start with Game Maker. All GM will give you is stable collision and rendering - it won't give you any platforming logic, that'll be your job. And if you decide to use something else that doesn't have systems pre-built for you to use, you'll still have to write the platforming logic bits yourself but AFTER you've written your own rendering and collision detection (and probably input handling and asset importing too).
There are loads of systems out there to make games in, I always suggest downloading a fair chunk of them and doing 1 week's worth of tutorials in each, then at the end of 2 months you'll know which you like working with the best. (It'll be the one that you've already started producing a game with) Try out Game Maker, Scirra Construct, Flixel, Unity, uh... Other ideas peeps?
I heard c++ and c# can be very intimidating for people starting out so I am a bit weary of those.
Thanks for the advice on game maker, I will definitely give it a look, but my goal is to ultimately learn something solid and go on to work on more complex projects as I improve.
All advice is appreciated :D
My Slightly Longer Answer: If you have no programming experience I'd probably recommend Game Maker (or Construct 2 perhaps, I don't have experience in either TBH), if your goal is to get good at designing games.
If you have some programming experience, or think you might enjoy the act of programming, I'd recommend C# and Unity. We're using it to make Broforce and haven't encountered any limitations (that aren't shared by all the alternatives, or are worse in the alternatives).
I might also suggest FlashPunk, which uses ActionScript3 which is very close to C#. I don't have experience with it, but if it existed 6 years back I definitely would have recommend it to me. A lot of folks who do game jams use it, so I gather it gives very quick results. http://www.newgrounds.com/collection/flashpunk
My Long Answer: Choosing the right language isn't all that important when learning to make games. I'd say that choosing a development environment a more important question to start with.
When I learnt to make games I went from ActionScript2 -> ActionScript3 -> C++ -> Javascript -> C# And it was always trivially easy transferring the skills from one language to another.
The real time investment was learning the new tool set. Learning all the features of Flash and Unity took quite a bit longer than transitioning from ActionScript to C# (which are in fact very similar).
But the biggest meaningful investment was the thing I was learning all the time, which was how to make fun things happen, which can be done in any development environment (GameMaker, C++ and SDL, Unity, pen and paper, even a couple people and just their bodies).
Well, that's not true, I wasn't learning to make fun things happen when I was battling with the tools, which I did a lot of when I was programming in C++ and using SDL. I agree with @FanieG here, having to do one's own Garbage Collection and managing memory is pants. I'd say that C++ is like developing games on hard mode (which is great if you enjoy a programming challenge, just not if your goal is to make games).
And I'd second @Dislekcia 's suggestion. Most of these tools are free, or have free versions. Get a couple of them and see how they feel. Try some tutorials, they should ALL have a design a 2D platformer tutorial that should take an hour or less. See how quickly you get results and how easy it is to tinker and change values.
I'd certainly say that, when you're starting out, the speed at which the toolset allows you to produce something playable is a crucial factor. Things need to be playable before you can start to really learn the game logic side of things, and until you understand the game logic you are going to struggle picking up language, because you won't know what you're trying to achieve with the language. (If that makes sense? I guess I'm saying that understanding is gained faster when you can see the results of your actions)
And the other important thing is to look at the size of the community that is there to help you if you get stuck, and what the developer of the tools is doing to make the help accessible. I know Unity (and C#) has some of the best help, if not the best help. It should be fairly easy to find out about the alternatives.
[Edit] I'm not really a programmer (I only program to make games), I'd like to comment on Python, but I'm not really equipped. My limited understanding is that Python does some things really really well, but will make itself a huge pain when your games get more complex. Though I'd like for someone to give me a little more information about this as well.
However, there are a few other considerations as well. The free IDE's available are not that great (I used PytonWin, as well as Eclipse). The one that comes with the distribution (Idle) is horrible. WingIDE is really awesome, but not free.
Also, you need to look at what game system(s) [engines / libraries] you want to use, and their pros and cons. For example, on what platforms can you deploy? Can you package it neatly? (It's sometimes a bit of a pain making a simple executable. (The only Python-capable game engine that I have experience with is Blender. Six years ago it was a very frustrating thing to use.)
----
C# is indeed slightly more intimidating than Python. (C# used to feel like Java, but nowadays it has a very Pythonish flavour to it). Visual Studio Express is quite a decent IDE. Again, you will need to look at the game engines / libraries you intend to use.
----
C++ is the godfather of programming languages: it will look you straight in the eye and shoot you in the stomach. Not a great language for beginners. (It's of course a very powerful language, and one that can be enjoyable to use once you are through the initiation phase.)
----
Having said all this; I still think Dislekcia's advice is the best: check out the high-level tools, and then learn the language suitable for that tool (as long it's not C++ :P). Language is really an incidental part of programming. In real life it's always a business decision and for game programming is always dictated by the tools you use (which are chosen for their price, features, and support).
If you only concern is making games in some form, then game maker/unity is great. If you also want to learn a programming language that is going to remain useful to you there is nothing better you can do than learning javascript. (You'll need to find some kind of game frame work to go with it), but there are incredible resources out there for learning javascript from bare bones basics, you can run it in any browser (that means setting up a development environment is very easy) and it is one of the three pillars that powers the internet. (also, javascript can be used in unity ;) )
If you want help, don't write things yourself!
It is much, much easier to solve issues in games with shared systems under the hood. It becomes a matter of "How do I get Unity to do this thing I want it to do for whatever reason?" and people with loads of experience in that system can really get to grips with the thing you're trying to do and offer great advice or ask piercing questions without having to spend a ton of their time.
But if you're really writing everything from scratch in C++, then people aren't going to be able to diagnose your problem in a couple of minutes of staring at a forum post. Even if they're C++ experts (hi there), they'd need to spend ages looking at your raw code first before they could start offering any sort of advice at all. Plus, their advice and questions are going to mostly be about the structure of what it is you've already built and why you did technique X this way instead of this-other-faster-better-way.
So your average 2 minutes of forum time turn from something useful into not enough time to help, sorry.
Sure, an all encompassing FAQ is great.
On the other hand it could be nice to answer questions on their own merit, giving the person direct help and advice and not a cookie cutter one-answer-fits-all.
So my advice would be to make sure whatever language you choose you still are learning the fundamental concepts of programming.
Because I'd quite happily give this advice to any such person. And it'd save us all some time every time this comes up (and it is a "Frequently Asked Question") and help avoid conflicts in the future (because we wouldn't need to debate it with people who disagree with this advice) if it was in a FAQ.
And obviously people who aren't asking "I want to learn to be a programmer of independent games, where should I start?" should be able to get different advice for their questions. ^ this
Exactly :)
https://diy.org/skills/gamedev