Thursday, November 19, 2009

Becoming a programmer - thinking algorithmically

[duped from a post i made on www.thechaosengine.com an industry only forum]

last time I taught someone how to think algorithmically I asked them... what is a seemingly simply task ... that you do ALL the time.

they chose - make a cup of tea.

I asked them to write down, in absolutely the order they would do it, everything they need in order to do it, everything they do to go from no cup of tea...to a fresh cup in hand.

each time they finished I asked them to follow their own instructions using only the inputs they specified, only the instructions they had written down....

took about 20 iterations to get it right but each time they got better.

I then asked them to repeat that process on their own with other simple tasks....

I did this before introducing any language or limits... simple english....

2 weeks later I sat in on them going through the same process for "checking & replying to email"... 100% correct.

after that... developing small programs in C became a syntactic problem only... write down the english as comments... flesh it out with the C.

Sunday, December 14, 2008

The demise of the "Low Level" programmer.

When i started programming many of the elements we take for granted now, did not exist. There was no DirectX yet and for the most part not many libs were available that would actually work in the Free compilers of the day. So i had to write my own code for most basic programs, keyboard handlers, mouse handlers, video memory accessors... in general the programs i wrote then were 100% my code.

Personally I've always been interested in what was going on under the hood. I always dug into the details and i almost always end up programming as close to the bone ON the hardware as i possibly can both to eek out as much performance as possible AND to satisfy my own hunger for knowledge.

Combine the two and what you get today is someone who enjoys spending 5 days making that single function 20x faster, who enjoys reducing the memory footprint of the primary data structure by 1 byte per element across the entire program whilst simultaneously writing a precaching system to avoid the special case issues.... who... well you get the picture... i'm an OCD level sport optimizing geek.

What i've noticed over the past year whilst being heavily involved in the hiring process is that knowledge of what is generall considered "low level" programming is no longer being taught. Most of the programmers I've talked to during the year know enough to get through a C++ only test... but don't know how memory is arranged at all, don't quite grasp that at a very high level one must understand the hardware you are programming for before going ahead and writing a program for it. The intricacies of floating point vs fixed point math are completely lost on them as the term "fixed point" brings about a blank stare.

It depresses me that SOOO much of what i consider to be essential is simply not being taught anymore. I'm not even talking about assembly language, even those of us who used to spend hours writing it now use intrinsics built into compilers to avoid the stress and complication of matching what we want to happen to every possible entrypoint to our function; let the compiler anticipate and flesh that out. What i'm talking about is simply the understanding of WHAT is happening when say someone does i++ rather than ++i... why its bad and what can change between the use of either one...

I'll stop here as much of what i want to write will seem arcane to most programmers.

Wednesday, October 1, 2008

Working with Instant Messenger.

Personally i could not work without instant messenger (IM) in all of its guises. I use trillian on my main dev machine to talk to friends, colleagues and peers around the world. I do it without thinking and i do it without negatively affecting my work; it is a tool of life and work. I use it to discuss tech within the game/engine, to setup meetings, to discuss scheduling issues, to setup tests... essentially anything work related (and some not work related things).

Recently i did a poll on a well populated games dev only forum. I started the poll based entirely on a single conversation with a friend at R* San Diego who said that R* do not allow IM usage. After a few hours it became apparent that around 10% of developers do not allow IM usage in any form, the other 90% largely given open access.

So why is it some companies simply don't allow it?

It seems that IM usage is a worry to the powers that be who think maybe details that should not be discussed outside of work might be discussed over IM which could indeed be considered a security leak if the receipient is not employed by said company, on the other hand what about internal only IM. I would ask, how likely is it that someone would spend the time (and money) to infiltrate another persons messenger account in order to log the conversations that would require that person to be logged on in the first place. I don't know how easy/difficult this is (and maybe my opinion would change if i knew) but it seems very unlikely that this is happening and thus i question the decision to remove such a useful tool from developers.

I also heard some rumblings that certain companies believe IM is a distraction and they need to remove any and all of those lest the peons get too engrossed in something other than work. Personally i think that people who use IM as a distraction at the expense of their work will likely find another distraction if / when IM is removed.

In the past i've worked for Activision and EA, two of the largest publishers, both of whome encourage IM usage. EA has an SIP setup internal to each studio that provides access to ALL. ATVI don't actively help people setup IM but they do not discourage it either, many of the studio level heads use it. It is a useful element of everyday developer life.

So, my opinions are known... what are yours?

Tuesday, September 30, 2008

First!!

So I've been reading blogs for a while now of various people and today a friend of mine asked if i had one... upon hearing i didn't he went ahead (with my permission) and published on his blog some of my thoughts and helpful hints regarding Vista64... I had always thought blogs took a long time however his post took about 30 seconds longer than it took for me to tell him my info...

so i figured its high time i made one myself... hopefully i post something useful here soon.

Visitor IP Address City

Visitor Worldmap