Engine developers?
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.
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
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.
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.
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 :)
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? :)
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.
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 :)
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.
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.
@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.
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.
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. 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 :)
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.
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 :(
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.
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?
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
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.
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.
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++ :)
Rock on.