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.