| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2918 人关注过本帖, 2 人收藏
标题:【转】对新手程序员的一些唠叨
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏(2)
已结贴  问题点数:100 回复次数:10 
【转】对新手程序员的一些唠叨
在编程这一行,我已经干了20多年了。至今为止,我也差不多写过六七门编程导论课程,教授时间总计超过1000小时。以下是我不止一次向我的学生强调过的,我多年来一系列智慧的结晶(排列顺序无特定含义)。

首先,欢迎你成为一个程序员。

编程真的很难。不管你是有多么地擅长编程,唯一能成为障碍的是大家自己学习和解决问题的能力。在这一行浸得越久,就越理解这个事实。这其实非常有意思——因为这样一来,我们就永远也不会原地踏步、满足于现状。如果你丧失了这种进取心,那么在出现异常之时,很容易对此厌倦,甚至最终放弃。

编程也是最令人沮丧的事情之一。一般而言,正常的编程体验是这样的:尝试、失败、更加用功、重新思考、灵机一动、最终 奏效。在这过程中,会感到沮丧是很正常的,而且一旦我们这会成功了,就会想着去做更难的项目,然后这个沮丧感又挥之不去了。但是这会促使我们更加努力地去 解决问题,得出一个圆满的答案。不过,在此之前,我们得自我调整,舒展自己愁云满布的心情。

再怎么复杂的问题,总会有解决方案。随着我们的编程能力增强,我们对自己将会更自信。这有利于我们及时调整各种负面情绪、更好地去解决那些难题(话说,如果太简单就丝毫没有挑战性了)。

当我们还是小孩子的时候,我们总是闯祸,但是随着年龄的增长,我们很少有机会真正办砸一件事情。请记住,编程不是一件每个人都能做的事情。所以,你很牛!

在编程过程中,第一个小时和第10个小时是不同的,第10个小时和第100个小时也大不一样。我记得有人曾在博客中描述高尔夫球这项运动到了第1万个小时,会产生质的变化,编程也是如此。

编程就像魔法,我们都是魔法师。你看,我们努力学习,专研我们的课程知识(计算机和网络),然后召唤我们的魔法(程序)。魔法师可以教授其他人如何施展魔法,而我们发明创造的充满奇幻色彩的设备却能让任何人都可以使用(如互联网和手机)。这些设备提供的各项功能,通通离不开我们程序员的技能。

有效利用网络资源。在你第一年学习编程的过程中所碰到的每一个问题,在你之前可能已经有100个人与它亲密接触过了,网上肯定会有各种解决方案星罗棋布。越快掌握如何有效网上搜索的技能,学习的进度就越快。警告:在你不知道某段代码的工作原理之前,不要轻易复制运用这些网络资源。

作为程序员,无论何时都不应该忘记我们的工具箱。这些工具是我们的左膀右臂。我们在这个领域学到的第一件事情(变量, 循环等)就像螺丝刀和锤子。这些工具将伴随着我们遨游在这个世界的每一天。而且,随着我们经验的增长,还能与时俱进学习更高级的工具,这一类的工具虽然不 是非常普及,但是更擅长解决一些特定的问题 (例如,二叉树数据结构、A*、Valgrind、调试器等)。大多数编程领域(游戏开发、Web开发、数据 库)都有自己特有的一系列解决问题的模式。

程序因代码而生。在计算机上,我们可以享用其他人写出的方案,可以借鉴、可以修改、也可以编辑,随心所欲。

想要更加擅长编程,最好的方法就是写代码,写大量的代码。努力总会有收获。作为一名教育工作者,我将竭尽所能为大家提供一臂之力。但是,如果你已经掌握了充足的知识,那么只要有足够的时间,没有我也能发现问题的所在。古语有云,“坚持就是胜利”。所以,好好练习写代码吧,骚年。

同时,我们还需要阅读大量的代码。有很多程序员在这一领域比我们更如鱼得水,他们早就写下了很多可供参考的代码。三人行,必有我师。

有人说,第二门编程语言总是最难的,因为,第一门限制了我们思考程序的方式,而当我们需要学习另一种编程语言时,我们就不得不打破原有的秩序并重新建立一 个。在学习第二语言之后,接下来要是再学其他新的编程语言就快多了。现在,我只要一周就能将任何一种给定的编程语言学的差不多。

永远不会有所谓“最好的”。有些语言和工具会在解决某些问题上比较擅长。当我们学习其他语言的时候,不要试图用旧的端口去连接新的系统,要用新语言去思考和解决问题。

学会乐在其中。编程是一个汇集了很多问题的大集合,这些问题则需要我们一一解决。给自己找点乐子,可以写点自己感兴趣的程序,兴趣是最好的老师。

优秀的程序员永远不会满足于现状,总是不断学习。如果你能做到这一点,那么你永远也不必担心自己的饭碗。

出现疑难杂症时,可以试着将程序写到纸上。这不是开玩笑,这个窍门一般人我不告诉他。

最后,我想说,还有很多其他好的建议是我没有谈及的——但是,我想说,最好的建议是,我们得找到适合自己的。

希望各位都能开开心心编程,快快乐乐写代码:D
搜索更多相关主题的帖子: 能力 课程 进取心 程序员 
2014-09-23 00:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用love云彩在2014-9-23 00:29:00的发言:

的确很唠叨,看完这篇文章都要花点时间,看懂这篇文章需要更多时间

值得花费的

授人以渔,不授人以鱼。
2014-09-23 00:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
读得明白这些东西,比光知道若干套路强得多,但偏偏很多新手(包括某些老手)是不屑于这些理论的。看看李小龙的讲话和言谈吧,他是哲学专业的,他讲的武术一股哲学味,但他的功夫也是真的,他为什么要从哲学的高度讲那些东西?很多人认为讲哲学是废话,那是因为他不懂。

[ 本帖最后由 TonyDeng 于 2014-9-23 00:46 编辑 ]

授人以渔,不授人以鱼。
2014-09-23 00:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不管你是有多么地擅长编程,唯一能成为障碍的是大家自己学习解决问题的能力。在这一行浸得越久,就越理解这个事实


这一条就正是我经常讲的,也是我签名档中所表达的意思。不过很可惜,很多人不接受,他们宁可要鱼,不要渔,你教他渔术,他反认为你其实不懂、在讲空话。在这里引用的这段话后一句才是精华,凡是那样认为的,肯定是新手,他在这行的经验绝不会有多长的时间。

授人以渔,不授人以鱼。
2014-09-23 00:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
再来看看这句话:

警告:在你不知道某段代码的工作原理之前,不要轻易复制运用这些网络资源。


醒悟点什么了吗?有多少人犯这种错误呢?我是不是多次告诫过新手不要乱抄别人代码呢?你真以为抄去交货了就是你懂的?虽然人家后面说要多看别人的代码,但这跟你没弄懂那些代码的工作原理就抄黏贴过去是一回事吗?哪怕那个是顶尖高手的代码,也未必就是适合你目前需求的代码,何况你并不懂它的工作原理,想修改重新利用也不可能,最终还是去求人,那就不是你的本事,抄来干嘛呢!一个不能自己任意修改和操控的程序,就不是你的货,自己写的,即使再差再低效,也有改的基础和可能,抄别人的,想改都不可能,那就是受控于人——更糟糕的是抄多个不同人的代码,在网上乱找资源的最大弊病其实就在这里,也是我平时常说的吸星大法祸害。


[ 本帖最后由 TonyDeng 于 2014-9-23 01:13 编辑 ]

授人以渔,不授人以鱼。
2014-09-23 01:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用embed_xuel在2014-9-23 07:41:57的发言:

接分。新手谁会看这个,都是求个作业应付学校老师的

只能是给有心人看了,呵呵。

授人以渔,不授人以鱼。
2014-09-23 09:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 15 楼 pycansi
是的啊。教育的目的,是让受教者具备举一反三的能力,不是教一招会一招,而是通过具体的题目、招数训练学到解决未知问题的能力,因为教学中永远学不完现实中可能遇到的问题,不要以为自己能做很多题目、能把圆周率算到十万位、会很多算法和技巧就是本事,现实根本没有那么纯粹的问题让你照本宣科,也不需要多么高深的知识,百分之九十常用的,都是很基本的东西,但关键在于你综合运用和不犯错的能力。编程中,犯错很正常,没有谁可以写程序一步到位的,其间会遇到无数的挫折,我们最需要的,是定位错误、排查错误的能力,以及掌握一些如何证明是对还是错的方法。程序员其实就代码管理员,专业是管理,即代码的组织及运用,不是解决各种具体问题,解决具体问题只是修炼的途径、手段,不是目的,不要把手段当目的,去追求解决无数的具体问题,此即所谓“格物致知”。

授人以渔,不授人以鱼。
2014-09-23 10:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用wssy213在2014-9-23 12:53:20的发言:

  很容易,但做  却比想象中的困难

如果连做都容易,那做人还有什么意义?

授人以渔,不授人以鱼。
2014-09-23 14:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
有人说,第二门编程语言总是最难的,因为,第一门限制了我们思考程序的方式,而当我们需要学习另一种编程语言时,我们就不得不打破原有的秩序并重新建立一 个。在学习第二语言之后,接下来要是再学其他新的编程语言就快多了。现在,我只要一周就能将任何一种给定的编程语言学的差不多。


这一点也是很有道理的,确实如此。我再补充一下,其实第一门语言不用学得很精,也学不精,反而在学第二门的时候,会倒过来帮助你理解第一门语言,以前不明白的地方,到那个时候就会明白了,两门语言互相参照,双方都得益。所以我经常说,第一门语言学C,不用学得很精深,去钻研那些语言独特的东西没用的,应该学大路货,即学那些所有语言都有的共同的东西,特别是学程序设计思想,啃硬件细节、系统底层之类东西,是虚耗精力。


[ 本帖最后由 TonyDeng 于 2014-9-24 19:38 编辑 ]

授人以渔,不授人以鱼。
2014-09-24 19:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
底层只需知道原理即可,不需精通细节的,除非你的职业偏向底层。

授人以渔,不授人以鱼。
2014-09-24 23:21
快速回复:【转】对新手程序员的一些唠叨
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053438 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved