I recently posted a question about the kinds of things to expect in game programming tests for games companies as I found myself unprepared for some of the topics. There are two things I can say about myself, and I think these probably apply to a lot of people. 1. I went and did a course at university that, although got me interested in programming, was poorly taught and didn't prepare me to really get any sort of decent job.. and 2. I'm still completely determined to get into the games industry.
I'm currently working at a little start-up, but I know that if I want to make the games I like playing I have to keep cramming!
My question is this: Can some of you professionals / graduates from better courses enlighten me as to the things I need to learn to become a really solid candidate for programming jobs.
I'm talking about things like Big O Notation, calculating complex recursion, linked lists , matrix / quaternion maths etc.
The first in that list I was not taught, and the second I didn't even know was something I might ever be expected to do. A list of all these and more, plus a good place to start learning about them would be extremely useful, I think to others as well as myself.
(re-tag and re-word this question as appropriate)
Answer
Alright, I actually just graduated with a Bachelor's degree in Computer Science this December.
I'm going to list what I feel were the important classes and the textbooks we used in them. Other than these and some software engineering courses, the rest of my classes were more focused on subfields like databases, AI, web development, and ethical hacking.
Data Structures
http://www.amazon.com/Objects-Abstraction-Data-Structures-Design/dp/0471467553
This class is essentially an introduction to different types of data structures along with their performance characteristics. The class I took was focused around C++ so it discussed STL data structures such as vectors (dynamic arrays), link list, trees, maps, sets, stacks, queues, and hash tables. Touches upon some algorithm analysis stuff too but really only Big O notation for worst case performance scenarios.
Algorithm Analysis
Explores many different types of algorithms and how to measure their performance characteristics. Some types of algorithms include Divide & conquer, dynamic programming, greedy approaches, backtracking, and branch and bounding.
Distributed Computing
Discusses networking, interprocess communication, UDP and TCP sockets, and a bunch of distributed computing paradigms (Client-Server, P2P, distributed objects, etc)
Computer Architecture
Self explanatory. Explains how all the hardware works and collaborates together.
Program Language Concepts
Covers different aspects and characteristics of different languages. Syntax, semantics, variable scope and binding, data types, expressions and assignmnet statements, control structures, etc.
Operating Systems
Covers from top to bottom all the essential task and concepts behind a operating system. This includes handling processes and threads, scheduling and synchronizing processes, memory (virtual, paging, segmentation, etc), file systems, and IO systems.
No comments:
Post a Comment