# What would you say to someone with no programming experience...



## Uduckhead (Feb 6, 2005)

who wanted to invest some time in programming and creating games on his mac? 

Because that person is me and I'd be grateful for any advice.  ::love::


----------



## Viro (Feb 6, 2005)

Learn to program basic things first. Forget about games for the time being and focus on the basics of programming for now.

Pick a language and *stick* to it. All languages are about equal when you are starting out and you can write most games in any language. C++ is the preferred industry choice mainly because it has a long tradition, and the speed is important for the latest FPS. Most other games can get by with the performance provided by pretty much any language out there.

That said, I recommend you start with Java. It's a simple language, it's a popular language, and it's a language that allows you to do some funky graphics fairly easily. 

The important thing to remember when starting out is, do one thing at a time. There are going to be loads of things you want to try, directions you want to take, etc. Ignore those for now, focus on the basics and don't rush yourself. Take your own time and don't push yourself too hard or you will burn out (NOTE: you must still push yourself, otherwise you will get nowhere ). Take a few months to get familiar with programming and remember that even the best game programmers out there had to start at some point. Lastly, have fun.


----------



## DanTekGeek (Feb 6, 2005)

start with C. You will learn the programming basics, and from there, you can go on to c++, or cocoa/obj-c. I'm in pretty much the same boat as you, exept that I have a tiny bit of java knowladge.


----------



## powermac (Feb 7, 2005)

As a very beginner, and for leisure, I have been learning C++. There are many books out there. Take a trip to your local Barnes & Noble, and look through them yourself before buying one.


----------



## texanpenguin (Feb 7, 2005)

DanTekGeek said:
			
		

> start with C. You will learn the programming basics, and from there, you can go on to c++, or cocoa/obj-c. I'm in pretty much the same boat as you, exept that I have a tiny bit of java knowladge.



Start with C!? Why would a beginner want to learn how to do easy things the hard way?

C++ makes C nice and usable (especially in relation to pointers and expandability).


Personally, I'd recommend you get the thickest C++ book you can find and working your way through the whole thing until you have a perfectly sound knowledge of how it all works. Then go into thinking about games. If you are going to pick up Cocoa, which is advisable for application programmers, but could be overkill for a game programmer, there are plenty of sites to help you; especially oreillydev (or whatever it's called), and Apple's own Developer section.

Good luck!


----------



## DanTekGeek (Feb 7, 2005)

so you think C++ is easier? I really dont know all that much about languages, exept that after lots of askin around, I had settled on C for a staring point. However, if you think C++ is better, I'll go with that.


----------



## Viro (Feb 7, 2005)

C++ isn't easier than C. With C, the biggest problem they'll have to deal with is pointers. In C++, you still have to deal with pointers. In addition to that, you have to differentiate between pointers and references, constant pointers and pointers to constants, namespaces, templates, object oriented programming and the complicated memory management that is involved since C++ uses manual memory management and you have stack and heap objects , the list goes on.

C is a better option for the beginner. Once you've mastered C, you can then try to tackle the complexities of C++. Sure, some would argue against starting with C if you're going to move to C++ claiming that it breeds poor programming practices. This point is really moot, since you can always learn how to do things the correct 'C++' way. After all, your ultimate goal is to learn to program, not to merely learn a particular language.


----------



## Decado (Feb 7, 2005)

ah... i remember when i was 12 and totally ruled at hypercard/hypertalk 
then i got so depressed when they stoped releasing new versions of hypercard that it took me eight years to realize that html wasnt that different. but then it was to late; i was an old man and all the kidz ran around with their Flash and their Java.


----------



## aicul (Feb 11, 2005)

Viro said:
			
		

> Learn to program basic things first. Forget about games for the time being and focus on the basics of programming for now.



I would moderate to this statement. Start with a SIMPLE game (cards?) and get it to work. It will make you visit most aspects of you machine and programming language. 

Programming takes time, skills, pateince and will upset you more then once. Peer support really helps when you are a starter.

The good thing about a game is that it'll interact with you and you will probably need this after many long nights of development work.

Also you can show it to family and friends for input and get some interest and useful feedback. (anyone who has tried showing off their latest CD library management software to a friend knows what I mean).



			
				Viro said:
			
		

> The important thing to remember when starting out is, do one thing at a time. There are going to be loads of things you want to try, directions you want to take, etc. Ignore those for now, focus on the basics and don't rush yourself.


This advice is worth gold.


----------



## brianleahy (Feb 11, 2005)

There's a book or two on this subject, such as:

http://www.amazon.com/exec/obidos/t...104-6606493-7647128?v=glance&s=books&n=507846

I've been considering getting that one.  Any here read it?

I'm going to commit heresy here by saying that I personally prefer Objective-C to C++.  I find the syntax a lot easier to read & understand.


----------



## Lycander (Feb 11, 2005)

http://www.freeprogrammingresources.com/cppbooks.html

There are quite a few (older) books available in web page form that are free. You just view them online. Not much has fundamentally changed in the C/C++ languages over the years so the info in these books are still applicable. If you really need a book to carry around, I suggest going to the local library and see if they have any books. That's how I started, 13 years old and no money, but any parent would be glad that their kid wants to go to the library! lol

Don't spend more than 1-2 months learning the language syntax. I mean stuff like "ok, I have to put a ; at the end of every statement. Oh I learned when the { } brackets must be used" stuff like that shouldn't take long. If you're a fast learner you'll understand the semantics in 1 week or 2.

The large part of your learning time will be spent learning how programs are structured and how they work. In any book/tutorial that's focused on a specific language, you're guarenteed to be making simple command-line (run in Terminal.app) text only programs. When you buy a book specifically on programming in MacOSX (Carbon, Cocoa) then you'll be making fancy GUI programs.


----------



## mbcook (Feb 14, 2005)

OK, I'll throw in my 2 cents. I've used quite a few languages, but here is my opinion.

Learn Python. You can even find books on programming games in Python. Python is easy, clean, close to C/C++ in many ways, and enforces good indentation (a personal pet peeve of mine). It's what I have been doing my recent programming in. I find the language very easy and natural. OS X includes Python 2.3 (not the cutting edge, but 2.4 only came out a short while ago). You install the PyGame library (search google) and you're set to program 2D games. Add PyOpenGL and you can do 3D too (note: 3D is TOUGH to do, in any language). PyGame is a wrapper to a library called SDL that is available on any platform. Python can (later when you want to learn) interface very easily with C and C++. If someone asked me how to show them how to program, I think Python is what I would show them. There are tons of libraries and other things out there for Python. Plus not having to learn about pointers and such would probably be a serious benefit. And it's very easy to make portable code in Python. Other things like not having datatypes can be good (although I miss the controll a little).

Now on to some other languages:

C - Common. Very common. C is a good language, but I don't think that it's as easy as Python. This is the lowest common denomenator. 

C++ - Also common (but not as much as C). Also good, and you don't have to learn C first (but I did).  Again, I don't think it's as easy as Python. Either of this is a very good language. Both this and C are as portable as you want (either very or not at all). As for the comments above about which to learn first, I would say C++ just so you learn Object Oriented Programming. I learned non-OOP first and it took me quite a while to get my head around OOP after messing around in non-OOP land for a few years. A true object-oriented language (C++, Python, Objective-C, Java, and some others) is probably best to learn on (IMHO).

Java - Much MUCH more typing than C/C++, but not bad. Some things (like garbage collection) are nice (Python has that too though!). The standard libraries for Java are AMAZING in their size. Java already has 2D and 3D graphics libraries. Java is very portable (it was designed for that after all). Java is similar to C++ in many ways (and different in others).

Objective-C - This is Apple's favorite language. I haven't used it yet, so I can't comment (although I've heard it described as C++/Java done right). The only comment I can give you is this is mainly a Mac language, and I don't know of any other platforms it has a real foothold on. So if you want portability, you might want to stay away (but portability is not a major concern when you are just learning).

I guess that's my overview. Like I said, I like Python (can you tell?). If you have any questions, I'll be glad to try to answer them. The one thing I can definatly say about C and C++ is that they have TONS of example code on the web (there is Python and Java and such too, but not to the extent of C/C++).

My other suggestion is this last one. This has caught me on numerous occasions, and I've seen it hit others. START SMALL. Don't go learning C (or whatever) thinking you're going to write a RPG like FF VII (or even the SNES FF IV). Make a little puzzle game (tetris, columns, something you like). Make a pong/breakout clone. Move up from there. Want to make a little racing game? Start by making a program that draws a car. Then make the car move around. Then make the player able to move the car. Then add the track. Then other cars. Then... and so on. Don't reach to far or you'll find yourself hitting walls and failing and getting discouraged.

As for reading books, do it. Read LOTS of books. Read a book on your language (like "Learning x"), then another ("Advanced x"), then another ("Game programming in x"), then another ("Cool x tricks") and so on. Read about the library you are using ("OpenGL in x", "Cocoa for x programmers", etc). And I STRONGLY recommend the O'reilly series of books for any, I find they are wonderful.

EDIT:

Hypercard was mentioned. While not perfect for games, many simpler games could be made very easily (Yahtzee, board games, etc.). You got great looking results without a ton of programming. Hypercard is what got me started, and I agree that it's a shame that Apple got rid of it. I REALLY with they'd bring it back.

EDIT 2:

OK, editing my post this much is probably in bad form, but here we go. As for your choice of starter platforms (the Mac), it is a VERY good one. The Mac comes with both X-Code and the full GCC toolchain (both have to be installed off the developer CD, but it's there). It's a WONDERFUL programming environment (assuming OS X of course). Plus you could always buy CodeWarrior if you wanted to. With Windows you have to get a 3rd party compiler (MingGW, GCC through Cygwin) or a free MS command line only compiler (they have one for .NET) or buy one (Visual Studio or Codewarrior). One of the reasons I SWITCHED to the Mac was that it had the GCC and unix environment (which is my favorite environment to code in). There is NO disadvantage to learning on the Mac (in case someone tells you that, although I doubt you'd see that on this forum).


----------



## lnoelstorr (Feb 15, 2005)

OK, nobody seems to have mentioned this (I didn't read the posts but did a search for it), but if you're interested in programming games on the mac then I'd suggest having a look at BlitzMax.  It's a programming language and tool-set designed to be used for games programming.

The language is based on BASIC, but "with a few twists".

Also, it's a multi format language, so if you write a game you can simply (if you've not used any platform specific external libraries) re-compile it for Windows or Linux.

You can download a free 30 day trial version.


----------



## aicul (Feb 16, 2005)

Come to think of it. The "MAC FORMAT" magazine available in Europe is running a series of step by step tutorials on how to program under OSX. I believe tutorial 2 is out these days. However, I haven't used it myself - has anyone?


----------



## ElDiabloConCaca (Feb 16, 2005)

I would highly recommend taking a formal class somewhere.  With books, you'll learn, but a lot of the time you'll just be "going through the motions" and not really learning what everything means.  That makes it hard to write your own programs later...

With a formal class (like one at a University or offered at a tech school), you'll learn exactly what everything does and why you do it.  You'll also pick up good coding form, and the code you write will be easily portable to other projects.

While you may get the same out of a book, I found that I learn the best in a classroom environment where people can interact and ask questions for clarification.  With a book, you're stuck with their explanation and don't have the chance to "dig deeper" or ask questions about the material.

After you pick up the basics and get good form in a class, learning the rest is easy.  You can begin learning C, C++ or Java, and once you've learned the fundamentals about one language, you can easily switch to another language, since the differences are minor and usually just syntactic.


----------



## Uduckhead (Feb 17, 2005)

Wow...thanks for all the help guys, this is amazing. As soon as I have some actual free time I'm going to get cracking on trying to figure this all out. I think for starters I'll check out both Python and C++.


----------



## mbcook (Feb 17, 2005)

I'd also like to throw my hat in the "take a class" ring. By the time I got formal training in college, I already knew much of the basics. That said, with many things I struggled a ton (pointers got me for quite a while in C/C++). If you can get a good programming class I'd suggest you take it. Local community colleges often have them. It may help you quite a bit, or it may not (say the teacher isn't very good or you just don't "click" with them). But to get the basics down a class is a good idea (once you have the basics you can learn more advanced things on your own). Those introductory concepts can be hard for some people and having someone there who knows it (rather than just re-reading it in a book or two many times trying to figure it out) can be good.


----------



## Captain Code (Feb 17, 2005)

I would say start with C++.  In C, even creating a basic string can be confusing if you don't know anything about memory managment and pointers.

C++, there are string objects which do the memory managment for you and there are also lots of built in string manipulation functions.


----------



## astham ogetti (Feb 17, 2005)

Just a comment of pros and cons of languages: People tend to get religious about their favourite lang (and OS for that matter). Don't fall for that. There are things you could do only in Lisp or C or ML or whatever, but NO language is morally superior to other languages (and it's been proven that they almost all are functionally equivalent).


----------



## Viro (Feb 18, 2005)

Captain Code said:
			
		

> I would say start with C++.  In C, even creating a basic string can be confusing if you don't know anything about memory managment and pointers.
> 
> C++, there are string objects which do the memory managment for you and there are also lots of built in string manipulation functions.



Pointers are the only tough thing to master in C. Refer to my post above for other reasons why I don't think C++ is a good starting language. Pointers are the least of your worries when writing C++ code not because they are absent, but because they are dwarfed by other issues.


----------

