Allegro.cc - Online Community

Allegro.cc Forums » Off-Topic Ordeals » Programmer Competency Matrix

This thread is locked; no one can reply to it. rss feed Print
Programmer Competency Matrix
Chris Katko
Member #1,881
January 2002
avatar

Obviously, it's not a rule or law, but this is a pretty good way of telling where you stand as a programmer:

http://sijinjoseph.com/programmer-competency-matrix/

It's a good top-level test of your skill set.

For things you're not as a good at, it helps point you in the direction with the right keywords.

For things you are good at, it can be surprising to realize you're a better programmer than you thought.

[edit]

I think I might put the list to data, and then track my progress over the years.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

bamccaig
Member #7,536
July 2006
avatar

The rule is that to advance to a level you need to have all of the items so I'm still stuck at Level I. :( I'm not against the matrix necessarily, but I think that it doesn't necessarily get the whole story. Of course, I think that some kind of matrix is needed to filter out all of the people in the industry that clearly shouldn't be...

Johan Halmén
Member #1,550
September 2001

Nothing about games in the programming section. Worthless! Should have had a similar progress thing as what can be found here on a.cc answers to noobies: 1) a guess-the-number text game. 2) snake or pong. 3) Tetris. 4) 3D space shooter with wotnot.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Years of thorough research have revealed that the red "x" that closes a window, really isn't red, but white on red background.

Years of thorough research have revealed that what people find beautiful about the Mandelbrot set is not the set itself, but all the rest.

Mark Oates
Member #1,146
March 2001
avatar

Games might be like:

  • text-based

  • real-time game loop

  • sprites

  • primitives

  • object states

  • collision detection

  • tilemap

  • asset management

  • 2d vectors (velocity, follow, projection, collision response)

  • animation (frame, keyframe, motion)

  • input (keyboard, mouse, joystick, touch)

  • multiple screen states (menus, gameplay, map view, etc)

  • multiplayer

  • online multiplayer (client, server, sync resolution)

  • platforms (pc, mobile, web, ...)

  • AI (follow, traveling salesman, machine learning, etc)

  • 3D

  • level design

  • 3D assets (modeling)

  • collision physics

  • shaders

  • etc...

That'd be a cool matrix to see :)

--
Visit CLUBCATT.com for cat shirts, cat mugs, puzzles, art and more <-- coupon code ALLEGRO4LIFE at checkout and get $3 off any order of 3 or more items!

AllegroFlareAllegroFlare DocsAllegroFlare GitHub

Chris Katko
Member #1,881
January 2002
avatar

3-D graphics stack programmer would be it's own entire career and matrix. :o

There are certainly some gamedev fundamentals. But you gotta be careful to be general (or is it specific?) enough to hit the fundamentals and not specific implementations of those fundamentals.

If you've got the programmer fundamentals in say, OO and OS/memory, anyone can make an asset manager. It's just reading three sentences about it ("What is it? Ok, I make now."), then programming something to loading some data, and being careful how you access and store it.

But graphics stacks... oh, man are those so specific that they seem fairly useless outside of programming graphics stacks. I don't think shadow casting is going to be very useful in 99% of jobs outside of gamedev.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Erin Maus
Member #7,537
July 2006
avatar

If you've got the programmer fundamentals in say, OO and OS/memory, anyone can make an asset manager.

'Anyone' can make an asset manager, yes. Just like 'anyone' can make a website. But a good, performant asset manager is a whole different concept. In fact, 'an asset manager' is a fraction of the entire issue at hand: you have to work with the content pipeline. In a team environment, you'll be working with basically the entire studio (from the artists to the engine developers) in order to ensure a productive workflow for all those involved.

Quote:

But graphics stacks... oh, man are those so specific that they seem fairly useless outside of programming graphics stacks. I don't think shadow casting is going to be very useful in 99% of jobs outside of gamedev.

Just like using LAMP is pretty much useless outside of using LAMP?

Also, I know you've never implemented a shadow caster for 3D*. I followed an article or paper on nVidia's site, implemented it a week later after fighting with corner cases for the majority of the time, and had something reasonable. That was for cascaded shadow maps. Now imagine shadowmaps in modern AAA engines--they use ray tracing. There's A LOT MORE than just 'shadow casting' that goes into that.

*: I don't mean that in an antagonistic way. It sounds like it. Sorry!

---
ItsyRealm, a quirky 2D/3D RPG where you fight, skill, and explore in a medieval world with horrors unimaginable.
they / she

Chris Katko
Member #1,881
January 2002
avatar

Also, I know you've never implemented a shadow caster for 3D*. I followed an article or paper on nVidia's site, implemented it a week later after fighting with corner cases for the majority of the time, and had something reasonable. That was for cascaded shadow maps. Now imagine shadowmaps in modern AAA engines--they use ray tracing. There's A LOT MORE than just 'shadow casting' that goes into that.

You didn't actually say anything to oppose what I said at all. You just went sideways. I said shadow casting isn't useful for non-games in 99% of places. So requiring someone to learn something that is very specific and may have nothing to do with their career is silly for the same reason I'm not forcing you to learn SLAM algorithms. You're not doing robotics, so why would I assume you'd need to know that?

I never said it wasn't important, difficult, or useful.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Erin Maus
Member #7,537
July 2006
avatar

I wasn't aggressive or saying you're wrong. Just wanted to point out that shadow casting is not always limited knowledge (ray casting is by no means 'just a game dev thing').

In all honesty, I don't know why I bother posting anywhere. I either am ignored or someone just discredits me. Oh well.

---
ItsyRealm, a quirky 2D/3D RPG where you fight, skill, and explore in a medieval world with horrors unimaginable.
they / she

jmasterx
Member #11,410
October 2009

In all honesty, I don't know why I bother posting anywhere. I either am ignored or someone just discredits me. Oh well.

I often feel that way too. Don't sweat it ;)

Chris Katko
Member #1,881
January 2002
avatar

In all honesty, I don't know why I bother posting anywhere. I either am ignored or someone just discredits me. Oh well.

It's not like I'm bashing you, or spouting some ideology, I just disagree. I'd say more than half of the issues we have on this forum are the result of miscommunication more than actual resentment.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

In all honesty, I don't know why I bother posting anywhere. I either am ignored or someone just discredits me. Oh well.

You shouldn't feel that way. I appreciate your posts. I always learn something new when you make a thread, and I wish I had modern hardware so I could run your examples. All the work you've done with SVG rasterization is just awesome, and that's just one of your pet projects. It's just that no one ever comes out and says so, but really it is true. I'm sure others appreciate you sharing your work with us as well.

Mark Oates
Member #1,146
March 2001
avatar

In all honesty, I don't know why I bother posting anywhere. I either am ignored or someone just discredits me. Oh well.

Hey, I value your opinion. I'm glad you post.

Discussions like this are always very useful for me to read.

--
Visit CLUBCATT.com for cat shirts, cat mugs, puzzles, art and more <-- coupon code ALLEGRO4LIFE at checkout and get $3 off any order of 3 or more items!

AllegroFlareAllegroFlare DocsAllegroFlare GitHub

Polybios
Member #12,293
October 2010

All the work you've done with SVG rasterization is just awesome, and that's just one of your pet projects. It's just that no one ever comes out and says so, but really it is true. I'm sure others appreciate you sharing your work with us as well.

Right.

Gideon Weems
Member #3,925
October 2003

In all honesty, I don't know why I bother posting anywhere. I either am ignored or someone just discredits me. Oh well.

Please don't stop. You tend to have interesting things to say on topics that not a lot of members understand (particularly vector graphics). I've learned a good deal from your posts, though I may not always make it known.

Phrasz
Member #10,091
August 2008

To play Devil's Advocate: programmers are CRAZY wasteful now a days, since you don't have to care about the hardware you run it on...

We've had astronomical increases in hardware, but do we have the same growth for software? I'd argue hardware is the O(n^2) where as software progression is log(n), which is not what you want.

I felt the list was great, then I got to the self licking ice cream cone of "must have a blog", but there was no mention to standards and the improvement thereof. It's great that there's all of these programming languages that add X feature, but the most impressive feat is taking new "software" and back porting it to old tech. To me that's when you know the software is good. On the flipside: "The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.”—Joe Armstrong. Insert OO with basically anything new for software, and that's my jaded viewpoint ;)

Hardware lesson 101: https://people.freebsd.org/~lstewart/articles/cpumemory.pdf

Chris Katko
Member #1,881
January 2002
avatar

Phrasz said:

To play Devil's Advocate: programmers are CRAZY wasteful now a days, since you don't have to care about the hardware you run it on..

Maintainability and extensibility are far more important than speed because software needs to run for 5, 10, 20 years, bugs always happen, and new features always show up.

I still use Winamp every day. :o

Whereas a typical piece of hardware may interact with new things, but it almost never changes internally (save for firmware, which is software).

That being said, I agree with you many programmers are wasteful. I had all these programmers that can't do anything if the framework doesn't already do it for them. Performance is important, but you should (almost) never sacrifice future maintainability for a speed-up that won't matter in 4 four years.

Then again, we've hit a barrier in CPU speeds, so we've parallelized our CPUs (ever since the Netburst P4 architecture). Problem is, almost no software takes advantage of multiple cores. You can have a CPU with 16 cores acting as slow as a single 1 core CPU for a particular program. And honestly, it seems like from the ground up, everything in programming languages is "anti-parallelism." You've got to manually manage everything, and most code frameworks force you into a single-line-of-execution train-of-thought.

I remember the day I picked up Verilog for an FPGA and it blew my mind open. It forced me to think in terms of truly independent logical units. It could be asynchronous, it could be synchronous, and combinations thereof. I love it.

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Phrasz
Member #10,091
August 2008

Regarding maintainability and extensibility: look at the unix suite of tools. Those really have not changed in nearly fort years of computing. Your point of "old and stable is good", which is the other half of the taking "new" software and back porting it (the old stuff is already there, such as unix tools, and chances are it works just fine...).

On CPU Speeds we can get them over 3GHz: http://valid.canardpc.com/records.php, and have had records in the 6-7GHz that are nearly 10 years old. The fact of the matter is it's a power and heat issue: you have physical (ie. cannot refute how electrons are being smashed around) issues that drive power and heat. We want less heat and power consumption (this is driven by battery devices) more that "raw power". Ultimately, it's a waste thing too for hardware: programs are just TOO SLOW to keep up with 9GHZ processing (you have to do a TON of slow writes to disk, waiting for input, etc.) so if we could allow for the heat and extra power the CPU would sit there and do "no ops" for a majority of its time.

Also note that the hardware allows "more to be processed" with the multicores needing no change to software (other than the kernel for the OS). This is a hardware solution, and a needed one since parallel processing (software solution) hasn't (such as you noted) gone anywhere in nearly 30 years.

FPGA's and ASIC's are GREAT pieces of hardware, but then you start facing issue of the micro and monolithic kernels (the great debate of the 70s and 80s have shown us monolithic are king...). There's new trends of micro containers, such as Docker and now Intel/VMware/VirtualBox etc creating standalone execution environments, which will enable hardware to support tons of "standalone devices" in the new "Internet of things" ...but there's no killer app to really showcase why micro's and ASICs are the new "thing".

/end hardware rant ... ha

Go to: