computer science degree question

If you want to learn C++, java, HTML, all to the point of making games and posting them to the internet (to play or download to play), is the computer science associates enough to learn to do this? Or would you need a bachelors degree to get into that depth of game making?

Does computer science even go into this much depth or do you need to major in game programming? The reason im asking is there are numerous degrees for computer science, but so little for game programming.

Basically after coming out of college with an associates in computer science, will i have enough knowledge to do game programming?
Degrees don't matter as much as your own initiative
You should be able to learn enough from simple online material to be able to create games within months

This is for actual factual knowledge however- for prestige I would say go for the bachelor's.
i meant assuming that i had initiative to learn.

becuz ive read through numerous books (cough.....torrents) , and skipped some parts that i dont understand ( no matter which book explains it) hoping that it will be better explained in class

Last edited on
If you wanted you could list somethings that you don't understand and we could help clarify it for you
Give me one of the problems you don't understand and if I can I will help you out.
1) multi dimensional arrays , and using them in loops. (even single arrays) i am having trouble grasping the fact of putting an array in a for loop and manipulating it to input/output each index every time the loops is ran. I know how it is done, but i don't understand it. Then when i read on to multi dimensional arrays, i get completely lost.
1
2
for(i = 0; i < 9; i++)
cout << array[i];

i know that [i] starts at 0 index on array, as long as under 9 will get increaded by 1. ok that kinda makes sense.
but i have trouble following multi dimensional arrays with 2 loops [i] and [j] for example where [i] and [j] get increased by each for loop. which index would execute? does it have to be in 2 for loops to be able to? I had more (in depth) question, but cant think of them right now.

2) pointers.
1
2
3
count = 10;
m =&count;
q =*m;


i understand that m does not contain 10, but the address of the variable count. All i think of when a book explains this is, if i was going to use count, i would type count(not all this complicating the simple(like Congress does lol)). every part in a book that explains using pointers in future explanations (that i read) say there is another way too ( and i just think OK i will just do that then) but then the book says you need to learn pointers.

3) references. Every book explains how to do it, but they dont really explain the point of doing it. all books have very little on this subject, so i don't grasp it at all.

4) returning values to and from functions. I can make void functions, but then i just make a global variable and that seems to make returning a variable from a function moot. all my functions change variables , but they dont return anything, so i think "why does a function need to return anything"
all i remember is the prototype above main will have the type and variable returned, the call in main does not need type but only the variable, and the header for the function( i think you call it) will have the same as the prototype without the semi colon: Other than that, I cant retain anything, some books have really bad authors...

i havent even scraped the surface of structures, enumerations, unions, classes, objects, Some books start out with these after describing the hello world program, and that just seems like they are advancing too fast for a newbie.

for awhile i was confused why this one book was explaining using displaying to screen (using printf) when every other book used (cout) untill this forum explained it to me. I start out reading one book, and they start out well explaining things untill some points that the author thinks your a semi- pro, so jump to another book from page 1, and the same thing happens, again and again and again, and then some books use different methods of doing things that confuse me on things that i thought i had a good grasp on.

5) some general stuff (whether too advanced or not) doesnt make sense either like :
a) how can a c++ program output picures or animations ? Does it use something like Blender to call up an image that was created?
b) how can people make a game (even so simple as something that i can make) and have it for download from interent (without the use of giving away the source code for it?
c) emp.wage = 123.23; AND emp->wage = 123.23 some books start explaining this early on "all i think is WTF are they talking about?"
d) bitwise operators. some books start explaining this with massive amount of 0's and 1's over top of each other, "again WTF"
All of the questions you allude to in your last post are answered in a well explained, structured classroom format with concrete assignment and video lectures from Harvard Professor David Malan at:
http://cs50.tv/2010/fall
This is the address of the "OpenCourseWare" class, CS50, which serves as a introduction to programming course at Harvard and is taught mostly in C.

If you believe you would learn more easily from video courses as opposed to reading books and online articles, a perusal of the video lectures provided (you can even download them to your iPod free) would probably be your best bet.
Not to mention you'll get a taste of the types of things you'll be exposed to in introductory CS courses in college.

Or in JAVA:
http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111
Or in C++:
http://see.stanford.edu/see/courseinfo.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e

Well, I guess it all depends on how far you actually want to go with programming. Going into the market with just an Associates degree does not make you marketable. A Bachelor's with a minor in Mathematics is ideal. A lot of times, these people have to have either letters of recommendation or actual field experience (which can be acquired trying to obtained your bachelor's degree). A lot of people who program games will either use an existing SDK, to which code monkeys fit in rather nicely - but if you want to be innovative, you definitely need a stronger education - most people look for Masters in Mathematics or Computer Science. Linear Algebra and Numerical Analysis will be your best friends and understanding these concepts does not just apply to simply "making things that work" but rather understanding why they work.

Of course, there is what I like to call a lot of "implied" learning abilities. You are NOT going to college to learn the language. That is what the Associate's degree will accomplish. You get your bachelor's on the abstract concepts of computing (at least this was the way it is at the University of Oklahoma). You will learn how computers communicate with hardware in their fundamental form and not just being that "assembly line" programmer who can only adopt to the work of others - you are more likely to find yourself working as a contractor on MMIS systems pushing checks out to Medicaid recipients, or like my favorite college professor said - failing so you can go on to teach (no offense to the teachers in here... The world still needs you.)

Whether you go to get your Bachelor's or not, you are still going to have to update your understanding of the language through your own study. Just because you can do it, doesn't mean you're going to get the job. A lot of employers invest in their workers and like that degree as a form of assurance their investment will pay off.
Last edited on
You don't need a degree to enter the cottage industry of developing apps/applets.

A degree will help if you want a job in a company with a strong HR department.

Much of it depends on your own aptitude/attitude. If you're happy to learn things on your own, do your own research and ask for help when necessary, you'll manage. If not, you wont.
I think a Bachelor’s degree may be a better option for you if you look at it from the career growth perspective, but an Associate’s degree should be able to get you started in the field.

The focus of a Computer Science degree is the theory behind computing. Although you’ll learning programming, it may not be from an application point of view. What you can do is look for a CS degree with an emphasis in programming or a pure programming degree.

California College San Diego offers computer programming degrees ( http://www.cc-sd.edu/information-technology/bachelors/computer-science-programming-emphasis ) that may be of interest to you. Check out the details of these programs on the college website.
You won't learn how to make games in college or university - unless you sign up for a game making course. Which I really can not recommend. In essence, games aren't that much different from other programs you could write, so a general education + own initiative on learning more game related stuff would be optimal in my opinion. But, you don't need a degree at all to start, some people already started writing games in junior high or even earlier.

That being said, if you suck at math or logic in general, this may not be the right career path for you. Just try to judge your own capabilities, or get a consultant or something the like before deciding on anything.
Last edited on
1. Imagine a spreadsheet. In a spreadsheet, columns have letters and rows have numbers, correct? This is so E42 refers to one and only one cell. An array with more than one dimension is exactly like this, only you refer to "cells" (elements, more properly) using only numbers:
1
2
int array[32][32];
array[row][column]=42;


2.
All i think of when a book explains this is, if i was going to use count, i would type count
Except you don't always know what the pointer is pointing to.
Suppose you're in front of a door, and you know that Alice and Bob are in the room behind it. You think "I will talk to the first person that comes out that door". You can't possibly know in advance who will come out first, so both "I will talk to Alice" and "I will talk to Bob" are not suitable in this case.
Translated to code:
1
2
3
4
5
6
7
8
void f(person *p){
    talk_to(*p);
}
//...
if (random_bool())
    f(&alice);
else
    f(&bob);
This is just one very simple example of a problem that is otherwise unsolvable (in C) without pointers.
every part in a book that explains using pointers in future explanations (that i read) say there is another way too ( and i just think OK i will just do that then) but then the book says you need to learn pointers.
That other way is references. They aren't a substitute for pointers in all situations (in my example above, they are), so you still need to know how pointers work.

3. See my previous example. It has an equivalent writing in references, with the exception that references wouldn't allow certain programming errors to come up.

4.
I can make void functions, but then i just make a global variable and that seems to make returning a variable from a function moot.
Consider this example:
1
2
3
4
5
6
7
8
9
10
11
12
int x;

void square_x(){
    x=x*x;
}
//...
int a=5,
    b;
//...
x=a;
square_x();
b=x;
Alright. That works. You can square any number you want. There's a problem, though. The point of functions is that they're supposed to eliminate duplicate code. Every time you want to square a number, you have to fill x, call the function, then extract the result from x. If you were using functions properly, the compiler would generate machine code that actually performs pretty much these operations (although the machine code is actually nicer than what you're doing because it doesn't use globals). Not only is this ugly, it's also error-prone. Every time you call the function, you have to remember to set the variables properly, and the compiler can't detect your mistakes. One slip up, and your output will just be garbage.
Take this, on the other hand:
1
2
3
4
5
int square(int x){
    return x*x;
}
//...
b=square(a);
The code has the same behavior as before, only now you can't possibly forget to pass the parameter. The compiler won't let you forget.

These, as all examples you'll find in books (at least at the beginning) are simple because they're meant to just show the basics of how to use some feature. In a complete program with thousands and thousands of lines, these seemingly trivial problems become humongous. It's to be expected that you can't make that extrapolation from such simple examples, but think about it like this: would this feature really exist if there was a much simpler solution? Did the designers of this language just think up the most complicated solution because they're sadists, or am I just missing some case were something this complex would actually come in handy?

a) how can a c++ program output picures or animations ?
There's no general answer for this. For example, a picture could be drawn as ASCII art on the console, and it would be, from the point of view of the code, basically the same and displaying graphics.
The best answer you have is: the program asks the windowing system to put graphics on the screen. In the case of bitmaps, it's possible to give the system a pointer to an array of pixel data with some other information (pixel format, dimensions, etc.), and the system does the drawing however it sees fit. How the drawing is actually performed depends on a variety of factors that aren't really important and are generally beyond the program's control.

b) how can people make a game (even so simple as something that i can make) and have it for download from interent (without the use of giving away the source code for it?
See:
http://en.wikipedia.org/wiki/Compiler
http://en.wikipedia.org/wiki/Machine_language
In summary: a compiler (to native code) is a program that transforms source code into a representation that the computer can directly execute without any other information. The computer doesn't understand C++ or any other language, so the source code is unnecessary.

c) emp.wage = 123.23; AND emp->wage = 123.23 some books start explaining this early on "all i think is WTF are they talking about?"
None of that will make any sense until you understand pointers.

d) bitwise operators. some books start explaining this with massive amount of 0's and 1's over top of each other, "again WTF"
There isn't really any other way of explaining it. The computer represents numbers as a series of binary digits. For example, 10 could be 00001010 and 255 could be 11111111. You know how to add or multiply two decimal numbers, correct? You align the numbers one on top of the other and you do some manipulations with the digits and at the end that gives you an answer that makes sense to you. Bitwise operations are like that to a computer, only they're based on the binary system, and the manipulations are actually much simpler.
In the following paragraphs, I will use * and + to emphasize that these are just like arithmetic operations, but keep in mind that we're working in binary, and that they're not actually multiplication and addition; although they will look a lot like them.
First consider these simple facts:

a * b = r
0 * 0 = 0
0 * 1 = 0
1 * 0 = 0
1 * 1 = 1

a + b = r
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 1

With these simple rules, we can extend * and + to binary numbers of any length. Let's say we want to get 101*011:
101 *
011 =
???

We can start from the left or right; there are no carries, so it makes no difference. I'll start from the left.
1*0=0
101 *
011 =
0??


0*1=0
101 *
011 =
00?


1*1=1
101 *
011 =
001

Thus, we get that 101*011=001. We can apply the same method to get 101+011:
1+0=1
101 +
011 =
1??


0+1=1
101 +
011 =
11?


1+1=1
101 +
011 =
111

I said that * and + are not multiplication and addition. They're the bitwise AND (&) and OR (|) operators used in C/++. The rules I laid out before that defined how * and + behave with single bits are called "truth tables". The truth tables are same as those of logical/boolean conjunction (r is true if both a AND b are true) and disjunction (r is true if a OR b or both are true).
http://en.wikipedia.org/wiki/Logical_disjunction
http://en.wikipedia.org/wiki/Logical_conjunction
If you're familiar with sets in mathematics, AND is similar to a set intersection, and OR is similar to a set union.


Aside: Huh. I just realized that ({0,1},&,|) makes a field. I had never noticed that before. Maybe that's why electronics people write them as * and +.
Last edited on
Topic archived. No new replies allowed.