
How I'd teach computer science - ingve
http://scripting.com/2016/10/17/howIdTeachComputerScience.html
======
primitivesuave
"Computer science is no more about computers than astronomy is about
telescopes." (Edser Dijkstra)

Computer science is the study of algorithms - what is described here may be
best described as software engineering. As an educator who has been involved
in computer science education for almost a decade, I find the code-centric
approach described here to be counterproductive.

~~~
muyfine
My favorite quote around this is from SICP's preface:

Underlying our approach to this subject is our conviction that 'computer
science' is not a science and that its significance has little to do with
computers. The computer revolution is a revolution in the way we think and in
the way we express what we think. The essence of this change is the emergence
of what might best be called procedural epistemology -- the study of the
structure of knowledge from an imperative point of view, as opposed to the
more declarative point of view taken by classical mathematical subjects.
Mathematics provides a framework for dealing precisely with notions of 'what
is.' Computation provides a framework for dealing precisely with notions of
'how to.'

~~~
sotojuan
And the quote that made me interested in CS, from the online lectures of the
same book:

"[As] opposed to other kinds of engineering, where the constraints on what you
can build are the constraints of physical systems ... the constraints imposed
in building large software systems are the limitations of our own minds."

------
deeebug
This doesn't sound like a Computer Science course. Maybe for something like a
Software Engineering degree, but not for CS.

~~~
catnaroek
Agreed. This raises even more questions: Do we need more computer scientists
or software engineers? Why do so many universities offer computer science
programs, if the job market is primarily asking for software engineers? Even
worse, why do so many universities offer software engineering programs that
call themselves “computer science” programs? Isn't that lying to students?

~~~
ktRolster
The job market seems to favor Computers Science degrees over Software
Engineering degrees.

Although it favors job experience over both.

~~~
catnaroek
Why? Because of the word “scientist” in the degree's name? What exactly is the
point to employing a scientist to perform non-scientific tasks?

~~~
ktRolster
I think because CS degrees tend to produce more competent programmers, for
some reason.

~~~
protomyth
I would actually like to see a study on that. I'm not so sure its true, and it
certainly has not been my experience. I do wonder if anyone is ever going to
do a full study on the subject.

Weirdly, some of the best programmers I have met are people who go their
degree in Music Theory. Odd and really not enough sample size.

~~~
ThePawnBreak
> Weirdly, some of the best programmers I have met are people who go their
> degree in Music Theory. Odd and really not enough sample size.

This is a very common experience, and I think it's a form of selection bias.
If you look around at the top people in the industry, most have studied CS or
closely related, highly mathematical subjects (math, physics). But the reason
why so many people see "great" programmers who have studied art, music,
literature or any other field is, according to my hypothesis (which may well
be wrong), because they don't work in an environment where the typical bright
CS student goes to work. So if you're working in a small web-dev company,
you're not getting the cream of the crop from MIT, Stanford, CMU and other top
universities (or even the less well known ones) -- those guys (or gals) go to
work for Google, Facebook, hot startups in the valley or stay in academia.
Instead, you're getting the average or below average CS students, and the
brightest people who studied irrelevant subjects, who would have a hard time
getting into a company like Facebook.

Again, I may be wrong, we need a much more in-depth analysis to draw any form
of conclusion. Still, I think this also highly depends on what you consider a
"great programmer". Many people consider a programmer to be great if he writes
very clean, logical and easy to understand code. Personally, I think this is
way too low of a bar, and I think being called great requires a very in-depth
understanding of a subfield of programming (be it graphics -- Abrash,
scalability -- Dean, languages -- Stroustroup, Sutter, Alexandrescu etc.)
Maybe not as good or well known a the people I mentioned, but I wouldn't call
any random programmer from a random company writing CRUD apps _great_.

~~~
protomyth
Even reading your comment charitably, I am left with the thought that you
consider me some country bumpkin that hasn't been exposed to high quality
programmers.

I'll point out the previous conversations about selection bias of universities
and the companies who hire their students. I'll also point out that people go
to different places because a variety of factors, many of which are beyond our
control. Few actually get to walk the straight path, and I find people who
don't recognize the luck they have received are poorer in spirit for it. I
think you suffer more from selection bias and a need to uplift your position
than I.

"I wouldn't call any random programmer from a random company writing CRUD apps
great." \- I suppose someone could say the same about those who serves up ads
or writes webmail clients. I believe the world is amazingly interesting with
the unique problems we face as programmers and challenges lie in the heart of
many pieces of software. We are much too young a profession to think that the
world is routine.

"Many people consider a programmer to be great if he writes very clean,
logical and easy to understand code."

I would also say the best sprinters are fast. I guess I have a reverence for
those who write in a clean, logical, easy fashion. I like elegance in all
things and find it a very high complement. How else would one show in-depth
understanding? The code is the expression of programming, not the spoken word
or lecture. I guess I'm a simple man, and believe in people showing me.

------
bsder
Spoken like someone who hasn't taught a CS class.

You _really_ want to teach some useful skills and not actually disrupt your CS
class too much? Here's the start.

Lecture 1: How to drive a basic IDE (I used to choose Eclipse, but I might
rethink that nowadays depending on language used. One of the IntelliJ projects
might be easier.).

Most students are stunned at the difference between what they use as an editor
vs what an IDE can do. Once somebody shows them what is possible, they start
swimming really well.

Lecture 2: Source control and automated testing.

For most students, they view this as a homework dropbox that checks and runs
their work. That's good enough to start. Some of them progress beyond this.

 _NOW_ , I can actually start to talk about the substance of my class as well
as how to put that in programs.

Guess what? I have to give these lectures to _every single class_ I teach. It
doesn't matter if the class is 101 or 499, _every_ _single_ _class_.

~~~
gravypod
I've been pushing the head of the class I help TA for to make it mandatory
that students use PyCharm. He's still afraid that PyCharm will intimidate the
users but I think it's well worth it.

We have 2nd and 3rd year students at my college who still haven't opened
Eclipse, IntellJ/PyCharm/Whaterver else, or even Visual Studios. They have
also never used a debugger. They have no idea what formatting standards, or
naming standards are. It's crazy.

~~~
bsder
> I've been pushing the head of the class I help TA for to make it mandatory
> that students use PyCharm. He's still afraid that PyCharm will intimidate
> the users but I think it's well worth it.

Dropping an IDE and automated testing into your class is not without cost.

10% of the questions the rest of the semester will be how to do something in
the IDE. And, occasionally, you're not going to know the answer. Saying "I
don't know" can be intimidating to someone who doesn't have 20+ years of
experience.

As for source control and automated testing--congratulations, you are now Mr.
IT-guy for 30 people for the next 14 weeks. And students can be really
creative in wedging their repositories. To this day, I still have no idea how
one student managed to create a recursive repository in Subversion.

You _really_ have to be committed to accept the cost of the things I
recommended.

~~~
gravypod
> 10% of the questions the rest of the semester will be how to do something in
> the IDE. And, occasionally, you're not going to know the answer.

Most of the things they will need to do will be laid out for them before hand.
I also have nothing against them asking me more questions. I'm technically
paid by the question and it's better for them to ask these questions in an
environment that is as conducive to learning as a classroom instead of needing
to ask a boss/coworker on the first day of class.

> Saying "I don't know" can be intimidating to someone who doesn't have 20+
> years of experience.

Sometimes the answer to other things is "I don't know" but, every time I
didn't know something and I have to help a student I always follow it up with
"but let's dick around with this a bit and I'm sure we can get it working"

> As for source control and automated testing--congratulations, you are now
> Mr. IT-guy for 30 people for the next 14 weeks. And students can be really
> creative in wedging their repositories. To this day, I still have no idea
> how one student managed to create a recursive repository in Subversion. You
> really have to be committed to accept the cost of the things I recommended.

If a student is paying 15-30k a year and I'm making 8.50$/hr to help them I
have absolutely no problem helping them. They are quite literally paying my
salary. I've answered emails at 2am before an exam, met up with students on
weekends before exams, and spent hours with students to help them "get it".

School should be about getting taught the material you need to succeed. It
should be our goal to achieve that even if it's a little _hard_.

And again, I don't think that student is going to be making a recursive svn
directory in front of their boss after you helped them out of that ditch and
it's a good thing you did.

~~~
bsder
Agree with all of your points. I'm simply pointing out that all of these
things take time away from my primary mission which is to teach my _material_.

I need to teach the material as it generally is a building block for what
comes later. If I don't get the material across, I've done a bad job as well.
If I teach Data Structures, the students need to know that when they come out
of my class or they will fail the next classes. (I had to reteach Data
Structures to a class that had a bad teacher once before I could teach _my_
material).

And, I applaud your dedication as a TA. People have _zero_ idea how much
effort goes into actually teaching a class. As the instructor, teaching a
14-week, 2 2 hour lectures per week class is a greater than 40 hour/week job
including planning, constructing projects, running the infrastructure,
answering questions, office hours, and grading exams.

That is, sadly, why I don't teach much anymore. I would earn more hourly by
working at McDonalds than I do if I lecture at a university. :(

------
gravypod
I often hear many many people say "what you want is Software Engineering not
Computer Science" and I'd say YES that's EXACTLY what I want. The problem is
finding a university that will give it to you.

In my opinion the field of Computer Science should be the study of
abstractions, logic, derivation of algorithms, understanding the limits and
possibilities of computer hardware, and programming (being the development of
a real-world solution to a problem that can be run to process data). If it's
not one of those items I don't think it belongs in Computer Science. Sadly,
our field has been managed, since the beginning, by professors who think it's
math field.

That's the way I'd say most hiring managers look at it: Computer Science =
Programmer. The only place this isn't paralleled is academia.

So I'm perfectly fine with saying either everyone else is wrong and my
definition is correct, in which case we need to seriously evaluate how
Computer Science is taught in schools. Alternatively I'm wrong, in which case
I'd love to attend a university that will allow me to get a bachelor's,
master's, and maybe even a PhD in Software Engineering because the truth is I
hate whatever it is that academia considers Computer Science but I love logic,
creating solutions to problems, thinking about the limits of hardware,
optimizations, and everything that goes along with it.

Sadly I cannot find any university that offers this. My university offers a SE
masters degree but it requires a BS in Computer Science! How ironic!

But yea, I'm perfectly happy with either of those outcomes. The people who
are, in my opinion wrong about what "Computer Science" is can stay in their
corner and I'll stay in mine.

~~~
bsder
> The problem is finding a university that will give it to you.

Go find one of the multi-week intensive programming "camps" with a good
reputation (do be careful--there's a lot of snake oil out there). That's what
you want.

~~~
sotojuan
The problem is that bootcamps are 3 months of "intense" and pressured learning
the most marketable language at the time and as far as I know aren't
accredited like regular universities.

What I'd like to see exist is a 1~ year program at a real college (can be
community college!) that is basically a more comprehensive and relaxed[1]
version of a bootcamp.

[1] I don't mean this to sound "easy", just not 8-10~ a day of work like
bootcamps are.

~~~
gravypod
I'll go a step further. Right now I've created The Perfect Semester for
myself.

Right now I am taking:

    
    
       - CS280: C++/Interpretations & Composition of Programming Languages 
       - CS288: C/Whatever random crap the professor came up with
       - CS252: ARM EABI Assembly/Computer Architecture 
       - CS332: Operating Systems
       - IS350: An Ethics Course
    

I'd love a college that will let me do something like this. Create a schedule
for 4 years (like a normal degree) that will provide me with, you guessed it,
a degree in "Software Engineering" where I learn about, you guessed it,
Software.

I want to learn every popular language's ins and outs. This includes, but is
not limited to C, C++, Ada, Lisp, Java, C#, Python, x86/x64/arm/MIPS assembly.
I'd like to be _taught_ , not lectured to, I want to actually _learn_ from my
professors. I want to learn about software abstraction, organization,
revision, and project management. I'd like to be able to learn about ever
piece of software running on a system and be taught how to implement them. I'd
like to learn how to use every single tool in my arsenal to solve any problem
in development or in my problem domain.

I want to actually build things with seasoned experts (my professors). I'd
like to come out the kind of person, who when asked to solve any computer-
related problem doesn't stutter but just hops right on it.

I've done, to the best of my own ability, just that outside of school yet
there are just some things I cannot teach myself.

I love computers and I want the curriculum to mirror that.

And for anyone who want's to say "oh you just want the _easy_ way out, you
just don't want to take English/Math classes because that's too hard". I've
heard this many many times before. I don't want anything easy. If anything
this curriculum that I want would be far harder than any CS curriculum ever
before it. But it wouldn't be hard for me. Not because I know how to do all of
the stuff in it, but because I _love_ doing all of the stuff in it. These
things are what I excel at doing and I strive to know as close to everything
about these things as I can.

Sadly, we don't really get a say in this sort of thing. My beard isn't nearly
gray enough and I don't have a white coat, so in the end my opinion is
unimportant.

~~~
bsder
> I want to learn every popular language's ins and outs. This includes, but is
> not limited to C, C++, Ada, Lisp, Java, C#, Python, x86/x64/arm/MIPS
> assembly. I'd like to be taught, not lectured to, I want to actually learn
> from my professors. I want to learn about software abstraction,
> organization, revision, and project management. I'd like to be able to learn
> about ever piece of software running on a system and be taught how to
> implement them. I'd like to learn how to use every single tool in my arsenal
> to solve any problem in development or in my problem domain.

And yet the CS curriculum is _exactly_ what you need in terms of foundation so
you can learn all of that.

What you are asking for is a (probably several) _lifetime_ of information in 4
years. Wouldn't we all like this?

> I'd like to be able to learn about ever piece of software running on a
> system and be taught how to implement them.

Take the track that leads to your "Compilers" class. You will get most of the
pieces you are asking for along the way.

> I want to actually build things with seasoned experts (my professors).

Sorry, but your seasoned experts are probably in industry, not academia.

> Sadly, we don't really get a say in this sort of thing. My beard isn't
> nearly gray enough and I don't have a white coat, so in the end my opinion
> is unimportant.

Sure you get a say, but those of us with experience also realize the sheer
_enormity_ of what you asked.

And we greybeards don't even know _ALL_ of that.

~~~
gravypod
I'm sorry but I can't see any more then 10% of the curriculum of the standard
CS class is required to learn about software engineering.

This is more so true given that my school requires:

    
    
       - 7 Humanities classes
       - 5 Math classes 
       - 3 "Interdisciplinary Studies" courses which are any science that isn't CS
       - 3 Social Science classes 
       - 2 "General Electives" which are any class that isn't CS-related 
       - 2 PE classes 
       - 2 Physics classes (With labs)
       - 1 "Science Electives" class (Most with lab) 
    

The Science Electives and Interdisciplinary Studies are basically just CHEM,
PHYS, MATH, or BIO. Nothing in CS is offered.

How many CS classes do I take, you may wonder?

Only 16.

Now I ain't no mathematician, despite my college wanting me to be, but that
don't smell a no good. With some fancy adding I come up with 25 non-CS classes
and 16 CS classes. Pile on some fancy division and we get to an amazing
figure.

Only 40% of my degree is CS. This was counting everything in the "CS" course
label but many of those courses aren't technical.

Counting only "real" cs courses (where you _learn_ theory or implementation of
computer science topics) there are only 12 CS courses. The rest are non-CS
classes under the same name. Things like 1 class about how the university
works, 2 classes about teamwork (which is also done in the management GUR I
need to take), and 1 class in Discrete Math..... notice the "Math" suffix.

That brings us down to a whopping 30%. Only 30% of the money I am paying for
college is going towards something I want it to (in the case where all of my
money is spent on academia rather then sports) and it is also assuming that
all of my classes are actually teaching me something. Most classes are just
professors coming in, telling us stuff that is blatantly incorrect (I keep a
list now to pull out when this point I'm bringing up comes into an argument)
and then they can't even implement the assignments they are giving us.

A more realistic number is that ~50% of my CS classes actually teach me
something I've never learned before.

So we are down to a sad, sad number of 15%. A measly 15% of my time is
actually spent learning about computer science.

Now, let me ask you. Would _you_ think that the 15% of my time in Computer
Science will actually teach me as much as 4 whole years of computer science?

You cannot ever convince me that someone wouldn't come out of a course like
that knowing less then one of the 15%-educated students.

So I guess it's turned out that I was wrong. It's not 10% of my education it's
15%.

> And yet the CS curriculum is exactly what you need in terms of foundation so
> you can learn all of that. > What you are asking for is a (probably several)
> lifetime of information in 4 years. Wouldn't we all like this?

I'd say that my fellow students would be better served with 4 years out of
that lifetime of CS knowledge checked off rather then learning to find the
area under the curve.

> Take the track that leads to your "Compilers" class. You will get most of
> the pieces you are asking for along the way.

The only track thaparserst leads to a "Compilers" class in my school is a
Masters. The class on compilers that actually touches on things I haven't
experimented with in my own time (LLVM, writing parser, writing interpreters,
reading through some books here and there) are classes that lay in the 600
level.

> Sure you get a say, but those of us with experience also realize the sheer
> enormity of what you asked

You don't think that I have enough experience to understand that this is a
massive undertaking? I do. Ask for everything but settle for half because
every victory, no matter how small, is still a victory.

Now there are exceptions. Are you going to work in finance? You probably need
to know a bit of calculus. Are you like me and want to go into R&D? You are
definitely going to need to know a lot about signal processing and some
machine learning is always helpful. Are you interested in contract software
development again like I am? Then you will need a little bit of background on
software ownership, copyright law, and general contract negotiation.

The only common thread through these fields is a heavy reliance on your
ability to program. Everything else can be bolted onto your degree.

But I don't think it's wrong to say that someone needs to take 21hr of
_English_ classes, 20hr of _Math_ classes, or 6hr of _Physics_ classes, to be
a _Computer_ Scientist.

Edit: List ordering

~~~
throwaway729
_> Are you like me and want to go into R&D? _

An intro in each of the basic sciences is indispensable for a career in R&D.

Taking _only_ 5 math courses (3 calc + discrete + linear?) is likely woefully
inadequate, unless they're all taught very well or you plan to teach yourself
a bunch more math. In fact, you should take abstract algebra, probability, and
as many analysis courses as you can while you have the time. In either case
not sure what you're complaining about.

The humanities courses are a good place to practice your writing and
argumentation; those skills are transferable to negotiation of every sort.

Also, you could've knocked a bunch of those required courses with AP/IB
credits in high school (2 history courses, 1 or 2 english, intro bio/chem/phys
(3), intro CS (1), calc (1-2) = 7-10 courses).

~~~
gravypod
> An intro in each of the basic sciences is indispensable for a career in R&D.

That's why I've been pitching in time and helping Drs at my university with
their research in fields like RF and Physics. I learn much more then anything
I've gotten out of a classroom.

> Taking only 5 math courses (3 calc + discrete + linear?) is likely woefully
> inadequate, unless they're all taught very well or you plan to teach
> yourself a bunch more math

When I'm taking on a problem that needs to be solved I immerse myself with
information about the problem domain.

Linear algebra is the only thing that you've talked about at all that I've
found useful so far. I did a bit of game development in my own time in high
school and ended up teaching myself a lot about it. Mainly I just dicked
around with implementing parts of a physics engine and taught myself a lot. So
yes, the reason I want to go into R&D is because I like to learn about many
different things but only _if there is a reason_.

But still, I don't want to be the only person in a team in R&D. I want to
write firmware, software, and work on implementing designs. I've also proven
to be fairly "ok" so far at management. I've got a lot to learn but it is
something I can do, so I might bark up that tree.

> The humanities courses are a good place to practice your writing and
> argumentation; those skills are transferable to negotiation of every sort.

I do more writing and argumentation in my own time. I spend about 10 to 15
minutes

> Also, you could've knocked a bunch of those required courses with AP/IB
> credits in high school (2 history courses, 1 or 2 english, intro
> bio/chem/phys (3), intro CS (1), calc (1-2) = 7-10 courses).

If these are things that could have been "knocked" out in high school then
they definitely shouldn't be part of a high school curriculum. I had a lot of
family problems in high school and that lead to a large problem with my
"behavior" in school. Mainly not wanting to take shit from my teachers after
hearing everything all night from my parents. Here are some antidotes from my
high school "experience" (which I also consider to be mostly useless and feel
a majority of the time I spent there could have been better spent someplace I
could have actually learned something rather then just sit and stair at a wall
all day)

    
    
       - My math teacher told me that any problems that I didn't show work on would result in a 0. This was after the game-dev time in my life and the class was only algebra 2. Everything was easy and I didn't show any work. I just took the zeros on the homeworks/exams until I was called into the guidance office  to "explain' myself. I said for them to give harder problems or for them to leave me alone. 
       - My math teacher didn't like me using pen on the exam. She said I'd loose 5 points every time if I did. I just kept doing it. I think my highest grade from that marking period was a 95.
       - I gained access to the schools camera/DVR system and used it to find my friends between class. Principle threatens to call the cops and I just gave them all the info I had and told them I was sorry.  
       - I didn't do any of the homework or classwork for my English class one semester, scored AP on all the standardized exams and 80+ on all the class work. They put me into a remedial class for English where I put in the same amount of effort but ended up getting an A.
       - I managed to get a D in gym class some how. I don't even remember how that happened.
       - Pre-Calc my senior year I again didn't do anything except now we where allowed TI NSpire's so I ended up installing Pokemon on my calculator. I played that.
       - My last two years I was able to take programming classes, I helped the teachers clean up their material since they where teaching from books. Nothing good ever comes from that. 
    

I've probably got more stuff I'm not remembering but you might be seeing a
common trend. High school is basically just a place to get you used to working
in a factory and making sure you wont drool on yourself in public. It was a
huge waste of time that basically kept me away from learning about the stuff I
wanted to: _computers_

Anything that carries over from that shit show into academia is again a huge
hint that you've got a large problem. I also don't think my time should be
wasted _learning things I don 't need_ nor do I want to pay for it.

I'd understand if most people actually remembered the materials taught in
these classes. That's one thing. But that is seldom the case.

There are very limited things that college has been good for:

    
    
       - I've got a lot of debt which makes me now applicable to some government loans/small business programs.
       - I've met 1 or 2 professors who are actually good at what they do AND want to share their secret sauce
       - I have access to a library with academic subscriptions (although the library won't subscribe to JOM... bastards. I pay them 15k/year they can spend a bit of that on important reading material) 
       - I can help people build things that I like
    

Without these I'd just drop out. I'm 100% sure this isn't worth what I'm
paying but I'm in so much debt now that the FAFSA will finally help me a bit
so I might as well just hate my life a little longer, struggle through the BS,
and at least get a piece of paper that _other_ people will think is
impressive.

------
ktRolster
Writing bug reports took me 5 minutes to figure out how to do in the real
world (or maybe an hour, or even a day, but not too long). This is not
something you need to take a class to figure out.

~~~
k2xl
I don't think writing bug reports is as simple as it seems. Sometimes it
actually takes time (and experience) to learn how to communicate an issue them
properly. Writing steps to reproduce, which systems, etc

~~~
ktRolster
"A minute to learn, a lifetime to master."

Seriously though, do you feel you missed out because your CS degree didn't
teach you how to write bug reports? I mean, really?

~~~
k2xl
I didn't personally, but I do think introducing more software development
processes into the curriculum would've been beneficial.

------
omaranto
Sounds like a cool course, not sure I'd call it computer _science_ , though.

------
bmh100
While there are people commenting on how the techniques sound a lot like a
software engineering class, as opposed to a computer science class, I think
this approach overall would be fantastic for computer science. Writing tests
and documentation are great discipline for assignments. Once these software
engineering practices are in place, they can serve as a framework for future
assignments.

The HTTP server as a starting point is an excellent idea. This allows for
students to see the results of their efforts in an interactive, visual,
tangible way. Successfully implementing a search algorithm for the first time
is great, but how much more rewarding would it be to see an unsorted list on a
web page, a "sort" button", and watching the list sort before your eyes?

Students become trained in one of the most underrated skills in software:
communication. They also gain practice in building prototypes to help with job
hunting or demonstrating to managers. Does this reframe the curriculum in the
context of industry rather than academia? Yes, but I feel it would be
incorrect to orient CS around the minority of students who will pursue
academic careers anyway.

------
lazyant
(Besides this not being "CS" as people are pointing out)

This is good to give some ideas to people that like to tinker and learn by
themselves, who are the people needing instructions the least.

The thing is, if students don't have a step-by-step instructions they will
fail and complaint, you can tell the author is not a teacher.

Anecdote time: I did MS in CS in an university in the US, in one course we had
to set up some XML web service in Java, the prof lifted all the instructions
from official web site and gave us the slides with step-by-step commands but
he missed one step, so next week nobody except me (who bothered to look up the
error and RTFM) had the service set up, this was a 500 or 600 level course.

------
pbh101
This is very close to the iteration loop I designed for the onboarding team I
am currently running: I'm getting fresh CS grads and need to add the software
engineering into their skillset.

I can't say I'd really change up the status quo, though: I wouldn't substitute
any of the time they spent on CS to be reduced to include more 'real-world'
items: you can focus on those afterwards and they tend to be organization-
specific. Give me folks with a solid theoretical foundation and I can work on
their client-interaction and big-codebase-team-programming skills.

------
micahbright
Sounds like a Software Engineering course. Probably want to add in the rest of
Computer Science if you really want to teach Computer Science though.

------
zintinio5
You've laid out a plan to teach software development. Computer Science might
be more accurately named "Computing Science".

------
mccolin
This is applicable to an Intro to SOFTWARE ENGINEERING course. As an exercise.
Not the primary content. It is not Computer Science.

------
wyager
This is "code monkeying", not "computer science". A valuable skill, to be
sure, but let's not mix terms.

------
ktRolster
Seems like a good start for a class. If he keeps it up, and does a lot more
work, he'll end up with a good program.

------
bryanp
So go teach CS :-)

