The Language of Game Development

 Pages 1 2 NEXT
 

The Language of Game Development

If you are getting into game development, what programming language should you choose? Shamus tackles the question.

Read Full Article

A big problem with a lot of people in the software engineering industry is that they tunnel vision. All too often people dedicate their entire work lives to learning "that one language which they will use forever." However, the industry evolves and the desired languages change more often than most want to admit.

If you want to get into software (be it gaming, financial, or any other field) the most import thing you can do is learn concepts, not languages. Once you've 'learned' one language, you can pick up most others because they all share concepts. Just like games, languages are typically built off of each other. It can be more beneficial just to pick a language that approaches the most programming concepts and practices.

Would rather know how to expertly craft a screw or a nail, or would you rather know what screws, nails, timbers, and shingles are and how to combine them to make a house?

Python is indeed a great place to start, a few friends of mine who have gone on to do well in computing started using python back when we were 14. I only ever got to a level where i could make the basic calculator demos and the like but i feel like if i ever did feel like getting more into coding i have at least a slight basis.

Being British i have of course used BBC Basic (which is actually a bit shite)

Personally enjoy Ruby when it comes to higher-level languages. It's got a nice standard library, a great gem system that allows for extremely easy usage of other people's code so you don't have to reinvent the wheel for the nth time and it's widely used for web development which I find to be one of the most fun entry-points into programming.

Also another good article related to the question, as to why scientists generally use a language even somewhat harder to learn than C:

http://arstechnica.com/information-technology/2014/05/ask-ars-why-are-some-programming-languages-faster-than-others/

I would also very much recommend Python (or Ruby) as a great place to start learning instead of C++, largely because C++ is the language I started with, and it took me FOUR YEARS to get to any point where I could start programming Tic Tac Toe using a variety of paradigms. Python could have gotten me there in under a year, and I might already have a game or two on the market. (Don't bother with BASIC. Python and other such languages have long since overtaken BASIC as good "beginner's all-purpose symbolic instruction code.")

But I also could not stress and second enough the fact that we're all regular people, as well, and regular people are very capable of learning to program. Steve Jobs once said that he believed every person "in [the US]" should learn how to program a computer. I absolutely agree with him on that statement, and go further by saying everyone in every country where computers and internet are readily accessible to the masses should learn to do that. I'm not terribly great at math; I still have real trouble with 5th-grade long-division or by-hand multiplication that doesn't involve sectioned boxes. I wasn't into computer technology growing up. I'm not the kind of hacker you think of when the idea of "computer programmer" comes to mind.

But I still did it. Four years and still having trouble with the syntax of polymorphism and STL containers in an object-oriented paradigm, but I still did it. Anyone can do it given enough time, practice, and dedication. I'd say for anyone who wants to be a programmer but doesn't feel like one, think of it as a computer-based martial art. You just go to a class 1 hour a week, and spend an hour or so every day practicing. That can fit well within a standard work/school schedule, and the great thing about programming is that the "class" can just be research online, youtube tutorials, source code reading, etc.

And I would highly recommend checking out some source code. ID has released its games as open-source, so check out Wolfenstein 3D and Doom. Both were written in C/C++. The source code for the original Metroid is also available (programmed in 6502 Assembly, the native language of the NES, 2600, Commodore 64, and other machines from the 80s), so if you want to see what NES programs looked like, check it out. A note on reading source code too important to be footed: you don't have to read it all the way through; just open one of the files (there should be multiple files) and see if you can figure out exactly what the programmer was thinking. You can do it.

TiberiusEsuriens:

...

Would rather know how to expertly craft a screw or a nail, or would you rather know what screws, nails, timbers, and shingles are and how to combine them to make a house?

Very well said.

Depress gas pedal 10%. Turn wheel 10 to the right. Traverse 5 meters. Turn wheel 10 to the left. Depress gas pedal 15%. Traverse 100 meters. Release gas pedal. Depress brake pedal 25%.

That sounds exactly like what I'm currently doing in Matlab (unrelated to game development, of course). I guess at least I don't have to worry about memory management (as long as I don't do stupid stuff like increase matrix size every loop).

What we were told by computer scientists in our very limited course for engineers (they taught us Java...) learning one language really well and limiting yourself to it is the wrong way to go. Understanding the basics and then being able to quickly pick up a new language is supposed to be better but would your boss leave you enough time to learn it (and some time from colleagues to help you with that)? Or would he instead just hire the other guy who placed his bets on the right horse?

I think it was already discussed on one of the Diecast podcasts hosted on Shamus's site. But still, what about "game development" (or comparable) majors/masters programs? If I remember correctly, going the route of computer science (or arts/management) route instead (and doing some game development on the side) was seen as a better choice (because it can earn you money outside of game development,too). Now, I agree with that but I just found it strange that the topic of majors choice was brought up in the article but game development majors/colleges/whatever weren't mentioned.

rofltehcat:
I guess at least I don't have to worry about memory management (as long as I don't do stupid stuff like increase matrix size every loop).

Be glad. At an old workplace, a multiple-day corporate disaster that nearly lost clients was traced back to one single misplaced memory allocation error.

Programming: Scary, but fun. :D

I learned programming with C++. Well, it was more like C with classes, because my teacher(s) were clueless/shitty old basement coders. Think it took me about 5-6 years before I built up enough experience, knowledge and confidence to make my own (shitty) game engine in C++ with DirectX 11.

It has been said a thousand times before -- and I still believe it to be true -- that if you have learned and are at least proficient with C++, it's a lot easier to pick up on higher level languages. I think that would be the ONLY benefit to start with C++. Would still never recommend it.

I'm still sort of torn on the whole thing. So C++ really isn't beginner friendly. It's becoming more so, though, with the direction the language is going. C++11 did wonders to make it an easier language to work with (auto, ranged for loops, lambdas, std::thread), and it seems like it's going to be continuing in that direction, at least it seems that way when reading what Bjarne Stroustrup is saying these days (I have no facts to back this up).

For me, bytecode languages with just-in-time compilation like Java or C# fill the sweet-spot between speed, power and productivity. I will not bother with C or C++ because as a hobbyist game programmer there is no way I will need the kind of performance that AAA titles have to squeeze out of the processor. On the other hand, interpreted scripting languages like Python are nice, but lack the edge of compiled languages and especially the static analysis tools, as most of these scripting languages are dynamic. I think it's ill advised to write a larger framework in a dynamic scripting language. There's a reason why they are called "scripting" languages after all. They are most well suited for short scripts that are executed in a well-defined environment.

If you're wanting to get into development of any sort, then asking "which language do I pick" should not be at the top of your list.

Learning design patterns, complexity modelling, rapid prototyping, formal specifications (code contracts), high integrity development etc, should be the priority. There's a ton of theory work that needs to be done to make you into a decent software engineer. I jumped into development by just going straight into programming stuff, keyboard composing. It was only til later when I started learning best practices at university that I realised the sheer amount of bad habits I had naturally formed. It was a painful process, getting rid of them, and forming better ones. My advice is to not just jump into a language, but do the theory work that applies industry wide. A project with a well designed program (game or otherwise) looks at the code last, no matter the language, since it's the design that matters. It's great that you may have just made a game that runs a few things on different threads. But it's entirely something else to have those threads be memory safe, and created via a factory pattern.

Regardless, if you're wanting to learn a language, then C++ is always a good one. It's pretty popular, well documented, and fast since it compiles to native. It also gives a lot of freedom to learn memory management. As the creator of C++ himself said, "...with C++ it's much harder to shoot yourself in the foot [than it is to do with C], but when you do, you blow your whole leg off.".

If you're after something fast and entirely OO, then try C#. If you're wanting something more for scripting, then try Python. If you're a masochist, try Java.

Being at the start of my Computer Engineering education, I've taken the first of several C++ programming courses. I wouldn't say it is a difficult language to learn, but I learned basic XML coding from various mods to Empire at War. Any student or person who has interest in programming should not ask which language to pick but which language to start with. Once you have the general theory and conventions one can use most of the compilation languages.

What language to learn is a weird question and yes, I'm sure people who have passion but don't know much about programming ask it a lot... I know I did.

I love your recommendation to get into some kind of modding. This is a great way to introduce important concepts like instantiation, casting and inheritance without needing a classroom, and they're much more interesting to play with on a custom map builder than staring at a bunch of code, or struggling with a homework assignment or test.

I've programmed in my education or work life in PHP, VB.net, Objective-C, Java, Javascript, and Ruby/Rails. Any of these choices could be used to build some kind of game relatively quick even if only some sort of text adventure game. I think the best choice for beginners is ease of entry.

Languages like Python and Ruby have great followings and are definitely the hip languages to learn, but I don't think you can beat the documentation and support of some other languages like iOS' Objective-C. I picked up Objective-C outside my college classes following Apple's objective-c documentation and using a lynda.com subscription to release my first app to the app store. It's got a bit of a learning curve, but once you're used to the way xCode works, programming is not near a pill it is on some systems. Plus iOS is easily one of the biggest markets to sell a game in.

If you don't have a mac or don't want to pay the Apple developer fee, I may recommend either javascript or Java depending on what your gaming vision is. Javascript is hugely popular and great for many kinds of web apps, and Java is also hugely popular and can be used for building Android apps.

Tiamat666:
For me, bytecode languages with just-in-time compilation like Java or C# fill the sweet-spot between speed, power and productivity. I will not bother with C or C++ because as a hobbyist game programmer there is no way I will need the kind of performance that AAA titles have to squeeze out of the processor. On the other hand, interpreted scripting languages like Python are nice, but lack the edge of compiled languages and especially the static analysis tools, as most of these scripting languages are dynamic. I think it's ill advised to write a larger framework in a dynamic scripting language. There's a reason why they are called "scripting" languages after all. They are most well suited for short scripts that are executed in a well-defined environment.

Python is a great place to start learning the basic concepts behind programming. And, C# definitely hits the sweet-spot. I've been using C# for a while now, and it is great. C# is fairly quick, easy to read, fast to write, and not old enough to have over 9000 deprecated classes/methods.

There's also C#. It's got a nice, clean syntax, and has enough in commonality with C++ to move up to it with relative ease.

The most important thing if you want to learn programming, though, is to get in a problem-solving mindset. After learning the syntax and getting a basic idea on the tenants common to all languages, practice problems posted online, and check other people's solutions to see how you can make your own code more efficient. Without that mindset, not even the highest level of language will come to much use.

Programming isn't that hard to pick up; but just like any other skills, you need to put some effort into it.

Also, isn't Unreal Engine 4 ditching UnrealScript fully for C++? And CRYENGINE has always used C++ for scripting. The visual scripting languages (like Kismet) stuck on them are kinda limited. So don't think C++ is going to be irrelevant anytime soon.

Tiamat666:
For me, bytecode languages with just-in-time compilation like Java... I will not bother with C or C++ because as a hobbyist game programmer there is no way I will need the kind of performance

You know, that's what Notch thought when he made Minecraft. 'I'm not doing anything serious. I'll just write this in Java.' And to this day, we are still paying the price for it with EXCESSIVE amounts of load on the processor and almost nothing on the graphics card.

Just saiyan. You never know what could happen. Best to learn something like C++ for anything big at all you might want to do.

are you sure C++ is no longer widely used in game development? is one of the most popular languages around, hell the source engine was written in C++

I don't think I can completely agree with this article on where to start learning how to program, but I understand where Shamus is coming from. If someone is after the fastest method to become productive, then going with Python or Java as the first language is a good move. If someone is interested in understanding programming well enough to pick up any language they want later down the line, then C++ is a better place to start. It's basically the whole "teaching a man to fish" vs "giving the man a fish".

As a programmer (though admittedly not a game programmer); I'd actually tenatively put Javascript as my top language to learn. It's got a lot of the benefits of python, that it's a language that's fairly simple, doesn't have a lot of the baggage that C++ family languages do, but it's much closer to those languages than, say, python. Also, it's literally impossible to more convenient language, right now. Press F12 (Cmd-option-J for mac users), type "alert('Hello World')", and boom, you're programming in Javascript. (And then please forget that alert exists and never type it again, but that's a tangent)

The best and worst thing about javascript really is the web. The worst is that it's easy to get mired in the parts of javascript that relate to webpages; a bunch of "Javascript tutorials" if not most, are more related to the web and webpages than the language itself. But the best is that html is one of the easiest ways to put together a decent user interface, which is one of the trickier problems in programming (creator of minecraft tweeted earlier today roughly compared it to kissing poisonous snakes), but a critical hurdle to game programming. (Unless you're making a text adventure game)

For reference, this is an implementation of Conway's Game of Life (despite the name, not really a game) that I put together in literally a couple hours last week.

But yeah, I'd definitely reiterate Shamus's point that obscure knowledge isn't the same thing as difficult knowledge.

I can't say I agree with specifically not starting in C++- Not only does it give you the basic grounding for any of many different languages, it is very free with how you use it- you don't want classes? Want to come back to pointers later? Alright, have fun, they'll be there if and when you decide to use them.

My personal favourite benefit, though, is that there is an overwhelming amount of C++ support, due to how popular it was and mostly still is. With the sheer amount of help you can get from sources like stackoverflow, I'd put it at one of the *easiest* languages to begin with in the long run, even if actually starting out can be a bit of a hurdle. If ever you're stuck, your problem has been encountered, asked and dealt with in 100 different forums.

joshuaayt:
I can't say I agree with specifically not starting in C++- Not only does it give you the basic grounding for any of many different languages, it is very free with how you use it- you don't want classes? Want to come back to pointers later? Alright, have fun, they'll be there if and when you decide to use them.

My personal favourite benefit, though, is that there is an overwhelming amount of C++ support, due to how popular it was and mostly still is. With the sheer amount of help you can get from sources like stackoverflow, I'd put it at one of the *easiest* languages to begin with in the long run, even if actually starting out can be a bit of a hurdle. If ever you're stuck, your problem has been encountered, asked and dealt with in 100 different forums.

It seems like everything you say equally applies to almost every mainstream programming language. You can program all of your Java code in one massive class just as easily as you can with you C++ code. And I can pretty much guarantee, you're not going to struggle with finding help from sources like StackOverflow for any mainstream language. Besides if you want to talk about "sheer amount of help", C++ is currently 8th on the list of most used Stack Overflow tags, behind (in order) C#, Java, Javascript, PHP, Android, JQuery, and Python. C#, Java, and Javascript all have over double the tags that C++ has.

Scrumpmonkey:
Python is indeed a great place to start, a few friends of mine who have gone on to do well in computing started using python back when we were 14. I only ever got to a level where i could make the basic calculator demos and the like but i feel like if i ever did feel like getting more into coding i have at least a slight basis.

Being British i have of course used BBC Basic (which is actually a bit shite)

I too learned BBC BASIC and followed programming listings from old copies of The Micro User that my father had lent me. Heck, even my Mum sat in front of the ol' Model B copying listings over...ah happy days! :)

--

Moving on though, if there's one thing I learned back when I was 16 (14 years ago...gah! The light in my hand will be flashing at any moment!) was if you're going to learn how to code, you're going to have to do it yourself. Schools and other places of education are always behind, both due to the time it takes to include a new curriculum/additional material and that the teachers are usually not expert enough in more than one compiled language. Indeed, if you asked them to list examples of interpreted/just-in-time/fully compiled languages? There is a good chance that they'd look at you blankly/mock as to why anyone would need to know such a thing/rush to Google/Wikipedia for salvation. Few would be mature-minded enough to put you at ease one way or the other.

When I was 26, I went into higher education to study computing, figuring there would be gaps in my knowledge (that I would be blind to) and that a course would fill. I was wrong, on both counts at both the foundation and undergraduate level. As a class, we taken six months just to do a simple Java program using strings and hard-coded places to put a person's name, whereas in 12 hours spread over a few days or a full week? You could have written an entire text adventure engine in C# for free with 3D Buzz.

If anything though, I would advise a school/college-leaver to learn as many languages as possible (check job listings as to what's expected) and qualification-wise the Microsoft Certified Solutions Developer track or other private equivalent. That and book learning, a dual-monitor setup and a touch-typing class! Why the touch-typing? Well, the number of people learning to code that I've met, who had to keep looking for a particular key/the hunt 'n' peck/two-finger typing...yeah, not ideal when you should be thinking in terms of programming syntax rather than "Dude! Where's the ampersand?!".

As for C++? Part of me wants to throw people in at the deep-end, if only for psychological scarring to occur and for students to see just how difficult high-level programming is and where they are on the road to learning all this stuff, as too many students that I've met simply have no idea as to what's truly difficult (apart from what they're trying to learn at that point in time).

This is a welcome edition to the Escapist! Please write more programming posts! A series even!
As a new programmer learning Java, I have to put it up there with one of the easier languages to learn (Javascript being even easier). Too, based off how every Java book and tutorial assumes you know C, it has to be easy to move to C if necessary.

MmmFiber:

Python is a great place to start learning the basic concepts behind programming. And, C# definitely hits the sweet-spot. I've been using C# for a while now, and it is great. C# is fairly quick, easy to read, fast to write, and not old enough to have over 9000 deprecated classes/methods.

As an ICT student, I was started out on C#, and can agree on this. It's clean, readable, has lots of support, and is well-suited for the relatively compact programs you'll be writing the first year or so.

Beyond that the main focus of the curriculum is not coding, but Software Engineering - all the work you do on your software before you even open Visual Studio (or whatever else you work with).

I myself had the following path in learning programming:

Q-Basic
Visual Basic
Some dabbling in HTML and CSS
C++, but did not get the hang of it at that time
Java (here I learned Object Oriented Programming)
C++ again (fought myself through a guide for programming games with C++ and DirectX, this time I succeeded)
ActionScript, JavaScript
Again HTML, CSS, mixed with PHP and SQL
Python (it was really easy, I just learned it as a side effect from one course at my university and even wrote my Bachelor thesis in it)
ProLog (but only basics, never really programmed something in it, was more something like "Look what freakish stuff is out there!")
C# and ASP.Net (I learned this solely for a new job, and quickly got a hang of it because of the similarities to Java and C++)

Bottomline: once you have learned enough programming languages, it is really easy to pick up new ones. The differences become more and more negligible. I agree that you should start with something easy, like JavaScript or Python (besser pick Python, it is really easy and you can do a ton of stuff with it, but JavaScript is useful for several things, like web development, and also Unity 3D). But you should switch to a higher, strongly typed programming language as soon as you can (like Java, C# or C++). If you start serious programming projects, you will need this, or your project will become a mess.

Retsam19:
As a programmer (though admittedly not a game programmer); I'd actually tenatively put Javascript as my top language to learn. It's got a lot of the benefits of python, that it's a language that's fairly simple, doesn't have a lot of the baggage that C++ family languages do, but it's much closer to those languages than, say, python. Also, it's literally impossible to more convenient language, right now. Press F12 (Cmd-option-J for mac users), type "alert('Hello World')", and boom, you're programming in Javascript. (And then please forget that alert exists and never type it again, but that's a tangent)

Javascript is definitely fun but it's also one of the very, very few prototype-based languages which means that unlike pretty much every single language mentioned here it's not class-based.

As such while Javascript is a great and fun language, which with nodejs has evolved much beyond the web, once you get in-depth it doesn't carry over nearly as well to other languages.

On the surface you won't even notice the difference exists. Hell, a lot of programmers, even those using javascript regularly, don't even know it's prototype-based, let alone what that exactly means.

So as long as you stay near the surface javascript is awesome for learning. Once you get more in-depth whatever you learn pretty much applies only to Javascript because deep-down it's a different type of language (which, to make things even more confusing is later compiled to a class-based representation of it's prototype-based self since as it turns out class-based is much faster).

One thing to note in regards to JavaScript: It has a few REALLY weird quirks, most notably that INTs are really FLOATs, internally. Usually that's no problem, but it gets iffy if you implement crypto (which you shouldn't) or get to the borders of a specific field (statistics generally, but I guess it's going to haunt us once WebGL really takes off).

What I like about python is that it teaches you the paradigms of programming without the syntax problems of C or the needless verbosity of Java. No fuzzing about that one ; you forgot, and less of dependency hell than for example eclipse based projects. At least for now.

Also, there are static analysis tools for python. A quick google search comes up with pylint, pychecker and pyflakes. Don't know how they hold up.

Only downside is that python isn't strongly typed. But neither is it weakly typed. It has this weird limbo where a variable can be any type, until you first assing something to it, then it's forever cast as that type. Dunno how you'd call that, "semi-strongly typed"?

Retsam19:
But the best is that html is one of the easiest ways to put together a decent user interface, which is one of the trickier problems in programming (creator of minecraft tweeted earlier today roughly compared it to kissing poisonous snakes), but a critical hurdle to game programming. (Unless you're making a text adventure game)

Decent text adventure interfaces are actually not as easy to make as it would seem. A text prompt (with its promise of unlimited possibilities and failure to deliver on it) is inherently scary for new players and there's not a lot you can do to make it seem more friendly (although even a few basic things like hotkeys, autocompletion, hyperlinks and command history help a lot). Text adventures have come a really long way since the 80s, but the user interface is still far from being a "solved problem".

Also, venomous snakes are way scarier than poisonous snakes.

Once you've been in the programming game long enough you realize that the language doesn't matter. The most important thing is planning a solid structure for your application (game or whatever) then you can translate that to any language.

More important than the language is the programmers experience and ability to translate requirements into code.

Nowadays its easier than ever to get stated in game development. Download Unity (or any number of engines) and follow one of the innumerable step-by-step tutorials. And repeat that until you are comfortable enough with your engine to try a couple of proof of concepts.

Here is one thing I've learned after failing for 3ish years of failing to create a commercial game. Making games is easy, making products is hard. But I've learned a lot about development in general.

This is the closest I came to a commercial release:

image

You can play it here if you are willing to risk a windows installer

https://dl.dropboxusercontent.com/u/221516245/valance1.0.0.22/Valance-Default-1.0.0.22.exe

hmm doesn't appear that I can post a screenshot, here is the link to the screenshot I guess

http://postimg.org/image/9tg0j6qin/

92Sierra:
This is a welcome edition to the Escapist! Please write more programming posts! A series even!
As a new programmer learning Java, I have to put it up there with one of the easier languages to learn (Javascript being even easier). Too, based off how every Java book and tutorial assumes you know C, it has to be easy to move to C if necessary.

I'm not sure Shamus reads the escapist comments for his posts here, but he definitely reads comments on his blog if you wanted to post that same comment here. A lot of his regular blog readers are hoping Shamus will start doing more programming stuff on the Escapist, but in the mean time he has several programming series posted on the blog. (And he's just in the last week started a new one)

Arnoxthe1:

Tiamat666:
For me, bytecode languages with just-in-time compilation like Java... I will not bother with C or C++ because as a hobbyist game programmer there is no way I will need the kind of performance

You know, that's what Notch thought when he made Minecraft. 'I'm not doing anything serious. I'll just write this in Java.' And to this day, we are still paying the price for it with EXCESSIVE amounts of load on the processor and almost nothing on the graphics card.

Just saiyan. You never know what could happen. Best to learn something like C++ for anything big at all you might want to do.

I'm not very familiar with Minecraft internals, but I wouldn't find it surprising that a voxel based game like Minecraft should put more stress on the CPU than on the graphics card. You only have to look at Minecraft to see why. There are considerably less polygons on screen than on a AAA title, but you have all that underlying voxel processing going on, of which there are a lot, in Minecraft probably hundreds of thousands.

Studies have found however that just-in-time compiled languages like Java in most cases come close to the performance of C++, and in rare cases even exceed it. I am certain that with today's hardware the skill of the programmer and the algorithms used are more significant to performance than the programming language.

I've read your code Shamus. You are a C programmer that uses C++. I have little tolerance for C++ and its idiotic idioms.

I am a C programmer that uses assembler. Just for comparison. ;-)

I sometimes work with a friend of mine to do game design competitions, e.g. Ludum Dare; I handle the art and he handles the code. But it would be really nice if I could at least code well enough to make my own prototypes.

So, it looks like I should be learning Python then?

Does anyone know of any good (preferably free) resources to start learning it?

I would have to disagree with the bit about starting in Python. I would recommend starting in C and then split to either Python or C++. The reason is that starting in Python (or even JAVA, for that matter), one tends to pick up a lot of bad habits and lazy styles that will absolutely destroy you in C (and C++), if you ever have to go backwards into C for performance reasons. The C programming language (as well as the C++ programming language) will gladly let you spin a phenomenally long and massively thick rope of the finest material with which to hang yourself, and the primary things that will destroy you will be the lack of understanding and facility with pointers and memory handling, particularly avoiding array overruns (you know all those buffer-overrun vulnerabilities? failure to check pointers and allocation bounds), memory leaks, and attempts to write or read unallocated memory. Also, pointer dereferencing will be a major problem. Learning to set deallocated pointers to NULL (not 0, because there is no guarantee that NULL and 0 will remain the same in the language) and check for NULL (again, not 0) pointers can often save a lot of grief in these regards. If you learn how to deal with pointers and memory management early, then when you transition to Python and C++, those issues will be second nature to you, and you will be better prepared to deal with the particular subtleties that Python and C++ offer regarding memory (especially C++, where you need to understand hidden constructor calls, which can suck the life out of your code's performance).

ADDENDUM: Yes, I admit, starting in C is the harder road, but I think putting the pain upfront will serve one better down the long road as you learn what to do, what not to do, and what things to look for. You gain a more detailed perspective, in my opinion, of the nature and behavior of the code, especially once you realize that many of the higher-level scripting languages, like Python (C++ is not a scripting language, just to be clear), are just calls to underlying C code.

TiberiusEsuriens:
A big problem with a lot of people in the software engineering industry is that they tunnel vision. All too often people dedicate their entire work lives to learning "that one language which they will use forever." However, the industry evolves and the desired languages change more often than most want to admit.

If you want to get into software (be it gaming, financial, or any other field) the most import thing you can do is learn concepts, not languages. Once you've 'learned' one language, you can pick up most others because they all share concepts. Just like games, languages are typically built off of each other. It can be more beneficial just to pick a language that approaches the most programming concepts and practices.

Would rather know how to expertly craft a screw or a nail, or would you rather know what screws, nails, timbers, and shingles are and how to combine them to make a house?

As a further addendum to my earlier post, I have to agree with this statement. This is a very key element that is missed by the "fad" of learning a programming language. The programming language is nothing but a means to tell the computer what you want it to do. It's more important to learn the logical and mathematical constructions and conceptualization that goes into being able to break a complete operation down into a series of logical steps, i.e. the algorithm. Once you learn how to do this, it doesn't matter what language you deal with; they'll all look the same. Learning the language just becomes an exercise in semantics and syntax. So, even before one starts with the programming language, one needs to learn to think in algorithms and operations. From there, one can then move into interacting logical constructs, i.e. objects.

TiberiusEsuriens:
A big problem with a lot of people in the software engineering industry is that they tunnel vision. All too often people dedicate their entire work lives to learning "that one language which they will use forever." However, the industry evolves and the desired languages change more often than most want to admit.

If you want to get into software (be it gaming, financial, or any other field) the most import thing you can do is learn concepts, not languages. Once you've 'learned' one language, you can pick up most others because they all share concepts. Just like games, languages are typically built off of each other. It can be more beneficial just to pick a language that approaches the most programming concepts and practices.

Would rather know how to expertly craft a screw or a nail, or would you rather know what screws, nails, timbers, and shingles are and how to combine them to make a house?

This also plays into code elegance and extraneous code. I'm not a software engineer, I'm an actual engineer. As such the programing i learn is for Cad/Cam systems (Siemens, G-Code programming etc). In those instances extraneous operations and inefficient code cost time and money. A LOT can be said for expressing an instruction set in the least amount of lines and in the most direct way possible.

John Carmack is a master at this [link] and shows that generic style sheets of coding often lead to over verbose and sloppy code by people blindly following templates and not really understanding how to express something in the most direct way.

Learning how to code a very rigid way is harmful and robotic. You need to grasp the principles behind what you are doing and eventually be recognize the basic building blocks inherent in most languages.

 Pages 1 2 NEXT

Reply to Thread

Log in or Register to Comment
Have an account? Login below:
With Facebook:Login With Facebook
or
Username:  
Password:  
  
Not registered? To sign up for an account with The Escapist:
Register With Facebook
Register With Facebook
or
Register for a free account here