Welcome, Guest. Please login or register.
April 23, 2024, 09:28:32 AM

Login with username, password and session length

Search:     Advanced search
we're back, baby
*
Home Help Search Login Register
f13.net  |  f13.net General Forums  |  The Gaming Graveyard  |  Game Design/Development  |  Topic: The best programming language for games? 0 Members and 1 Guest are viewing this topic.
Pages: [1] 2 Go Down Print
Author Topic: The best programming language for games?  (Read 20321 times)
andar
Terracotta Army
Posts: 27


on: May 16, 2006, 08:11:01 PM

I'm not expert at this, so feel free to correct me where I am wrong...
And if this has already been written on, or you know of a better place to ask something like this then let me know.

I'm teaching myself how to program; I've started with C++, but I'm also interested in C#.  I'm still still an amateur, though I think I'm starting to get to the point where I can begin writing programs I wanted to in the first place, such as games.

What is the best programming language to write games with?  Until now, most people have chosen C++, especially for games intended to be released commercially.  C++ has been the most popular for game development for a (long?) time--but is it the only choice for a commercial game?

I'm not saying I'll ever be able to write anything people would actually buy (though it is a goal).
This is an honest question (you can probably tell because I don't sound very knowledgeable about it). 

Why hasn't there been much game development in other languages such as C#?  C++ is very messy syntax-wise:  it's all over the place. 

But it was, if not the first, the first major object-oriented language, but it is definately not the only.

I've been told by non-game programmers that one of the major differences between C# and C++ is that programs written in C++ run faster.  Is this because C++ code is easier to optimize?  Does C# have too many additional processes running that C++ avoids by not having automatic garbage collection?  Does the .net environment create something of a barrier in getting to the CPU quickly?  I think that the speed issue is probably something that can be worked around, or improved with later versions of the language.  Is that really all that is holding C# back from becoming another choice, or even a better choice for game development?

Have methods or libraries that are common in C++ for game development not been created in C#?
Are current developers just used to C++ since they have been using it for so long and see no reason to switch?

At least one somewhat major independent game that I know of, Arena Wars, was written in C#.  I haven't played it much--I don't find it to be very enjoyable--but on the technical side, it seems to run well and has good graphics. 

Please,  share any knowledge or thoughts you have on the matter.  I'm hoping at least a few people here know something about this and will be able to help.
Yoru
Moderator
Posts: 4615

the y master, king of bourbon


WWW
Reply #1 on: May 16, 2006, 08:36:00 PM

<patronizing engineer>Languages are a tool for a job. There's no one best language.</patronizing engineer>

My impression is that most modern games are built around a C++ core engine which then runs an interpreted language that defines most of the game's behavior, e.g. Python, Ruby, Lua or a custom one. For example, I think GarageGames' Torque engine is this sort of two-stage engine.

Anyway, the best programming language to pick up and program games with right now, with the goal of being able to put something out quickly? Probably any language you can find a prebuilt 'engine' environment for, like Torque. I've not extensively investigated the various ones; I know BigWorld (a commercial MMO dev package) uses Python. Search around, particularly on sites like Flipcode or Gamedev.net. There should be some articles there on prebuilt engines.

Now, if you want to build an engine from the ground up... you're heading into rougher waters. C++ or a similar language that lets you get 'closer to the metal' may be in order. You'll need to deal with stuff like memory allocation and do without nice things like reflection. You'll also have to write your own libraries for network communication, audio I/O, keyboard/mouse I/O and graphics.

If you're more into casual games (e.g. cellphone games), which are certainly a good starting point, you probably want to start out with a slightly higher-level language until you've grasped the basic algorithms and programming constructs of imperative programming languages. (I don't think there's any major games written in functional languages... Rednames and grizzled grognards, prove me wrong.) Java is used fairly often for cellphone games, I believe, and you can also write web-applet games in Java.

If you're talking about commercial games, then, technically, no, C++ is not the only avenue. There's pay-to-play MUDs written in LPC, cellphone games written in Java, indie games written in a vast variety of languages. If you want to code the low-level engine of a AAA-title, knowing C++ well is probably very helpful. I also doubt you're doing that.

Performance

C# is run inside the .NET runtime; it's sort of interpreted, in the same way that Java is interpreted - an intermediate bytecode is translated into native binary code at runtime. C++ is completely converted to native binary code at compile-time, so there's no interpretive step at runtime. This is why (in theory) you can grab a compiled Java program and drop it on any system with a Java runtime engine whereas you need to recompile a C++ program for each different platform.

Note that, even today, I've heard that the inner loops of performance-sensitive routines (e.g. graphics) in modern games are often hand-optimized in Assembly. I would strongly advise you to not think about doing that right now. Or anywhere in the near future.

Engineer's mantra: "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil." Until you're writing something with a serious computational bottleneck (big AI, massive datasets or heavy 3D graphics) you can probably do fine for performance with Java, C# or any other bytecode-based language.

Nice Features

C# and other interpreted or semi-interpreted languages do a lot of nice things for you that can make it easier to get something working. Garbage collection is one of them. If you intend to move down to lower-level code, you will eventually need to learn about all the stuff that those interpreted languages are doing 'under the hood' - threading, mutual exclusion, memory management, etc.

However, a lot of these can be done in C++ with the right libraries. These languages are all Turing-complete. It's just a question of how much of a pain in the ass it is. (If you really intend to code in C++, I suggest picking up a good Smart Pointer library; if you learn how to use smart pointers properly, they can help with a lot of the memory management bugs that programmers tend to make in lower-level languages.)

So to wrap it all up - I suggest a higher-level language like C# or Java for the beginning programmer. Get used to programming, make sure you enjoy it. As processor speeds advance and more stuff gets offloaded to auxiliary processors (PPUs, GPUs, etc.) the requirement to absolutely minimize the number of instructions being executed relaxes, and you'll see more emphasis on using higher-level languages to cut down on development and QA time.
Trippy
Administrator
Posts: 23620


Reply #2 on: May 16, 2006, 08:39:10 PM

I'm not expert at this, so feel free to correct me where I am wrong...
And if this has already been written on, or you know of a better place to ask something like this then let me know.

I'm teaching myself how to program; I've started with C++, but I'm also interested in C#.  I'm still still an amateur, though I think I'm starting to get to the point where I can begin writing programs I wanted to in the first place, such as games.

What is the best programming language to write games with?  Until now, most people have chosen C++, especially for games intended to be released commercially.  C++ has been the most popular for game development for a (long?) time--but is it the only choice for a commercial game?
No, but if performance and code security are the main concerns C++ (and C) will continue to be the primary choice. There are other choices of course. E.g. Puzzle Pirates is written in Java and there are tons of games written in Flash. On the code security side interpreted languages like Python, Perl, Ruby, Tcl, Lua, etc. expose the source code to everybody. Byte code languages like Java and C# are harder to read in their byte code "compiled" form but "disassemblers" that reconstruct the original source are easy to come by. You can, of course, disassemble C and C++ code but that means reading through assembly code not the original source code.

Quote
I'm not saying I'll ever be able to write anything people would actually buy (though it is a goal).
This is an honest question (you can probably tell because I don't sound very knowledgeable about it). 

Why hasn't there been much game development in other languages such as C#?  C++ is very messy syntax-wise:  it's all over the place.
If you are doing DirectX 3D graphics C or C++ will give you the best performance. There is something called "Managed DirectX" which is the .NET version of DirectX that you can use with C# but there's still a performance penalty (somewhere around 10% from what I've read).

Quote
I've been told by non-game programmers that one of the major differences between C# and C++ is that programs written in C++ run faster.  Is this because C++ code is easier to optimize?  Does C# have too many additional processes running that C++ avoids by not having automatic garbage collection?  Does the .net environment create something of a barrier in getting to the CPU quickly?  I think that the speed issue is probably something that can be worked around, or improved with later versions of the language.  Is that really all that is holding C# back from becoming another choice, or even a better choice for game development?
C# runs in what's called a virtual machine like Java does (Microsoft calls it "managed code" just to be different). You can compile virtual machine byte code down to native machine code (e.g. using a JIT (Just in Time) compiler) but you still have the overhead of running through the "management" layer for everything.
Trippy
Administrator
Posts: 23620


Reply #3 on: May 16, 2006, 08:42:58 PM

C# and other interpreted or semi-interpreted languages do a lot of nice things for you that can make it easier to get something working. Garbage collection is one of them. If you intend to move down to lower-level code, you will eventually need to learn about all the stuff that those interpreted languages are doing 'under the hood' - threading, mutual exclusion, memory management, etc.
Automatic garbage collection is one of those things that can cause problems in games. In normal operation the interpreter/virtual machine decides when to garbage collect and there can be a signifcant slowdown while it reclaims memory. Managing memory yourself is a total pain in the ass but when performance is crucial it's a necessary evil.
Yoru
Moderator
Posts: 4615

the y master, king of bourbon


WWW
Reply #4 on: May 16, 2006, 08:46:32 PM

I was trying not to get bogged down in details.. you can force the Java GC to collect, I believe. I diddled with that a bit back when I did more Java programming. I believe you can also force the C# runtime to collect. I'm not sure if you can explicitly force objects to deallocate, either directly or automatically when they fall out of scope, in either language.

Like I said, smart pointer library in C++. Write/find one, learn it, love it.

I also maintain that for beginners, the important part is getting something going to maintain the motivation to code more and learn more. Not having to deal with low-level issues quite yet, while still learning how to properly structure and engineer a program of more than trivial size, is more beneficial than getting caught up on segfaults in your first few efforts.
Stephen Zepp
Developers
Posts: 1635

InstantAction


WWW
Reply #5 on: May 16, 2006, 08:50:30 PM

Pretty much everything everyone wrote is absolutely correct, so just to touch on a few points:

There is a trend right now to get away from "custom script languages", and simply allow bindings to traditional/new-but-open scripting languages, such as Lua, Python, and the like. Trippy was correct--Torque has TorqueScript, a C++ like byte code compiled scripting language, but current use of our engine does require you to learn TorqueScript. However, many people have extended the engine to allow custom bindings to not only Python, but Lua, and even C# as well, and with just a little work any source-available engine can let you use whichever scripting language you like (note that it has to most probably provide either an API for this type of new language binding, or the source code of the engine itself).

The performance concerns with C#, combined with the fact that almost by definition (it's an MS initiative) you are limited to only one (obviously the biggest, but not the only) operating system/platform. However, there are quite a few initiatives going on that may make C# more attractive for future game development.

General Advice (and I'm trying desparately not to be self-serving here!)--pick up any engine that allows you scripting capabilities (also called modding capability), and simply learn game development, instead of focusing on which language to learn so you can then learn game development. As you become more and more familiar with the general concepts, language choice becomes a tool selection (as Yoru said), instead of a barrier to future development, wherever it goes.
« Last Edit: May 16, 2006, 08:52:49 PM by Stephen Zepp »

Rumors of War
Roac
Terracotta Army
Posts: 3338


Reply #6 on: May 16, 2006, 09:17:11 PM

.NET (whether C# or VB) is going to be more marketable overall, mainly because the garbage collector frees up the programmer from most memory management issues, which are a significant time sink for most dev efforts.  What C++ gives you is total control, and I would suggest if you are learning to program and want to be serious about it, you go with it.  If you're a good C++ developer, you can move to C# or Java.  It's much harder to take a modest C#/Java guy and go C++.  If you're wanting to go professional with game development, it's almost certainly a must.

However, if you're not wanting to make a career out of this, I would suggest going with VB.NET.  It's a bit simpler to work with than C#, there's not really any performance differences between them, and there is a ton of sample code on the net for it.  You'll obviously go DirectX with this, so grab the SDK and some sample game modules along with a decent book.  You can get source for simple 3D game worlds from a few places, which will let you start messing with something right out of the box. 

If you want to go development but not game programming (it's a tough market), keep an eye toward either .NET (C# or VB, doesn't much matter) or Java.  You can go C++, and make good money at it, but there's more mobility in the other two areas.

-Roac
King of Ravens

"Young people who pretend to be wise to the ways of the world are mostly just cynics. Cynicism masquerades as wisdom, but it is the farthest thing from it. Because cynics don't learn anything. Because cynicism is a self-imposed blindness, a rejection of the world because we are afraid it will hurt us or disappoint us." -SC
Margalis
Terracotta Army
Posts: 12335


Reply #7 on: May 16, 2006, 10:17:14 PM

There are a bunch of questions here.

What is the best language to learn to write games with?
C/C++ is the only answer. Because if you know C/C++ you know Java, C# and any other procedural language. If you can ride a bicycle you can ride a tricycle. I'm no C/C++ snob (the last programming I did in C/C++ was 4 years ago) but if you are looking to learn I would do that hands down.

What is the best language to write games with?

Mobile (cell) games? Java, Brew (is that still around?) or something like that.

Game boy games: C + assembly. (Actually quite enjoyable)

PC Games: C/C++ (with caveats see below)

Console games: C/C++


Why?

I'll focus on PC games here. PC APIs like DirectX are C. C gives you direct memory control. C is faster. C allows to do crazy things like pack 2 ints into a float, move them across a bus and unpack them other time. (I just explained how to double your drawing performance on the Mac in 1995 yay!) C allows you to do crazy pointer things. C works.

Java has problems. The support for sound isn't so great. The support for input (keyboard, mouse, joystick, etc) isn't so great. The support for full screen drawing isn't so great. The 2D graphics performance is terrible - but you shuold be using 3D to do 2D now anyway thanks to graphics cards. Garbage collection is an issue in Java. Doing things like flipping vmem pointers in Java is a problem. Sometimes you can't get close enough to the hardware and APIs.

Other languages? C# is MS only and is not widely supported. Anything else (scripting languages, LISP, etc) are unusable. There really aren't that many choices.

Caveats?

First, again if you learn C/C++ you can learn anything. And you can learn the language all consoles use. So you can't go wrong there.

You could write a game in Java or C#. People have done it. I'm doing it. But I would only do that if I had enough experience to know what I was getting into before-hand. In my case I have very low performance requirements and don't need to do many fancy things.

At my company we produce a Java product but we will seriously consider people who only know C++. Because people who are good at C++ are good at programming, period.

I would never hire someone to work in C++ that only knew Java. Not in a million years.

vampirehipi23: I would enjoy a book written by a monkey and turned into a movie rather than this.
Jeff Kelly
Terracotta Army
Posts: 6921

I'm an apathetic, hedonistic, utilitarian, nihilistic existentialist.


Reply #8 on: May 17, 2006, 12:29:20 AM

There are a bunch of questions here.

What is the best language to learn to write games with?
C/C++ is the only answer. Because if you know C/C++ you know Java, C# and any other procedural language. If you can ride a bicycle you can ride a tricycle.

Well the same could be said for Java, Smalltalk, Delphi, Objective C, Pascal.... There are only three different paradigms that programming languages follow (at least if you count languages outside the academic domain). They are either procedural languages (c, pascal, fortran, most older scripting languages), functional (sp? don't know if that is the correct term in english) languages (lisp, sheme etc.) or object-based/object-oriented languages (C++, Java, PHP, C#, Objective C et.c)

If you know one language that fits one of those paradigms then you basically know all of the languages that fit that paradigm. The biggest differences between languages would be syntax and maybe some very advanced features.

If you want to learn programming I'd never suggest C++ as the first language because it is harder to learn than for example C# or Java. It has such a messy syntax and many ideosyncracies that come from its c-compatability and the fact that the inventors of c++ are shoehorning every advanced feature under the sun into the language definition.

If all you want to do is develop games I'd suggest one of the many available engines with attached scripting capabilities that greatly ease development of games for the hobbyist.

If on the other hand you want to go deeeper into programming like writing your own engines doing some fancy graphical works over the like C++ will be your language of choice for the simple reason that the vast majority of libraries and toolsets out there have bindings for C++ (sometimes even exclusively c++).

The question is a bit off by the way for the simple reason that in most programming tasks the language is just interface to commercial libraries. If you program for windows you will use DirectX and other system libraries that use c++ bindings.
Trippy
Administrator
Posts: 23620


Reply #9 on: May 17, 2006, 12:39:38 AM

Pointers are the key, though. Some people just never get them. If you can handle pointers in C/C++ that means you can handle other procedural languages easily but the reverse is not necessarily true.
Sairon
Terracotta Army
Posts: 866


Reply #10 on: May 17, 2006, 06:33:25 AM

My belif is that C# will gain ground on C++, not in games requiring performance, but other tools and more causal games. I would start out with C# if I was beginner. If you start with C++ on your own you will probably get discouraged if you're not a genious.
Soln
Terracotta Army
Posts: 4737

the opportunity for evil is just delicious


Reply #11 on: May 17, 2006, 07:49:35 AM

Ajax is grabbing a lot of people, and Google realease today its API for it that they use for Gmail and other things.  So, if casual web, Java is still big. And I think everyone has summarised well otherwise what's out there.  For robust apps, C++.  Of course, world designers etc. would never need to learn it. 
Sairon
Terracotta Army
Posts: 866


Reply #12 on: May 17, 2006, 09:10:03 AM

Ajax is grabbing a lot of people, and Google realease today its API for it that they use for Gmail and other things.  So, if casual web, Java is still big. And I think everyone has summarised well otherwise what's out there.  For robust apps, C++.  Of course, world designers etc. would never need to learn it. 

Javascript which Ajax uses is nothing like Java though.
Soukyan
Terracotta Army
Posts: 1995


WWW
Reply #13 on: May 17, 2006, 10:14:41 AM

Ajax is grabbing a lot of people, and Google realease today its API for it that they use for Gmail and other things.  So, if casual web, Java is still big. And I think everyone has summarised well otherwise what's out there.  For robust apps, C++.  Of course, world designers etc. would never need to learn it. 

Javascript which Ajax uses is nothing like Java though.

Correct.

What Google released is a toolkit (Google Web Toolkit) that takes your Java application and translates it over to AJAX (HTML and JavaScript). It should be quite handy if it works well. I haven't had the chance to try it out yet.

"Life is no cabaret... we're inviting you anyway." ~Amanda Palmer
"Tree, awesome, numa numa, love triangle, internal combustion engine, mountain, walk, whiskey, peace, pascagoula" ~Lantyssa
"Les vrais paradis sont les paradis qu'on a perdus." ~Marcel Proust
Samwise
Moderator
Posts: 19220

sentient yeast infection


WWW
Reply #14 on: May 17, 2006, 11:17:15 AM

If you're just starting out learning programming, I'd recommend LOGO.  Marvel at how easy it is to make cool things happen on the screen with little effort.

If you've mastered LOGO and want to try playing with something a little more flexible, take a look at Scheme.  Marvel at all the weird shit you can do with functions, which you previously thought of as static pre-defined things.

Once you start doing OOP and find Scheme cumbersome for that, try Java.  Marvel at how much cleaner the object semantics are, and how inheritance is implemented for you.

Once you get tired of your Java apps running like ass, learn C.  Marvel at how much faster everything runs, for the very small price of having to remember to "free" after you "malloc".

And when you start missing OOP again, learn C++, and marvel at how they managed to graft OOP onto C without making it slow as ass.


If all that sounds too hard, just learn Flash and focus on becoming the next Joe Cartoon.   wink

"I have not actually recommended many games, and I'll go on the record here saying my track record is probably best in the industry." - schild
Soln
Terracotta Army
Posts: 4737

the opportunity for evil is just delicious


Reply #15 on: May 17, 2006, 01:00:35 PM

... Scheme...

lolz I forgot about that one. I did a data structures course once with Pascal and PixieScheme.  Funny.  Kinda.
Samwise
Moderator
Posts: 19220

sentient yeast infection


WWW
Reply #16 on: May 17, 2006, 02:10:38 PM

Scheme is a bitchin' language to start programming in.  It's got extraordinarily clean syntax with very few special rules or exceptions, and it exposes a lot of very powerful programming concepts while still making it simple to write simple programs.

On more than one occasion I've found myself wanting C++ to provide Scheme-like flexibility with regard to treating functions as first-class objects.  You can fake some of it with inheritance, but there's just no real substitute for a (lambda (x) ...).

"I have not actually recommended many games, and I'll go on the record here saying my track record is probably best in the industry." - schild
Morat20
Terracotta Army
Posts: 18529


Reply #17 on: May 17, 2006, 08:36:51 PM

Just a note: If you're going to learn C++, learn to love templates. Learn to understand them. Because trust me, when you need to use hashes or trees to store your objects, it's just easier to use a template someone else has written. Reinventing the wheel is a stupid waste of time. You don't need to write your own hashing tables or functions unless you're running into perfomrance issues.

Having said that, I once spent a great deal of time helping rewrite the C standard libraries to improve performance. We did it by stripping them totally bare -- you could really shoot yourself in the ass with what we created, but we were using it to deal with a simply insane amount of data on a very rabid heartbeat. Not something I'd like to do again, really. C libraries aren't exactly idiot proof to begin with, but when we were done the ones we had to use for the dataflow layer --- well, let us say our testing process was damn rigorous, even by the man-critical QA standards.
Samwise
Moderator
Posts: 19220

sentient yeast infection


WWW
Reply #18 on: May 17, 2006, 09:48:15 PM

Just a note: If you're going to learn C++, learn to love templates. Learn to understand them.

One of the things that vexes me most about C++ is that templates are even necessary.  If all C++ objects had a base class (instead of "void *") and C++ offered some sort of decent runtime type identification, templates and all their associated idiosyncrasies would be right out the window.  Of course, that's how we ended up with Java, but that has its own set of obnoxious problems.   tongue

"I have not actually recommended many games, and I'll go on the record here saying my track record is probably best in the industry." - schild
Yoru
Moderator
Posts: 4615

the y master, king of bourbon


WWW
Reply #19 on: May 17, 2006, 09:59:24 PM

Don't knock void* or void* will knock you. It's either that, or using an unsigned short char to represent each byte of a more complex item.

I had to look at code that used memcpy() to paste in the virtual function table of an object the other day. It was nasty. (The short answer is that someone was trying to duplicate the under-the-covers RPC communication of .Net without using .Net. The long answer is MY EYES THE GOGGLES THEY DO NOTHING!!)
WindupAtheist
Army of One
Posts: 7028

Badicalthon


Reply #20 on: May 17, 2006, 11:51:33 PM

Write it in Basic.  And not this faggoty Visual Basic, or even that shit where they got rid of line numbers.  No, you'll code your lines on numbers in multiples of ten, and if you find a place where you need to insert more than nine lines of code, then it's gosub/return for you, bitch.   :-D

"You're just a dick who quotes himself in his sig."  --  Schild
"Yeah, it's pretty awesome."  --  Me
Jeff Kelly
Terracotta Army
Posts: 6921

I'm an apathetic, hedonistic, utilitarian, nihilistic existentialist.


Reply #21 on: May 18, 2006, 01:25:56 AM

And when you start missing OOP again, learn C++, and marvel at how they managed to graft OOP onto C without making it slow as ass.

Well at least they succeded in making the syntax of C++ look like ass  Rimshot
CadetUmfer
Terracotta Army
Posts: 69


WWW
Reply #22 on: May 18, 2006, 06:18:05 AM

I'd start with something like C# or Java or Python.

If you start with C++, you're just going to be writing bad C++ for a long time, and not really understanding it.

Once you understand conditionals, loops, recursion...then learn C.

Anthony Umfer
Developer, LiftOff Studios
Morat20
Terracotta Army
Posts: 18529


Reply #23 on: May 18, 2006, 10:14:23 AM

Better yet -- just get a BS in Computer Science. They'll teach you all that shit. And you can use it to get a job.

My favorite part of my undergrad degree was doing advanced data and file structures and learning -- to my utter horror -- that our book didn't even get the algorithm for a B+ tree right. And then finding our book wasn't alone. Apparently, no freakin' book in existance has ever done that algorithm correctly -- ironic, given how frequently they're used (file structures and DB storage, to name two).

I irritated my professor by doing my distributed shared memory assignment in C (rather than java) -- I figure if I'm going to play with sockets, I'd like to get my hands on them and not use Java's high level interfaces. I'm looking forward to my datamining class, even if i have to pick up C# to do the assignments. (A requirement for his projects, for some reason). Financial data mining is fun. :)
Lantyssa
Terracotta Army
Posts: 20848


Reply #24 on: May 18, 2006, 11:13:24 AM

Better yet -- just get a BS in Computer Science. They'll teach you all that shit. And you can use it to get a job.
Mine didn't. :(

The only good classes I had were Assembly and C++.  Both because of awesome visiting professors and they actually taught the language.  The rest of my comp sci degree was a massive waste of time.  (Well, my Tcl/tk class was fun, but I love programming, it was an elective, and had little real word value.  Come to think of it, that was when I was a chemistry grad student anyways.)

Hahahaha!  I'm really good at this!
Morat20
Terracotta Army
Posts: 18529


Reply #25 on: May 18, 2006, 11:57:22 AM

Better yet -- just get a BS in Computer Science. They'll teach you all that shit. And you can use it to get a job.
Mine didn't. :(

The only good classes I had were Assembly and C++.  Both because of awesome visiting professors and they actually taught the language.  The rest of my comp sci degree was a massive waste of time.  (Well, my Tcl/tk class was fun, but I love programming, it was an elective, and had little real word value.  Come to think of it, that was when I was a chemistry grad student anyways.)

Let's see -- as an undergrad, what did I take that was useless (core classes, not the "required two semesters of English and Government" stuff)?

Well, in a sense the three semesters of Calculus, the probabilty courses and the linear algebra and differential equations classes were probably useless. I don't really use much of that directly. However, for someone unused to the sort of thinking patterns good programming requires, it would be helpful in teaching them how to think (and thus code) logically and rigorously. The discrete math class was useful -- anything with boolean algebra is useful for programmers, if just to get a very solid feel for certain types of code flow. Numerical methods was usefull -- I've had to create my own data types to hold floats with more precision than C is capable of, and had to do complex math on them. Heck, that makes Diffy Q useful, because we were solving differential equations. :)

The data and file structures class was rather useful. I'll never code a linked list, B+ tree or hash again -- but I'll use them. Same with searches and sorts. The basic DB classes and basic web software classes weren't directly useful, but came in handy when I had to start working with both -- kind of useful as background knowledge.

Assembly language was useless, as was machine language. You'll have to stick a gun to my head to get me down to that level. I understood it, I just hated it. Ditto for the computer architecture and circuits stuff I had to learn. Ditto Ada. Talk about strongly typed hell.

The Java, C++, object oriented design, and basic software engineering classes were a decent base for what I ended up doing "In the real world".

That was about it, really. A BS in computer science is really just giving you a basic understanding of concepts, and some familiarity with common tools. My graduate program is a hell of a lot more interesting -- the distributed computing stuff was fun, especially once we moved past traditional client/server models. Implementing workable distributed shared memory was a lot more challenging than most of what I get paid for, although part of that was the tight time frame for development.

The compilers and program language theory classes were interesting, but other than picking up some useful string parsing techniques, I suspect I'll never give it another thought. The advanced database class was VERY useful (although difficult), and I'm looking forward to my datamining class next year. Advanced Java I'm just taking as a refresher (half our department works on a very complex Java tool, and I haven't touched Java in years -- so I can brush up on the company dime in case they need another hand).

Starting in the spring -- genetic programming and that n-tier client/server architecture, and then my thesis. (Genetic programming).

I guess it really depends on what you want to do. I think the BS -- at least from a good school -- gives you the sort of foundation where you can pick up what you need quickly. It just integrates into the broad understanding you have of how computers work, how programming languages work, and the sorts of techniques and approaches that are available (and which are appropriate to the task at hand). Post-grad, well -- you've got to have a real interest in something. :) For me, it's genetic programming. That shit's just too damn cool.

Of course, my company is paying for the whole damn Master's, plus a 10k bonus when I get my degree. I'd be a fool not to pursue it.
Samwise
Moderator
Posts: 19220

sentient yeast infection


WWW
Reply #26 on: May 18, 2006, 01:37:11 PM

When I got my CS degree we didn't have any required classes where you "learn a programming language" - instead, the class would focus on teaching some larger concept, like OOP or data structures or hardware-software interaction, and you were responsible for learning the programming language for the assignments on your own (either as you went or, if you're a big wuss, as a self-paced elective course before you take the real class).

IMO this is the only way to do it.  Learning a language on its own is almost useless - the concepts that transcend individual languages are the important stuff.  Which is why when someone asks 'what programming language should I learn' I generally respond with a big laundry list - people who decide that "learning a language" is their focus and don't at least try to dabble around a bit are pretty much doomed from the start.
« Last Edit: May 18, 2006, 01:39:10 PM by Samwise »

"I have not actually recommended many games, and I'll go on the record here saying my track record is probably best in the industry." - schild
Yoru
Moderator
Posts: 4615

the y master, king of bourbon


WWW
Reply #27 on: May 18, 2006, 01:44:37 PM

My CS undergrad experience was similar to Samwise's; most of the classes taught underlying theory and it was mostly up to you to learn whatever language the professor demanded his assignments in. The kinder ones would offer a short tutorial on it. From what I heard, CS101 and CS102 had some just-learning-C++ content, but I skipped those. Some of the upper-level courses that were attempting to teach something that had a direct real-world parallel would foray into the realm of application (e.g. our network communications course did some stuff on CORBA and RPC).

There were small 1-credit elective courses you could take to just learn a single language; they varied in how much they were worth. Our java course was hard-core (final project: build winzip in Java. You have five days.) whereas our Perl course was little more than entertainment for unix geeks.

I pretty much agree with this approach; while you're not quite as ready as a focused software engineering curriculum to just go out and work on a huge app right out of school, a solid grasp of the underlying theory makes transitions between languages, platforms and tools much easier. It's the difference between learning an alphabet to make words or learning a hieroglyphic script.
Morat20
Terracotta Army
Posts: 18529


Reply #28 on: May 18, 2006, 01:48:24 PM

I don't think any CS programs require more than one language. I took Ada and Java as electives, and my C++ course was really a course on object-oriented deisgn. At the master's level, my advanced OS class was really "Distributed computing" since the undergrad OS course taught everything you needed to know about an OS. (By time you finished the last project in undergrad OS, you had coded a nanokernal with it's own file structures, locking mechanisms, and client/server IPC).

Languages are quick and easy to pick up, once you have one under your belt. (Unless you're jumping to prolog or Lisp from C++ or something). It's the concepts and advanced techniques that are the core of a good CS degree.
Samwise
Moderator
Posts: 19220

sentient yeast infection


WWW
Reply #29 on: May 18, 2006, 02:13:32 PM

Where'd you go to school, Yoru?  Your CS program sounds a lot like UCB's, but the course numbers are different.  (MIT?)

"I have not actually recommended many games, and I'll go on the record here saying my track record is probably best in the industry." - schild
Yoru
Moderator
Posts: 4615

the y master, king of bourbon


WWW
Reply #30 on: May 18, 2006, 03:24:00 PM

Where'd you go to school, Yoru?  Your CS program sounds a lot like UCB's, but the course numbers are different.  (MIT?)

RPI, in Troy, the Armpit of New York.
Lantyssa
Terracotta Army
Posts: 20848


Reply #31 on: May 18, 2006, 03:26:43 PM

Most of my courses were like y'all's, but they did not teach even the theory very well.  A good portion of the students did not have enough programming experience to really be able to combine the theory with a working program, they might kind of understand one or the other, but trying to learn both at once only caused further confusion.  (Those of us with coding experience already understand the theory, so it wasn't of much benefit to us either.)  I think they would have done much better if they got the theory with a code snippet to have something to relate the two together.

Hahahaha!  I'm really good at this!
Trippy
Administrator
Posts: 23620


Reply #32 on: May 18, 2006, 03:50:32 PM

When I got my CS degree we didn't have any required classes where you "learn a programming language" - instead, the class would focus on teaching some larger concept, like OOP or data structures or hardware-software interaction, and you were responsible for learning the programming language for the assignments on your own (either as you went or, if you're a big wuss, as a self-paced elective course before you take the real class).
I can't remember if this was required or not for our CS degree (it was so long ago, heh, plus I was EE) but we had a "learn a bunch of languages" class where we learned things like Prolog, Lisp, and Ada but that was as much to expose us to different programming methodologies (e.g. logic, functional, and modular programming) as it was to learn the languages themselves. We did have an specific "learn C" class at the 100 level since Pascal was the teaching language of choice back when I was in school and there were other language classes as well (assembly, more Lisp, etc.).

Edit: fixed typo
Morat20
Terracotta Army
Posts: 18529


Reply #33 on: May 18, 2006, 06:27:27 PM

I can't remember if this was required or not our CS degree (it was so long ago, heh, plus I was EE) but we had a "learn a bunch of languages" class where we learned things like Prolog, Lisp, and Ada but that was as much to expose us to different programming methodologies (e.g. logic, functional, and modular programming) as it was to learn the languages themselves. We did have an specific "learn C" class at the 100 level since Pascal was the teaching language of choice back when I was in school and there were other language classes as well (assembly, more Lisp, etc.).

I had that as a grad course -- except it was two weeks of "Here's everything you need to know about the various types of programming languages" and then a semester worth of program language and compiler theory. Much as I try, I will NEVER be able to forget what an NP complete problem is, or how to tell whether a language is context sensitive or context free. Ugh.
 
Samwise
Moderator
Posts: 19220

sentient yeast infection


WWW
Reply #34 on: May 18, 2006, 06:46:46 PM

RPI, in Troy, the Armpit of New York.

Good to know.  Precious few CS programs I've investigated do it that way - from the people I've talked to, it seems like most schools do the "freshman year you learn Java, sophomore year you learn C++, junior year maybe you do something exciting like write an IM program" curriculum.  Blech.   tongue

"I have not actually recommended many games, and I'll go on the record here saying my track record is probably best in the industry." - schild
Pages: [1] 2 Go Up Print 
f13.net  |  f13.net General Forums  |  The Gaming Graveyard  |  Game Design/Development  |  Topic: The best programming language for games?  
Jump to:  

Powered by SMF 1.1.10 | SMF © 2006-2009, Simple Machines LLC