[gameprogrammer] Re: State of Computing education

  • From: Robbert de Groot <zekaric@xxxxxxxx>
  • To: gameprogrammer@xxxxxxxxxxxxx
  • Date: Fri, 7 Oct 2011 14:26:40 -0700 (PDT)

--- On Fri, 10/7/11, Bob Pendleton <bob@xxxxxxxxxxxxx> wrote:

> From: Bob Pendleton <bob@xxxxxxxxxxxxx>

> I went to school way back in the dark
> ages starting college in fall
> 1971. I then went back to graduate school in starting in
> January 1981.
---8< snip snip ---


It's been a while.  I know I've missed a few things.

I started Coding in High School.  First in Basic on Pet and C64/C128.  I 
actually didn't have a computer at home but was hooked on it when in High 
School.  I got my first computer In grade 10 or 11.  A 286 machine with VGA 
card.  Through the High School I got my hands on Turbo 'C' compiler and started 
figuring out how to program.  Self taugh 'C' which was slow and often painful.  
I had a brilliant book which had a lot of examples to learn from but in hind 
sight, having a mentor would have allowed me to progress so much faster.  And 
that was the huge problem.  Access to knowledge.

At the time, dial up BBS systems were still very much the main way to connect 
to other people electronically.  Internet was still not all that accessable.  
Even through University, access to the internet was still mainly through some 
BBS or dial up service.  

I went to U of T(oronto).  Comp. Sci. wise their course is not bad.  I do have 
a few gripes with them.  (or at least when I went there between 1990-94.)

1. Universities can be too academic.  UofT developed their own language called 
Turing; and later OOT, Object Oriented Turing.  I guess it is an alright 
language to "learn" from but the language is purely academic.  It has zero real 
world use.  

1.1  It was interpreted or compiled.  The interpreted environment and editor 
was frustrating to use.  The compiler would compile to c code.  And hopefully 
the c code would compile properly.  I had to use it for a embedded systems 
course and more of then than not, it would brick the UofT developed embedded 
system.  Frustration and little progress on assigments was very common for me.

2. Universities had these sun systems with dumb terminals.  These were horrid 
to use.  When it came time to finishing an assignment the machines would feel 
like the squirrel has been worn out.  Many assignments were hardly finished.  
When there was no load on the system it worked ok.  But once there were too 
many users doing compiles and all, it was completely unusable.  Often the sys 
admin would go around asking people to shut down any processes they could space 
because the main computer was running out.  So sad.

Linux was just starting up at the time and only one course offered to support 
those who want to use Linux from home.  At the time I couldn't get Linux to 
work on my machine at home.  Bad hardware support for Linux.  So I HAD to use 
the f*ed up Sun system at school.  No option for a DOS or Win3.1 (I think) 
users at the time.

3. It was the typical lecture with tutorials model.  Then go off do your 
assignments.  No one did roll call.  The university probably didn't care so 
much.  You paid your tuition.  If you don't go to class, it's not their 
problem; they got your money already.

4. There were only about 6 classes in total over the 4 years that stressed 
programming to any degree.  So when those classed did come about there were 
quite a few students that were struggling because they haven't done enough 
actual programming to survive.  A lot of those classes were the 4th year 
courses.  And funnily enough, you weren't using Turing in those classes, they 
required 'C'.  There was only one learn 'C' course in year 2 and that was 
suppose to be sufficient. 

5. One class pissed me off royally and it was a coding class.  If you couldn't 
get your first assignment working right, you would be hooped on the following 
assignments because the following assignments would build up on where you left 
off.  The prof would not provide a code base for the first assignment so that 
you can actually move onto the second, third, ... assignments.  So if you had a 
doosy of a bug on the first one that was preventing you from moving onto the 
next one, good luck on passing the course.  I was in that situation.  And to 
top it off, you still have other courses to spend time on.  Falling behind in a 
situation like this kills you.

6. Focus on math.  In UofT computer science was either in the math department 
or in the engineering department.  The campus I went to had only the math 
option.  So a lot of math courses were needed.  I really hated the theoretical 
math courses.  I couldn't see how they really applied to the real world.  The 
other math courses would have been great if it weren't for the profs.  I don't 
know, math dudes are a different bunch.

6.1 There was one course in programming where we had to 'prove' an algorithm 
correct using math principles like proof by induction or something like that. 
Mid-term comes around and practically EVERYONE didn't answer the proof 
question. Like I said, Universities can be too academic.  Professor wasn't 
happy about that though.  I don't care, I've never had to do something like in 
the real world.  My boss doesn't want me to waste time on proofs either.

7. Profs may know their stuff but some were pretty awful as teachers.  I 
remember my dad mention that in Holland, where he grew up, you would have 
research professors and teaching professors.  Teaching professors were taught 
how to teach.  So the professor you get in lectures and all would have gone 
through some courses on how to do that. Over here, I don't think they need to 
go through any training to teach.  Or a little training and then dumped  into 
deep end to see if they sink or swim.  It's not like for an actual teacher who 
teaches in elementary or high school here where to become a teacher there, it 
is a 4 year course or something.  I think university professors would benefit 
greatly from some sort of teaching course.  (This may not be true for all 
universities.)

8. All the FUN courses are in 3rd or 4th year. :(

I did get my job working for a company that makes software for the mining 
industry.  The software covers the gamut of what a company needs to do to mine 
a deposit from start to finish.  The Degree helped me get the interview but the 
code I wrote on my own got me the job over the other applicants.  The code I 
wrote was what interested me at the time.  Writing computer games.  Never 
really managed to get anywhere though because of my limited resources and all.  
I recently looked at some of the code I showed my boss...  Ick!  They hired me 
on that?!?  You learn a lot on the job.

In University I had to take...
Math:
- Calculus two years or more.  I've not had to use derivatives or integration 
since.  Mostly High School level math is needed more.

- Algebra two years or more.  Very little had ot be used at work.  Simple 3D 
math for 3D rendering.  Mostly High School level algebra at most which is 
mostly enough for the 3D rendering work.  I have still no idea what an Eigen 
value can be used for in real life.

- Statistics two years or more.  There is one product that has some university 
level stats requirements.  But otherwise, the rest, nada.

- Discrete Math (Proving and stuff.) Never had to use it in the real world.

- Chaos.  Fun course.  Finally understood how a Mandelbrot set is made.  Final 
exam was an ass kicker though.

Comp Sci:
- General two years or more.  Covers the basics like data types and algorithms. 
Very useful even though we were stuck with Turing.  A lot of the time there was 
no coding involved anyway.  Just exercises.

- AI.  One or two products at work uses AI techniques.  Nothing really too 
fancy though.  It's similar to a chess program where you try something and 
compute a result.  Use some heuristics to eliminate decision trees to speed 
things up.  All in all not really difficult stuff.  The only difficulty is the 
amount of data you have to work with and how long it might take. 

- Rendering.  Somewhat relavant to what I do at work.  But we use 3rd
party libs to help out for the most part.  We rarely need to be so low level 
that it's down at the bare metal so of thing.

- Database.  General info mainly.  Again actual database program was some home 
made jobby I think or some god awful freeware thing.  I can't remember.  I only 
remember having to run it once and never again.  Learnt a bit of SQL and 
database management and design but real world use?  Some of it is useful but I 
didn't learn any real world database products so what I've learnt is not 
directly useful. 

- Networking.  One of the courses where I did not like the prof.  I passed it, 
and that's good enough for me.  Covered the low level stuff and technical 
problems that come with computer to computer communication.  Not much actual 
coding though.

- Algorithms.  I know of BigO, LittleO and all that.  In the my job, Big O is 
all you really need to know about.  You don't need to get too detailed about it 
though.  Just need to know that an algorithm will be O(N) or O(logN)ish but no 
one is going to ask for a detailed analysis.  Boss only wants an improvement, 
he doesn't care what O() it is.  But the course at least introduced some more 
involved data structures and their uses.

- Language processors (compilers/interpreters/etc.)  I really hated the prof. 
The course was interesting though.  Covered lexers and parsers and we had to 
modify an existing compiler to a fictional machine by adding new features.

Optionals: (UofT requires a certain amount of credits to be outside of the 
degree requirements)
Physics, Dutch, Art History. 

Hind sight:
I wish I had an internet as it is today back then to find out solutions to very 
simple, but at the time being so green, bafflingly difficult problems. I'm the 
only coder among my friends and family so no connections to help with the 
problems.  Rather annoying.  

I wish some courses were easier to get to.  All the really fun courses were 3rd 
or 4th year courses which had a prerequisite of some 'filter' course. 'Filter' 
course to weed out/discourage students from pursuing the degree.

The most coding I learnt from was a book call "Turbo C Bible".  It had examples 
for everything and that's where I learnt a lot of 'C' coding.  The book is now 
very old and it shows.  I haven't seen much documentation since that was like 
the one in that book.  Examples were simple and to the point without too much 
extra stuff.  And it was clear.

Now I google a lot.  StackOverflow.com has been helpful a few times.  
Microsoft's MSDN helps but I'm often not a fan of their examples.  
CodeProject.com has helped a few times.  Some online forums have helped a 
little like gamedev.net and idevgames.com (apple centric)

Having a very good IDE for development helped hugely for me.  Turbo C spoiled 
me with a pretty good editor (for the time), project management and debugger.  
I don't think I'd be as far if I was stuck with makefiles, notepad and no 
debugger.

IMO Flexible due dates are detrimental to a student.  Give them a hard date and 
dock everything that is late.  Why?  Forces the student to concentrate on the 
current assignment and not one they should have finished already.  I didn't 
have a problem with due dates except for one time when my digital watch battery 
was half alive.  Ended up being late for class.  However a friend of mine is so 
bad at maintaining a schedule and used to beg for extensions.  As a result he 
ended up with a pile of work and nothing helped him get out from under it. It 
was a problem of his own making but it caused him to suffer.  Don't let your 
students suffer.  If anything, offer a bonus assigment or something to help the 
students who are lagging to make up some mistakes.

Testing is important IMO.  You don't know how well a student is doing 
otherwise.  I know some fellow students were basically living off the work of 
others.  During a test they have to stand on their own.  Those who have done 
the work, should do well.  Those who are free riding should be lacking.  In 
almost all my classes, we just had a mid term exam and a final exam.  I'm 
wondering if that is enough or it should be a bit more often.  I.E. 3 smaller 
exams and a final instead of a semi bit mid term and a big final.  But in some 
of my classes the amount of effor that goes into an exam is quite a bit so 
probably not practical to do it any other way.  Assignments were needed though. 
 Programmers/students are a lazy bunch.  You have to get them to do something 
in order for them to learn something.

I don't know what UofT is like now though.  Things will have changed since.

Robbert de Groot

---------------------
To unsubscribe go to http://gameprogrammer.com/mailinglist.html


Other related posts: