
Ask HN: “Year zero” for CS students? Use a terminal, etc - zachrose
I vaguely recall something along the lines of an online &quot;how to computer for CS&quot; resource or class for incoming computer science students.<p>It covered things like using a terminal and a package manager. It might have been MIT. It might have been a free online course.<p>Does anybody remember something like that?
======
panyang
Do you mean The missing semester of CS education?
[https://missing.csail.mit.edu/](https://missing.csail.mit.edu/)

~~~
zachrose
Yes, thank you!

------
pxhb
University of Michigan has a ‘c4cs’

[https://c4cs.github.io/archive/w18/](https://c4cs.github.io/archive/w18/)

------
vincent-manis
When I proposed a course like this 35 years ago (with then-current tools), my
colleagues told me that this was “not university-level material”. CS students
who don't know how to use tools effectively, and how to learn new ones are
going to be forever at a disadvantage.

~~~
bruce511
It's complicated because lots of students think university (and specifically
computer science) is there as a job-skills-learning facility. There's
something of an emphasis on "computer" here, and the typical goal is "I want
to go out and be a programmer".

Whereas most of the staff see the emphasis on the "science" part of the name.
In more general terms faculty see a university as "training to do science",
and in general terms students see it as "job training".

Since there's this disconnect in the goals, it's not surprising that the
curriculum to achieve those goals is misunderstood by students.

Should students wanting to become programmers become familiar with the OS, and
Git, and PHP and hosting Apache servers, and so on and so on? Sure. Those are
all skills that employers will look for (and a million more besides.) But, and
here's the important thing, you don't need to go to university to learn Git.
There are at least 12 YouTube videos on doing that. Students have lots of time
to learn that on their own.

[Aside: this is exactly why people often tell new wannabe programmers they
don't need to go to university to learn skills, there are lots of online
resources to do that at a fraction of the cost - They are not wrong - If you
are going to university just to learn skills then you are over-paying. On the
other hand if you want to understand the theory of coding a distributed
database engine then university may be for you.]

When I was at university we lobbied to have COBOL added to the syllabus
because "that's where the jobs were". What can I say, we were young and
foolish. Fortunately faculty had heard it before, so instead we got a 2 week
module, in which we learned, and delivered a (simple) assignment in 10
different languages. So 1 language per day. The lesson was simple - "If you
can program in one, you can program in all the others [1]". At the end of the
day the only changes are pretty much syntactical.[2] It's more important to
learn "how to program well" than "this is how to program in C#". you can write
bad code in any language, but understanding why code is "good" or "bad" takes
a little more understanding.

So yes, they do teach you how to program, but only as a means to an end. It's
only there so you can learn about algorithms, and data structures, and OS's
and data storage and all kinds of other "theory". At university they didn't
teach me to _write in language A_ - they taught me how to _make a compiler_
(for, and in, any language).

So yes, lists of everything CS Students should know are great. Indeed they
apply to any wannabe programmer (university student or not.) But at the same
time they are indeed not "university level material" and they should be
learned in addition to your degree, not as part of it.

[1] Actually, as you probably know, there are 2 languages. Imperative and
Functional. So, If you know an imperative one like C, then all the other
imperatives are the same, just different. If you know a functional one, like
Scheme, then ditto all the other Lisp derivatives. Cunningly we did modules in
both....but we had been taught both (Pascal, and Scheme) as foundations.

[2] Ok sure, C++ contains concepts not in C. But it's just "C + more". So yes
languages differ. Each has nuances, things they do well, and things they do
badly. But learning a new-language takes days, not years. Becoming a master of
the language (any language) takes longer of course. I never hire programmers
"who know language X". I hire good programmers. Good programmers can learn X
very, very, quickly. and yes filtering for "good" versus "bad" programmers is
harder than ticking some "experience with X" box.

~~~
vincent-manis
All very good points. However, my point is that a student who can't use tools
effectively is hampered in their studies. This isn't about getting jobs, just
about being able to do their lab studies effectively.

I recall the student who had spent (by his account) half a day trying to find
a bug in his program. When he enlisted my help, I pulled up a debugger (which
he was supposed to have learned, according to the syllabus) and found the bug
in moments.

Or the software engineering project groups in my SE courses. They were all
supposed to be using source code control. The ones who actually used it all
reported that it helped immensely. The others produced uniformly poorer work.

Learning how to use tools effectively helps a student to do better lab work,
and therefore reinforces the theoretical principles we are trying to teach.

~~~
qppo
My experience has been that the hard part is not teaching students using tools
effectively, but getting professors/academics to learn that the tools exist.

~~~
vincent-manis
Very true!

------
jamesgeck0
When I was in school, the student-run ACM chapter covered topics like that.
Tool-oriented topics like source control and debuggers were not covered in the
regular CS courses because the field changed too quickly, supposedly.

~~~
duxup
Sometimes I think that is "I never have to update all this theory ... that's
easier."

