Skills for a gamplay programmer

Started by
16 comments, last by taby 2 years, 1 month ago

frob said:
Though it has been two decades I still absolutely love the old Joel On Software article, looking for people who are both smart and get things done. If they're smart but not getting things done they won't be implementing their features and might work as a consultant, but not an implementer. If they're getting things done but aren't smart about it, people need to go back and redo their work.

I've seen that and always thought “being smart” meant having high intelligence. Didn't realize he meant writing clean code as you suggest. Then it makes a bit more sense (since raw intelligence is difficult to improve). I've seen people be at both extremes. Some people implement stuff quickly and disregard pull request comments and general ways of improvements as “I'll do it later” or “too much work right now”, which means someone else gets the fun job of cleaning up their code later down the line. The people I've seen at the other extreme seem to adore Uncle Bob and care more about generic code (oftentimes overengineered code) which ends up solving general problems which sometimes happen to be the problems we are interested in solving and sometimes the solutions end making things less extensible than the simplest solution would have. Both groups can be frustrating to work with but at least the “smart” group sees it as their duty to write good code whereas the “getting things done” group only seem to care about looking productive to managers, which can be beyond frustrating for someone working alongside them. Obviously these are over-generalisations and even those people were not solely in one camp or the other, but I agree with the sentiment that bad engineers the rest down.
/rant

I do think, however, that there is some duality to “smart” and “getting things done”. Producing clean code quickly is something quite difficult in my view. Just the act of cleaning up code after pull request comments can oftentime take me 1-2 days of extra work (since it often involves learning about a more efficient way of solving the same problem, which takes extra time to research). IMO it is mostly lead developers, with many years experience solving similar issues in the same language/framework, who have the skills to do both things at the same time.

frob said:
When someone has those core skills down, when they're a good software engineer in general, you don't need to explain things multiple times. You can explain it once, they can ask some questions, and you can be confident that they understand, won't screw things up, and get it done.

I agree. Working with someone where you say something once and they “get it” directly is an amazing feeling. It is very rare though because you both have to have a baseline of technical understanding as well as a similar view of architecture and coding practices for it to actually work in this way IMO. Doing pair programming when you find someone like this can be incredibly rewarding since you can feed off each other.

frob said:
A good programmer can learn whatever specialties are needed for the task. They have a broad base of skills, and are both willing and able to pick up more. They're both smart, and able to get things done. They may not be a perfect match, but they can adapt by virtue of being smart and getting things done. They may not have a specific specialty, but they will find and develop specialties that we can use, and someone else with that specific specialty can pair up with them, that's why we're teams.

Too bad most recruiters don't seem to think like that. I would just add that being a good communicator oftentimes seems even more important than the other two, since teaching/learning from that kind of person is much easier than someone who lacks communication skills.

frob said:
I have worked with too many people who are lackluster programmers, they only know a few topics and struggle terribly when something is outside their tiny little island of knowledge. I've also worked with plenty of “okay” programmers, and had the difficulty of terminating their jobs. I feel they're the hardest people to fire because there is no specific thing to improve, other than do more of whatever they do. We don't need okay programmers. When we have amazing programmers and an okay programmer shows up, the okay programmer slows everyone down. The hardest thing I've had to explain to someone is that it isn't anything about lacking a specific skills, they're okay at it all. But being okay isn't enough, at least, not with the groups I work with.

Where I'm from it's against the law to fire someone based on performance so I have never been in a company where people get fired. But I do wonder how I would stack up. I've gotten glowing reviews from several workplaces, however when I read what you are saying I doubt my skills would actually hold water. It's that old cliché of being an impostor I guess. Do the people who end up sticking around have confidence in their abilities or don't you notice any difference in that aspect between the “good” and the “bad”? How do the people you end hiring present themselves in the hiring process?
I'm just asking because when I've gotten rejected for jobs that I really wanted I've been left wondering if they thought my actual technical skills were not good enough or if they thought what they saw from my skills in addition to my perceived lack of confidence sealed the deal. From what I've heard, lots of people lie on their resumes and pretend that they know things they don't, and there are many engineers in general who have lots of confidence in their ideas/implementations even when wrong. It makes me wonder if recruiters base their decisions on what the applicant is showing and then reduce expectations based on the probable fact that they are overselling their abilities. I'm not sure if my strategy of brutal honesty about my abilities is working out as well as I would like or if it's taken as a lack of confidence.

Advertisement

I interviewed at so many places early in my career and even then after. I had a really cool portfolio of 3D game that I made from scratch and a lot of people said that I was interviewed solely on that. It stood out. So what you need to know in games is how to make a game. That simple. You don't need to know everything to create the best GTA 6, but you have to be able to create some kind of game on your own.

Without performing the best animation blending techniques and realistic facial animations: Simply learn to create a 3D mario game to some extent. It shows you can know how 3D things work and how to manage things that occur in every game. That's more than 95% of the people I've seen resumes for, or people that were hired as QA Testers with apparently computer science bachelors degrees that didn't create one single 2D or 3D game, and even couldn't do basic things like take a word in any language and reverse it or how to implement linked lists which every programmer should know.

Couldn't tell from SNHU website if your degree is mostly C++ but it looks like they hopefully teach some data structures and algorithms in depth. If your teacher isn't teaching you C++, then good luck. You need to take time out of your day to learn C++ really well.

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

@dpadam450 I appreciate the response! I am currently working with C++ and I've become pretty comfortable with it. I've also made a few games at this point, but I only have one that I've been comfortable sharing. It's linked in my profile if you want to check it out! I also saw your reply on my other post as well, and I really appreciate it. I've been pretty busy this term, but following along with the book that you shared will be my next project. Thanks again for your feedback! It really helps.

Bryce Hanneman

A: Make a video of your game. It's quick to see and evaluate. B: Your exe didn't launch for me, possibly because I don't have UE4 installed. CreateProcess returned 2. Make sure you have proper DLL's in the folder. Try running on a non UE4 PC, but 99% of people probably will never download your game. Make it easy for people to read and see your resume.

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

If you're going to use the latest and greatest features in C++, I recommend staying away from the auto keyword.

“auto” is a requirement to support certain template constructs, just like trailing-return-type in lambda-captures.

It's also quite helpful in cases like for loops over iterators (when not using colon iterator syntax.) So, like anything in C++, you can't say “never do X” or “always do Y;” each feature is there to support a particular set of use cases, and to be a GOOD C++ programmer, you have to learn all of them. Which takes a long time, and a lot of experience.

Whether this is good for C++ as a language or not, is a totally different discussion :-)

enum Bool { True, False, FileNotFound };

Never use pointers to allocate memory. :P

This topic is closed to new replies.

Advertisement