Starting game programing

Comments

  • edited
    @dislekcia: I have no qualms about asking @Blanky if he's made games. I do have an issue when what I feel is a well-written post from him is called out for being destructive advice.

    However, rereading what @BlackShipsFilltheSky actually posted, specifically: 'Otherwise I'm going to have to call you out and say', I retract some of my passive animosity. I thought he was calling him out regardless.

    EDIT: Oh, hello there page two. We sure can talk a lot...
    Thanked by 1Blanky
  • edited
    Ok. For the last time: Focusing on learning C++ is the wrong thing to do if you want to be a game programmer. Yes, even if you want to be a hardcore engine programmer. Here's why:

    If all you needed to understand in order to make games was C++ and some random 3D API (ROFL! Why use APIs, man, that's easy-mode, code your own drivers for 3D hardware and really show you know what's going on) then we'd be absolutely swimming in local games. Every single university computer science department would be churning them out like catholic babies!

    Even if only 10% of the computer science students at our universities were interested in making games (and that's super conservative, in my experience - lecturing at universities to comp-sci students - that number is more like 90%) and C++ knowledge was all we needed, we'd have about 100 games coming out every year. And that's just in SA! We'd have orders of magnitude more games coming out globally...

    Except that's obviously not happening, so that must point to something else being the real bottleneck in terms of skills needed to make games. Perhaps those skills are the sorts of things that the people on this thread who have been making games successfully are talking about? It's not like we don't understand or use C++ when it's necessary, it's just that focusing on learning C++ is the wrong way to think about the problem of becoming a game programmer!

    It's not just that... The whole "Learn C++, write engine, make game" concept is completely, totally and utterly wrong. I've stated in posts above this one how the idea of trying to code a game engine without being an expert at using several existing game engines is completely laughable. So far nobody has yet to explain to me how learning C++ is supposed to even help with that. The real problem is that the concept is a false peak: People fixate on trying to achieve their C++ mastery, spend loads of time on it and then find out that they're no closer to building that damn low-level game code, let alone the interesting game logic that's supposed to run on top of that. That's when 99% of the people who have asked this question this way give up, compared to only 50% who give up if they focus on starting with a tool.

    Because, and here's the kicker, people assume that "game programming" only means "low level engine code", that's not the case. Game logic progamming is what, exactly? It's not game design. That's a completely different beast (because if it wasn't, then every game project headed by a programmer would be an amazing game and we all know that's not the case) and that's not what people have been talking about as a skill that much in this thread so far. The part that really gets people confused is when I go on about how "low level engine code" doesn't even really exist itself! Every single game needs vastly different engine elements under the hood. I mean, sure, Desktop Dungeons is running on Unity, but I had to build a bunch of engine functionality INSIDE THAT for the game for a whole host of reasons.

    Even the developers that are saying that learning their hardcore C++ helped them become game programmers are actually game programmers for different reasons. Maybe they've got a special kind of focus that allows them to deal with the huge time gaps between achieving things down that path, or maybe they focused on implementing just the right sorts of algorithms from existing games to give them enough of an understanding of what goes into making a game. Either way, if they're working on games, then C++ and some 3D API is not their most important skill. Nor is it even their most important foundational understanding, it's just another tool that they use in their jobs, just like I use it in mine.

    But for some reason, it's a tool that has great marketing in certain circles. The really sad part is that there are many ways for people to learn the real foundational skills of game programming, most of those ways have better reward-to-effort ratios than trying to start by learning C++ (not to mention better success ratios too) that's why you're seeing a bunch of game designers go "Why pick the least optimal strategy?! ARGH ARGH ARGH!"

    P.S. Seriously, stop thinking there are divisions over language competence here: I've been paid to write C++ code for PSP, PS2 and Xbox; I've written so many engines that I've lost count; I've won awards for games made in Game Maker. I'm not pissing on your tech focus here, I'm trying to move your tech focus to the REALLY INTERESTING STUFF YOU'RE IGNORING!

    P.P.S. Why are people so hostile to the idea of fucking with Game Maker for a couple of weeks, making some things, then returning to their hallowed C++ a better coder with better understanding of what the things they built actually needed? Nobody's saying you can't do that, only that more exploration is a good thing!
  • edited
    And just because I haven't typed enough:
    @dislekcia: I am not flaunting proficiency in C++ as an edge. I'm referring more to knowledge of how the underlying systems work (Lighting, physics, game loops , etc...)

    Do you feel that someone who has used a tool all his life vs. someone who started out writing his own engines has the same skill-level and will produce the same results?
    No. I think the person who used tools to write games would be better than the C++ person. Not only would the tool person write smarter game-logic that fit to the engine being used due to their experience, they'd also be able to write smarter engine-level code if needed due to their exposure to multiple fully-featured game engines. They'd know where a tool-chain would integrate, how artists would use their scripting system and exactly which elements of an engine their game would need written custom, to name but a few examples. They'd also spend a hell of a lot less time in premature optimisation, seeing as they would be more likely to build first and iterate on a stable, if slow, base. Plus the tool person would have way more understanding of what went into finishing a game, having done it a hell of a lot more.

    That's what all the people that I've hired have been able to do, at least.
    "I want to learn C++ and DX11/OGL, because by writing my own tech I'll be an awesome game programmer!" This is about the only path that makes sense.
    Except it doesn't make sense at all. That should read as: "I want to learn how other games were made so that I can implement my own versions of their tech in as many different languages and APIs as possible, then I'll be an awesome game programmer!" If C++ is their primary focus, they're probably not that useful. And if they ONLY focus on C++ and rant at you about how awesome C++ is when you ask them what else they know, then they're completely useless.
  • Referring back to my previous post:
    Developers are stubborn and they will ultimately do whatever they want. Sure we can guide them, but haranguing them on why their ideas are silly will only serve to alienate them.
    I'd like to ammend that by saying that we learn to get better at accepting advice later on if you want to make it. But @Fanie has been discussing things further in private messages with me and Blanky. You can be right all you want but ultimately we just did a great job of making someone not want to discuss it any further on the forum. Regarless of what's the right option, sometime we need to learn when to let someone be and rather address their current needs or question. (Some people did do this.)

    Because developer's are stubborn.
    Thanked by 2hanli Blanky
  • Good game developers are the complete opposite of stubborn ;)
    Thanked by 1EvanGreenwood
  • If that were true, judging by the way opinions are being stuck to in this thread, South African game dev has a long way to go. Turning people away from the forums for help is not a community, its an autocracy. Rather than saying what someone wants to do is stupid, no matter how much you believe it, ask yourself how you can help do it well.
  • @hanli I don't think people are being turned away from the forum. If @fanie prefers to discuss this topic only with others more inline with what his opinion are, then so be it. No one is calling him stupid, there are however significant disagreements about what course of action to follow. I think what's being discussed here is important, particularly if we are looking to be able to give newcomers sound advice.
  • edited
    @Hanli: I share this view with you deeply. I am very new to this community and this is the feeling that I am getting. Poor Fanie probably didn't expect all this from his request. I am glad you got what you made the post for though fanie.
    Thanked by 1hanli
  • I find it disturbing that in a thread where @fanie asked a direct question nobody is even addressing him anymore.
  • @retroFuture: I think then this discussion should move to a post for discussing the advice to to give to newcomers, and not stay on fanies request.
    Though, this will probably turn out to be an infinite philosophical battle, as they tend to be, as peoples experience and opinions vary, and thank goodness for this, not being unique would stifle growth.
    There will always be differences, this might be cultural, the neighborhood you grew up in, the events that happened in your life. Your education, your passion, your desires.
    The sooner you learn to accept this, the better it is for the community.

    Take these people, they do it because they have passion, if they conformed to everyone else, they wouldn't have been so unique and daring, society can have a nasty way of stifling people due to 'society norm'. People can be so much greater than society if they stop limiting themselves to society:

    http://wollay.blogspot.com/
    One of my favourite projects, totally amazing work and by one developer only: C++ and DirectX only. Why? I believe it is his passion.

    http://the-witness.net/
    http://braid-game.com/
    Both developed in C++, totally awesome games and it is amazing what they have achieved.

    @fanie: Check out the blogs, Great places to get inspiration.

    Do what you love, consider what society says, but please, don't limit yourself to their perceptions and advice, great things comes by moving past these limits.
  • Fanie, as someone who started with Pascal, then learned Java and C++ and is now using C#, built 2.5 game engines before he got tired of making tools, moved to Torque then onto Unity, worked for 8 years on building gambling games and other apps professionally and am now 1 month from releasing a commercial game (http://roguemoonstudios.com/systemcrash/) through my own studio, let me just say that it's a perfectly fine path to take, whatever anyone else says.

    Hell, it's more than fine. Mastering one of the C-family of languages is a strong advantage in your favour, in terms of skillset. Not just for game programming, but programming as a career in general. I say that as someone who has reviewed job applicants for a large game development company. Learn C++ and then most languages are pretty easy to pick up as and when needed.

    If you have c++ / api questions, just post them and I'm sure someone will try and help you. It's been a while since I looked at DirectX, but I'm sure someone will either answer you or point you in the right direction.

    In-between all the people trying to steer you toward Gamemaker, of course. ;)
    Thanked by 2Blanky mattbenic
  • If I may add something to hanli’s post that “South African game dev has a long way to go”, yes I completely agree. From my professional experiences in Aviation and other technologies, SA never stood back for any other country in the world. And I don’t see a reason, why countries like the U.S.A and Germany should take the lead in game dev.
    garethf, thanks for your comment. I do appreciate some “constructive advice”
    And, blanky, yea, I never thought my question would go to such dimensions. haha
    Thanked by 1Blanky
  • edited
    Rofl, yeah, it's a bit ridiculous that it would be so contentious. XD

    It's just a programming language, you're a programmer, pick it up and move on if you want to, or don't if you don't want to. You'll know when/if you feel like using a 3rd party engine rather than rolling your own. Any experience you gain along the way will help you if you need to extend any tools/engine you work with.

    I'd give you better advice about learning resources, but it's been like a decade since I taught myself. I don't even know what resources are still up and current, lol.

    I learned C++ and the basics of OpenGL at Uni. Then extended that with NeHe's tuts, which are pretty cool, though they are OpenGl. http://nehe.gamedev.net/

    Then I taught myself directX basically just though knowing OpenGL and doing the directX tuts in the documentation. It's a little different, directX is a bit more OOP than OpenGL, but the concepts are really pretty similar. Learn one and picking up the other is a snap.

    There were also random dev articles around the web, but damned if I can remember the addresses of any of them now. Just ask questions if you need to. And don't overlook stackoverflow, tons of good general programming answers there.
    Thanked by 1Blanky
  • edited
    @hanli said:
    If that were true, judging by the way opinions are being stuck to in this thread, South African game dev has a long way to go. Turning people away from the forums for help is not a community, its an autocracy. Rather than saying what someone wants to do is stupid, no matter how much you believe it, ask yourself how you can help do it well.
    Nobody attacked @fanie at all. I don't think it's very fair to insinuate that the experience and provable facts that successful local developers have been talking about here are merely opinions. I also don't think it's fair to say that "both sides" of this debate are equally stubbornly sticking to opinions based on that falsehood - Show the developers suggesting that more experience with existing engines is a good thing a fast way to get that experience with C++ and watch them "reverse" their "opinions" in a second. Furthermore, nobody is exercising any kind of power over anyone else, so calling a flowing discussion an autocracy is unwarranted and harmful.

    Please don't make any of this personal, so far a lot of people have been working really hard to prevent that. And, truth be told, anyone who feels like this thread is a personal attack on anyone is unlikely to be good at handling feedback, which is a crucial skill for game development the world over - no matter what anyone's thoughts are on language choice.
    @Blanky said:
    http://the-witness.net/
    http://braid-game.com/
    Both developed in C++, totally awesome games and it is amazing what they have achieved.
    I don't think that your point is really being carried by those games at all. Jonathan Blow worked in the games industry for YEARS before he built Braid and now The Witness, he also is a huge proponent of efficiency through iterative experience, someone posted a really great talk about his take on game programming here recently (wish I could find the thing!) that spoke about how so many people focus on entirely the wrong things in game programming at the wrong time.

    The major point here is that nobody has been saying "Don't learn C++!", by all means, do learn it because it's a wonderful tool. Just don't try to learn 3 things that are really hard at the same time when you're just starting out. People don't seem to realise that you need to learn what game engines actually do, how games are a combination of game logic and engine logic (game logic actually being the far more interesting and important part of that, taking up more than 90% of the coding time of most games) and how to use an advanced programming language like C++.

    That's all people are saying in this thread: Space out your learning. Don't bite off more than you can chew right at the start, which is when you're most likely to do exactly that because you don't have the knowledge to properly estimate what's needed for what you're trying to do (Dunning-Kruger, anyone?)

    Holding up examples of developers with years and years of experience making games for other people before they made their own stuff in C++ isn't really a fair comparison for the guy that's just starting out. You can't be like Carmack or Blow without doing all the legwork first (yes, Carmack made loads of smaller games as part of his job before Commander Keen started the tech-innovation route for him).
    @fanie said:
    If I may add something to hanli’s post that “South African game dev has a long way to go”, yes I completely agree. From my professional experiences in Aviation and other technologies, SA never stood back for any other country in the world. And I don’t see a reason, why countries like the U.S.A and Germany should take the lead in game dev.
    I'm curious, how is South Africa not competing with larger, more established game producing countries? Also, what is Germany doing in game development that's so interesting? Does a person's country even really matter now that we've got the internet?
  • @dislekcia Here is the Jonathan Blow talk you are looking for (I think...) http://the-witness.net/news/2011/06/how-to-program-independent-games/ (3rd time posting... Lol)
  • edited
    Thanks! I have no idea why I couldn't find it via the search... Feels like we need to keep posting it all the time ;)
  • edited
    Hanli said:
    Turning people away from the forums for help is not a community, its an autocracy. Rather than saying what someone wants to do is stupid, no matter how much you believe it, ask yourself how you can help do it well.
    Surely giving advice, that's sincerely believed in, and has been gained through one's own experiences and through witnessing what other peoples' experiences are, is helpful (in intent if not always in effect).

    While standing aside while someone does things you know is not in their best interest, while this person follows a path that has been proven to be more statistically likely to fail, or even supporting them following a dubious path, would be unconscionable.

    @Hanli It really does sound like you're promoting blanket encouragement.

    Also you're ignoring the fact he was offered help, just not in the subject he needed help in. And then, with his options clear to him, he decided he didn't want to follow the path with which the community would be able to give him loads of help.

    And while I'd like to encourage him anyway, many many potential South African developers have started the journey Fanie is embarking on and have failed to reach their destination. Failure (to make games anyone will ever play) for someone in Fanie's position is a very real possibility. UCT is graduating dozens of programmers yearly who know C++ and DirectX, who want to make games, who have invested years learning to make games, but who still don't end up making games.

    And we as an industry are poorer for it.

    I have received a lot of applications for employment from programmers who have learnt the skillset Fanie is planning to acquire. Some of them have been friends of mine. I cannot hire them, no-one does, and they don't end up making games.

    Again, we as an industry are poorer for it.

    Encouraging that path, that has lead to so much failure, and such a drain on our industry, is tantamount to sabotaging ourselves. And I am glad that there are people on these forums that are prepared to hold their ground on this issue, and not be cowed by accusations of hostility and self harm.

    If Fanie wants to make games in C++ and DirectX that's fine, no-one is going to stop him, no-one can, and I'm sure he'll enjoy it. He might even make an awesome game in the future. I hope he does.

    But I take issue with those encouraging that path, when there are other paths that have proven to produce better results more reliably, producing more games, and more developers able to pursue their dreams, in South Africa.
    Blanky said:
    I think then this discussion should move to a post for discussing the advice to to give to newcomers, and not stay on fanies request.
    Most of this advice is already in the newcomers thread. http://makegamessa.com/discussion/6/gamedev-newcomer-faq
    Blanky said:
    Though, this will probably turn out to be an infinite philosophical battle, as they tend to be, as peoples experience and opinions vary, and thank goodness for this, not being unique would stifle growth.
    This isn't philosophy, these opinions can be tested with evidence. A few projects made by people who've done it the hard way overseas is at best anecdotal (and in the case of Jonathan Blow it proves if anything the opposite of what you want, he worked in AAA for over a decade before he made his game, and AAA experience isn't even an option here). People making more games in C++ is not the trend in this industry (in South Africa or in the world), in fact the trend is moving away from that.

    http://www.gamasutra.com/php-bin/news_index.php?story=6166
    Blanky said:
    Take these people, they do it because they have passion, if they conformed to everyone else, they wouldn't have been so unique and daring, society can have a nasty way of stifling people due to 'society norm'. People can be so much greater than society if they stop limiting themselves to society:
    This isn't a matter of being repressed by society. This is economics. A bad investment (in this case years of a person's life) is a bad investment no matter how different it is to the investments that successful investors make. No one gives prizes for making poor business decisions that fly in the face of available information.

    Of course it is possible to make something cool that receives widespread praise (and financial rewards if that's the goal) by building a game from scratch. But in the last decade in South Africa no one has done this (that I'm aware of, I'd love to be wrong). (I-Imagine did manage to pull it off in the early 2000s, though not since, and never again).

    So I'll grant you it's a possibility, but it's vastly less likely.

    And even if Fanie's only ambition in C++ is to learn the language to have a comprehensive understanding of programming. That's still a plan more prone to failure. The longer one spends solving low level problems that receive relatively little feedback and no financial reward the more opportunities that person has to move on and do something more rewarding that is not game development. This is something that has happened far too many times already. The faster we can get people making games and receiving encouraging feedback (or money) the better our industry's retention is going to be.

    @Blanky You suggest that your experience shows you that the path you've (presumably) followed is preferable. But I don't know what experience that is. You posture like you've had many successes in the field of game development, and the advice you give is equally sound as the advice of people I KNOW are succeeding and excelling in this field. Seriously, if you are speaking from a position of authority I'd love to know, but I think you don't have much experience.

    Here's a South African dude that went the C++ route. http://devmag.org.za/2012/02/16/a-guide-for-prospective-game-programmers-bobby-anguelov/

    He's super good at programming, he lectured for years at a South African University.

    But he had to go overseas to actually make games, because his skillset was rubbish here (despite him being highly skilled).

    He now works for a AAA company, which is rad for him, that was his dream, but crappy for South African Development. We lost someone that might have made awesome stuff here if he'd followed a different path.

    @Hanli We don't need any more brain drain, we don't want drop-outs, we want people making games in this country.

    @Blanky I'm sure you'd agree with the things Bobby says. He even recommends C++.

    But he had to go overseas to make games.
    garethf said:
    Fanie, as someone who started with Pascal, then learned Java and C++ and is now using C#, built 2.5 game engines before he got tired of making tools, moved to Torque then onto Unity, worked for 8 years on building gambling games and other apps professionally and am now 1 month from releasing a commercial game (http://roguemoonstudios.com/systemcrash/) through my own studio, let me just say that it's a perfectly fine path to take, whatever anyone else says.
    @Fanie, it took @GarethF over 8 years to make a commercial game of his own. That is really long. 8 years.
    Thanked by 1mattbenic
  • @BlackShipsFilltheSky Oh I remember that guy (Bobby). When I was at UP he was still lecturing there and my professor for Mathematical Modeling was his father (weird weird dude - but interesting).
  • Ran into Bobby at GDC, he'd just given a talk as part of the AI stream on pathfinding AI in the latest Hitman game, which is what he's been working on.
  • edited
    Guys, this same thing happens *every* time someone mentions learning C++/DirectGL on these forums. All that needs doing is a single reply giving pros and cons; not a 2 page debate about which way is The Bestest. Every. Time. Complete broken record stuff.

    C++ et al "traditional" game development learning is a great foundation for working on all aspects of the programming/scripting/tools side of game dev. No one can argue that. Everyone here who is saying that it is best to start with a 3rd party tool/engine *HAS* a C++/DirectGL background and years and years of experience developing them. They *would not* be the developers that they are with their umpteen released games if they didn't have that background. It is a part of them and their current skillset.

    Learning to use an alternate package such as Unity/GameMaker is going to get you "making something that is kinda similar to a game thing" much quicker than starting with an open IDE and some NEHE tutorials will, no doubt about that. It's not a point that is being argued, even by the h@rdc0r3z. Want to make a game and learn all about what is required to do so? Jump in with a solid foundation there and ready for you and spent your time and energy on the "game" programming part of things.

    There are tons of aspects to develop game and tons of skills necessary to pick up if you want to do all of them. It's true that new young people, not just in ZA but all over the world, have a bad habit of losing interest in game development as a whole if they decide to jump into the deep end first. But you can't force them to do otherwise. You can't argue with them. You can point out your experience and suggest what you have/haven't seen work in the past, and then let them run their own course.

    The *majority* of the old guard of ZA game development is *only* here because they started from scratch and learned C/C++/Java/Pascal/DirectX/OpenGL/etc. To immediately disregard that someone else who is young and new and hungry will simply fail because it was hard and not as easy as other methods is not only hypocritical but also a bit egotistical if you ask me.

    There's no magic key correct way to get into game programming (remember, this thread *is* called "starting game programming", not "learning how to design and make games"). If you have a dream that you want to follow, then go for it, stick with it, put the work in, and make sure that you love it. Those are far more important things that what method or process that you follow. You have a dream to work for id on Quake 7? Then buckle down and shoot for it.

    I don't hear anyone say that @Elyardine has been wasting his time painting and clay sculpting instead of practicing more with Photshop and XSI... nor is anyone laughing at him because companies such as Blizzard and Riot Games think that he has the talent and skillset and is good enough to work for them.

    Personally, I feel that doing both at the same time is the best way if you really want to be the strongest game programmer. There are some things that you can only learn by writing core level logic and rendering systems. Writing an optimal scene renderer is going to do nothing but improve how you plan and execute your game system controllers when you're actually making your game. In the same token, waiting years and years to actually learn all of the skills and building blocks of completing a full game while your "engine" is in development is going to keep you behind the curve there.

    So my end of rant advice to any new person starting out who wants to learn game programming?

    Do what you want to do, with whatever gives you passion and drive, learn your options, and be prepared for a lot of hard work and many years before you are actually good at anything; but don't ever give up.
    Thanked by 1AlienInvader
  • edited
    The ENTIRE old guard of ZA game development is *only* here because they started from scratch and learned C/C++/Java/Pascal/DirectX/OpenGL/etc. To immediately disregard that someone else who is young and new and hungry will simply fail because it was hard and not as easy as other methods is not only hypocritical but also a bit egotistical if you ask me.
    So who's the old guard then? I'm certainly not part of it if those are the criteria... I'm only here because Game Maker (after I'd ignored it for the umpteenth time) finally made doing all the things I had been trying to do before not only possible, but trivial. I started having fun making games because Game Maker started moving game ideas from the realm of "shit, how do you even do that" to "I wonder what happens when I do this". I only learned C++ after that, when I was at university - even though I'd tried before because "it was what you had to do", and only started succeeding at writing engines and good low-level code after things like GM and Unreal modding helped me build a framework that I could tack engine understanding onto, even though I'd been trying to do just that for years before GM.

    Are you really saying that we, as a community, shouldn't learn from our experiences and point people towards the best understanding we have at the moment? The "it was good enough for me" argument leaves us trying to cure cancer with leeches. Or we're taking textbooks away from kids because "Other people have managed to succeed at school with no textbooks, but don't worry, I believe in you".

    These debates spring up so often because people conflate their programming choice with their sense of self worth. If you don't view ego as an extension of compiler wizardry, then providing a simpler path to learn something is a service, not a denigration.

    What happened to the last new coder that sparked a debate like this?
    So my end of rant advice to any new person starting out who wants to learn game programming?

    Do what you want to do, with whatever gives you passion and drive, learn your options, and be prepared for a lot of hard work and many years before you are actually good at anything; but don't ever give up.
    That's good advice.

    All that I'm trying to do on top of that is point out ways that people might maximise their enjoyment, passion and drive, especially in ways that they can't really see right now because they don't have the perspective. How many more people could be making games locally if they didn't have to cauterize their joy with segfaults and slowly spinning triangles because they got poor information when they started?
  • So who's the old guard then? I'm certainly not part of it if those are the criteria...
    Apologies. I assumed that you learned programming in University first and were using it during your Naledi days long before you started using Game Maker :)
    Are you really saying that we, as a community, shouldn't learn from our experiences and point people towards the best understanding we have at the moment?
    Not one bit. My exact words were:
    All that needs doing is a single reply giving pros and cons; not a 2 page debate about which way is The Bestest.
    And I stand by that.

    The only reason that this thread is as long as it is, is due to an intense amount of stubbornness from all involved. Everyone here with experience and knowledge should be imparting it as best they can, then moving on. Not trying to ram it down someone's throat.
    Thanked by 2hanli mattbenic
  • @Fanie, it took @GarethF over 8 years to make a commercial game of his own. That is really long. 8 years.
    You didn't ask why it took 8 years.

    The implication I'm reading between those lines is that you think it's got something to do with how long it took to learn the skill set. No. It's got to do with time and money. I've had the programming skill set for years, hell, if anything I've forgotten things I knew when I was in varsity, or at least the skills have rusted a bit*. I was onto my 3rd game engine by the time I left Uni.

    Even if you have money, it takes a lot of time to make anything more than a simple game or a prototype of a complicated game. A LOT OF TIME. No way around that. For me, I had time in varsity, but not enough. And then I was working, I had the money but I nowhere near the time I needed. A couple of hours on weekends and evenings didn't cut it. Isn't that always how it goes, aye?

    But working professionally allowed me to build up the money to be able to afford to go unpaid for a year and a half making my first game.

    Danny made the point that if C++ knowledge was all that was needed, why aren't we awash in commercial games? Well, that's a straw man argument, for one thing. No one claimed that C++ knowledge was all that was needed. The simple reality is that you need time, money, skills (in multiple disciplines), perseverance and a little luck. You need all 5, in generous quantities. Most people don't have all 5 of those things. Most people are lucky if they have 1.

    But that doesn't mean C++ isn't a damn useful skill for someone who wants to be a good game programmer to have. Hell, I'd call it a foundational skill. The trade-off, of course, is that you're gonna spend more time at the untextured triangle phase. A deeper skillset takes more time to learn.

    It's up to him if he wants to make that trade-off. Rather support him in his choice than everyone pile on and browbeat the man into doing things the way you think is The Right Way.
    Personally, I feel that doing both at the same time is the best way if you really want to be the strongest game programmer. There are some things that you can only learn by writing core level logic and rendering systems. Writing an optimal scene renderer is going to do nothing but improve how you plan and execute your game system controllers when you're actually making your game. In the same token, waiting years and years to actually learn all of the skills and building blocks of completing a full game while your "engine" is in development is going to keep you behind the curve there.
    Well said.


    * but in exchange I've gained experience with production and scope control, among other things, so it's a fair trade.
    Thanked by 2hanli mattbenic
  • edited
    Dislekcia said:
    I'm certainly not part of it if those are the criteria... I'm only here because Game Maker (after I'd ignored it for the umpteenth time) finally made doing all the things I had been trying to do before not only possible, but trivial.
    Same. I was making more games before I devoted a year and a half to C++/OpenGL, and made more games afterwards as well. I had better options in retrospect, but I made a mistake.

    I'd happily take back that time and money and spend it on learning more game programming and jet skis.

    This argument starts every time because people in this community choose to ARGUE FOR doing things the dangerous way, and ARGUE FOR the status quo, ARGUING FOR the way things were done 10 years ago when middleware wasn't a good option, and frame it as offering support. There is no need for this argument.

    Offering support is great, but giving bad advice is not.

    And while people here argue for the status quo, and sway new developers into following in their footsteps, developers overseas can be benefiting from modern practices.
    GarethF said:
    The implication I'm reading between those lines is that you think it's got something to do with how long it took to learn the skill
    The implication was that you chose a suboptimal avenue (or rather an avenue that certainly would be suboptimal if embarked upon today), an avenue that cost more time and money to get to the same destination. And the allegation was that you then recommended this avenue to someone else.

    Yes, back in 2004, when no studios fewer than 20 people were turning a profit, and middleware engines were still in their infancy, learning C++ and trying to make games in it was a solid way to start a game programming career. But just because it worked then, when there weren't significantly better options available, surely doesn't mean we should recommend it now?
  • I really wish the Retro/Grade postmortem was viewable as a free GDC vault video already. . .

    But @BlackShipsFilltheSky makes an extremely good point: how does one's skill-set allow one to work in the industry? You might define that as working at id or epic on their engine then that is the goal, but that isn't South African game development, which is the focus of this forum. And given that he looks at grads from university and their skillsets as an employer! His words are gold for what you need to work in game development in South Africa.

    I mean when it comes to the local developer just about everyone is using Unity. If you are looking for a job and you have c++ and directX experience against someone who has Unity experience I would say that the person with Unity experience will get the job. Writing shader is cool, but when it comes to games gameplay is king. What use is a game that looks cool if your jump sucks? Also hats off to Kyle Pulver's article for a nice example of the work that can go into one of the little aspects of making a platform work.

    Also really everyone just go an watch that Jon Blow talk. Because it just lays things down, with really great examples, of what you need as a game programmer vs what traditional CS teaches you. Why did this thread continue after that link was posted?
  • @Karuji: Get out of here with your rational thinking! ;)
  • edited
    @Karuji Yeah, jump buffering makes a huge difference. Something I was surprised by recently, that might seem counter intuitive, is that jump buffering can be even more important in a FPS, as you can't see your feet (assuming you're making a jumpy fps, like Mirror's Edge or Quake 3 or Serious Sam).

    Like you say, I cannot hire someone who doesn't do great gameplay (not that we're the only company who hires games programmers in South Africa, but our situation is similar to other companies, and programmers no one can hire probably cannot work for themselves either).

    In a team with 3 or fewer programmers every programmer is going to be implementing gameplay affecting features. Nice code or knowing a lot of languages deeply or understanding low level workings and even familiarity with the tools we work with are distant concerns next to being able to implement good gameplay quickly and sensibly (like the way Jonathan Blow describes). I've only ever seen programmers learn those latter skills through making and releasing games.

    I'd suggest that game jamming is the fastest route to acquiring the skills Jonathan Blow outlines. All the things he says there are things you absolutely have to do if you want to complete a game in 48hours.

    I know it's been linked here several times before, but the guys who made World of Goo followed that path, and they managed to become one of the most successful Indie developers right out of University. http://www.gamasutra.com/view/feature/130848/how_to_prototype_a_game_in_under_7_.php?print=1 They're probably naturally very talented folks, but they worked super smart (and exploited their luck when they received it) to get that point so quickly.
  • @garethf said:
    Danny made the point that if C++ knowledge was all that was needed, why aren't we awash in commercial games? Well, that's a straw man argument, for one thing. No one claimed that C++ knowledge was all that was needed. The simple reality is that you need time, money, skills (in multiple disciplines), perseverance and a little luck. You need all 5, in generous quantities. Most people don't have all 5 of those things. Most people are lucky if they have 1.
    Well that's exactly the point, isn't it? How do you optimise for things like time, money, skills, perseverance or luck?

    Time: Simple, don't waste it. The two biggest wastes of time in game development are spending time optimising something that doesn't need to be optimised (usually before something is even being used in a game) and implementing stuff that's already been done elsewhere. Sure, there are cases where implementing a known algorithm like a rendering pathway or whatever is a good use of time, but for it to be useful you need to have really studied what it is you're implementing - which usually means exposure to how other people have done it - otherwise you're wasting time.

    Money: Most things are free these days, but generally you're looking at money being a function of time for most indie projects. See above for that... Otherwise it's always good to get paid for something that's not finished yet. Easiest way to build a game that can earn you money that way is to release to the public often and early in development, that way you build a following with the early versions, get a ton of good testing (for free!) and can optimise your time spent even better due to player feedback stopping you groping for gameplay in the dark.

    Skills: Learn a single skill at a time. This takes research and forethought. First step is always seeing what other people have done, then reading up on alternatives and messing with those if at all possible, then plan which skills you're going to practice in which order. Again, this is a serious function of time, but the main thing here is not to try and learn multiple skills at once, you'll find that learning things that way will take longer than learning them one by one. Synthesis at the end should be simpler that way too.

    Perseverance: The easiest way to get discouraged is to not see any results. So to help keep your perseverance up, try to do things that have the best results for the shortest amount of time. In game development, that's usually always prototyping fast and getting other people to play your games. Few things are as rewarding as watching someone enjoy something you've built, that kind of motivation can help keep you going when things get tricky. Plus, if you're releasing early and often, it tends to form a bit of a positive reinforcement loop: You'll have clearer goals for what you're trying to do, so your skills will grow faster and you'll have more possibilities for someone to want to give you money for what you're producing.

    Luck: Luck is all about repeatedly trying. Releasing just one game after you've spent years and years working on it before you know if it's any good or not is incredibly risky. That requires a huge amount of luck to get right... Rather follow the release early and release often route and stand more chances to get lucky with exposure or just the right mechanics or just the right kind of theme. Plus as you build your skills, you'll find that you need less luck to make something succeed.

    Believe it or not, all of these things were part of the consideration when I wrote that argument about C++ alone not being enough to make games, which is why it isn't a straw man at all. We've been trying to optimise all these things for years now, which is why I guess I feel so strongly about advice that doesn't seem to think about those things at all.
    Thanked by 1EvanGreenwood
  • @dislekcia

    No, it definitely was a strawman. You said :
    if only 10% of the computer science students at our universities were interested in making games (and that's super conservative, in my experience - lecturing at universities to comp-sci students - that number is more like 90%) and C++ knowledge was all we needed, we'd have about 100 games coming out every year.
    You were the only person in this thread who said anything about C++ knowledge being all that was needed. You then proceeded to debate against that stance like it was made by the person you were debating with.

    The very definition of a straw man argument. You were debating against a weaker, easier-to-counter position that you were the one who created.
    How do you optimise for things like time, money, skills, perseverance or luck?

    (stuff)
    Your point would be valid if he he had said "what is the quickest way to become a game developer."

    That's not what he asked though. He asked for help learning a specific skillset. In which case, optimizing his path to knowledge involves helping him gain that knowledge.

    People already gave him the hint that if he just wanted to make games, using tools instead of reinventing the wheel is a quicker, more efficient path. Something I completely agree with.

    But after the first 4-5 comments, it turned from a helpful hint to browbeating the guy with your opinion of The One Right Way. It's supposed to be a community for supporting SA game devs and you lot have long since ignored the point where he said "ok, enough now, thanks for the advice, this is the path I want to take, can people just help me with that."

    Also, comparing people with dissenting opinions to homeopaths was pretty low. I didn't actually enjoy posting my own credentials, frankly you can't help but come across as a bit pompous, but it seemed like it was either join in the dick-measuring contest or have my opinion dismissed for lacking credibility. It's a bit of a hostile environment you guys are creating here.

    @BlackShipsFilltheSky
    Offering support is great, but giving bad advice is not.
    It's not bad advice. C++, engine development and knowledge of the graphic APIs are core competencies in the game programmer field. This has not changed.

    You don't need them to just to go about making games, sure. You can get by with surprisingly little programming knowledge these days, modern tools are pretty great and are only getting better.

    But they are still very powerful, very useful skills to have, quite in demand across the industry. We are not yet at the point where the tools have replaced the need for that knowledge on a broad scale, even if you're fine without them just tooling around as a hobbiest.

    http://cdpred.com/gameplay-programmer/

    http://cdpred.com/lead-programmer/

    http://www.bungie.net/en-us/AboutUs#page=careers&job=10069

    http://www.bungie.net/en-us/AboutUs#page=careers&job=10342

    https://performancemanager4.successfactors.com/sfcareer/jobreqcareer?jobId=15204&company=EA

    https://performancemanager4.successfactors.com/career?career_ns=job_listing&company=EA&navBarLevel=JOB_SEARCH&rcm_site_locale=en_US&career_job_req_id=18748&selected_lang=en_US&jobAlertController_jobAlertId=&jobAlertController_jobAlertName=&_s.crb=vCQoZAzjSfTOze9CisR1OZjj4lo=

    https://performancemanager4.successfactors.com/career?career_ns=job_listing&company=EA&navBarLevel=JOB_SEARCH&rcm_site_locale=en_US&career_job_req_id=18787&selected_lang=en_US&jobAlertController_jobAlertId=&jobAlertController_jobAlertName=&_s.crb=vCQoZAzjSfTOze9CisR1OZjj4lo=

    https://performancemanager4.successfactors.com/career?career_ns=job_listing&company=EA&navBarLevel=JOB_SEARCH&rcm_site_locale=en_US&career_job_req_id=16507&selected_lang=en_US&jobAlertController_jobAlertId=&jobAlertController_jobAlertName=&_s.crb=vCQoZAzjSfTOze9CisR1OZjj4lo=

    https://performancemanager4.successfactors.com/career?career_ns=job_listing&company=EA&navBarLevel=JOB_SEARCH&rcm_site_locale=en_US&career_job_req_id=18745&selected_lang=en_US&jobAlertController_jobAlertId=&jobAlertController_jobAlertName=&_s.crb=vCQoZAzjSfTOze9CisR1OZjj4lo=

    http://jobs.zenimax.com/requisitions/view/334

    http://jobs.zenimax.com/requisitions/view/327

    http://jobs.zenimax.com/requisitions/view/76
    The implication was that you chose a suboptimal avenue (or rather an avenue that certainly would be suboptimal if embarked upon today), an avenue that cost more time and money to get to the same destination. And the allegation was that you then recommended this avenue to someone else.
    Please, don't draw conclusions about my path and what my destination was or is when you know only the barest details of it. :)

    I also didn't recommend it to him, I said it was "fine" if he wanted to go that path, and he would learn a useful skillset if he did. I'm not the one making arguments about what The One Right Way is, here.

    My destination, btw, was being a good game programmer and developer. Not just getting to the point of making games as fast as possible. And I have found those skills very useful throughout my entire career. They got me good jobs, and for my own game dev efforts, I was modifying the Torque engine and creating resources for people who, without the skills to do it, simply floundered when they hit a wall in Torque's capabilities.

    Unity only came onto the scene as a viable option recently. I tried it 3 years back, found it wanting at the time, went back to Torque. But they kept improving it to the point where I'm now a convert. It's the engine I recommend.

    Unity is a great engine, I love using it and I've yet to find myself running up against a wall with it. But, I haven't done anything particularly ambitious with it, yet. so that doesn't mean a whole lot. A 2D card game is pretty simple, as games go.

    Don't take Unity's dominance in the marketplace without a pinch of salt. The big devs using it often get private deals that give them source code access, so they can make custom changes to the engine to make it fit their product goals better.

    Repeat after me, like a frakkin mantra : There is no perfect tool.

    You don't know how to build it yourself, that's completely fine. But understand, there is a difference between invoking the magic that other people create for you, and knowing how to create the magic yourself, as you need it. Some people want the knowledge of the magi.
    Yes, back in 2004, when no studios fewer than 20 people were turning a profit, and middleware engines were still in their infancy, learning C++ and trying to make games in it was a solid way to start a game programming career. But just because it worked then, when there weren't significantly better options available, surely doesn't mean we should recommend it now?
    Outside of hobbiest indie circles, you will struggle to have a game programming career without those skills. They are core competencies across the industry. See the above list. Oh, and studios were turning a profit in teams smaller than 20 before 2004, btw. Check out Spiderweb and Positech.
    how does one's skill-set allow one to work in the industry? You might define that as working at id or epic on their engine then that is the goal, but that isn't South African game development, which is the focus of this forum. And given that he looks at grads from university and their skillsets as an employer! His words are gold for what you need to work in game development in South Africa.
    You're arguing that people shouldn't learn the skills that the entire industry places high stock in because the handful of small developers in SA's tiny game development scene don't currently need them (I think that's a bit of an assumption, but let's pretend you're right)?

    That's just silliness. Frankly, SA might have a bigger game dev scene if we had more people with these skillsets. You're creating a self-reinforcing paradigm. No one learn the skills because no one is looking for the skills because no one is using the skills because no one learned the skills because no one...

    South African game development is whatever South African game developers are currently working on, btw. Not just the hiring practices at Free Lives or wherever.
    If you are looking for a job and you have c++ and directX experience against someone who has Unity experience I would say that the person with Unity experience will get the job.
    Well of course, if you create a silly either-or example. But the person with both skillsets will trump the person with only one of them. Especially in small teams. The core programmers need to be able to handle whatever shit pops up. Or should be expected to pick it up pretty rapidly. Good luck with that to people who find learning C++ to be some giant obstacle or headache, btw. Jesus, but people are wusses about pointers.

    If you want to be a good game programmer, develop a broad skillset, you're gonna need it.
    Writing shader is cool, but when it comes to games gameplay is king.
    And just the other day I was negotiating a freelance local game programmer job which hinged on being able to handle the shader development aspect. I guess there are no jobs for this outdated skillset in SA.

    *sad tear while staring into the sunset, poignant music in the background*
    What use is a game that looks cool if your jump sucks?
    Oh good grief, enough with the either-or examples now. You should learn how to do both, if you want to develop games.
    Also really everyone just go an watch that Jon Blow talk. Because it just lays things down, with really great examples, of what you need as a game programmer vs what traditional CS teaches you.
    Have you watched it? He quite clearly says that that he's not saying you don't need to know how to use more advanced techniques, but that you need to know when to use them and when to use something simpler. Because there is always a trade-off in time/effort/returns.

    He's also quite clearly not advocating against C++ knowledge, or understanding of graphics APIs. You'll notice that both his games are written in C++ and HLSL.

    Frankly though, that's not a hugely pertinent talk to this conversation. He's completely right, and it's a good talk, but he's talking about working efficiently by avoiding premature or unnecessary optimization, not which skillsets are best to learn for wannabe game developers and what knowledge will be important to know in their future careers as game programmers. That talk was NOT "Jonathan Blow's guide to all the skills you need to know to become a competent game programmer in the industry."
    Nice code or knowing a lot of languages deeply or understanding low level workings and even familiarity with the tools we work with are distant concerns next to being able to implement good gameplay quickly and sensibly (like the way Jonathan Blow describes).
    You guys are WAY overemphasizing what it takes to learn how and when to just use dumb arrays and simple, single-purpose functions. Blow's talk was, as I said, a good one. But it's something that just comes with experience. Everyone starts off with too much knowledge and enthusiasm for clever tricks and not enough wisdom about when it's appropriate to use that knowledge or those tricks.

    Like a painter, as you become an expert you naturally learn where you actually need to focus on detail and where you should leave out that detail, where it harms the painting or is just plain unnecessary.

    Blow is hardly the first computer scientist to point out that premature optimization is bad.

    Also, he was slightly wrong about the "I prefer functions that are 1000 lines to ones that call out to subfuctions." He's entitled to his opinion, but I've maintained codebases with 15k line classes, where single functions go for 10 pages. Fuck that, it is an absolute nightmare to work with, the code becomes unreadable, extremely fragile and extremely prone to simple, avoidable errors.

    If I hired someone and they started doing that kind of thing because Blow recommended it in this one talk he did online, they would get a slap.
    I know it's been linked here several times before, but the guys who made World of Goo followed that path, and they managed to become one of the most successful Indie developers right out of University.
    That's nice for them. And the Team Meat dudes became some of the most successful indie devs by building their own custom engine for their games. And Blow became one of the most successful indie devs after decades of industry experience.

    What do we learn? There is no One Right Way, just different ways that different individuals have had success with. Do what feels like the right fit for you, follow what you're interested in, and find good mentors for that path.
    Thanked by 1hanli
  • edited
    This talk of C++ is a good path is really really unnecessary.

    It is obviously not the best path to get into programing games, it's far far more expensive and time consuming and demoralizing.

    Yes it's produced some South African developers in the past. Though frankly not that many (4 years ago there really weren't that many developers working in South Africa). The quicker we can get away from the old way of doing things, and make entering our industry easier, the faster we can grow South African games.

    And that's the goal here surely? To get more South African games. To grow our industry and the quality of our games.
    GarethF said:
    Your point would be valid if he he had said "what is the quickest way to become a game developer."
    I think you are misunderstanding.

    I really doubt @Dislekcia was responding to Fanie at that point. He was responding to someone else, possibly you, saying something like "learning C++ at the start of your game development career is perfectly fine".

    Skewing the context of his argument and then arguing against that isn't going to prove a point. Even while you accuse him of making straw man arguments.

    And I think you missed his other point entirely. It was that if the ONLY TOOL you know is C++ and DirectX you aren't going to be able to make games (because it will simply take you too long to get any game development experience and everything you do will probably suck and you'll still need a whole education before you get to the point of releasing anything remotely complete).

    You then threw in the stuff about money and luck and time etc which was besides the point. You need time and money and luck whether you know only middleware or only C++ and DirectX or any combination of tools. You may as well throw in food and good health and fingers into that list if you're planning on listing arbitrary tings you need to make games.


    The rest of your post is more of the same.

    That's nice for them. And the Team Meat dudes became some of the most successful indie devs by building their own custom engine for their games.
    Team Meat made Super Meat Boy AFTER Meat boy, which was made in Flash. Only after that showed significant success did they take the incredibly risky path to building their own engine.

    It's about optimizing our time and doing things sensibly. Not investing tragically in wasteful practices. Team Meat is a great example of a team that did it smartly, they didn't do it by starting with their own engine.

    We'd be doing a lot better as an industry if people weren't still spreading awful misinformation about what you need to become a game programmer. It's hard enough for kids coming out of schools to decide what they want to do and how they want to do it, and with people in our industry arguing for them to learn painstaking tools that are at best a inessential but nice building block and at worst a massive waste of time, it only gets harder.

    This issue needs to be put to sleep.
  • And in both cases of Team Meat and Blow they had a lot of experience when it came to making games. They didn't START making their own games in c++ and direct x.

    No one is arguing that that c++ is bad, I actually like coding in c++. What we are advocating is that c++ is a bad place to START making games.

    Once you know what you need to make a game from scratch (i.e. over a decade of experience in the industry, winning the IGF, and having a good number of games under your belt)

    There is no problem using c++, but really it is a bad place to start. And why are you linking to bungie et al? This is a South African forum. fanie came here because of an interest in local game dev. Yes that is an assumption, but a reasonable one.

    And great that you got work with those skills, but that is not a place to START making games.

    Also @garethf please do not conflate your experience with someone who is starting out. It is helping no one.

    Now someone kill the thread things are starting to get stupid.
  • edited
    @Karuji I think this thread could be quite helpful.

    Hanli and others have pointed out that this divisiveness is bad for the community, and it certainly is, but I think this can be a good place to shrug off the inefficient ways of the past and actually get some coalescence around lowering barriers of entry for getting into game development in this country. Our growth is going to suffer if we don't.

    If we can get better information to educational institutions perhaps we won't be encountering people glamored with the idea of making games as feats in programming gymnastics. If we can get information to the business community and business journalism about how people are making money from games in this country perhaps we won't encounter so many new developers with their goals set on things that won't make money (or that will be unreasonably risky).

    Clearly there's a problem here. But the solution can't be: Let's shut up and everything will be fine.
  • edited
    @garethf said:
    You were the only person in this thread who said anything about C++ knowledge being all that was needed. You then proceeded to debate against that stance like it was made by the person you were debating with.
    I was talking about the perception that @fanie seems to hold that learning C++ and DirectX will allow him to actually make games (which is what he said he wants to do) even though he can already program. This is an incredibly common misconception and one that I've personally helped a lot of people escape from.

    My pointing out that the status quo of C++ education does not produce a ton of games isn't a straw man argument - it's what's actually happening right now in universities all across the country. You yourself pointed out that there are other skills to be learned in order to make games, so why is it contentious to point out that those skills are not being conveyed by systems that simply teach C++ and DirectX/OpenGL (I learned those at university too)?

    Why is it dishonest to point out that the assumption that without knowing C++, you're not actually a real game programmer or eligible for real game programming jobs, is flawed? It's not like I and others haven't been pointing out evidence to support our case there.
    @garethf said:
    Your point would be valid if he he had said "what is the quickest way to become a game developer."

    That's not what he asked though. He asked for help learning a specific skillset. In which case, optimizing his path to knowledge involves helping him gain that knowledge.

    People already gave him the hint that if he just wanted to make games, using tools instead of reinventing the wheel is a quicker, more efficient path. Something I completely agree with.
    I wasn't responding to @fanie, I've already given him my advice. I was responding to you. It's strange that you dismiss the things I was talking about for each of those optimisations when those were problems that you brought up in the first place. I agreed with you and thought that we could have a useful discussion about general approaches to handling those very real problems facing hopeful South African game developers.

    As I see it, there are multiple different paths to game development. Several simply don't work here in South Africa (we can't easily spend years and years in the AAA industry, for instance) and the rest need to be evaluated for efficacy. Why can't we judge the successes rates of each different approach against each other and advise people towards the least risky?
    @garethf said:
    But after the first 4-5 comments, it turned from a helpful hint to browbeating the guy with your opinion of The One Right Way. It's supposed to be a community for supporting SA game devs and you lot have long since ignored the point where he said "ok, enough now, thanks for the advice, this is the path I want to take, can people just help me with that."
    Discussions on forums move and grow. After more people enter a discussion, it's totally ok for others to comment and discuss what has been said.

    I also disagree that anyone was browbeaten: I have been careful to supply both step-by-step logical reasoning and supporting facts at every opportunity, as have several others in the conversation... Have people really been intimidated into agreeing via stern or abusive words, or are certain arguments simply more persuasive, backed by more evidence and less anecdotal? I doubt anyone is trying to browbeat anybody else here into agreeing, as I understand it, we're all trying to give the best advice we possibly can to both @fanie and other hopeful game developers who will read this thread later.

    You can't ask people to seriously not evaluate the advice given by others to see if it holds up or not. That's what a discussion is all about!
    @garethf said:
    Also, comparing people with dissenting opinions to homeopaths was pretty low. I didn't actually enjoy posting my own credentials, frankly you can't help but come across as a bit pompous, but it seemed like it was either join in the dick-measuring contest or have my opinion dismissed for lacking credibility. It's a bit of a hostile environment you guys are creating here.
    I didn't compare people with dissenting opinions to homeopaths. I compared people with little knowledge of existing methods of engine construction that insist on practicing engine construction based on unsubstantiated dogma to people with full knowledge of modern medicine who still insist on practicing dogmatic activities in the hopes of curing others despite a lack of evidence of efficacy. I guess it wasn't a perfect analogy, sorry. All I wanted to get across is that there are axes along which we can judge the validity of an idea or opinion that we can gather evidence for or against.

    Hostility is not my goal, nor do I believe that anyone else is trying to be actively hostile either. Personally, I find that hostility is often perceived when arguments are difficult to refute or deal with - anger means it's easier to disregard what the other person is actually saying. But that's a meta-discussion about discussion that should be had elsewhere ;)
    @garethf said:
    It's not bad advice. C++, engine development and knowledge of the graphic APIs are core competencies in the game programmer field. This has not changed.

    You don't need them to just to go about making games, sure. You can get by with surprisingly little programming knowledge these days, modern tools are pretty great and are only getting better.

    But they are still very powerful, very useful skills to have, quite in demand across the industry. We are not yet at the point where the tools have replaced the need for that knowledge on a broad scale, even if you're fine without them just tooling around as a hobbiest.

    ... jerbs
    Surely we can judge advice against other advice and see which is better along different axes, right? For instance, none of those jobs are in South Africa and they all require team or game work experience that is nearly impossible to get here without already being in the game industry, in which case advice about getting into game programming is probably moot anyway...

    Also, there's a serious misunderstanding here: People have been advising that newbies not start with C++, nobody has said ignore it completely. Several paths towards learning the skills you mention as important have already been mentioned that don't require the learning of C++ first. We should be comparing all of the available paths according to time required, motivational power, drop out rate, secondary skills, etc. So far everyone has been doing this really well, except for the people coming to the defense of C++ as the gateway to real game development skills. Why? Where's that coming from?

    How many game jobs did SAGD create? How many game jobs did Game.Dev create? Differences in focus can be immensely important.
    @garethf said:
    Please, don't draw conclusions about my path and what my destination was or is when you know only the barest details of it. :)

    I also didn't recommend it to him, I said it was "fine" if he wanted to go that path, and he would learn a useful skillset if he did. I'm not the one making arguments about what The One Right Way is, here.
    Surely what matters in terms of advice given is not one person's anecdotal progress or a single record of success, but the statistics of that approach's success rates?
    @garethf said:
    My destination, btw, was being a good game programmer and developer. Not just getting to the point of making games as fast as possible. And I have found those skills very useful throughout my entire career. They got me good jobs, and for my own game dev efforts, I was modifying the Torque engine and creating resources for people who, without the skills to do it, simply floundered when they hit a wall in Torque's capabilities.
    And many people, me included, have argued that the exact same skills you're talking about can also be learned by not starting with C++ first. There's ample evidence to prove that it's actually easier to learn these skills when motivated to do so to solve specific problems with games that people are actively working on.

    I don't understand the sudden dislike for getting to the point of making games as fast as possible. What's wrong with that? Many posts here have pointed out that there are numerous skills that only repeated game-building and finishing can impart. If there's a number of games that people have to build before they're good at building games (as with any skilled profession, practice is always a good thing), why is being able to make games faster a bad thing? It's not like people can't learn lower-level programming skills after they're already producing games, right?
    @garethf said:
    Unity only came onto the scene as a viable option recently. I tried it 3 years back, found it wanting at the time, went back to Torque. But they kept improving it to the point where I'm now a convert. It's the engine I recommend.

    Unity is a great engine, I love using it and I've yet to find myself running up against a wall with it. But, I haven't done anything particularly ambitious with it, yet. so that doesn't mean a whole lot. A 2D card game is pretty simple, as games go.

    Don't take Unity's dominance in the marketplace without a pinch of salt. The big devs using it often get private deals that give them source code access, so they can make custom changes to the engine to make it fit their product goals better.

    Repeat after me, like a frakkin mantra : There is no perfect tool.

    You don't know how to build it yourself, that's completely fine. But understand, there is a difference between invoking the magic that other people create for you, and knowing how to create the magic yourself, as you need it. Some people want the knowledge of the magi.
    Again, people have been debating the best place to start game development from a programming perspective. It's plainly evident that familiarity with many engines and systems is a good thing, we're just saying that Unity or Game Maker are both good places to start the journey, not that everyone should be locked into one of those for ever. Where does this idea that people can't continue to learn game programming techniques and skills while using tools come from?

    The best thing someone can do is get to a point where they have a specific game they're trying to build and a tool they're using is making that difficult. That's a wonderful impetus to learn more - either to get around the problem in the tool or to pick up another tool, this time with better criteria to judge it by. Yay, skills!
    @garethf said:
    Outside of hobbiest indie circles, you will struggle to have a game programming career without those skills. They are core competencies across the industry. See the above list. Oh, and studios were turning a profit in teams smaller than 20 before 2004, btw. Check out Spiderweb and Positech.
    What game programming careers exist in South Africa beyond those?

    Now you're the one creating a straw man argument - nobody is saying those skills shouldn't be learned, rather that people shouldn't start trying to learn the hardest skills.

    Spiderweb: "I wrote my first game when I learned BASIC in the sixth grade and I never stopped writing games," said Vogel. "I did it constantly, for years and years, before I finally got serious in grad school. It really was my obsession when I was young." - Jeff Vogel

    Positech: "I'm Cliff Harris, an English geek who started programming age 11 (yes really), but had a detour as a rock star wannabe before ending up working at Elixir, and then at Lionhead before eventually going full time as bedroom coder, about 20 years after everyone else did it." - Cliff Harris

    So your examples of small studios also didn't start out learning C++ just so that they could make games for real. I don't see how that harms the arguments that other people have been presenting.
    @garethf said:
    You're arguing that people shouldn't learn the skills that the entire industry places high stock in because the handful of small developers in SA's tiny game development scene don't currently need them (I think that's a bit of an assumption, but let's pretend you're right)?

    That's just silliness. Frankly, SA might have a bigger game dev scene if we had more people with these skillsets. You're creating a self-reinforcing paradigm. No one learn the skills because no one is looking for the skills because no one is using the skills because no one learned the skills because no one...

    South African game development is whatever South African game developers are currently working on, btw. Not just the hiring practices at Free Lives or wherever.
    I'd say that people were arguing that the priorities of learning Unity over C++ were grounded in the local employment scene. I also disagree with your self-reinforcing paradigm idea: People have learned these skills in multiple ways already, more people with these skills are available now than they ever were, most due in no small part to a concerted effort to change the inherent focus of game programming away from "It has to be C++ or it's not real game development". I know, I was the one driving that push years ago.
    @garethf said:
    Well of course, if you create a silly either-or example. But the person with both skillsets will trump the person with only one of them. Especially in small teams. The core programmers need to be able to handle whatever shit pops up. Or should be expected to pick it up pretty rapidly. Good luck with that to people who find learning C++ to be some giant obstacle or headache, btw. Jesus, but people are wusses about pointers.

    If you want to be a good game programmer, develop a broad skillset, you're gonna need it.
    There's that straw man again, nobody is saying you can't learn advanced skills if you don't start with C++. The focus of our advice has always been on what is most likely to help develop that broad skillset for as many people as possible. Why are you assuming that people are somehow afraid of pointers, where on earth did that come from? How can a coder with experience with multiple engines and many games that they've built themselves NOT have a broad skillset?

    How does the idea that C++ is the only real type of game development language out there help anyone get a broad skillset? That's the misconception that people have been fighting against here.
    @garethf said:
    And just the other day I was negotiating a freelance local game programmer job which hinged on being able to handle the shader development aspect. I guess there are no jobs for this outdated skillset in SA.

    *sad tear while staring into the sunset, poignant music in the background*
    Another false argument. Shader knowledge has nothing to do with C++ experience and nobody has said that shader development is an outdated skillset.
    @garethf said:
    Oh good grief, enough with the either-or examples now. You should learn how to do both, if you want to develop games.
    Definitely. How do people do that fastest and with the least chance of becoming disheartened?
    @garethf said:
    Have you watched it? He quite clearly says that that he's not saying you don't need to know how to use more advanced techniques, but that you need to know when to use them and when to use something simpler. Because there is always a trade-off in time/effort/returns.

    He's also quite clearly not advocating against C++ knowledge, or understanding of graphics APIs. You'll notice that both his games are written in C++ and HLSL.

    Frankly though, that's not a hugely pertinent talk to this conversation. He's completely right, and it's a good talk, but he's talking about working efficiently by avoiding premature or unnecessary optimization, not which skillsets are best to learn for wannabe game developers and what knowledge will be important to know in their future careers as game programmers. That talk was NOT "Jonathan Blow's guide to all the skills you need to know to become a competent game programmer in the industry."

    You guys are WAY overemphasizing what it takes to learn how and when to just use dumb arrays and simple, single-purpose functions. Blow's talk was, as I said, a good one. But it's something that just comes with experience. Everyone starts off with too much knowledge and enthusiasm for clever tricks and not enough wisdom about when it's appropriate to use that knowledge or those tricks.

    Like a painter, as you become an expert you naturally learn where you actually need to focus on detail and where you should leave out that detail, where it harms the painting or is just plain unnecessary.

    Blow is hardly the first computer scientist to point out that premature optimization is bad.
    So a major part of what you're talking about here is experience, right? How do people get that experience in game development? They make mistakes, right?

    Do we want people to have more chances to make smaller mistakes, while still producing stuff that can encourage them in concrete ways, or do we want newbies to be struggling against major mistake after major mistake, only to eventually produce something that is barely motivating at all. You can't see it because it worked for you: But the rewards of producing a "hello world" program pale in comparison to having something bounce around the screen. I could rant for ages about how we teach programming, but that's not my point here...
    @garethf said:
    That's nice for them. And the Team Meat dudes became some of the most successful indie devs by building their own custom engine for their games. And Blow became one of the most successful indie devs after decades of industry experience.

    What do we learn? There is no One Right Way, just different ways that different individuals have had success with. Do what feels like the right fit for you, follow what you're interested in, and find good mentors for that path.
    There's a fundamental misunderstanding here. We're not talking about One Right Way, we're talking about the success rates of each different way and their applicability to the local game development scene. Individual success stories are largely irrelevant when those only happen 0.001% of the time someone embarks on that course.

    If there's a distinct path to game development skill, indistinguishable from the "true hardcore C++" level of skill, that has even a 30% success rate, you can bet that I'm going to advocate that over anything else! Unless there's a seriously special-case going on, but even then, the logic behind my recommendations would be remarkably similar.
  • edited
    People have been advising that newbies not start with C++, nobody has said ignore it completely.
    Yes @dislekcia, unfortunately they have:
    And even if Fanie's only ambition in C++ is to learn the language to have a comprehensive understanding of programming. That's still a plan more prone to failure.
    If C++ is their primary focus, they're probably not that useful.
    I was making more games before I devoted a year and a half to C++/OpenGL, and made more games afterwards as well. I had better options in retrospect, but I made a mistake. I'd happily take back that time and money and spend it on learning more game programming and jet skis.
    This talk of C++ is a good path is really really unnecessary.
    if the ONLY TOOL you know is C++ and DirectX you aren't going to be able to make games

    What I think that you and @BlackShipsFilltheSky and others need to accept and understand is that not everyone is a right sided, design oriented, WYSIWYG developer like yourselves. There *are* other people out there who have their DNA wired differently, and they may want to take different paths that they think are better than the one that you are saying "is the best".

    I personally got into game development because I wanted to program and I loved games. Programming is what drove me. If it wasn't for the challenges of always wanting to write better, more structured, more optimal, and more complex code, I wouldn't be where I am today.

    And there are other people out there like this.

    Every other programmer that I worked with at I-Imagine, bar Danny, learned C++ or Pascal along with DirectX or OpenGL before we hired them. They weren't too bad at what they did. Same with Luma Arcade; every person that was hired as a programmer there started out in C++DirectGLand.

    So no, it *IS NOT* the worst place to start out learning game programming.

    Not for some people at least.


    Now, I 100% agree, if you have a person new to game development and they ask the question:
    "How do I get into game programming?"
    or
    "What should I do to start with C++/DirectX game programming?"
    Then the first bit of information that should be given to them is:
    "Do you know about existing game development tools like Game Maker and Unity? They are great and tons of people use them and they let you get past the slow barrier to entry that having to build your own tech creates. You should really give them a try before you go down the long and arduous road of building your own game in C++."
    Now they can either respond with:
    "Awesome! I didn't know about those... they sound great! Thanks for the advice, I'll check them out right away!"
    or
    "Thanks, but I really want to learn how to make a game with C++, so I'm going to try that out for now."

    The response on this thread, which I will call out as bullshit 10 times out of 10, was to diverge into post after post of YOU'RE DOING IT WRONG!!! IT'LL NEVER WORK!!! WE KNOW BECAUSE WE HAVE SEEN IT FAIL TIME AND TIME AGAIN!!! STOP SAYING THAT GAME MAKER ISN'T A REAL TOOL!!! YOU'RE MAMMA ISN'T A REAL TOOL!!!

    That's not really helpful now, is it?

    I agree that a lot of the time, people who are new to game development think that they have to do it the C++/DGL because they don't know any better. In that case, by all means, educate them. Let them know that there are other ways of doing it that could work. But don't stubbornly push that the only viable way is to use a well know 3rd party toolset. The C++ route has also worked time and time again in the past. Something which is being ignored.

    Not all sheep can be converted to your flock.


    @garethf and I have never once said that people NEED TO learn C++ in order become game programmers. Nor have we said that it is a requirement in order to succeed in making games.

    We have merely said that it is a viable option for people to embark upon if they should wish to do so, and that they shouldn't be made to feel like they are stupid for choosing this option, and that they are destined for failure.

    This isn't this consistent message that is coming across from the likes of @disleckia and @BlackShipsFillTheSky... although Danny, you do say it very well here:
    The major point here is that nobody has been saying "Don't learn C++!", by all means, do learn it because it's a wonderful tool. Just don't try to learn 3 things that are really hard at the same time when you're just starting out. People don't seem to realise that you need to learn what game engines actually do, how games are a combination of game logic and engine logic (game logic actually being the far more interesting and important part of that, taking up more than 90% of the coding time of most games) and how to use an advanced programming language like C++.

    That's all people are saying in this thread: Space out your learning. Don't bite off more than you can chew right at the start, which is when you're most likely to do exactly that because you don't have the knowledge to properly estimate what's needed for what you're trying to do (Dunning-Kruger, anyone?)
    Which is exactly what @garethf and I have been saying in our posts.


    Lastly, I have to call out the utter bullshit popping up in the thread that reads along the lines that people who come to these forums should only be encouraged to pursue paths that will ultimately benefit the South African game development industry. What a load of crap. You should be nothing but ashamed for posting stuff like:
    He now works for a AAA company, which is rad for him, that was his dream, but crappy for South African Development. We lost someone that might have made awesome stuff here if he'd followed a different path.
    but that isn't South African game development, which is the focus of this forum
    The quicker we can get away from the old way of doing things, and make entering our industry easier, the faster we can grow South African games
    This is a South African forum. fanie came here because of an interest in local game dev. Yes that is an assumption, but a reasonable one.
    What game programming careers exist in South Africa beyond those?
    Yes, of course we all obviously want to see more games and developers living and working in South Africa and growing the industry. *BUT*, if MGSA is a place where people are not encouraged to follow their hearts and dreams and pursue whatever path they want to into the games industry, whether it is in South Africa or not, then I definitely want no part of it.

    To quote @hanli's perfectly succinct observation again:
    Turning people away from the forums for help is not a community, its an autocracy. Rather than saying what someone wants to do is stupid, no matter how much you believe it, ask yourself how you can help do it well.
    Thanked by 2hanli Blanky
  • edited
    AngryMoose said:
    I personally got into game development because I wanted to program and I loved games. Programming is what drove me. If it wasn't for the challenges of always wanting to write better, more structured, more optimal, and more complex code, I wouldn't be where I am today.
    That was a great way to do it a few years back. That doesn't make it optimal today.

    Of course anyone can pursue that path if you want to. If that's your passion.

    But defending a path that has a far far higher drop out rate than alternatives on these forums is unquestionably short sighted.

    I'd like to see Fanie make cool games, and learn the tools to do so, regardless of what those tools are. But I'm not comfortable with sitting by while people recommend poor choices that will leave local developers lagging behind, or worse, never making games at all.

  • Luke put it rather well above, nothing much to add to that.

    Besides one thing. To point out that Danny, when someone calls you out on making a strawman, compounding that with more strawmen is not the way to move the conversation forward in a helpful manner.

    Since I'm a helpful fellow, let me point them out for you, so that you're aware of them and know not to make them again in the future.
    I don't understand the sudden dislike for getting to the point of making games as fast as possible.
    why is being able to make games faster a bad thing?
    How silly that would be, to dislike the idea of making games faster or more efficiently, to treat it as a bad thing.

    But, who said that? Who are you responding to here? Quote the line where anyone besides yourself in this conversation says anything like this.
    My pointing out that the status quo of C++ education does not produce a ton of games isn't a straw man argument
    Except that's not what you said. You said this :
    If all you needed to understand in order to make games was C++ and some random 3D API (ROFL! Why use APIs, man, that's easy-mode, code your own drivers for 3D hardware and really show you know what's going on) then we'd be absolutely swimming in local games. Every single university computer science department would be churning them out like catholic babies!
    Let me further emphasize the exact line for you.
    If all you needed to understand in order to make games was C++ and some random 3D API
    Who said that was all you needed? Who setup that argument for you to respond to so scathingly, but Danny Day himself?

    You set it up then you knocked it down, while the people you were debating with watched in bemusement.
    How does the idea that C++ is the only real type of game development language out there help anyone get a broad skillset?
    Who said it was the only real game development language? Quote the line where anyone besides yourself says anything like this.
    Where does this idea that people can't continue to learn game programming techniques and skills while using tools come from?
    What a entirely silly notion that would be! But, again I ask, besides yourself Danny, who said that?


    Please, guard against this kind of nonsense in the future. Much appreciated.
  • edited
    Yes, Fanie should have been handled better. And if good code is his goal then doing C++ is fine.

    But good code isn't a great goal for making great games, not at the expense of other things like time.

    But I guess we'll see. I'm very confident the success of people optimizing their game development time and money will prove the point end and sway people without the need for circular debate.

    I'd love to get there without years of floundering and sticking to bad practices. But it's clear there's some people who won't be convinced.
  • And on that Glorious day, when the unenlightened masses finally come round to The One Right Way of doing things, you can shed a single tear over how much wrong-headedness you have had to endure in your long fight for The Truth.

    Don't strain your arm patting yourself too hard on the back, brah.
This discussion has been closed.