Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
53 lines (48 sloc) 2.46 KB
view: single
permalink: introductory-cs-course
pubdate: 2009-09-30T00:00:00Z
title: Introductory CS course
author: Ramkumar Ramachandra
snip: The ideal
---
This course attempts to teach programming methodology from an
engineering viewpoint, as well give an insight into theoretical
computer science.
Guidelines:
* Teach programming, and not the programming language. Discuss
abstract ideas in class, and ask students to write implementations
in a language of their choice. Avoid building language-specific
patterns (for example, the double-for loop for generating prime
numbers in C got stuck in my head). Discuss various different
implementations AFTER the students have tried it themselves.
* Discussions should span several programming paradigms. Initially,
cast problem statements to strongly indicate a paradigm. For example
"Go over numbers from 1 to 10 and print those that are even" versus
"Define an even number and print even numbers <= 10". Later, let
students figure it out themselves.
* Develop a hacker mindset- give students incomplete solutions written
by other students and ask them to complete it.
* For routine assignments, prepare a huge problem set of ascending
difficulty to randomly pick from, along the lines of Project
Euler. Problems should cover algorithms, pure math, computational
geometry, and dynamic programming.
* Conduct collaborative programming sessions where students learn to
implement from each other. No single instructor will be able to
provide such a vast variety of implementations.
* Prepare a reading list for software engineering, including articles
on editing (introduction to specialized editors such as Vim and
Emacs), debugging, versioning, testing, and profiling. It's
important to make students write large programs collaboratively in
steps, so that they will be able to appreciate the importance of
these tools.
* Prepare another reading list for theoretical computer science. Also
give students sneak peeks into the latest work in every field. The
purpose of this exercise is to get students excited, so that they
can work independently to eventually discover their research
interests.
* Finally, it all boils down to grading. If you're going to ask
students to evaluate things like (i++) + (++i) in the exam, it's
clear that you're expecting students to know programming language
intricacies, and not programming methodology.
[Here][1]'s a link to the PDF of my first lecture.
[1]: files/naurk-lecture1.pdf
Jump to Line
Something went wrong with that request. Please try again.