Engine developers?

edited in General
I'm wondering what the state of the SA industry is these days in respect to low-level engine developers? Are we talking 1 out of 25, 50, 100 game developers, that has experience working with engines and framework architecture? I'm referring here to skills like ASM, C, OpenGL, BSD / winsock networking, OpenGL + shaders, besides background chops like operating systems, embedded, SoC, drivers experience?

I ask this against a background of near-ubiquitous Unity / GameMaker / MonoGame etc. skills.

Would love to hear from other low-level coders and hear about what it is you do, where you're located these days etc. etc. And what your experience of the industry has been like in SA. As much as whether you have migrated to higher-level languages / skillsets as times have changed.

Comments

  • It's really hard to give anything close to a definitive answer on this. Obviously there's a lot of game developers in South Africa who aren't on these forums, and these forums lean pro-middleware, so South African developers who want to share engine knowledge might be inclined to post elsewhere.

    I believe there's a fair number of developers who work in Unity/Unreal/etc who come from computer science backgrounds, and so have lower-level experience than they directly use in their everyday coding. A couple of the coders who got their start 5+ years ago did have to get low level experience in order to make games.

    There have been a fair number of games for Android that have rolled their own engine, but I'm not sure where this fits into your question.

    I know Team Devil have been working in XNA, and really care about optimization.

    There's one developer from Firefly who works in Cape Town (who has worked on semi-self rolled engines on the Stronghold series for 7 years).

    Sorry I can't be more helpful. I really couldn't guess as to what percentage of South African games programmers have low level development skills.
  • edited
    @BlackShipsFilltheSky That's interesting to hear. It's a fair point about this forum leaning toward middleware; I had noticed that. But the Middleware Way seems increasingly common elsewhere also. What about yourself, did you hail from "back in the day" when these technologies were a requirement? Yep, even Android. Wonder if that's NDK or higher-level stuff?

    Also, if you do know of forums where such developers might hang out, I'd been keen to hear about that. I still see a fair bit of C Q&A going on at the Ubuntu forums (which I know has quite a few SA adherents), but that's got to be far less games-related. It's a bit isolating being in PE; my only contact with people of such skillsets is non-local.

    In all it would just be cool to have anyone who has had substantial experience in these areas drop a quick post and say hi.
  • I'm referring here to skills like ASM, C, OpenGL, BSD / winsock networking, OpenGL + shaders, besides background chops like operating systems, embedded, SoC, drivers experience?
    Yeah, been there, done that, got the t-shirt.

    That's probably quite amusing, seeing as a lot of people would point to me and my advocacy as the major reason this forum leans away from engine programming. People always seem surprised that I actually can do that sort of stuff (admittedly, quite a few of those boxes are ticked by university, but I did delve into the PS Move homebrew drivers a while back to find out why ours weren't working with Joust - old firmware)... I used to think you needed to be able to write your own engines to make games, then I realised that low-level code is just a supporting skill set that's only occasionally necessary when making games. The skill of actually making and releasing something is way more important. Once I changed that perception, I suddenly started producing stuff and actually building my career.

    Historically, people used to post about engine-style code stuff at SA Gamedev (it wasn't very large) because Game.Dev (the forum I ran) was deemed too hostile to engine coders. That's always struck me as weird... All that would happen is engine coders would get asked what they're working on and when they'd have something playable, or even if their engines would have documentation so other people could use them to make stuff. Apparently asking about results is hostile ;) Also historically, engine-focus hasn't produced repeatable success in games from SA, but that's a whole different discussion. I'm sure some people will pop up to tell you exactly how that actually went though.

    Anyway, the people you probably most want to chat to are @mattbenic, @AngryMoose and @FuzzySpoon (if he's still around, makes more engines than anyone out of SA, even compared to legends like Denthor) I can understand wanting to chat about the stuff you're interacting with every day. Good luck :)
    Thanked by 1NickWiggill
  • edited
    @dislekcia Cool story, thanks for sharing. I can imagine that the engine-focus didn't see success like we see overseas due to the relative underdevelopment of the industry locally, especially historically... meaning investment levels, subsequent team sizes, available skill pool, etc. Ultimately, an investment of time into an engine needs to pay off over the longer term, despite competing against internationally-produced engines. I'd be interested for sure to hear more about how that went.

    The engine I'm working on isn't heavy, mainly because the game it's being built for doesn't need a lot of crazy effects. But I do like to know how things are working under the hood and have that access to things that may (read: will) need to be changed, later. And though I've released projects with Unity, I can't get away from the fact that I find its architecture, i.e. how the user is required to construct and couple modules & components, restrictive and a poor fit for my coding style. Which is kinda sad, but also what a world if everyone thought A was great while B sucked, right? :)
  • edited
    I definitely don't have substantial experience (still a student), but I just wanted to echo what @BlackShipsFilltheSky and @dislekcia have said from my own view. The students coming from ComSci courses (and a large majority of postgrad's researching Computer Graphics or games) are often exposed to quite a bit of what you are talking about (C/C++, OpenGL+ shaders, OpenCL/CUDA, networking etc.).

    However, most of those ex-students tend to be snatched up by big corporates and engineering companies, and so tend not to be on the forums. There is even a local guy who is/was on the chronos committee making the decisions on the future of OpenGL! Once again, he won't be on the forums but at least we could talk to him if there is ever interest :P I've heard quite a few people that fall in that category are now attending the new local VR meetups for example.

    So basically my point is that these forums are not a true reflection on the engine-type programming talent in the country. Just most aren't in games or interested in games sadly :(
    Even then, while most of us use middleware, as @dislekcia said I'm sure you'll find people here who can contribute to lower level discussions if really needed.
    Thanked by 1NickWiggill
  • edited
    @NickWiggill For myself (in answer to your question) I started getting into games just long enough ago that I ended up learning C++ and SDL. I avoided computer science at University because I knew I didn't want to learn programming for anything other than games (and non-game programming was all they offered at the time).

    I came from an art background, and game design rather than game engineering was my passion (if that differentiation makes sense). So as soon as using Unity was an option I switched.

    Which is also why I'm pretty far from the best person to ask about this subject. In addition to the people mentioned, @ChristopherM from TeamDevil definitely has a passion about tinkering down at lowish levels. Though I sense that what you consider a low level may be lower than I think :)
    Thanked by 1NickWiggill
  • I know a handful of people with the necessary skills, some have been mentioned, others work in industries like online gambling. But I couldn't give you any real numbers on what percentage they represent, unfortunately.

    I would have considered myself one, years ago, but those skills have grown a bit rusty. ;)

    When it becomes necessary, I reteach myself those kinds of skills to bring up to a current industry level.
    Thanked by 1NickWiggill
  • I spent the first ten years or so of my career in C++ engines in games and simulation. I spent a brief amount of time in XNA for the harvest, and soon after that we switched tech to Unity, and I couldn't be happier that we did. While I have some gripes about the bad programming habits Unity's architecture encourages, I still love it and I'm convinced that if it was around all those years ago when I started i would never have bothered to learn any low level engine dev.

    Unfortunately we're in a position where we can't continue with Unity (licensing stuff), and based on our requirements our best choice now is a C++ engine, so I'm back in that world. It brings me almost to tears almost daily, realizing how much we take for granted in Unity (and C#/.Net) and have to give up :( But I suppose once I get back to my earlier C++ proficiency again I'll be ok.

    As for "where are the other hardcore devs", I think it's a two pronged issue. On the one hand I really don't think there are anywhere near as many of them being churned out-varsities don't focus on that as much anymore, and you don't need to be that hardcore anymore to make games, and that's what motivated many of us to go down that route. This is pure speculation on my part, of course :) Secondly, as some have mentioned, those that are around get quickly snapped up by simulation and gambling companies, and they're often both heavily NDA'd and prevented from working on outside projects. They're probably likely to keep anything they're working on quiet for fear of being found out.

    I personally think it would be great to see (game related) hardcore C++ discussions happening here as well. There's really no reason these discussions shouldn't have a home here like any other locally used tech.
  • edited
    @mattbenic Thanks for joining the chat, good to have your input here. I very much agree on a number of fronts... see below which I was writing as you posted... feel free to disagree however ;) It's good to be somewhat confirmed in my line of thought on some of the "reasons why"... I'm trying to get a better situational view. In asking this question, I'm aware that this site has taken over as SA's primary resource since sagamedev passed into history. I guess in a way I'm asking if these higher-level languages and platforms really do server everyone's needs, and where they don't, why don't they? (Though non-disclosure can only be respected.)

    @creative360 Thank you for sharing from on the ground as a student. I wanted to comment... I think that being "exposed to" something implies that it could be a short term, superficial exposure, which was my experience of non-core-syllabus stuff in my university days. I think by and large (please correct me if I'm wrong), unis offer higher-level skills as core these days (though C++ was couched in the same terms back in the day... ooh, so advanced).

    So while it's beyond awesome to hear of local graduates being part of Khronos's decision-making processes, it has seemed to me during recent visits to the combined PE Technikon & UPE (NMMU North & South) campuses that low level skills are something that only a rare few students choose to really develop, while for the rest, there is no mandate to understand system architecture through the use of low level tools, and thus issues like efficient memory access patterns, data structure and algorithm design are presumably left largely by the wayside. As for explicit systems architecture courses, I'm not sure where that stands today. Looking at the state of the development industry over the last ten years, and reviewing the sort of posts we now see on stackoverflow and gamedev.stackexchange on a daily basis, you can only assume that there are gaping holes in programming syllabi worldwide... there are guides and talks given by guys like Agner Fog, Ulrich Drepper, Linus Torvalds on the impacts this has had on the quality of programmers entering the workforce: We abstract ourselves further and further away from our systems' real capabilities, and general development skills suffer. Flash / Javascript with their low barriers to entry were one area where this was horrifically apparent for a long time. It's one thing for a professional familiar with those aspects to choose to step away from them for a while by using, say, Java; but not giving learners a foundation before putting them in front of a JVM? Hm.

    Don't get me wrong: I wrote recently that one of the things I love about games is that we have this flexibility to decide where our own boundaries are in terms of performance: If you can't make it realistic AND fast, then you adapt your design to suit, and people should enjoy your game regardless, provided the overarching design is a good one. Yet OTOH I feel in my gut that there is a degree of disservice we do ourselves as we step further and further away from the capabilities of our hardware into the realm of promises / interfaces made by middleware. Let's be honest, some of that performance we lose could be turned into very cool things that affect gameplay, and this is particularly applicable when you look at gradually-released projects where time later avails itself for the addition of new features. In my current project, there is the ability to move considerably more massive armies about using a carefully crafted, app-specific architecture, than would have been possible if I'd just tackled optimisations algorithmically within a higher level language / runtime and then said, "good enough" and moved onto other things. I want that future-proofing that is going to allow me to make good within this engine, for several years worth of features to come.

    I know there are those who will strongly disagree. I respect that because of it's underlying premise: Getting something out there is more important than anything else in our industry. The thing is, what I see forming is a set of stigmas around lower level languages, one of "whoooaaa! don't go there" at least among younger / newer coders, which I feel really needn't exist. I've found stepping back to C (skipping right past C++) to be an extremely refreshing experience, because for such a low level language, it is in fact incredibly simple... but you are forced to know your environment... which no matter what language / platform you are on, is a Good Thing™ for a learner.

    Just food for thought, maybe it will turn some cogs over.
  • edited
    That the solid coders with c++ skills are being hired by gambling and simulation companies, and so taken out of the game development pool, is news to me.

    It makes sense though. I heard that Unity has very different (and quite prohibitive) licenses for gambling companies recently. And simulation companies need custom software of course.
  • edited
    I have to admit I don't know... but is online gambling as big here as it is in the UK? Because over there it is just huge and is the one guaranteed way to get a job as a games contractor when nothing else is available.
  • That the solid coders with c++ skills are being hired by gambling and simulation companies, and so taken out of the game development pool, is news to me.

    It makes sense though. I heard that Unity has very different (and quite prohibitive) licenses for gambling companies recently. And simulation companies need custom software of course.
    Unity is actually being used by at least one local sim company AFAIK, but yeah in many cases they need custom engines to meet pretty specific needs (and archaic military specifications).
    Gambling wise, yeah Unity's current EULA basically makes it a non-starter as a choice :(

    I know of at least 5DT in Pretoria that aggressively targets Tukkies graduates (and gives them an opportunity to work on really interesting stuff) and AFAIK Derivco in Durban scoops up all the graduates in that area with interesting work and really competitive salaries.
    Let's be honest, some of that performance we lose could be turned into very cool things that affect gameplay
    Yeah I honestly think there are very few gameplay-affecting additions that are held back by not getting right down to the metal, and the advantage of easily targeting wider ranges of hardware is much more attractive. Granted, you can target quite widely using pure C/C++, but the maintenance overhead it adds just isn't worth it IMO. That's a personal choice of course, but it also becomes a financial one when you need to get the most out of a team of developers. It's hard to beat having a dedicated team of engine developers, way above the caliber you could actually afford to hire, working on the tech you use while you focus on gameplay. I'm definitely not in the camp that believes a background in C/C++ is a waste, I think it adds a really valuable understanding of hardware, but I would certainly never willingly go back to fighting those battles myself :)

  • edited
    @mattbenic Makes sense. I think with C++ one of the things that has always put me off is the expansiveness, there are just too many things in the language (C# likewise). My current endeavours with C come from what is probably a similar line of thought to the Golang guys': take a very elegant, small language and put structures in place to avoid having to (a) deal with endless headaches in certain areas that C was never designed for (e.g. memory management, threading, exceptions) and moreover (b) move to a whole other platform just to get running prototypes up quickly. Admittedly, buffer overruns are the most trying thing right now in C, especially working with OpenGL. I wonder if Vulkan can/will ease this sort of thing. I've also found it trivial enough to implement simple OO in C that avoids some of the OO headaches of C++, like fancy, unnecessary inheritance support and dynamic dispatch. You're right especially about one thing, and that is cross-platformness (sic). That is possibly the only thing that worries me somewhat with C, though OpenMP solves some of that problem and testing consistently on different hardware (if not the full range) also solves a bit though it takes additional time.

    But anyway, I'm going to shut up about C now before I drive you all away :) Ha, ha.

    I sometimes vaguely consider C# / OpenTK as an alternative... Nah.
  • You're right especially about one thing, and that is cross-platformness (sic). That is possibly the only thing that worries me somewhat with C, though OpenMP solves some of that problem and testing consistently on different hardware (if not the full range) also solves a bit though it takes additional time.
    Sure. The other thing is availability (and compatibility) of third party libraries to save you time. It's fine if you're developing mostly for learning purposes, but when it comes to actually hitting multiple platforms it's not just the pure porting of core aspects of your game, but the tons of other "little" per-platform integrations like payments, notifications, etc. Having tons of (super cheap and high quality) libraries that handle that save immeasurable amounts of time.

    Oh, and then of course there's toolchains. Probably the single biggest thing we'll miss from Unity is the incredible ease of creating new tools :(
  • That the solid coders with c++ skills are being hired by gambling and simulation companies, and so taken out of the game development pool, is news to me.
    Yeah, I'd guess at least 100 C++ devs in the company I worked for before I left to pursue my dream. Probably at least 20, maybe closer to 40 or 50 in the simulation company many of my Uni friends ended up in.

    If I had to guess, I'd say probably 20 or so in those two groups with the skills to build a decent game engine from scratch.

    And last time I checked, my old company still had over 100 open developer positions (not all c++ though).

    The money just isn't in game development. You have to really, really want it, once you get out of your early twenties.
  • garethf said:
    The money just isn't in game development. You have to really, really want it, once you get out of your early twenties.
    And your partner needs to be reeeeally patient ;)

    Thanked by 2garethf NickWiggill
  • edited
    Libraries, not an issue here; I wrote what I wasn't willing to pull from github, primarily some fast compile-time generic collections done using the preprocessor. The only other thing I'm likely going to need at a later date is Oculus Rift support for which there is a C API. Not everyone needs social media, payments integrations and so on.

    About tools, and Unity... it may not have been your ideal scenario to have to move "backward" from Unity, Matt; but my coding life is 10x cleaner since I moved from that to my own minimal framework. Yes, there'll be overheads in other areas. But that kind of peace of mind is something money can't buy, it's ideological (and pathological, if you're using a tool that feels wrong). I didn't give up on Unity quickly, either, from a logical standpoint it was right, from a comfort standpoint, totally wrong. Potential performance was not the reason for the move, though it has since presented itself as a benefit of that decision. Re tools, game is nigh-purely procedural so there was always going to be a lot of time invested into automation.

    Anyone else been working on any cool procedural stuff recently?
  • edited
    @NickWiggillI think I may have given the wrong impression of students, I definitely did not mean the average programming student or gamedev student. When I was still in undergrad we were still forced to do everything in C++ (its optional now) and we could choose to do OpenGL and learn about engines. So basically out of a class of 200, maybe 30-40 would be interested in graphics, games and lower level stuff. From that pool maybe a handful of people at best get into something vaguely graphics/game oriented. Most students only start getting beyond basic exposure after their degree (hence why I mentioned post-grad students) or the really keen ones learn in their spare time.

    Also I learned pretty quickly that "knowing" c++ in undergrad and being able to use it well are two completely different things. For specific reasons I had to build my own "engine" for my research, which was something I thought I was prepared for, but really I wasn't. I really don't want to do that alone again. As a student the teach-yourself-as-you-go learning curve is just way too steep when you have other goals to accomplish too (I think it cost my research way too much). Using an existing engine is just way less brain/soul destroying.

    The chronos board guy I mentioned is an exception. He is a very smart graphics researcher with broad industry experience, so quite far beyond a recent graduate. I just mentioned him because its cool that he is local :)

    Procedural generation is really interesting to me, and there are often procedural projects popping up here. For my masters research I am doing procedural generation using cellular automata on voxels. Not sure if its cool, or even useful, but its something I am doing :P

  • edited
    Cheers for the numbers, so from that perspective we're looking at maybe 1 in 6 interested in the technical aspect, and maybe another 1 in 8 or 1 in 10 of those get into what they hoped for on the job market? So very roughly 1 in 50 make it into those sorts of fields, if we take a simplistic view. Probably fewer.
    I really don't want to do that alone again... is just way less brain/soul destroying.
    It starts getting a lot easier maybe the third time (in as many years) that you start writing a rendering engine from scratch :P Not much consolation. But definitely a thing to do in a higher level language the first time around... mine was in Java.
    "knowing" c++ in undergrad and being able to use it well are two completely different things
    Agreed. I think that might even apply more broadly than just C++. This is why work placements used to be mandatory for Technikons. Most leave college with a lot of theory and not enough real problem-solving skills, even 15 years ago.
    Procedural generation is really interesting to me
    It's a real pleasure to see what a lot of you guys now in college or graduating are doing with procedural content generation. There's been a resurgence in gaming creativity with this, but there is still so much to explore.
    cellular automata on voxels
    Yeah, the wonderful thing about CAs or any discrete approach (any graph-based approach comes to mind) is the conceptual ease. On the downside, continous / numeric approaches often solve problems in a far fewer steps.
  • Yo,

    I'm also making game engines in my personal time (when I have time). I didn't come from computer science though. I just taught c++ to myself with tutorials and staring at source code :P Did the usual thing of making a game ENGINE even though I thought I was making a GAME, basically have done all the things they say is the reason you should rather use a game engine. But I've had fun along the way. Then, after reading these forums every now and then, I decided to start simple and make a 2D game (putting all that complicated 3D stuff on hold).

    So... I started making a 2D game engine with openGL... mwHAHAHAHA. I know, I know - I'm insane but I love coding things to be exactly the way I want and super efficient. I will never change to a premade game engine. I will continue to chug along and maybe spit out a game but otherwise I'm always learning things I use for other purposes :)

    I just code websites in php for my day job. So I like to think I'm well rounded with coding but maybe not game making. We will see... in like 20 years lol.
  • @AntiVoid Welcome :) For a lot of us that's the only way to learn engine coding. I'd definitely encourage you to continue if you're in no hurry to put out games... I'm impressed when I meet one of the few who has the tenacity to stick with engine dev. In complete agreement with you that things need to be just so. That's part of learning, and part of future proofing, inasmuch as the latter can be achieved. As a web guy, have you thought of moving toward WebGL? There's a lot of demand for JS/WebGL overseas... good rates. Whereabouts are you based, if I may ask?
  • I'm in Cape Town. I've messed around with WegGL a tiny bit but I still prefer c++ due to how much freedom there is. I can support all sorts of controllers and things. I can add any sort of interesting OS features to the game and can even use the graphics card to simulate physics (not that I'm doing that but the option is there).

    Browsers just sometimes really irritate me with how some of them do things differently. Native applications are just so much more predictable. WebGL does keep getting better though but I'm not ready for the switch yet. I deal enough with browsers at work :P

    Another thing is people can steal and modify your code on the web. I know binary files on pcs can be decompiled but it's a lot harder. Something in js is easy to modify on the fly. Maybe that's just me but it doesn't sound appealing.
    Thanked by 1NickWiggill
  • edited
    So... I started making a 2D game engine with openGL... mwHAHAHAHA. I know, I know - I'm insane but I love coding things to be exactly the way I want and super efficient. I will never change to a premade game engine. I will continue to chug along and maybe spit out a game but otherwise I'm always learning things I use for other purposes :)
    @AntiVoid if your motivation is to learn about low level engine dev, then great, stick at it :) If, however what you want to do is actually build games- vs game technology- then the off the shelf engines (full toolkits, really) available today are impossible to beat for sheer productivity. There are middle grounds as well of course, including some great open source rendering engines. On things being "just so", it really does depend on what you want to achieve. More often than not, having something that's 90% so is good enough, in exchange for making more progress on the overall project.
    Another thing is people can steal and modify your code on the web. I know binary files on pcs can be decompiled but it's a lot harder. Something in js is easy to modify on the fly. Maybe that's just me but it doesn't sound appealing.
    In a web context, with games being reverse-engineered and cloned, yeah that's a real concern for gameplay code. For the underlying tech/engine though, honestly, unless you're working on something groundbreaking that nobody else has tried before, I don't think you really need to worry about anyone stealing your code. There are tons of open source HTML5 engines out there that can be had legitimately, which means there's just no reason for anyone to try and steal your tech.

    There are definitely reasons to stick with a native/C++ approach, but HTML5 has some real benefits too if you can live with the limitations. Being able to (mostly) run cross platform, and your users not having to bother with an install can be huge plus points. Of course, as with the "if what you want to do is learn engine tech" bit, if your motivation is mostly to learn low level C++ engine dev, then that's fine, stick to C++ :)
  • I do want to release a game but I also like the low level engine stuff as you say. Basically I'm happy where I am right now ;)
    Thanked by 1NickWiggill
  • I admire your commitment and love of this thing... sounds like you've found your niche. If you enjoy it so much, you'll inevitably do good things with it, and people will see that and doors will open for you in times to come.

    Rock on.
    Thanked by 1AntiVoid
Sign In or Register to comment.