• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 07:14
CEST 13:14
KST 20:14
  • 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
[ASL22] Ro16 Preview: Rough Waters8[ASL22] Ro24 Preview: Siren's Call8[ASL22] Ro24 Preview: Summer's End9Serral wins HomeStory Cup 2915Serral wins Maestros of the Game 244
Community News
Weekly Cups (Aug 30-Sep 7): herO thrives amid growing schism0Official StarCraft website teases new content ahead of BlizzCon?109Stellar Fest TWO the Moon (Dec 16-20)9Weekly Cups (August 24-30): Patches' balance mod takes over3New 3v3 BGH Ladder (and more) on ShieldBattery!46
StarCraft 2
General
Weekly Cups (Aug 30-Sep 7): herO thrives amid growing schism Nexon wins bid to develop StarCraft IP content, distribute Overwatch mobile game Balance hotfix patch 5.0.16b (July 16) SC4ALL: II Winner Will Earn a Spot at HSC 30! Weekly Cups (August 24-30): Patches' balance mod takes over
Tourneys
2026 GSTL Announcement Sparkling Tuna Cup - Weekly Open Tournament Stellar Fest TWO the Moon (Dec 16-20) IntoTheTV X SOOP SC2 League : Weekly & Monthly SC2 INu's Battles#20 [BO.9]
Strategy
[G] Having the right mentality to improve
Custom Maps
Nexus Wars 2021 GUIDE [M] (2) Industrial Park
External Content
Mutation # 542 The Ascended Mutation # 541 Binary Choice The PondCast: SC2 News & Results Mutation # 540 Dodge This
Brood War
General
Official StarCraft website teases new content ahead of BlizzCon? New 3v3 BGH Ladder (and more) on ShieldBattery! ASL22 General Discussion BGH Auto Balance -> http://bghmmr.eu/ Pros React To: Calm's Big Brain Play Vs Mini
Tourneys
[ASL22] Ro16 Group B [ASL22] Ro16 Group A [ASL22] Ro24 Group F [Megathread] Daily Proleagues
Strategy
Simple Questions, Simple Answers Odyssey Mineral Stack Saturation Replay Review Process - What do you do? Game Theory for Starcraft
Other Games
General Games
Nintendo Switch Thread Diablo IV EVE Corporation [Maplestory Hardcore] Let's Play~!! General RTS Discussion Thread
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
[TL LoL EUW IHs] Teemo shall perish TSM pausing esports and CLG Dead
Heroes of the Storm
Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
TL Mafia Power Rank TL Mafia Community Thread NeO.D_StephenKing vs This Guy From 1 Million Dance
Community
General
US Politics Mega-thread Things Aren’t Peaceful in Palestine UK Politics Mega-thread Russo-Ukrainian War Thread Artificial Intelligence Thread
Fan Clubs
MarineLorD Fan Club The Creator Fan Club The ShoWTimE Fan Club
Media & Entertainment
Movie Discussion! Anime Discussion Thread
Sports
Football (Soccer) Thread TeamLiquid Health and Fitness Initiative For 2023 MLB/Baseball 2023
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread
TL Community
The Automated Ban List Northern Ireland Global Starcraft
Blogs
F* the Children and Get Off …
TrAiDoS
Dreaming of BW patches (mod…
c3rberUs
Regacy Esports: The Bh…
regacyesports
LOCKPICKING NOOB
LUCKY_NOOB
Customize Sidebar...

Website Feedback

Closed Threads



Active: 7106 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
Poland3772 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
Poland3772 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
GSL
11:00
2026 GSTL: Main Stage Day 5
IntoTheiNu 315
CranKy Ducklings SOOP50
Rex13
LiquipediaDiscussion
Afreeca Starleague
10:00
Ro16, Group B
Leta vs ggaemo
Jaedong vs Queen
Afreeca ASL 14340
StarCastTV_EN345
Liquipedia
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
Lowko304
Trap 24
ByuN (SOOP) 23
Rex 13
StarCraft: Brood War
Calm 14743
Britney 7747
Bisu 6322
BeSt 1346
EffOrt 1150
Hyun 556
Light 327
Zeus 245
Larva 231
Stork 175
[ Show more ]
hero 166
Rush 166
Mind 127
Barracks 99
ToSsGirL 72
soO 64
Hm[arnc] 35
Sharp 32
HiyA 29
Shine 29
Terrorterran 28
Sexy 28
sSak 18
Icarus 18
SilentControl 13
Sea.KH 12
Noble 10
JulyZerg 9
Yoon 7
Dota 2
Dendi472
League of Legends
JimRising 400
KnowMe49
Counter-Strike
shoxiejesuss1226
dupreeh220
edward120
Other Games
B2W.Neo615
crisheroes288
XaKoH 283
byalli187
Organizations
StarCraft: Brood War
UltimateBattle 242
[ Show 9 non-featured ]
StarCraft 2
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• Migwel
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
League of Legends
• Jankos1773
Upcoming Events
PiGosaur Cup
12h 46m
Kung Fu Cup
23h 46m
Replay Cast
1d 12h
The PondCast
1d 22h
KCM Race Survival
1d 22h
Escore
2 days
IntoTheTV X SOOP
2 days
CranKy Ducklings
3 days
Sparkling Tuna Cup
4 days
Shopify Rebellion Sundays
5 days
Spirit vs Mixu
Clem vs TBD
[ Show More ]
RSL Revival
5 days
Replay Cast
5 days
Afreeca Starleague
5 days
WardiTV Weekly
5 days
Afreeca Starleague
6 days
GSL
6 days
Liquipedia Results

Completed

Proleague 2026-09-02
PiG Sty Festival 8.0
Big Dog Cup 2026 Div 1

Ongoing

KCM Race Survival 2026 Season 3
K-JUNGMAN
ASL Season 22
Super Anchor Qualifying S3
CSL 2026 AUTUMN (S22)
Acropolis #5
Acropolis #5 - TRS
RSL Revival: Season 6
Calamity Invitational
FISSURE Playground #3
BLAST Open Fall 2026
Esports World Cup 2026
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
XSE Pro League 2026

Upcoming

Escore Tournament S3: King of Kings
Acropolis #5 - GSA
Blizzard Classic Cup 2026
Acropolis #5 - GSB
Acropolis #5 - GSC
SC4ALL II: Brood War
HSC XXX
Stellar Fest 2: Lunar Cup
SC4ALL II: StarCraft II
Kung Fu Cup 2026 Grand Finals
RSL Offline Finals
Stake Ranked Episode 6
BLAST Rivals Fall 2026
IEM Beijing 2026
Stake Ranked Episode 5
PGL Masters Bucharest 2026
1win Private Club #2
Thunderpick World Champ. '26
ESL Pro League Season 24
Stake Ranked Episode 4
1win Private Club #1
Logitech G Play Connect 2026
SL StarSeries Fall 2026
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 © 2026 TLnet. All Rights Reserved.