我可以看到几种不同的方法来解决这个问题:
1) 基本的编程构建块。什么是条件语句,例如 switch 和 if/else?什么是重复语句,例如 for 和 while 循环?我们如何将这些结合起来以使程序成为我们想要的步骤序列?您可以采取一些简单的方法,例如添加杂货账单或将温度或距离从公制转换为英制,反之亦然。什么是基本变量类型,例如字符串、整数或双精度?同样在这里,您可以使用布尔代数来获得高级想法,或者可能教如何以 2 或 16 为基数进行算术运算,有些人可能会觉得这很容易,而另一些人觉得很难。
2)算法上什么是相似的构建块。排序是一个非常简单的话题,可以广泛讨论和分析,以试图找出如何使排序更快,而不是仅仅交换看起来无序的元素,如果你学习了冒泡排序,这是最脑残的方法。
3) 编译和运行时元素。什么是调用栈?什么是堆?如何处理内存以运行程序,例如代码片段和数据片段?我们如何打开和操作文件?什么是编译和链接?什么是make文件?其中一些很简单,但也可以让人大开眼界,看看事情是如何运作的,这可能是俱乐部大部分时间所涵盖的内容。
接下来的两个更具挑战性,但可能很有趣:
4)讨论算法背后的各种想法,例如:1)分而治之,2)动态编程,3)蛮力,4)数据结构的创建,5)将问题简化为已经解决的类似问题,例如斐波那契数是给初级程序员的经典递归问题,以及 6) 如果你在一个硬币面额为 a、b 和 c 的国家,那么“贪婪”的想法就像在一个做出改变的例子中一样。如果您想要一些异国情调的东西,您也可以使用一些图论示例,例如最小权重生成树,或者旅行推销员想要一些易于描述但难以解决的东西。
5) 数学函数。你将如何编程一个阶乘,它是从 1 到 n 的所有数字的乘积?您将如何计算各种算术级数或几何级数的总和?或者从一组 n 中计算 r 个元素的组合或排列的数量?给定一组点,逼近满足此要求的多项式,例如,在称为 x 和 y 的二维平面中,您可以给出 2 个点,如果您已经解决了成对的线性方程组,则让人们找出斜率和 y 截距是多少已经。
6) 可以使用链表和数组实现的列表。哪种情况更适合各种情况?如何实现插入、删除、查找和排序等基本功能?
7) 抽象数据结构。什么是栈和队列?你如何构建和测试类?
8) 指针。这只会导致大量的话题,比如如何分配/取消分配内存,什么是内存泄漏?
这些是我对各种起点的建议。我认为开始讨论可能会导致一些有趣的地方,如果你可以让几个不介意一周又一周地谈论同一主题的人在一起,因为如果你想得到分类,分类可能是一个很好的话题进入事物的细微之处。