

Ask HN: One thing you wish they teach in your undergraduate CS course? - iworkforthem

After some 10 yrs in IT, I still dun see much value in my CS degree, why dun they just teach me these instead;<p>Step 1 - Find a(another) problem.
Step 2 - Build an awesome product to solve the problem in Step 1.
Step 3- Tag a price to your product.
Now go back to step 1.<p>It make so much more sense.
======
bd_at_rivenhill
Been out of school for a while, but based on the new hires coming through the
door I wish they would spend some time on software process: how to use source
code control (including branching and merging), how to approach designs in the
context of a system with cooperating programs so that compatibility is
maintained without big-bang releases of multiple programs, proper use of
bug/feature request tracking systems, why it is important to have consistent
coding styles, how to read and modify code that was written by others (and how
to write your code to make it easy to modify), how to work with other
programmers on a team. These are nuts and bolts issues of the practice of
writing software, but everybody seems doomed to come out of school and make
the same mistakes unless they start in an environment with a good remedial
training program to fix these deficiencies.

~~~
iworkforthem
@bd_at_rivenhill agree with you totally on the whole source control issue.
They should teach graduate what is merging, branching, tagging, etc. even
better if they know how to do continuous integration.

------
bdon
Testing! Unlike other necessary skills like using source control and writing
documentation, testing can't really be mastered on the fly. I think the myopic
scope of class projects doesn't let students grasp the long-term benefits of
having well written unit and integration tests.

Here's a shot at such a course that covers testing through RSpec and Cucumber:
<http://tinyurl.com/ucb-cs169>

~~~
iworkforthem
@bdon yes! effective testing and writing good technical documentation are
often missed out too. There are so much to testing; automated, security,
regression, etc. All of it caters to different phase/part of a proj/app, I
guess partly most people think that testing is not necessary.

Name one good technical documentation you see recently? Not easy really,
there's a few threads on HN on it. I guess that's why most used a wiki for
their technical doc, so that anyone can just come in and help correct any
error documentation.

------
kakaylor
This is why good internships are so important while your an undergraduate in
CS (or many other majors for that matter).

Depending on the university you go to, CS != Software Engineering. You don't
encounter, and may not be even aware, of concepts like code reviews, build
systems, or version control. By participating in an internship you are forced
to address these gaps in your knowledge.

That being said, I don't think I would take away a single CS course I took as
an undergrad and replace it with a course on software engineering practices.
There is just too much strictly CS knowledge that is necessary for an
undergraduate to learn.

------
zipstudio
I think a two (or more) semester course where you write some
libraries/functionality during the first semester from a blank page, and then
use/refactor/enhance that code in the second semester would be very valuable.
"Eat your own dog food" is something everyone should learn in school. Perhaps
the third semester could be based on getting some other students code to
enhance as well as being a resource for someone using your code from the
previous classes.

------
zachallaun
I'm not arguing in favor of CS degrees -- surely, there is more pragmatic
material to be covered -- but what you've stated is overly simplified.

What I _would_ argue is that CS programs give you the background knowledge
required to pick up whatever is needed for a certain task. For many, that task
is _not_ entrepreneurship.

Would a Software Entrepreneurship degree be cool? Of course, but it doesn't
negate the worth of another degree.

------
bartonfink
I wish my degree had more emphasis on working with an existing codebase
instead of a constant stream of greenfield applications. I wrote plenty of
programs in the n-thousand lines of code range, but never had to worry about
interoperability or maintenance at all. In my life after formal education,
those have been FAR more problematic than the things I learned.

------
dangrossman
Most colleges do have an entrepreneurship course in their business college,
and many colleges allow you to take electives outside your degree program. I
did, and entrepreneurship was one of them.

