所以我在这里尝试教我的朋友C++的艺术.他不是编程新手,但他的专业领域远离C++.他非常了解html,php和java,但在编写C++程序时似乎没有用.我们已经完成了基础知识,谈论了指针等.他甚至在他的大学里开了一门关于C++的课程,但他放弃了一半.看起来他真的理解基本理论 - 问题是他在实际使用他所知道的编写程序时失败了.
所以我现在要做的就是给他做作业.任务总是写一个小程序,比如一个原始计算器(输入两个数字和一个确定应该执行操作的字母......)等等.这背后的想法是强迫他实际使用该语言来解决问题,调试它,看看为什么它失败并从中学习.但它似乎不起作用,因为每次我试图让它变得更难并给他一个更复杂的家庭作业,他就无法解决它.我现在应该怎么做?我真的没有家庭作业的想法,我怀疑这种方法是好的.此外,新的学期刚刚好,现在开始,他已经通过了C++当然这个时候.所以甚至有一个截止日期 - 今年年底.
那么,你能在这帮吗?
问题似乎在其他地方.如果你需要教Java程序员如何编写一个简单的计算器,问题不在于语言,问题是对编程的基本理解.
我觉得学习编程更糟糕的方法是编写没人使用的玩具.根据我的说法,最好的方法是从简单但有用的工具开始,因为这会给程序员带来压力:事情实际上会被其他人使用; 它必须工作!
如果任务是管理性的,那么让他写一个disk usage utility
并告诉他你将使用它.如果任务是科学的,让他写一个非线性方程求解器.
当然.C++是一门很难掌握的复杂语言(我甚至不是非常接近,我只知道两个人,我会考虑专业的C++程序员).但是,这并不像是在教他Haskell,或者是一些完全不同的编程范式.除了内存管理和实际管理指针的细微之处,我看不出编程Java和编程C++的范式转变.可以肯定的是,它更难以处理,因为它是一种较低级别的语言,但最终它是一种面向对象的软件设计方法.
D. Knuth有一个诙谐的理由使用他自己的汇编语言来教授算法:
对计算机不仅仅是随意感兴趣的人应该至少知道底层硬件是什么样的.否则他们写的程序会很奇怪.
我认为关于内存管理也是如此.即使您使用垃圾收集语言进行编程,您至少应该理解存在这样的事情,memory
并且对象要么通过,value
要么通过reference
.我并不是说它很容易掌握,我说至少应该理解这样的事情发生在幕后,并且在C++中你管理幕后.