• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EST 04:31
CET 10:31
KST 18:31
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
RSL Season 3 - Playoffs Preview0RSL Season 3 - RO16 Groups C & D Preview0RSL Season 3 - RO16 Groups A & B Preview2TL.net Map Contest #21: Winners12Intel X Team Liquid Seoul event: Showmatches and Meet the Pros10
Community News
Weekly Cups (Nov 24-30): MaxPax, Clem, herO win2BGE Stara Zagora 2026 announced15[BSL21] Ro.16 Group Stage (C->B->A->D)4Weekly Cups (Nov 17-23): Solar, MaxPax, Clem win3RSL Season 3: RO16 results & RO8 bracket13
StarCraft 2
General
Maestros of the Game: Live Finals Preview (RO4) BGE Stara Zagora 2026 announced Weekly Cups (Nov 24-30): MaxPax, Clem, herO win SC2 Proleague Discontinued; SKT, KT, SGK, CJ disband Information Request Regarding Chinese Ladder
Tourneys
$5,000+ WardiTV 2025 Championship Constellation Cup - Main Event - Stellar Fest RSL Revival: Season 3 Tenacious Turtle Tussle [Alpha Pro Series] Nice vs Cure
Strategy
Custom Maps
Map Editor closed ?
External Content
Mutation # 502 Negative Reinforcement Mutation # 501 Price of Progress Mutation # 500 Fright night Mutation # 499 Chilling Adaptation
Brood War
General
Which season is the best in ASL? [ASL20] Ask the mapmakers — Drop your questions BW General Discussion FlaSh's Valkyrie Copium BGH Auto Balance -> http://bghmmr.eu/
Tourneys
[Megathread] Daily Proleagues [BSL21] RO16 Group B - Sunday 21:00 CET [BSL21] RO16 Group C - Saturday 21:00 CET Small VOD Thread 2.0
Strategy
Game Theory for Starcraft How to stay on top of macro? Current Meta PvZ map balance
Other Games
General Games
Stormgate/Frost Giant Megathread The Perfect Game Path of Exile Nintendo Switch Thread Should offensive tower rushing be viable in RTS games?
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Deck construction bug Heroes of StarCraft mini-set
TL Mafia
Mafia Game Mode Feedback/Ideas TL Mafia Community Thread
Community
General
Russo-Ukrainian War Thread Things Aren’t Peaceful in Palestine US Politics Mega-thread The Big Programming Thread Artificial Intelligence Thread
Fan Clubs
White-Ra Fan Club
Media & Entertainment
[Manga] One Piece Movie Discussion! Anime Discussion Thread
Sports
2024 - 2026 Football Thread Formula 1 Discussion NBA General Discussion
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread
TL Community
Where to ask questions and add stream? The Automated Ban List
Blogs
James Bond movies ranking - pa…
Topin
Esports Earnings: Bigger Pri…
TrAiDoS
Thanks for the RSL
Hildegard
Saturation point
Uldridge
Customize Sidebar...

Website Feedback

Closed Threads



Active: 1020 users

Game Programming Primer - Page 3

Forum Index > General Forum
Post a Reply
Prev 1 2 3 4 5 6 7 Next All
simpler
Profile Blog Joined August 2010
Sweden49 Posts
November 18 2012 12:21 GMT
#41
Really solid article, good job!
Fandango
Profile Joined October 2011
291 Posts
November 18 2012 13:34 GMT
#42
On November 18 2012 15:24 RayzorFlash wrote:
Bookmarked and saved! The Quick Refresher stuff is SO IMPORTANT and so amazingly well put together. A lot of the fundamentals in there is what people in the industry REALLY look for when hiring and during interviews. This is an amazing review sheet to use before an interview. Thanks a lot!!! :D


It really isn't, it's more the stuff you're expected to know in the same way you're expected to know how to type. Most questionnaire type things on stuff like that are just there to catch people who literally know nothing and forgetting how a hashmap is stored internally is not going to stop you from getting the job if you get most of the other stuff right. Good interviewers who want good hires will generally place a lot of emphasis on a pre-interview programming test as well as asking you about situations you most likely have not dealt with to see your problem solving ability.

Software engineering whether it's games or anything else is 80% problem solving using as elegant solutions as you can come up with, it's not about writing constantly heavily optimised code all the time, even on AAA projects. It's about finding solutions to problems that don't end up causing more problems, whether that's a performance problem or a dependency issue or whatever. You learn how to do this mostly from experience, you can know what code pattern X is, but unless you know the situations where it's an actual benefit instead of a theorhetical one it's largely irrelevant knowledge.

You learn to make games by making games, you don't learn to make games by making game engines that you think are so elegantly designed that in theory anyone could make any game ever on it, because you don't know yet what the real issues are going to be. It's the most common habit of the student games programmer where they're so obsessed with doing things 'properly' by their own definition of whatever that may be, that they never run into the real problems they'll actually have to deal with.
nimdil
Profile Blog Joined January 2011
Poland3751 Posts
November 18 2012 13:36 GMT
#43
On November 18 2012 02:16 1handsomE wrote:
That's like 2 years of comp sci in an essay!!!! Noobs might want to take it slow, but this is good introduction.

You meant newbs, Noobs won't bother. Also not exactyl justified because to actually apply all the information presented here you have to have a LOT of comp sci knowledge not mentioned directly here. But nicely put indeed.

Radiated11
Profile Joined December 2011
United States32 Posts
November 18 2012 15:17 GMT
#44
Sweet write up! I'm going into computer science in college next year and I will definitely give this a read!
moxley
Profile Joined May 2010
United States65 Posts
November 18 2012 15:18 GMT
#45
While C++ is absolutely favored for high performance platform-specific programs like games, you shouldn't dismiss java as a language for aspiring software engineers. Many people start out wanting to be a "game programmer" but when you look outside that narrow field you'll realize that java is huge in enterprise web applications which make up a large majority of the market for software engineering.
kYem
Profile Blog Joined March 2010
United Kingdom412 Posts
November 18 2012 15:52 GMT
#46
I'm learning Java right, however i would love to learn c++ as well, just wondering how similar these to language are or how hard it's compared to Java.

As moxley said, i do feel Java has a lot bigger market share, so it's very good investment as you can find a well paid job, while it would be very difficult to get one for c++ in a software company.

Maybe someone did a switch from Java to c++ and can share their experiences.
Hell
iamke55
Profile Blog Joined April 2004
United States2806 Posts
November 18 2012 16:21 GMT
#47
On November 18 2012 21:00 uZr wrote:
That's some insane amount of work you put in there, congrats !

However some things are just bugging me.

Show nested quote +
Arrays cannot be passed around from one location to another directly. If attempted, the name of an array will be converted to a pointer to the first element in the array. This incurs a loss of information, as a pointer stores information about location and type, whereas an array stores location of first element, type of the elements and number of elements. This “feature” of C and C++ can actually be viewed as a “language bug”.

What do you mean by "name of an array will be converted to a pointer" ? Strictly speaking those two things are just the same: pointers. the name[idx] syntax is just some syntaxical sugar over doing *(name+idx). Furthermore the "size of the array" is never stored anywhere in C. You can write it explicitly when allocating on the stack, but it will eventually get lost when compiled, and the compiler won't give you any warning if you access out of bounds entries.

What he means is something that will rarely ever come into effect, but nonetheless is true. To see the difference between an array name and a pointer to the first element, run this test program.


#include <stdio.h>

void arrDecay(char array[]);

int main(int argc, char *argv[])
{
char *a = "A test string to compare arrays and pointers";
char b[]= "A test string to compare arrays and pointers";
printf("Size of a:%d\n",sizeof(a));
printf("Size of b:%d\n",sizeof(b));
arrDecay(b);
return 0;
}

void arrDecay(char array[])
{
printf("Size of b after decay:%d\n",sizeof(array));
};


b should have a size of the number of characters plus the null at the end, while a's size is the number of bytes a pointer uses. If you pass the array name as a function argument, it is cast to a pointer.
During practice session, I discovered very good build against zerg. -Bisu[Shield]
iaretehnoob
Profile Joined June 2004
Sweden741 Posts
Last Edited: 2012-11-18 17:10:19
November 18 2012 17:07 GMT
#48
On November 18 2012 21:00 uZr wrote:
What do you mean by "name of an array will be converted to a pointer" ? Strictly speaking those two things are just the same: pointers. [...] Furthermore the "size of the array" is never stored anywhere in C. You can write it explicitly when allocating on the stack, but it will eventually get lost when compiled, and the compiler won't give you any warning if you access out of bounds entries.
Here's an example:

#include <stdio.h>

int main()
{
int array[] = {1,2,3,4,5};

printf("array[3] = %d | *(array+3) = %d\n",
array[3], *(array+3));

return 0;
}



The size of the array is "stored" in the source code you wrote, e.g. it is available to the compiler, hence the difference between sizeof(array) and sizeof((int*)array) and in C++11 the ability to use static arrays with range-based for (and STL algorithms by using begin()/end()).
Then there's std::array as a wrapper around plain arrays, which should be preferable in most situations, even if I haven't gotten used to it myself yet.

edit: does this still count as ninja'd? :S
CecilSunkure
Profile Blog Joined May 2010
United States2829 Posts
Last Edited: 2012-11-18 18:30:48
November 18 2012 18:21 GMT
#49
On November 19 2012 00:18 moxley wrote:
While C++ is absolutely favored for high performance platform-specific programs like games, you shouldn't dismiss java as a language for aspiring software engineers. Many people start out wanting to be a "game programmer" but when you look outside that narrow field you'll realize that java is huge in enterprise web applications which make up a large majority of the market for software engineering.

Thank you for the comment. I don't mean to entirely dismiss Java outside of the field I've been writing about, but really just meant to express what I've learned in regards to it and game programming professionally.

On November 19 2012 01:21 iamke55 wrote:
Show nested quote +
On November 18 2012 21:00 uZr wrote:
That's some insane amount of work you put in there, congrats !

However some things are just bugging me.

Arrays cannot be passed around from one location to another directly. If attempted, the name of an array will be converted to a pointer to the first element in the array. This incurs a loss of information, as a pointer stores information about location and type, whereas an array stores location of first element, type of the elements and number of elements. This “feature” of C and C++ can actually be viewed as a “language bug”.

What do you mean by "name of an array will be converted to a pointer" ? Strictly speaking those two things are just the same: pointers. the name[idx] syntax is just some syntaxical sugar over doing *(name+idx). Furthermore the "size of the array" is never stored anywhere in C. You can write it explicitly when allocating on the stack, but it will eventually get lost when compiled, and the compiler won't give you any warning if you access out of bounds entries.

What he means is something that will rarely ever come into effect, but nonetheless is true. To see the difference between an array name and a pointer to the first element, run this test program.


#include <stdio.h>

void arrDecay(char array[]);

int main(int argc, char *argv[])
{
char *a = "A test string to compare arrays and pointers";
char b[]= "A test string to compare arrays and pointers";
printf("Size of a:%d\n",sizeof(a));
printf("Size of b:%d\n",sizeof(b));
arrDecay(b);
return 0;
}

void arrDecay(char array[])
{
printf("Size of b after decay:%d\n",sizeof(array));
};


b should have a size of the number of characters plus the null at the end, while a's size is the number of bytes a pointer uses. If you pass the array name as a function argument, it is cast to a pointer.

Thanks for explaining that ke.

On November 19 2012 00:52 kYem wrote:
I'm learning Java right, however i would love to learn c++ as well, just wondering how similar these to language are or how hard it's compared to Java.

As moxley said, i do feel Java has a lot bigger market share, so it's very good investment as you can find a well paid job, while it would be very difficult to get one for c++ in a software company.

Maybe someone did a switch from Java to c++ and can share their experiences.

I wish I could tell you specifics, but I can just tell you sort of second hand experience I've had. I've used quite a few languages with garbage collection and no real sense of memory management. All in all, I feel with using languages like these you learn how the most basics of programming works. You can learn how to use abstract data types, can learn about algorithms and design patterns, can learn a little bit about how to write efficient code, but won't really truly understand what's going on under the hood. There's no concept of where in memory things are, how long things exist for, what sort of caching impact your memory access is incurring, or anything of the like. When using a higher level language you can learn about lower level details in theory, but with C or C++ (or even assembly if you have the luck of finding courses offered in it) you can learn first-hand directly about these things.

This really is just shooting in the dark, but it feels like learning with Java in a lax curriculum compared to learning in C/C++ in a rigorous curriculum is like playing SC2 without learning how to make efficient use of your mouse and keyboard. Sure there's tons and tons of people in bronze up through low master who can "get by" and do fairly well without using more than one hotkey while flailing their mouse around widely. But the people who are really sought after are the ones who have mastered the fundamentals of their keyboard, mouse, and playing mechanics because these are the people that can really spend their time focusing on implementing strategies to defeat their opponents.

Thanks to everyone else! Glad you all like the article
uZr
Profile Joined April 2011
20 Posts
Last Edited: 2012-11-18 20:01:37
November 18 2012 19:57 GMT
#50
On November 19 2012 01:21 iamke55 wrote:
What he means is something that will rarely ever come into effect, but nonetheless is true. To see the difference between an array name and a pointer to the first element, run this test program.

b should have a size of the number of characters plus the null at the end, while a's size is the number of bytes a pointer uses. If you pass the array name as a function argument, it is cast to a pointer.

Thanks for the heads up, I had not thought about that particular case, when it indeed makes much more sense And that's indeed something I use with array of variable size once in a while (which does not work when you're forced to restrict to ANSI C for some work ^^).
Never thought of it like it was phrased by OP though, but that's indeed probably the best way to write that. (English isn't the language in which I learnt programming at first, which sometimes cause me to misunderstand some specific terms).
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
Last Edited: 2012-11-18 22:12:38
November 18 2012 22:05 GMT
#51
On November 19 2012 03:21 CecilSunkure wrote:
This really is just shooting in the dark, but it feels like learning with Java in a lax curriculum compared to learning in C/C++ in a rigorous curriculum is like playing SC2 without learning how to make efficient use of your mouse and keyboard. Sure there's tons and tons of people in bronze up through low master who can "get by" and do fairly well without using more than one hotkey while flailing their mouse around widely. But the people who are really sought after are the ones who have mastered the fundamentals of their keyboard, mouse, and playing mechanics because these are the people that can really spend their time focusing on implementing strategies to defeat their opponents.

It's the other way round. Starting with C++ is like starting with learning elaborate build orders, while starting with higher level languages is like learning how to control your units (how to use the existing units/classes, instead of how to produce these classes/units in detail).

In programming, the people who are sought after are those who can finish a given task quickly using robust code, using whatever means is appropriate. Nobody cares if you know every single detail of all the machines your code might ever run on as long as your code solves the given task (that includes a certain level of performance), is produced quickly (= reduced cost) and robust (= reduced cost in the long run).

Highly optimized C++ code is often fragile and costly to produce (especially if you aren't really(!) good with templates). That's why you use high level constructs in C++ pretty much everywhere except for the critical code parts. But since you do that anyways, you might as well start with something like C# instead, because it's very much like using high level constructs in C++, except easier and more robust.


Oh and of course there is a concept of memory management in these languages. The general workings of these garbage collectors are no secrets. You should be roughly aware of how your garbage collector works. C++ doesn't force you to learn about the details of new/delete either (and the new algorithm can hardly be called simple, plus it's OS dependant).
If you have a good reason to disagree with the above, please tell me. Thank you.
nimdil
Profile Blog Joined January 2011
Poland3751 Posts
November 19 2012 01:03 GMT
#52
On November 19 2012 00:52 kYem wrote:
I'm learning Java right, however i would love to learn c++ as well, just wondering how similar these to language are or how hard it's compared to Java.

As moxley said, i do feel Java has a lot bigger market share, so it's very good investment as you can find a well paid job, while it would be very difficult to get one for c++ in a software company.

Maybe someone did a switch from Java to c++ and can share their experiences.

Java is defeinitely the biggest language in business/enterprise/corporate environment. Unofrtunately Java is also bloated pain in the ass :/ I'd choose C# over Java anytime I can use Windows platform.
Kerm
Profile Joined April 2010
France467 Posts
Last Edited: 2012-11-19 16:39:28
November 19 2012 16:38 GMT
#53
On November 19 2012 07:05 spinesheath wrote:
Show nested quote +
On November 19 2012 03:21 CecilSunkure wrote:
This really is just shooting in the dark, but it feels like learning with Java in a lax curriculum compared to learning in C/C++ in a rigorous curriculum is like playing SC2 without learning how to make efficient use of your mouse and keyboard. Sure there's tons and tons of people in bronze up through low master who can "get by" and do fairly well without using more than one hotkey while flailing their mouse around widely. But the people who are really sought after are the ones who have mastered the fundamentals of their keyboard, mouse, and playing mechanics because these are the people that can really spend their time focusing on implementing strategies to defeat their opponents.

It's the other way round. Starting with C++ is like starting with learning elaborate build orders, while starting with higher level languages is like learning how to control your units (how to use the existing units/classes, instead of how to produce these classes/units in detail).

In programming, the people who are sought after are those who can finish a given task quickly using robust code, using whatever means is appropriate. Nobody cares if you know every single detail of all the machines your code might ever run on as long as your code solves the given task (that includes a certain level of performance), is produced quickly (= reduced cost) and robust (= reduced cost in the long run).

Highly optimized C++ code is often fragile and costly to produce (especially if you aren't really(!) good with templates). That's why you use high level constructs in C++ pretty much everywhere except for the critical code parts. But since you do that anyways, you might as well start with something like C# instead, because it's very much like using high level constructs in C++, except easier and more robust.


Oh and of course there is a concept of memory management in these languages. The general workings of these garbage collectors are no secrets. You should be roughly aware of how your garbage collector works. C++ doesn't force you to learn about the details of new/delete either (and the new algorithm can hardly be called simple, plus it's OS dependant).


Cecil is right. As far as game programming is concerned, at least for Console/PC high-end titles, C++ is the way to go. If you want to break into that part of the industry, you are wasting your time if you're not gearing toward being excellent at C++.

What you are explaining probably makes sense for general sofware engineering, but game programming is different.
What i know is that I know nothing - [http://twitter.com/UncleKerm]
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
Last Edited: 2012-11-19 20:44:33
November 19 2012 20:43 GMT
#54
On November 20 2012 01:38 Kerm wrote:
Show nested quote +
On November 19 2012 07:05 spinesheath wrote:
On November 19 2012 03:21 CecilSunkure wrote:
This really is just shooting in the dark, but it feels like learning with Java in a lax curriculum compared to learning in C/C++ in a rigorous curriculum is like playing SC2 without learning how to make efficient use of your mouse and keyboard. Sure there's tons and tons of people in bronze up through low master who can "get by" and do fairly well without using more than one hotkey while flailing their mouse around widely. But the people who are really sought after are the ones who have mastered the fundamentals of their keyboard, mouse, and playing mechanics because these are the people that can really spend their time focusing on implementing strategies to defeat their opponents.

It's the other way round. Starting with C++ is like starting with learning elaborate build orders, while starting with higher level languages is like learning how to control your units (how to use the existing units/classes, instead of how to produce these classes/units in detail).

In programming, the people who are sought after are those who can finish a given task quickly using robust code, using whatever means is appropriate. Nobody cares if you know every single detail of all the machines your code might ever run on as long as your code solves the given task (that includes a certain level of performance), is produced quickly (= reduced cost) and robust (= reduced cost in the long run).

Highly optimized C++ code is often fragile and costly to produce (especially if you aren't really(!) good with templates). That's why you use high level constructs in C++ pretty much everywhere except for the critical code parts. But since you do that anyways, you might as well start with something like C# instead, because it's very much like using high level constructs in C++, except easier and more robust.


Oh and of course there is a concept of memory management in these languages. The general workings of these garbage collectors are no secrets. You should be roughly aware of how your garbage collector works. C++ doesn't force you to learn about the details of new/delete either (and the new algorithm can hardly be called simple, plus it's OS dependant).


Cecil is right. As far as game programming is concerned, at least for Console/PC high-end titles, C++ is the way to go. If you want to break into that part of the industry, you are wasting your time if you're not gearing toward being excellent at C++.

What you are explaining probably makes sense for general sofware engineering, but game programming is different.

I'm saying C# will teach you how to program properly in C++, except that you can focus on one aspect (algorithms, software engineering/architecture) without having to fight with all the problems C++ throws at beginners. The step from C# to C++ is rather easy assuming you learnt C# properly. You pick a book like The C++ Programming Language which covers all the technical language details and you're set.

It's divide and conquer applied to learning C++.
If you have a good reason to disagree with the above, please tell me. Thank you.
CecilSunkure
Profile Blog Joined May 2010
United States2829 Posts
November 19 2012 20:49 GMT
#55
On November 20 2012 05:43 spinesheath wrote:
Show nested quote +
On November 20 2012 01:38 Kerm wrote:
On November 19 2012 07:05 spinesheath wrote:
On November 19 2012 03:21 CecilSunkure wrote:
This really is just shooting in the dark, but it feels like learning with Java in a lax curriculum compared to learning in C/C++ in a rigorous curriculum is like playing SC2 without learning how to make efficient use of your mouse and keyboard. Sure there's tons and tons of people in bronze up through low master who can "get by" and do fairly well without using more than one hotkey while flailing their mouse around widely. But the people who are really sought after are the ones who have mastered the fundamentals of their keyboard, mouse, and playing mechanics because these are the people that can really spend their time focusing on implementing strategies to defeat their opponents.

It's the other way round. Starting with C++ is like starting with learning elaborate build orders, while starting with higher level languages is like learning how to control your units (how to use the existing units/classes, instead of how to produce these classes/units in detail).

In programming, the people who are sought after are those who can finish a given task quickly using robust code, using whatever means is appropriate. Nobody cares if you know every single detail of all the machines your code might ever run on as long as your code solves the given task (that includes a certain level of performance), is produced quickly (= reduced cost) and robust (= reduced cost in the long run).

Highly optimized C++ code is often fragile and costly to produce (especially if you aren't really(!) good with templates). That's why you use high level constructs in C++ pretty much everywhere except for the critical code parts. But since you do that anyways, you might as well start with something like C# instead, because it's very much like using high level constructs in C++, except easier and more robust.


Oh and of course there is a concept of memory management in these languages. The general workings of these garbage collectors are no secrets. You should be roughly aware of how your garbage collector works. C++ doesn't force you to learn about the details of new/delete either (and the new algorithm can hardly be called simple, plus it's OS dependant).


Cecil is right. As far as game programming is concerned, at least for Console/PC high-end titles, C++ is the way to go. If you want to break into that part of the industry, you are wasting your time if you're not gearing toward being excellent at C++.

What you are explaining probably makes sense for general sofware engineering, but game programming is different.

I'm saying C# will teach you how to program properly in C++, except that you can focus on one aspect (algorithms, software engineering/architecture) without having to fight with all the problems C++ throws at beginners. The step from C# to C++ is rather easy assuming you learnt C# properly. You pick a book like The C++ Programming Language which covers all the technical language details and you're set.

It's divide and conquer applied to learning C++.

Although it sounds like it would work theoretically, I don't really have any experience with anyone learning C++ by learning another language and I can't really judge it for myself. I do know that the people I'm around graduate and are very successful, and they learned C, then C++.
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
November 19 2012 21:00 GMT
#56
On November 20 2012 05:49 CecilSunkure wrote:
Show nested quote +
On November 20 2012 05:43 spinesheath wrote:
On November 20 2012 01:38 Kerm wrote:
On November 19 2012 07:05 spinesheath wrote:
On November 19 2012 03:21 CecilSunkure wrote:
This really is just shooting in the dark, but it feels like learning with Java in a lax curriculum compared to learning in C/C++ in a rigorous curriculum is like playing SC2 without learning how to make efficient use of your mouse and keyboard. Sure there's tons and tons of people in bronze up through low master who can "get by" and do fairly well without using more than one hotkey while flailing their mouse around widely. But the people who are really sought after are the ones who have mastered the fundamentals of their keyboard, mouse, and playing mechanics because these are the people that can really spend their time focusing on implementing strategies to defeat their opponents.

It's the other way round. Starting with C++ is like starting with learning elaborate build orders, while starting with higher level languages is like learning how to control your units (how to use the existing units/classes, instead of how to produce these classes/units in detail).

In programming, the people who are sought after are those who can finish a given task quickly using robust code, using whatever means is appropriate. Nobody cares if you know every single detail of all the machines your code might ever run on as long as your code solves the given task (that includes a certain level of performance), is produced quickly (= reduced cost) and robust (= reduced cost in the long run).

Highly optimized C++ code is often fragile and costly to produce (especially if you aren't really(!) good with templates). That's why you use high level constructs in C++ pretty much everywhere except for the critical code parts. But since you do that anyways, you might as well start with something like C# instead, because it's very much like using high level constructs in C++, except easier and more robust.


Oh and of course there is a concept of memory management in these languages. The general workings of these garbage collectors are no secrets. You should be roughly aware of how your garbage collector works. C++ doesn't force you to learn about the details of new/delete either (and the new algorithm can hardly be called simple, plus it's OS dependant).


Cecil is right. As far as game programming is concerned, at least for Console/PC high-end titles, C++ is the way to go. If you want to break into that part of the industry, you are wasting your time if you're not gearing toward being excellent at C++.

What you are explaining probably makes sense for general sofware engineering, but game programming is different.

I'm saying C# will teach you how to program properly in C++, except that you can focus on one aspect (algorithms, software engineering/architecture) without having to fight with all the problems C++ throws at beginners. The step from C# to C++ is rather easy assuming you learnt C# properly. You pick a book like The C++ Programming Language which covers all the technical language details and you're set.

It's divide and conquer applied to learning C++.

Although it sounds like it would work theoretically, I don't really have any experience with anyone learning C++ by learning another language and I can't really judge it for myself. I do know that the people I'm around graduate and are very successful, and they learned C, then C++.

I have never seen anyone start with C/C++ and get good with it reasonably fast and without producing really awful code until some magical turning point. Me included. C++ is so deep, and if you don't even know how to properly design a program yet it's overwhelming.
If you have a good reason to disagree with the above, please tell me. Thank you.
Sapp
Profile Joined March 2011
Poland173 Posts
November 19 2012 21:05 GMT
#57
fuck me... /O.O\
Quote? O.o?
skorched
Profile Joined October 2010
United States81 Posts
November 20 2012 05:43 GMT
#58
Awesome writeup Cecil! Also pretty useful if you want to be a hacker/pentester! A lil off subject but your dt expand is still working great on the ladder. XD
I love the sound of Medivacs getting feedbacked.
Tobberoth
Profile Joined August 2010
Sweden6375 Posts
Last Edited: 2012-11-20 08:48:54
November 20 2012 08:48 GMT
#59
Learning C and C++ after you know another programming language isn't all that hard. You already know the basics of programming (control structures, functions, handling variables) so you can focus on the new stuff, such as pointers and memory management. It's a challenge, but it's a fun one. I would definitely recommend people who are studying other languages to learn those languages first, then dwelve into C/C++ when done, if still interested.

Thing is though, C/C++ development is becoming more and more of a niche. Like Cecil is saying, in progessional game development, for AAA titles etc, C/C++ is definitely the way to go. That's not to say you need to know C/C++ to work profesionally as a game programmer, pretty much all smartphone games and pretty much all Xbox Live Arcade games etc are coded using more highlevel languages like C#, Objective-C and Java.
phar
Profile Joined August 2011
United States1080 Posts
Last Edited: 2012-11-20 21:42:22
November 20 2012 19:57 GMT
#60
If you're talking about just getting a job out of college, your experience in one language or another really isn't going to mean shit. It's kind of blunt, but the programming you do in Uni is completely different compared to the programming you do in industry. If you're still in Uni, don't get hung up on one language or another - get a solid foundation in algorithms and data structures, and write lots of random code in whatever language(s), enough to be comfortable.

The point is, if you're just starting out in industry, your previous experience in a given language isn't going to even come close to preparing you for the volume of random weird shit that's going to come crawling out of the woodwork to bite you in the ass. You can only learn that stuff when you're hammering away at it for 50+ hours a week on the job. If you started with Java in Uni and are now doing enterprise c++, it's not that much different from starting with c++ in Uni and doing enterprise c++.

The more important part is to be really enthusiastic about it, and be willing to learn whatever is thrown at you as quickly as possible. That's the really good part of the OP; it's something someone can easily use to get more excited about programming in general.
Who after all is today speaking about the destruction of the Armenians?
Prev 1 2 3 4 5 6 7 Next All
Please log in or register to reply.
Live Events Refresh
Next event in 2h 29m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
SortOf 200
ProTech114
StarCraft: Brood War
actioN 743
Shuttle 728
Larva 289
Mini 196
Pusan 174
Hyun 163
Killer 117
Zeus 97
PianO 97
Sharp 93
[ Show more ]
ZerO 68
Dewaltoss 68
Light 43
sorry 38
Rush 31
soO 22
NotJumperer 19
Hm[arnc] 7
ajuk12(nOOB) 3
Dota 2
XaKoH 576
XcaliburYe131
League of Legends
JimRising 464
C9.Mang0254
Counter-Strike
olofmeister594
shoxiejesuss553
Super Smash Bros
Westballz17
Other Games
summit1g11935
Happy405
ZerO(Twitch)1
Organizations
Other Games
gamesdonequick699
StarCraft: Brood War
UltimateBattle 73
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 15 non-featured ]
StarCraft 2
• Berry_CruncH264
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• lizZardDota245
League of Legends
• Lourlo1080
• Jankos985
• Stunt482
Upcoming Events
Wardi Open
2h 29m
StarCraft2.fi
7h 29m
Replay Cast
14h 29m
The PondCast
1d
OSC
1d 6h
Demi vs Mixu
Nicoract vs TBD
Babymarine vs MindelVK
ForJumy vs TBD
Shameless vs Percival
Replay Cast
1d 14h
Korean StarCraft League
2 days
CranKy Ducklings
3 days
SC Evo League
3 days
BSL 21
3 days
Sziky vs OyAji
Gypsy vs eOnzErG
[ Show More ]
OSC
3 days
Solar vs Creator
ByuN vs Gerald
Percival vs Babymarine
Moja vs Krystianer
EnDerr vs ForJumy
sebesdes vs Nicoract
Sparkling Tuna Cup
4 days
OSC
4 days
BSL 21
4 days
Bonyth vs StRyKeR
Tarson vs Dandy
Replay Cast
4 days
Wardi Open
5 days
StarCraft2.fi
5 days
Replay Cast
5 days
StarCraft2.fi
6 days
PiGosaur Monday
6 days
Liquipedia Results

Completed

Proleague 2025-11-30
RSL Revival: Season 3
Light HT

Ongoing

C-Race Season 1
IPSL Winter 2025-26
KCM Race Survival 2025 Season 4
YSL S2
BSL Season 21
CSCL: Masked Kings S3
Slon Tour Season 2
Acropolis #4 - TS3
META Madness #9
SL Budapest Major 2025
ESL Impact League Season 8
BLAST Rivals Fall 2025
IEM Chengdu 2025
PGL Masters Bucharest 2025
Thunderpick World Champ.
CS Asia Championships 2025
ESL Pro League S22
StarSeries Fall 2025
FISSURE Playground #2

Upcoming

BSL 21 Non-Korean Championship
Acropolis #4
IPSL Spring 2026
Bellum Gens Elite Stara Zagora 2026
HSC XXVIII
RSL Offline Finals
WardiTV 2025
Kuram Kup
PGL Cluj-Napoca 2026
IEM Kraków 2026
BLAST Bounty Winter 2026
BLAST Bounty Winter Qual
eXTREMESLAND 2025
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2025 TLnet. All Rights Reserved.