0
101 Oct 09, 2009 at 02:15

Hello, I’m very interested in Coding. What easy language can I learn that can help me learn the general overview of how coding works?

Thanks for the Help!

• Subzidion.

#### 34 Replies

0
101 Oct 09, 2009 at 02:38

Python or C#. Pick your poison. Both are present in the game dev industry, but more accessible than C++. Plenty of resources, tutorials, IDEs, etc.

If you want to be a general dev, I’d suggest C#. But, if you want to actually become a game dev, you’ll have to pick up one of those two, then C++, and circle back to the third over your next years. Then, fit in C, then assembly, time permitting (which it never does!).

0
140 Oct 09, 2009 at 03:00

I used to recommend python, but I just downloaded c# express with XNA and I think it’s a great way to get going with game development. You can do both 2d and 3d games with it. There are quite a few tutorials around. A large number of computers already have .net installed, and you can compile your game for the xbox and put it on Microsoft’s network even possibly selling it if you make something worthy.

I think the only downside is that it’s all Microsoft, so not really cross platform.

then assembly, time permitting (which it never does!).

Is anyone still using assembly?

0
101 Oct 09, 2009 at 04:19

@Subzidion

Hello, I’m very interested in Coding. What easy language can I learn that can help me learn the general overview of how coding works?

Thanks for the Help!

• Subzidion.

I guess it depends on how seriously you want to get into it. If you want to be a professional programmer I think C is a good place to start. It’s not as hard as C++ but by learning it forces you to learn a bit more about the underlying architecture of computers in general. Also everything you learn in C you can apply to C++ when you want to get more advanced. C is really a subset of C++. In fact C++ was built on existing C and the first C++ compilers were C pre-processors.

This question gets asked a lot and as you can see there are (at least) two schools of thought.

0
101 Oct 09, 2009 at 04:21

@fireside

Is anyone still using assembly?

It still comes in handy from time to time for optimizing small pieces of code. I seriously doubt you will find people writing whole applications in it.

0
101 Oct 09, 2009 at 04:25

@fireside

Is anyone still using assembly?

Its good to be able to read (or write) assembly for shader optimization.

0
140 Oct 09, 2009 at 05:32

If you want to be a professional programmer I think C is a good place to start.

Well, I think there are a large number of professional programmers that don’t know c, or at least aren’t using it on their jobs. Even if you add professional “game” programmer it wouldn’t totally apply since there are a lot of professional programmers writing AS3/Flash games right now. I think it depends on the college on how you get started. I know the programming college near where I live starts python as the beginning language. Since this is a game site, he was probably referring to game programming so c or c++ is going to be necessary eventually. It might be just as good to start with c. I don’t know really. If it’s someone young and impatient to start writing games, I think c# would be better to start. The one thing I’ve noticed about people who start with c is they never use much other than that except c++, which may be good or bad, depending. Notice the question though. “What easy language can I learn…” I think c doesn’t really qualify.
Just for myself though, I have to say I got started on easier languages and I still hate c++ and I wouldn’t even consider using c. But I know this other guy that used to use c++ all the time and then started using python and he can’t stand c++ anymore either. I think it’s a personality thing.

0
118 Oct 09, 2009 at 07:48

Assembly is good to know just to understand what, deep down, the computer is doing. Even if you rarely, if ever, actually write any assembly.

Knowing some dialect of c-ish is pretty much essential (c, c++, c#, obj-c, activescript, java, ecmascript.. heck - php, angelscript, quakec..). Knowing the base c syntax lets you relatively easily to hop between the languages.

Knowing one language very well is also useful, and c is one that “can” be understood. c# probably lets you play with fun things faster, though. Doesn’t mean you don’t need to learn the “difficult” stuff eventually, if you’re serious about it.

0
105 Oct 09, 2009 at 11:01

I stopped writing in assembly in 1994 and i never felt the need to use it again
i agree with the one who said that this gives you deepest understanding but i would never program again in assembler

0
101 Oct 09, 2009 at 11:29

@fireside

Is anyone still using assembly?

Yes. But, I meant eventually getting to it, not starting with it.

As for C, it’s pretty much like assembly. It’s a good, low-level way to see how code works, but this is really for the “master crafstman” coder. You should otherwise start with a language that has an approachable syntax and a big community.

I’m really starting to think C# is the best general-use language going right now for all the reasons fireside stated. Python is likewise great for very similar reasons, but for game devs it’s limited circulation is the only hit relative to c#.

0
101 Oct 09, 2009 at 13:00

I would recommend against heavy OOP languages like Java and C# as a first language. I think it’s absurd that your first program (Hello, World) should involve a static class, a static method, and object method calls.

I have noticed that people that do start with these languages have a very odd perception of what an object is, and I think it’s because of the way they are introduced to them. In C/C++ an object is something you use to chunk together related information and that’s how it is introduced, whereas in C# or Java it would seem that a class is just something that you have to wrap around your program to get it to work :P

I would recommend Python or C. C may be low level, but it is simple.

0
101 Oct 09, 2009 at 13:03

@fireside

Well, I think there are a large number of professional programmers that don’t know c, or at least aren’t using it on their jobs.

That may be. On the other hand most people with a CS degree probably have been taught to program in old style compiled languages at some point. If you want to be an all around programmer it should be in your skill set.

Here’s where I’m coming from. I worked in as a programmer at a large semi-conductor manufacture for years writing CAD tools. These tools had to be compiled as they were CPU intensive. Some jobs ran for days. We used to hire a lot PhDs mostly for their math and science skills as opposed to their programming skills. On numerous occasions I was called in to help debug code that had memory errors and leaks. These were mostly due to the fact that some of these guys really never really got much experience dealing with memory management. A lot of them had started in Java only had a cursory understanding of C or C++ because they had simply learned it to pass a class. It’s a lot harder to find a memory issue later then to code correctly up front. It often took me days to find bugs in programs that were hundreds of thousands so lines long. Most of this effort could have been avoided if the coder had been reasonably careful in the first place. In addition I’m sure there are plenty of jobs where you can’t just call in the memory debugger guy to fix your problems.

I don’t really want to get in a huge argument over it. I just want to throw my view out there with the rest. If the OP decides C#, Python or Java is the way it isn’t going to bother me. Every person and situation is different. I’m just speaking generally from my point of view.

0
104 Oct 09, 2009 at 13:14

I code using c, I use c++ files but thats mostly because i like the small syntax improvements it gives you, not really for all the classes and oo support. But if I really had to I could use a c++ interface, id just have to ponder over it a little longer before I got started. I do code for code reuse and extendability, Im of the opinion you dont need it all handcrafted for you in c++ to get those 2 qualities.

Things get tricky when im allocating large amounts of memory (for doing things like radiosity rendering, spew…), but wouldnt it be equally difficult in any language? Waiting for allocation times is the biggest problem, and in straight c it would be the quickest wouldnt it?

0
101 Oct 09, 2009 at 13:45

First, I’ll say that I don’t think that devs, and more specifically game devs, shouldn’t learn C, I just think people shouldn’t learn C first these days.
@poita

I think it’s absurd that your first program (Hello, World) should involve a static class, a static method, and object method calls.

But, you have no problem with includes, function calls, etc? Isn’t that overly selective?

I’m sorry, but that’s a silly way to argue for a low-level language over C#/Python. The typical “Hello World” example is usually a couple of lines in any language. However, it doesn’t serve to illustrate the overall TCO, if you will, of learning a whole language, its available concepts and techniques.

Simplest workable “Hello, World” in Python:

#!/usr/bin/python
print "Hello World!";


In C#:

using System;
public class Hello
{
public static void Main()
{
System.Console.WriteLine("Hello, World!");
}
}


in C++:

#include <iostream.h>

int main()
{
cout<<"Hello World"<<endl;
return 0;
}


in C:

#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}


Looks like Python wins in terms of simplicity!

In any language, much like in C, you’d slowly introduce structures, functions/methods and more complex ideas like algorithms and best-practices on structuring code. In the long-run, there’s some stuff in higher languages you don’t worry about that you still have to teach in C. Thus, you get more productive faster with C# or Python.
@SyntaxError

These were mostly due to the fact that some of these guys really never really got much experience dealing with memory management. A lot of them had started in Java only had a cursory understanding of C or C++

OTOH, you hire the C student who can’t conceptualize the larger picture because they spent too much time learning how to get their pointer pointing on point and their buffers to not overrun. :D Lots of them learn how to “architect” code after they have left school and give you spagetti code to deal with, like a cat leaving you a dead bird as a pleased gift.

So, while I understand (and totally empathize with) your frustrations, that still doesn’t point(er?) to learning C first. What you have in your scenario is a dev trained in a high-level language suddenly being put in front of a language that doesn’t do certain things automatically that they are expecting, thus they do it themselves wrong the first time around. The problem is not that they don’t know C, but that your hirng process was f’ed up. :blush:

0
140 Oct 09, 2009 at 13:48

I have noticed that people that do start with these languages have a very odd perception of what an object is, and I think it’s because of the way they are introduced to them. In C/C++ an object is something you use to chunk together related information and that’s how it is introduced, whereas in C# or Java it would seem that a class is just something that you have to wrap around your program to get it to work

I would disagree with that one. An object really can be anything, and I think forcing someone to think in terms of objects can do a lot to structure a program. I started with python, I think, but I never really got into object oriented programming until I tried java and then it was because I was forced to think that way. There weren’t any alternatives. I still think it’s the very best way to structure software. I went from sprawling ugly code to nice looking code that was easy to add and change just because I switched to a full OO language. I think it should go the other way so you use that messy stuff as little as possible, or better yet, never. There’s also nothing wrong with a static method. It’s one more way of identifying and separating code.

0
101 Oct 09, 2009 at 14:22

alphadog, you might want to read what I said. I was arguing in favour of Python (and C).

But, you have no problem with includes, function calls, etc? Isn’t that overly selective?

I don’t think so.

I think it’s much easier for someone that’s completely new to programming to appreciate the purpose of an include and function call, than it is to understand what a “public class” is, or what “public static void” means.

That being said, ideally you wouldn’t need to create a function and include a header file for Hello Word in C/C++, but I think it’s still asking much less than C#/Java do. Again, as you said, Python is definitely the simplest here.

In any language, much like in C, you’d slowly introduce structures, functions/methods and more complex ideas like algorithms. In the long-run, there’s some stuff in higher languages you don’t worry about that you still have to teach in C. Thus, you get more productive faster with C# or Python.

Well this is exactly what I’m getting at. You should slowly introduces structures, methods, and access rights into programs, but C# asks you to use them in Hello World!

Of course, you don’t have to understand them then, but I don’t think it does any good to be forced to write things that you don’t understand as it takes the focus away from trying to learn simple concepts such as what a variable is.

Also, I would argue that the purpose of a first language is to learn fundamental programming concepts, not to get “productive”. I think that’s an orthogonal issue when considering what language to learn first.

I would disagree with that one. An object really can be anything, and I think forcing someone to think in terms of objects can do a lot to structure a program. I started with python, I think, but I never really got into object oriented programming until I tried java and then it was because I was forced to think that way. There weren’t any alternatives. I still think it’s the very best way to structure software. I went from sprawling ugly code to nice looking code that was easy to add and change just because I switched to a full OO language. I think it should go the other way so you use that messy stuff as little as possible, or better yet, never.

I don’t disagree that thinking in objects helps, but I think that they are something that should be introduced after you’ve learned what variables, control structures, and regular function calls are. To me, starting by teaching objects is like trying to teach linear algebra to people that haven’t yet mastered basic arithmetic. I think a lot of programmers forget when suggesting starting languages that non-programmers don’t know what a variable is. Objects are actually very high level concepts.

0
118 Oct 09, 2009 at 15:18

@poita

I have noticed that people that do start with these languages have a very odd perception of what an object is, and I think it’s because of the way they are introduced to them.

If OOP is all you want to get into, I prefer inform6. In what other language can you create the object ‘chair’ of the class ‘furniture’, and then sit on it? :lol:

0
101 Oct 09, 2009 at 16:34

In the long-run, there’s some stuff in higher languages you don’t worry about that you still have to teach in C.

I would change this statement slightly. I would say in the long-run there’s some stuff in higher languages you don’t worry about that you still have to teach in C………until you again have to worry about it in those higher languages!

C# and Java mask a lot of stuff. You may be more productive up front but then when your program gets more complex you may find you don’t understand what’s really happening underneath and this leads to unexpected behavior and or performance problems. Even if you program in those “higher languages” having a foundation in C and C++ is going to help you immensely, when you start doing large scale applications.

OTOH, you hire the C student who can’t conceptualize the larger picture because they spent too much time learning how to get their pointer pointing on point and their buffers to not overrun. :) Lots of them learn how to “architect” code after they have left school and give you spagetti code to deal with, like a cat leaving you a dead bird as a pleased gift.

However I have never noticed a specific correlation to bad coding and language. In my experience bad coders code poorly in any language and good coders code well in any language.

The problem is not that they don’t know C, but that your hirng process was f’ed up. :blush:

That may be, however it’s not easy finding a top notch physics PhD that is also a top notch programmer. Of course you can hire two separate people but then you are paying two people. Everything is a compromise.

On the other hand on several occasions we hired a few bad C++ programmers that were actual computer science grads. In those cases I would agree that hiring process may have been f’ed up. These guys had evidently impressed the managers with a lot of OO wankery in their resume. Too bad they didn’t also have a better low level foundation. They might have been able to hold their jobs longer.

0
101 Oct 09, 2009 at 17:07

@SyntaxError

You may be more productive up front but then when your program gets more complex you may find you don’t understand what’s really happening underneath and this leads to unexpected behavior and or performance problems.

Totally agreed. C is a very useful for a game developer… eventually. But, deferring those “innards”-type issues to when one has begun to master syntax, algos, best practices and other basic development concepts is a good thing.

I guess, to use a swimming analogy, I think the ideal learning approach is one that lets a student start at the shallow end and work his/her way to the deep end, rather than throing them into the deep, shark and piranha-infested C/assembly end of the language pool. :D

0
101 Oct 09, 2009 at 17:39

Totally agreed. C is a very useful for a game developer… eventually. But, deferring those “innards”-type issues to when one has begun to master syntax, algos, best practices and other basic development concepts is a good thing. I guess, to use a swimming analogy, I think the ideal learning approach is one that lets a student start at the shallow end and work his/her way to the deep end, rather than throing them into the deep, shark and piranha-infested C/assembly end of the language pool. :)

LOL! I typed in a similar (but inverse) analogy but decided not to post it and deleted it. I’ll post it now since you posted your swimming thing.

I learned to scuba dive in Monterey’s cold water so I had a bulky wet suit and heavy weights to deal with. When I went to the Caribbean and Hawaii, it seemed like I was in easy mode. Later I had the opportunity to view a group of divers trained in warm water try to handle diving in Monterey. Let’s just say they weren’t having a good time.

0
140 Oct 09, 2009 at 19:32

I don’t disagree that thinking in objects helps, but I think that they are something that should be introduced after you’ve learned what variables, control structures, and regular function calls are.

You start out writing small programs anyway when you are learning, so many programs can be written with one class. By the time you are ready to branch out, you are usually ready to learn about objects. I guess it would be interesting to hear what someone who had never programmed at all had to say. Personally, I don’t think it would be a problem, though. My own thoughts are that once someone has learned to use functions, they are ready to move onto classes. I think it normally gets delayed too long. I think one thing not done well is designing from base classes. I always hear this animal, horses and monkeys, kind of thing, but that’s not really a practical example. After I picked up on it, I could look back and appreciate the example, but that kind of defeats the purpose.

0
101 Oct 10, 2009 at 03:09

Totally agreed. C is a very useful for a game developer… eventually. But, deferring those “innards”-type issues to when one has begun to master syntax, algos, best practices and other basic development concepts is a good thing. I guess, to use a swimming analogy, I think the ideal learning approach is one that lets a student start at the shallow end and work his/her way to the deep end, rather than throing them into the deep, shark and piranha-infested C/assembly end of the language pool. :)

I don’t think that’s a good analogy. Going from easy to hard (shallow to deep) is not the same as going from high level to low level.

A better analogy would be to compare it to other disciplines with high level and low level concepts. For example, it would more be like learning linear algebra before arithmetic.

I guess it would be interesting to hear what someone who had never programmed at all had to say. Personally, I don’t think it would be a problem, though.

At my university, we are taught Java before anything else. There are many people that come to the uni without knowing any programming so it is their first language.

I can tell you that a lot of people get very confused with objects and classes. The most common misunderstanding is that they don’t realize that member variables “belong” to an object. To them, member variables are global variables that any function can access. After all, that’s what you experience when first programming in Java as you just have this one big class and when you have one big class, member variables essentially are global variables.

They also don’t understand the concept of instantiation because, again, in their first programs they just have one object, and they don’t even explicitly create that object so they don’t appreciate that it has been created, and they can’t see the distinction between an object and a class.

This is not just blind speculation. This is what people go through, and it’s all stuff that I constantly have to help people with. Of course, some people will “get it” quite quickly, but the majority struggle to grasp these high level concepts because they have been introduced through necessity rather than utility.

0
140 Oct 10, 2009 at 03:59

I can tell you that a lot of people get very confused with objects and classes. The most common misunderstanding is that they don’t realize that member variables “belong” to an object. To them, member variables are global variables that any function can access. After all, that’s what you experience when first programming in Java as you just have this one big class and when you have one big class, member variables essentially are global variables.

Well, hard to argue with experience. The one thing for the argument is that the school chose to teach java first, so apparently it is working out for a majority of people or they would probably change it. Although schools can be a little strange about things like that. Like most things, the important thing is to keep at it and ask a lot of questions. As this discussion proves, there really isn’t a right way to do it. If you are really determined you will probably be successful no matter which language you start.

0
165 Oct 10, 2009 at 04:02

FWIW, my alma mater switched from teaching Java first to teaching Python instead during the last couple years. I haven’t heard about how the change has been working out for the students, though.

0
102 Oct 10, 2009 at 09:06

C# I would pick, especially after the introduction of LINQ. The language (platform) is extremely powerful and, yes, present in the game development. Python, well, I’m not a big fan of scripting, but I do use s-lang for my goals. I do acknowledge the power of Python.

0
101 Oct 10, 2009 at 12:10

@poita

A better analogy would be to compare it to other disciplines with high level and low level concepts. For example, it would more be like learning linear algebra before arithmetic.

Of course, I will argue now that you are wrong! :D

There is a direct and strong dependency and ordering between the two mathematics fields.

However, you can learn, use and be very productive with a high-level language without ever knowing any assembler. In computing languages, abstraction is the distinction between high and low, and abstraction is an effort at simplification of computation.
@poita

To them, member variables are global variables that any function can access

Don’t get me started on how horrible most schools are with comp sci. Most of them focus on teaching a language first, concepts later, rather than the other way around.

In those schools, I’m not even sure how fresh students would know what a “global” variable is or if it is more “natural” to think of them that way. One would (should?) have to introduce scoping pretty early anyways.

And, honestly, I’ve taught in university in a couple of depts, and there will always be a sizable number of intro kids that won’t get it no matter which method you employ. Those kids should be discarded when considering the proper structure of a curriculum.

The debate rages on. :(

Even in teaching milieu, you’ll find papers and “teaching languages” by comp sci educators that argue either position.

This could obviously go on forever. Loved to see the differing viewpoints, but I’m out! :surrender

0
101 Oct 17, 2009 at 14:03

How is C#/Java “next generation” language from C++? :P

As far as I know, C# with XNA or Direct X should be pretty full-featured game development platform.

Only if C# was truly platform independent. :(

0
102 Oct 17, 2009 at 19:59

I started my programming life with a TK-83 using BASIC and very soon Assembly Z80. I used to program in ASM for quite some time on Sinclair, TRS-80, Apple, MSX, Amiga and PC, before migrating to C and finally to C++.

Although tecnically speaking C++ is my language of choice, these days I’m using mostly C#, and I can assure you all that it is a very nice language not only for beginners but for seasoned programmers as well… performance is pretty good, and you have all the needed power for almost anything you can think of.

And C# is NOT just a XNA related thing, it can be used for software-rendering, opengl, direct3d, you can wreak the shit off from it.

I still do some C++ coding but only when I want something really independent of any external dependencies, but I am pretty much satisfied with C# for most of the newer projects.

0
101 Oct 20, 2009 at 12:10

@poita

I can tell you that a lot of people get very confused with objects and classes. The most common misunderstanding is that they don’t realize that member variables “belong” to an object. To them, member variables are global variables that any function can access. After all, that’s what you experience when first programming in Java as you just have this one big class and when you have one big class, member variables essentially are global variables. They also don’t understand the concept of instantiation because, again, in their first programs they just have one object, and they don’t even explicitly create that object so they don’t appreciate that it has been created, and they can’t see the distinction between an object and a class.

At my university they taught Java in the first year and very few people had these issues because the course was very object-oriented focused, more so then Java focused. This is partly because of the learning IDE we used called BlueJ.

On the other hand practically no one knew how to produce a stand-alone Java app that ran outside of BlueJ, or even that you could write/compile/run Java code separately from it. My point is you always get people who pick up misconceptions on most university courses.

I’d personally recommend C# because IMHO learning an object-oriented language as your first language helps you to learn better oo design principles and because with XNA you should be able to start knocking stuff up in very little time (which is a great moral boost if your new to programming).

0
101 Oct 20, 2009 at 19:15

@Reedbeta

FWIW, my alma mater switched from teaching Java first to teaching Python instead during the last couple years. I haven’t heard about how the change has been working out for the students, though.

My alma mater switched from using Python, then Java, then C++ to just using C++. I SHUDDER to think of what that is doing to the minds of our new students. I just hope they have had some programming in high-school to prepare them for the difficult chores they will face in college.

0
101 Oct 20, 2009 at 20:20

That may not be all bad.

As long as they are getting a good grip on the thought process, design and critical thinking skills. But, likelier than not, the inability to nail down a curriculum is a sign to deeper issues.

In some ways, I wish they could teach in pseudocode. After that, it’s mostly syntax and semantics anyways. And, at the end of the day, most teachers (incorrectly) rely on executable code as proof of programming mastery, so focus on “thinking” is easily ignored.

0
101 Oct 20, 2009 at 20:30

The problem is that programming needs to be learned at about age 13 if it’s going to be mastered by the end of a 4-year university degree. 4 years is definitely not enough for this profession.

0
101 Dec 18, 2009 at 20:58

There probably isn’t any “Best” starting language really, it comes down to personal choice. The games dev degree course i have recently become a member of starts with a piece of software called ceebot to teach you the basics of how variable/functions ect work then after a couple of month’s we have moved onto C#. Later in the course we will be moving onto C++.

0
104 Dec 19, 2009 at 01:04

Its gotta be basic. did u know basic programs are professional? as long as they work noone cares what made it. basics become a huge thing just as much as c.

0
101 Jan 09, 2010 at 11:22

Hi,
I think C and C++ would be the best language to start as all the basics are covered here and after knowing this you will find other languages easy to learn and understand.I don’t know about python as Still yet I have not gone through that.