【转】对新手程序员的一些唠叨
在编程这一行,我已经干了20多年了。至今为止,我也差不多写过六七门编程导论课程,教授时间总计超过1000小时。以下是我不止一次向我的学生强调过的,我多年来一系列智慧的结晶(排列顺序无特定含义)。首先,欢迎你成为一个程序员。
编程真的很难。不管你是有多么地擅长编程,唯一能成为障碍的是大家自己学习和解决问题的能力。在这一行浸得越久,就越理解这个事实。这其实非常有意思——因为这样一来,我们就永远也不会原地踏步、满足于现状。如果你丧失了这种进取心,那么在出现异常之时,很容易对此厌倦,甚至最终放弃。
编程也是最令人沮丧的事情之一。一般而言,正常的编程体验是这样的:尝试、失败、更加用功、重新思考、灵机一动、最终 奏效。在这过程中,会感到沮丧是很正常的,而且一旦我们这会成功了,就会想着去做更难的项目,然后这个沮丧感又挥之不去了。但是这会促使我们更加努力地去 解决问题,得出一个圆满的答案。不过,在此之前,我们得自我调整,舒展自己愁云满布的心情。
再怎么复杂的问题,总会有解决方案。随着我们的编程能力增强,我们对自己将会更自信。这有利于我们及时调整各种负面情绪、更好地去解决那些难题(话说,如果太简单就丝毫没有挑战性了)。
当我们还是小孩子的时候,我们总是闯祸,但是随着年龄的增长,我们很少有机会真正办砸一件事情。请记住,编程不是一件每个人都能做的事情。所以,你很牛!
在编程过程中,第一个小时和第10个小时是不同的,第10个小时和第100个小时也大不一样。我记得有人曾在博客中描述高尔夫球这项运动到了第1万个小时,会产生质的变化,编程也是如此。
编程就像魔法,我们都是魔法师。你看,我们努力学习,专研我们的课程知识(计算机和网络),然后召唤我们的魔法(程序)。魔法师可以教授其他人如何施展魔法,而我们发明创造的充满奇幻色彩的设备却能让任何人都可以使用(如互联网和手机)。这些设备提供的各项功能,通通离不开我们程序员的技能。
有效利用网络资源。在你第一年学习编程的过程中所碰到的每一个问题,在你之前可能已经有100个人与它亲密接触过了,网上肯定会有各种解决方案星罗棋布。越快掌握如何有效网上搜索的技能,学习的进度就越快。警告:在你不知道某段代码的工作原理之前,不要轻易复制运用这些网络资源。
作为程序员,无论何时都不应该忘记我们的工具箱。这些工具是我们的左膀右臂。我们在这个领域学到的第一件事情(变量, 循环等)就像螺丝刀和锤子。这些工具将伴随着我们遨游在这个世界的每一天。而且,随着我们经验的增长,还能与时俱进学习更高级的工具,这一类的工具虽然不 是非常普及,但是更擅长解决一些特定的问题 (例如,二叉树数据结构、A*、Valgrind、调试器等)。大多数编程领域(游戏开发、Web开发、数据 库)都有自己特有的一系列解决问题的模式。
程序因代码而生。在计算机上,我们可以享用其他人写出的方案,可以借鉴、可以修改、也可以编辑,随心所欲。
想要更加擅长编程,最好的方法就是写代码,写大量的代码。努力总会有收获。作为一名教育工作者,我将竭尽所能为大家提供一臂之力。但是,如果你已经掌握了充足的知识,那么只要有足够的时间,没有我也能发现问题的所在。古语有云,“坚持就是胜利”。所以,好好练习写代码吧,骚年。
同时,我们还需要阅读大量的代码。有很多程序员在这一领域比我们更如鱼得水,他们早就写下了很多可供参考的代码。三人行,必有我师。
有人说,第二门编程语言总是最难的,因为,第一门限制了我们思考程序的方式,而当我们需要学习另一种编程语言时,我们就不得不打破原有的秩序并重新建立一 个。在学习第二语言之后,接下来要是再学其他新的编程语言就快多了。现在,我只要一周就能将任何一种给定的编程语言学的差不多。
永远不会有所谓“最好的”。有些语言和工具会在解决某些问题上比较擅长。当我们学习其他语言的时候,不要试图用旧的端口去连接新的系统,要用新语言去思考和解决问题。
学会乐在其中。编程是一个汇集了很多问题的大集合,这些问题则需要我们一一解决。给自己找点乐子,可以写点自己感兴趣的程序,兴趣是最好的老师。
优秀的程序员永远不会满足于现状,总是不断学习。如果你能做到这一点,那么你永远也不必担心自己的饭碗。
出现疑难杂症时,可以试着将程序写到纸上。这不是开玩笑,这个窍门一般人我不告诉他。
最后,我想说,还有很多其他好的建议是我没有谈及的——但是,我想说,最好的建议是,我们得找到适合自己的。
希望各位都能开开心心编程,快快乐乐写代码:D