Computer Science department organize a course for general student each summer. Topic is decided by Instructors.
This summer we have decided to teach Algorithm, Advance C++ and web programming.

These are my initial thoughts about teaching Algorithms.

Algorithm is heart of cse and very important for everyday use.
for anybody who is going to do any kind of coding will require it.

basic algorithm design technique
basic data structure
ability to analyze algorithm
understanding complexity of a problem.

what do we want to make them learn after the course is over. what is exactly our goal and their take home. determining factor what’s important to them and what will be good course structure. one way out is teach them everything but that we can’t do so we have to compromise.
things which are really important are=>
We don’t want to anybody say that the students don’t even tell the order of a simple algorithm that will be ridicules so Big O is very important.
Second important thing will be covering data structure that is why they are here so they need to know more than just array and list which is common sense.
so we need to teach them tree and red black introduction don’t expect them to remember the rotation and insertion procedure. but basic constraints are good enough just give them a feel that binary tree is not what we use actually because it can be fooled so they will also get to know about some randomization involved.
After binary tree we can cover some smart data structure like heap

Pseudo code

Good tricky question which are puzzle types are best because they don’t need to do all computer science stuff and go deep in theory of everything.
that will be good but again we don’t have time.

implementation always tell you more than you read there are many things which u come across while u are really implementing things.

So must have one programming assignment language of your choice we can even combine projects if they are doing other course also to make it more useful and a good project and also weight age will be reduced.

again introduction to graph is important but it’s more for our well being because they are not going to learn any useful thing from it which they can apply.
but if we get time we can try to cover some graph stuff. i will suggest that we introduce it anytime between first 3 lecture and if we get time cover it in detail.
Algorithms

recursion
randomization

Searching/sorting algorithm is again important thing they need to know in list array tree etc.

then we need to introduce divide and conquer so sorting will transit into divide and conquer by merge sort.
then we need to cover or introduce greedy algorithm.

Dynamic programming

choose small simple and typical example don’t try to create your own which will take time to understand itself.
formulate clearly don’t fear from mathematics it’s only way to make things clear as hell
apply things step by step slowly why for each step why i really choose this step why not some other. how u will approach a new problem. so there is no magic.
motivation for learning is important see for geometry example they are daily life.

So Always start by a puzzle
e.g.
how to cover a chess board by dominoes?

First I have opted for teaching Algorithms. But we have only one guy who is willing to teach Advance C++ while we need at least 2 guys since I have done some Advance C++ stuff So I flipped to teaching C++.