Author Topic: CS Education --- What's going right and wrong?  (Read 4896 times)

Offline contingencyplan

  • Full Member
  • ***
  • Posts: 147
CS Education --- What's going right and wrong?
« on: October 16, 2013, 01:45:24 am »
I gather that there are a number of CS / CE / SE / programming students and
graduates on these forums (especially including our kind hosts :) ), and one
of my interests is the best way to present the concepts, theory, and practice
of these fields to students. I certainly have my own ideas, but I'm very
firmly in the "ivory tower" camp of things, so I was curious what y'all
thought about how these subjects are being taught currently --- what's going
right, what's completely wrong, what needs improvement, etc.

A related topic is: what needs to change with respect to the students'
viewpoint / attitude / goals? Personally, I don't view a CS degree as teaching
how to write programs [1], but I always reserve the right to be wrong.

The idea came after reading the post here.

For me, my biggest practical concern is the lack of version control exposure /
education. For such a fundamental aspect of development, I'm amazed that it's
not being integrated into the curriculum. Personally, I would structure the
curriculum around it:
  • Lesson 1: Here's how you write Hello World.
  • Lesson 2: Here's how you write test cases against your code.
  • Lesson 3: Here's how you commit it to version control.
  • Lesson 4: Here's how you push your code to another repository. OH BY THE
    WAY this is how you will submit your assignments for the rest of your time
    here, and here's how you get the feedback from the automated tests that will
    be run on your code when it's pushed.

As far as objectives is concerned, I've seen a number of people who are
getting a CS / etc. degree because they want to make computer games. Given
where we're at, I'd like to ask a pointed question at the devs: if a person
told you they wanted to get a CS degree to enter the game development arena,
what would you say to them?

Thoughts?



[1]: Briefly, I view CS (specifically) as a division of mathematics --- here's
the math that underlies what you do, and here's how to use it to formally
describe the problem and its solution. (For example: what's the difference
between a set and a list?)

The objective is not, and shouldn't be, to teach how to write programs
(especially in a particular programming language), but rather how to develop
the mathematical solution to a problem. Once you have the solution, encoding
the solution in a particular programming language is somewhat trivial.

Offline x4000

  • Chris McElligott Park, Arcen Founder and Lead Dev
  • Arcen Staff
  • Zenith Council Member Mark III
  • *****
  • Posts: 31,651
Re: CS Education --- What's going right and wrong?
« Reply #1 on: October 16, 2013, 07:28:36 am »
To boil it down: generally it seems that CS programs lag pretty far behind industry in their methods and technologies used, and their instruction is often overly theoretical.

A CS degree can form an excellent bedrock of understanding, and more importantly can help someone understand all the many layers of what is happening in a computer. Self-taught programmers often miss this, and it can be useful.

That said, programmers coming fresh out of a CS degree are often too inexperienced at practical matters to be worth hiring at a lot of companies. There is a reason for the "must have several years of experience" requirement of many companies: they want you to get your on the job training somewhere else.

At Arcen I would not hire a fresh CS grad because we move too fast and the training is too much load to bear. However, at my past company, I did hire several fresh CS grads and was very happy about it. They were relatively inexpensive, these specific ones were very motivated and smart, and they were primes to be trained in working using exactly the methods and thought processes I wanted them to. In other words, they would be super compatible programmers with our codebase. When I left, one of them took over my position at the company, which I was very pleased to see.

Best bet is lots of outside study and practical experience while you get your CS degree. Best of both worlds.
Have ideas or bug reports for one of our games?  Mantis for Suggestions and Bug Reports. Thanks for helping to make our games better!

Offline Mick

  • Hero Member Mark II
  • *****
  • Posts: 911
Re: CS Education --- What's going right and wrong?
« Reply #2 on: October 16, 2013, 07:53:27 am »
I got a CS degree at RIT. I'd say that my course content was mostly the theoretical side with just enough practical knowledge to be dangerous. Of course, they had a lot of courses available with the more engineering/application focus.

My school also required four quarters of "co-op" experience, which is basically paid internship at the company. I felt the co-op was the most valuable part of my education in terms of being able to work after school, but that doesn't mean I felt the math/theory stuff was useless (I LIKE the math/theory stuff!)

Offline keith.lamothe

  • Arcen Games Staff
  • Arcen Staff
  • Zenith Council Member Mark III
  • *****
  • Posts: 19,505
Re: CS Education --- What's going right and wrong?
« Reply #3 on: October 16, 2013, 09:57:44 am »
0) I see your "the point is not to teach how to write programs, but the underlying math" and raise you "the point is not the programs OR the math, it's the problem solving". 
- Incidentally, I see Computer Science more as Applied Linguistics than Applied Mathematics.  I use early-high-school-level math regularly in my work (lots of algebra, a little trig), but the symbolic and typological aspect is far more complex and important.


1) To an aspiring game developer getting a CS degree for the purpose:

a) Good for you, that's what I did (except I never finished the non-CS part of the degree). 

b) The coursework is good for the early and mid phases of "beating your head against the brick wall until it falls down".  There's a ton of hurdles and gotchas and stuff.  Most only need to be successfully navigated a few times before they will no longer trouble you, but running into them on a solo hobby game project can be disheartening.  Getting through them with something behind you and pushing helps.

c) But the degree, or even the coursework, is not going to remotely prepare you for working in the field.  You need to actually work on projects.  Not even all game projects, many other fields are wonderful preparation; for instance Chris and I both have extensive backgrounds in enterprise database/web applications and the resulting thought patterns are often invaluable to us. 

d) Thankfully, nowadays if you want to contribute to a game project there's quite a few open source ones out there that accept help pretty much out of the blue as long as you follow the rules (also good practice).

e) Once you've cut your teeth, and bloodied your face, on C++, go to C# and never turn back. (ok, ok, the specific programming language isn't really the point, BUT at least write in something you can intuitively read and understand)

f) "Premature optimization is the root of all evil"

g) "There can always be more than one thing wrong"
Have ideas or bug reports for one of our games? Mantis for Suggestions and Bug Reports. Thanks for helping to make our games better!

Offline zespri

  • Hero Member Mark III
  • *****
  • Posts: 1,109
Re: CS Education --- What's going right and wrong?
« Reply #4 on: October 16, 2013, 04:37:40 pm »
When I graduated source control was not even mainstream. The most interesting paper I took was compilers design - was absolutely fascinated by the topic. Never built a compiler in my life after that. However I do agree that foundation like that does help.

Offline Cyborg

  • Master Member Mark III
  • *****
  • Posts: 1,957
Re: CS Education --- What's going right and wrong?
« Reply #5 on: October 16, 2013, 08:58:41 pm »
I almost went to RIT. Nice tunnels, and I work with an engineer from there. She's very talented.

But since all of us computer science folks are putting in our two cents worth, here's mine. I have gone through both undergraduate and graduate computer science classes.

1) computer science degrees are not there to teach you how to program. They are there to take the mystery out of computers and teach you how they work, from hardware on up through software. By the time you are done, you should not only understand how they work and where they came from, but how to bend such magic to your will.
2) in general, all college curriculum teach one very important thing (or should): how to go about problem solving. College is not going to have all the answers to all of your work questions, but it sure as hell should teach you how to go about learning and navigating your topic of expertise. If it doesn't, find a different school. My coworkers, the biggest difference I see are the good ones know how to figure shit out and the rest flop around asking everyone else what they are supposed to do.
3) computer science programs are full of cheaters. Absolutely chock-full of them. I know real people who have graduate degrees that don't know jack because they cheated their way through college. Not only can't they solve problems, they don't know how to write basic programs, and they are a burden on everyone else. It's too bad that certain managers don't know how to interview and stick us with these losers.
4) the most common question I get asked is, "what language should I learn?" It's absolutely the wrong question. The language doesn't matter. At the end of your degree, you should be able to understand how languages work and therefore be able to pick up any language you want in an afternoon. You'll be able to research and understand what questions to ask and hence find the answers you need. Computer science has nothing to do with specific languages; they are only the medium by which theory is taught, and the tool by which you will be making money.
5) The bottom line: at the end of your degree, you should know how to problem solve. You should know how to find answers to the questions you do not know. You should know how to pose a question and what questions you should be asking. You should know how to experiment, test your hypotheses, and the scientific method (absolutely necessary when debugging). You should know how a computer works. You should know how software works. You should have a work ethic.

And if you cheated, do me a favor and switch to IT so the rest of us in the trenches do not have to carry your deadweight.
Kahuna strategy guide:
http://www.arcengames.com/forums/index.php/topic,13369.0.html

Suggestions, bugs? Don't be lazy, give back:
http://www.arcengames.com/mantisbt/

Planetcracker. Believe it.

The stigma of hunger. http://wayw.re/Vi12BK

Offline Draco18s

  • Resident Velociraptor
  • Core Member Mark V
  • *****
  • Posts: 4,251
Re: CS Education --- What's going right and wrong?
« Reply #6 on: October 17, 2013, 10:29:01 am »
I had one class that "suggested" source control.

They set us up with SVN and then left us to our own devices trying to figure out how to install and set it up from home (tip: it's not easy, when you have NO lovably IDEA what settings were used originally).  So I said "hug it" and moved on with my life.  Ironically I had no source code to submit to that project in the end, as the entire concept was a disaster and my job was to get a third party tool running (Prof: "Hey, the guys that made that work for a company that my company owns!  If you need any help, I can get them on the phone in a jiffy."  Me: "I need help."  Prof: "Darn, they aren't answering.  I'll keep trying."  Six months later, guy-who-made-it: "Oh, yeah.  That's all it does.  It was just a tech demo, we never expected anyone to try and USE it."  At the end of the project, Prof: "And you get a D because you did nothing.")

Git is so much nicer.  I had a little trouble getting set up initially, but I was able to email GitHub and ask for help, which they directed me to a wonderful tutorial and I was able to get what I needed.  It takes literally minutes to set up.

Anyway, onto what a CS degree should do:

Largely I agree with Cyborg.

  • Some handle on the hardware (I actually left CS because of the hardware-theory classes, but I do agree that they should be there, I just hated VHDL with a passion and there was no way in hell I was going to use it to "create" a 32 bit cpu).  Just enough to think "ok, I could build a computer from a handful of transistors" regardless of whether or not that's actually true (that is: enough experience to get students to think this, not enough to require that they do so).
  • Definitely needs to address the problem solving.  There's a lot of it I had to do, but at the same time I was not given access to the necessary resources (or was not informed as to what the resources even WERE).  Frequently I found myself with questions and no professor or aid to ask them to.  Google was a Thing when I was in college, but Stack Exchange was not (or if it was, it was not "popular" enough to show up in a google search).  Asking questions on stack exchange to finish a project is not cheating!
  • On the "what language" front I had one class that required assignments to be submitted in all of the following languages: BASH, Perl, C, C++, C#, Python, and one other that I've lost track of.  SEVEN different languages, of which I had had familiarity with 2 (going to C or C# from C++ isn't hard, though, so that covered 4 of the seven).  Not having one of the seven was points off the assignment's grade.  There was basically *no* help available in class or otherwise if you were having trouble.  I was also unable to complain about the professor's methods as he was the head of the department.  Contributed to my leaving the CS program.  While I've certainly gotten more flexible post-college, I think that came from knowing one language REALLY well, then transferring to a different, but related language, and learning it REALLY well, and only then starting to look at other languages and being able to see the patterns (side note: the fact that Unit's Javascript uses IntinialCapitalization on its function names still throws me off and bugs the shit out of me).  The problem is that I did not get to this point during my college experience (and several other students I knew at the time also struggled)
  • Lastly: you need to understand OOP the way OOP was meant to be used.  Composition not Inheritance.  Inheritance is great, but composition is better.  Understanding composition (class A implements B) is vital to making large programs, especially programs that can be modified by other people (i.e. any kind of API).  Understanding how to navigate a large project built in this matter is crucial, I'm still working on figuring out a good way to go "ok, so what does someGenericObject.aMethodIdLikeToUnderstand(...) do?" and find that someGenericObject's class is actually an interface, and then needing to locate its implementor.  Even in Java's Eclipse (which is a godsend of an IDE) I have trouble.  The best I've been able to do is highlight the IImplementor and search for references and see what classes implement it.  Usually is only one or two, so that makes the search easy.

Offline Cyborg

  • Master Member Mark III
  • *****
  • Posts: 1,957
Re: CS Education --- What's going right and wrong?
« Reply #7 on: October 17, 2013, 06:21:32 pm »
1) For all the people that orgasm over Java object-oriented programming, there are still more others that suffer from 10 page long stack traces, RSI from having to write so much code to do very simple things, incompatible JREs, etc. I have to work with Java every single day but.. honestly, ^#@$ that crap. The worst weeks in the world are trying to put together someone's Java program from 10 years ago to make very simple changes, it turns out they have dependencies a mile long.

2) I endorse the "gang of four" software design book, "Design Patterns." The problem is, you need a company willing to staff a project team, a competent project manager, and in general competence from everyone for this to work. The real world has changing requirements, changing design, and moving targets that make Java programming a living hell.

3) That class you mentioned where you have to use several different programming languages to do different projects in one semester without being trained, that's what the real world is like. You have to be able to understand how to pick up languages and move between projects. You see, computer science was never about the language. That's what I was trying to get at.

4) On the topic of cheating, copying someone else's code and submitting it as yours is cheating. Finding common problems and errors and then applying that knowledge to fix your own problems is not. What it comes down to is code originality. In the corporate world, this is even more strict as to what you can and cannot do.

Kahuna strategy guide:
http://www.arcengames.com/forums/index.php/topic,13369.0.html

Suggestions, bugs? Don't be lazy, give back:
http://www.arcengames.com/mantisbt/

Planetcracker. Believe it.

The stigma of hunger. http://wayw.re/Vi12BK

Offline Toranth

  • Hero Member Mark III
  • *****
  • Posts: 1,244
Re: CS Education --- What's going right and wrong?
« Reply #8 on: October 18, 2013, 12:03:04 am »
1) For all the people that orgasm over Java object-oriented programming, there are still more others that suffer from 10 page long stack traces, RSI from having to write so much code to do very simple things, incompatible JREs, etc. I have to work with Java every single day but.. honestly, ^#@$ that crap. The worst weeks in the world are trying to put together someone's Java program from 10 years ago to make very simple changes, it turns out they have dependencies a mile long.
Seconded.  I like the fact that Java enforces exception handling.  Every other design decision in Java is done better somewhere else, much better.  I'm personally very fond of the ease of C# and .Net for application development.  Not the least of which is that Visual Studio is a wonderful IDE.

2) I endorse the "gang of four" software design book, "Design Patterns." The problem is, you need a company willing to staff a project team, a competent project manager, and in general competence from everyone for this to work. The real world has changing requirements, changing design, and moving targets that make Java programming a living hell.
Design Patterns... Some of them are useful, but even after decades, I still don't understand some of the others.  But none of them are useful when your project decides to switch to 'Agile' development!  As if cutting out the design phase will somehow improve the product...  Bah.  Agile is really about dodging the blame, I think.

3) That class you mentioned where you have to use several different programming languages to do different projects in one semester without being trained, that's what the real world is like. You have to be able to understand how to pick up languages and move between projects. You see, computer science was never about the language. That's what I was trying to get at.
Well, sort of real world.  Usually, I've found that projects (at least projects, sometime companies) tend to settle on one language quickly.  I think everyone should be required to learn a procedural language, a functional language, and a scripting language during school.  The three concepts are very important in understand software design and execution.  But all at the same time is silly.
Where I work now, we have legacy code (VB, VB.net) that is being converted to recent development (C#).  I've had to work with third party APIs (C/C++) and applications (eww, LotusScript).  That's several languages, but each piece is done in only one way.

Offline Draco18s

  • Resident Velociraptor
  • Core Member Mark V
  • *****
  • Posts: 4,251
Re: CS Education --- What's going right and wrong?
« Reply #9 on: October 18, 2013, 11:43:28 am »
3) That class you mentioned where you have to use several different programming languages to do different projects in one semester without being trained, that's what the real world is like. You have to be able to understand how to pick up languages and move between projects. You see, computer science was never about the language. That's what I was trying to get at.

The problem wasn't being able to understand how to pick up new languages and move between projects, but the fact that it was done poorly.  Everything I had ever worked on up until that point was C++ and I had lucked into having had some experience with BASH, but wasn't very good at it.  I hadn't yet gotten to the point where I was seeing common patterns between languages (other than the obvious C -> C++ -> C# similarities of being the same language with extra stuff; it was in fact entirely possible to do the project in C, then submit the same code for the C++ and C# variations, as none of them required any of the fancy addons C++ and C# offered).

It was more like, "whoa dude, you want us to submit projects in Python?  I've not only never had any experience with Python I've never heard of Python" so had no ability to locate resources in order to get started.  I had to submit a rather complex program in 2 days without even knowing how to write "Hello World!"  Multiply by 2 more languages.

Professor's response to not having resources was "My TA will be in the labs on [days] and [time]" to which I said, "You realize I have another class on [days] at [time], right?  There's no way I can actually talk to them."  (I managed to get in to see the TA once the entire semester, and they were busy with someone else, for a class I was not in).  One project in that class was a group project, three or four people per group.  My group submitted--at the last minute--code that didn't work.  We got a B+.  We worked out the math and figured that half the class didn't even submit anything, working or otherwise.

Far from the worst class I had.  No, that dubious honor fell on the "write a compiler for a trivial language" class.

Three weeks in, and barely managing to understand the theory being discussed, I asked the professor when we'll start seeing the code that makes all of this stuff actually work.  They said "Two weeks."  Which was conveniently after the last day to drop classes.  I figured, well, if we do get to see the code that makes this work, I should be able to pick up the parts I'm not understanding (i.e. do a code walkthrough).  I should be OK.

I'm still waiting for that code.

Me and my partner for the one and only assignment for that class exchanged three emails in total.  It went along these lines:

Me: "You have any idea how to do any of this?"
Them: "Nope, me either."
Me: "Alright then.  At least I won't feel bad for not helping."

Never actually met the guy, as we'd all been assigned partners at random via email.

Offline Cyborg

  • Master Member Mark III
  • *****
  • Posts: 1,957
Re: CS Education --- What's going right and wrong?
« Reply #10 on: October 18, 2013, 04:55:42 pm »
But that's a common story. We all know about "the curve" when it comes to projects and tests. And this is what I am talking about when it comes to cheating. In my day, I had to compete with kids who were part of fraternities; they would get all of their projects and answers from their fraternity storage. I was a loner for the most part, and I had to hit the books and study my butt off to keep up.


You are right, professors don't teach very well. That's because they are not being paid to teach. Most professors are getting paid for special projects they do on the side for companies that are contracted through the college. Your tuition means jack shit to them. The whole thing seems kind of shady anyways, as much of the tuition gets adjusted because of financial aid, scholarships, and so on.


So here is the perspective that I would advise. Forget about what you think you are owed for your education or what you think you paid for. Forget about why you think the professor or the class sucks. Armed with only your determination and ability to learn, go out and find the resources you need to get the projects done. Nobody is going to hand it to you. Nobody's going to teach it to you. The only thing the professor is going to do is set the bar that you have to clear.


I recommend the internet, the library, office hours, and if languages are bothering you, O'Reilly book membership. Whatever is your best way to learn. Just don't sit around waiting for an education to come to you because in college it's about what you take as yours and not about what is taught to you. It is actually more real world than high school, where you have the concept of what's fair and what isn't, what was covered and what wasn't covered. College doesn't care whether or not they reviewed the material in class. I have had classes where they take out a sentence of a 600 page book, small print, and make a test question out of it. I have had classes where it's all on a curve.


It's not a question of your ability to learn, just your perspective of what you think learning means in college.
Kahuna strategy guide:
http://www.arcengames.com/forums/index.php/topic,13369.0.html

Suggestions, bugs? Don't be lazy, give back:
http://www.arcengames.com/mantisbt/

Planetcracker. Believe it.

The stigma of hunger. http://wayw.re/Vi12BK

Offline Draco18s

  • Resident Velociraptor
  • Core Member Mark V
  • *****
  • Posts: 4,251
Re: CS Education --- What's going right and wrong?
« Reply #11 on: October 18, 2013, 05:03:50 pm »
That's because they are not being paid to teach. Most professors are getting paid for special projects they do on the side for companies that are contracted through the college. Your tuition means jack shit to them. The whole thing seems kind of shady anyways, as much of the tuition gets adjusted because of financial aid, scholarships, and so on.

[...]

It's not a question of your ability to learn, just your perspective of what you think learning means in college.

My college "learning" experience amounted to "never trust fuckanyone to do fuckanything.  And then throw you under the bus."

I picked up more useful knowledge after graduating (three weeks of my current job) than I did in the five years I spent going to college.

Offline Cyborg

  • Master Member Mark III
  • *****
  • Posts: 1,957
Re: CS Education --- What's going right and wrong?
« Reply #12 on: October 18, 2013, 05:42:04 pm »
Amen.
Kahuna strategy guide:
http://www.arcengames.com/forums/index.php/topic,13369.0.html

Suggestions, bugs? Don't be lazy, give back:
http://www.arcengames.com/mantisbt/

Planetcracker. Believe it.

The stigma of hunger. http://wayw.re/Vi12BK

Offline keith.lamothe

  • Arcen Games Staff
  • Arcen Staff
  • Zenith Council Member Mark III
  • *****
  • Posts: 19,505
Re: CS Education --- What's going right and wrong?
« Reply #13 on: October 18, 2013, 07:33:19 pm »
To some extent, it's still teaching problem solving: solving the problem of how to learn to solve problems, in a system which motivates basically no-one to ensure this happens :)
Have ideas or bug reports for one of our games? Mantis for Suggestions and Bug Reports. Thanks for helping to make our games better!

Offline Cyborg

  • Master Member Mark III
  • *****
  • Posts: 1,957
Re: CS Education --- What's going right and wrong?
« Reply #14 on: October 18, 2013, 10:02:38 pm »
To some extent, it's still teaching problem solving: solving the problem of how to learn to solve problems, in a system which motivates basically no-one to ensure this happens :)

amen 2.
Kahuna strategy guide:
http://www.arcengames.com/forums/index.php/topic,13369.0.html

Suggestions, bugs? Don't be lazy, give back:
http://www.arcengames.com/mantisbt/

Planetcracker. Believe it.

The stigma of hunger. http://wayw.re/Vi12BK