10+年程序员总结的20+条经验教训

2024-08-15

10+年程序员总结的20+条经验教训(精选2篇)

1.10+年程序员总结的20+条经验教训 篇一

编码20年的老程序员分享所积累的20条编程经验

2011-12-26 17:18 黄利民 伯乐在线 我要评论(1)字号:T | T

本文转自Jonathan Danylko的网站DCS Media。Danylko是一位资深开发顾问,DCS公司的创始人。

从11岁时,我就一直在编程,并且一直都很喜欢技术和编程。这些年来,我积累了一些艰难又容易的经验。作为一名程序员,你或许还没这些经验,但我会把它们献给那些想从中学到更多的朋友。

我会持续更新这些经验,我可能还会有更多的感想,但就我这20年来看,我想下面这个列表中基本不需要增添额外的东西了。下面就是我至今最难忘的经验。

1.估算解决问题所需要的时间。不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时。为自己定一个时间限制吧,1小时、30分钟或甚至15分钟。如果在这期间你不能解决问题,那就去寻求帮助,或到网上找答案,而不是尝试去做“超级堆码员”。

2.编程语言是一种语言,只是一种语言。随着时光推移,只要你理解了一种语言的原理,你会发现各种语言之间的相似之处。你所选择的语言,你应该觉得“舒服”,并且能够写出有效(而且简洁)的代码。最重要的,让语言去适应项目,反之亦然。

3.不要过于注重程序的“设计模式”。有时候,写一个简单的算法,要比引入某种模式更容易。在多数情况下,程序代码应是简单易懂,甚至清洁工也能看懂。

4.经常备份代码。在我年轻时,我就有过因硬盘故障而丢了大量代码的经历,这经历很恐怖的。只要你一次没有备份,就应当像有着严格的期限,客户明天就需要。此时就该源码/版本控制软件大显身手了。5.承认自己并不是最顶尖的程序员 – 知不足。我常想,我对编程了解已足够多,但是总有其他人比你优秀。正所谓,“一山总比一山高”。所以,向他们看齐吧!6.学习再学习。正如第5点所说,我经常会在手里拿一本计算机或编程相关的杂志或书(不信,可以问我的朋友)。诚然,总有很多你不知道的技术,你可以从中学习以保持不落后。如果你有一种灵巧的方式来获取你需要的新技术,那你每天都应该坚持学习。

7.永恒的变化。你对待技术/编程知识,就应像你对待股票一样:多样化。不要在某一特定技术上自我感觉良好。如果那种技术或语言已经没有足够支持,那你还不如现在就开始更新你的简历,并启动培训新计划。我能保持前行的主要原则是什么呢?至少了解两到三种语言,所以,如果某种语言过时了,你在学习新技术的时候还可以依靠另一种语言。

8.提携新人。协助并且培养初级/入门的开发人员学习优秀的编程方法和技巧。也许你还不知道,在帮助他们向更高一层前进时,你自己也在向更高一层提升,你会更加自信。9.简化算法。代码如恶魔,在你完成编码后,应回头并且优化它。从长远来看,这里或那里一些的改进,会让后来的支持人员更加轻松。

10.编写文档。无论是Web服务的API,还是一个简单的类,你尽量编写相应文档。我曾经引以为豪的代码注释,因过度注释而有人指责。给三行代码加一行注释,只需要你几秒时间。如果那是一个比较难以理解的技术,千万别担心过多注释。如果你能很好做好自己的工作,大多数架构师、后备程序员、支持组都会感激你。

11.测试、测试再测试。我是一名黑盒测试粉丝。当你完成编码后,你“被认可”的时候就开始了。如果你们公司有QA部门,如果你的代码中有错误,那你得到的评论,会比项目经理还多。如果你不彻底测试自己的代码,那恐怕你开发的就不只是代码,可能还会声名狼藉。

12.庆祝每一次成功。我见过很多程序员在解决编程技术难题后,会和同伴握手、击掌或甚至手舞足蹈。每个人在生命中都会碰到“顿悟”。如果一个程序员高兴地跑来叫你去看他的非凡代码,也许你已经看过这样的代码100遍了,但你也应该为了这个家伙而庆祝第101次。

13.经常检查代码。在公司,你的代码要经常检查(包括自查和其他同事检查)。不要把别人的检查,看成是对代码风格的苛求。应该把它们看作是有建设性的批评。对个人来说,经常检查你的代码并且自问,“我怎样才能写得更好呢?” 这会让你加速你的成长,让你成为一个更优秀的程序员。

14.回顾你的代码。在看到自己以前的代码时,通常会有两种方式:“难以至信,这代码是我写的”和“难以至信,这代码是我写的”。第一种往往是厌恶的语气,并在想如何改进它。你也许会惊叹,旧代码也能复活成为一种更好的程序,甚至是一个完整的产品。第二种通常带着惊奇和成就感。开发人员应该一到两个自己完成的项目成果,能让众人不禁而立并注目而观的项目。同样,基于你优越的编程能力,你可以把过去的程序或项目拿出来,把它们更新为更加优秀的产品或想法。

15.幽默是不可缺的。在我20年的开发生涯中,我还没有碰到哪位程序员是没有幽默感的。实际上,干我们这行,幽默是一项必备品。

16.谨防那些无所不知的程序员,不愿分享的程序员,还有经验不足的程序员。当你遇到这几种程序员时,你自己要谦虚。无所不知的程序员,更想当一个英雄而不是团队成员;保守的程序员则是在编写着他们独享的代码;而经验不足的程序员则会每十分钟就来问你一下,当代码完成后,代码已经是你的,而不是他们。17.任何项目都不会那么简单。朋友、家人和同事曾请求我仓促做一些事情,仓促做一个程序或者网站。对于这样的事,应该从双方做计划,才能做出令两方都会满意的东西。如果某人起初只是需要一个使用Microsoft Access的、只有有3个页面的网站,但来就很可能变成一个有15个页面的网站,并使用SQL Server,有一个论坛,还有一个定制的CMS(内容管理系统)。

18.任何时候不要想当然。假如你承接一个简单的项目,你可能会认为某个部分可以轻松完成。千万别这样想!除非你有一个类、组件、或者一段已经写好的代码,并且在现有的项目已经测试通过。不要认为这将是很容易的。

19.没有已经完成的软件。曾经有一位程序员告诉我,没有软件是已经完成的,它只是“暂时完成了”。这是明智的忠告。如果客户还在使用你写的程序,并经受了时间的考验。如果有机会,你仍在更新它,这并不是什么坏事,这让你不断地前行。20.耐心是一种美德。当客户、朋友或家庭成员用电脑的时候,他们也许会受挫,进而想砸电脑,或气冲冲地离开。我一直在告诉他们,“是你掌控电脑,不是电脑掌控你。”对于用作编程的电脑,你要有一定的耐心。一旦程序员知道问题所在后,他们就会站在电脑的角度看问题,并且说“哦,这就是为什么它是这样做。”

原文:http://blog.jobbole.com/322/

关于程序员成长的一点思考

2011-12-23 09:16 黄文彬 黑客与画家 我要评论(3)字号:T | T

作为一名程序员,首先我们要把自己的方向定位好,以及技术的提高是非常重要的。所以程序员应该打好自己的基础,本文将介绍程序员成长的一点思考。

程序员的我们,是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题,分享下我的看法。因为我阅历有限,有什么说的不对的,大家一起喷!

一、程序员应该打好基础

1.现在开发工具众多、语言泛滥,经常听人说”不学CC++神马都是浮云”、”CC++才是万王之王”,CC++就真比PHP、Lua、AS、JAVA牛吗? 其实不在于语言本身,而在于CC++依附的平台。因为最靠近操作系统,所以能发挥其它语言不具有的性能优势,而且很多数据结构、算法、特殊功能类,CC++是不提供的,需要自己实现。这时就需要自己去温习”数据结构”、”算法”、”TCP/IP”、”操作系统原理”、”编译原理”等这些知识。正因为如此,我们学习的东西被沉淀下来,也正因如此,CC++经过定制的功能比封装好的功能性能高。

我上大学做项目时,用的是.net平台C#语言, 因为我本性好专研,老师都是把需要研究、比较难的问题交给我。但C#无论是性能和功能都是都是无法跟CC++比的,记得当时是要做一个”远程控制”软件,配置IP和端口后需要连接动态生成客户端程序(木马),但C#是不提供这个功能的。这也是我工作后转为CC++程序员的原因,碰巧也是开发远程控制软件。刚开始写出来的程序偶尔会莫名奇妙的崩溃,但经过两个月和更长的时候后,我掌握了CC++。在此要感谢我工作时的指导老师翁跃龙,没有他我的路不会这么平坦,他教我的不仅仅是技术,更多的是解决问题得思路和做人。

2.有些人会说大学学的东西是肤浅的,是没有用的。想想看,在学校的时候我也经常这么想,但出来后才知道这些东西有多么重要。不过大学学得再扎实,出来后仍然是需要再温习过的。因为上学毕竟实践少,所学不能所用,计算机是个应用驱动的学科。我们再来看“计算机考研”专业课考的什么(这里并不是说考研就一定好),”数据结构”、”计算机组成原理”、”操作系统”、”计算机网络”。”数据结构”、”计算机组成原理”这两门课程摆在前面,可见其重要性,分别是软件和硬件最重要的两门基础课。我不相信不学好”数据结构”能够把性能优化做得很好。若说自己学好了,能不看书、不查资料,说出”B+树、B-数的应用和区别”、”KMP为什么能快速匹配字符串”、”快速排序在什么情况会蜕变为o(n^2)”吗? 我也不相信不学透”计算机组成原理”能搞通汇编和内核,不知道”CPU和I/O的交互过程”、”指令的执行通路”、”CPU运算器的工作原理”,如何写出高效的汇编代码?如何弄清楚内核中”中断”、”GDT”、”IDT”这些概念,实模式保护模式如何切换?”操作系统”和”计算机网络”则是两门非常重要的支撑学科,信号量为什么是最快的同步方式、线程调度比进程调度快、为什么要做内存缓冲池,这些都是来自”操作系统”。而”计算机网络”主要是讲述TCP/IP的,为什么德问”对于一个具有几百万粉丝的用户,数据如何实时投递到所有用户?”要使用多播的方式解决、”如何计算出C/S单向的延迟?”发送ICMP包测量,这些都是来自它。

我们大学学的课程经过多少国内外知名学者专家研究过的,所以计算机理论课是基础,是解决问题的根源。”算法分析与设计”是”数据结构”的延伸,Divide Conque、贪心、动态规划对于程序算法的优化有很大的指导意义。同样,”计算机体系结构”也是”计算机组成原理”的拓展。其次,”编译原理”、”数据库”、”软件工程”等学科的重要性也不言自白。

二、实践、理论、再实践

作为程序员的我们,满足于实现一个程序功能的快感,得意于从网上下载别人的代码加到自己的程序中,陶醉于自己写了上百万行代码。有想过自己是在创造吗,还是装配车间的技术工人。日趋成熟的开发工具,逐步把有丰富想象力的我们沦为奴隶。从网上下载个压缩库就用着、成熟的加密算法直接使了、包装好的类库就include。为何不探究其算法实现、性能优化、底层机制。有人会说很”难”啊!究竟是难,还是掌握的知识不够,还是理论没有达到一定高度。

很难想象不学习”计算机图形学”,去做3D项目客户端图形算法的后果;不研究”数据挖掘”去分析大量客户数据会做得多好;不攻读”概率论”、”线性代数”、”人工智能”去设计AI有多么智能。很多人说,这些东西游戏用不着啊,学了有什么用?我承认初学编程时,这些东西只是高谈阔论。若我们工作了n年后,还只是熟练地做些coding,和刚毕业的学生有什么区别。编程工具只是”工具”而已,别忘记了我们是改变世界的程序员,不提高理论,何以创新、公司拿什么优势和别人去竞争。

“研发”是”研究”和”开发”两大块,只做开发,不做研究,对个人和公司都只是短期目标, 当然理论提高了,是需要投产的,不然理论很快沦为”空想社会主义”,公司白花银子养活研究部门。”实践、理论、再实践”,符合马克思主义哲学思想,也是计算机学科的价值体现。真正的计算机科学家不是只搞理论的,理论是要应用到产品中的。工程师也不是只做开发不做研究的,是要应用创新,理论微创新。计算机科学家相比于程序员,主要是数学功底相当深厚,所以他们能在理论上有突破。

三、技术、管理两路线。

1.“游戏能玩多深,技术就能做多深”,这句话说得很好。只因为我们执着,所以在游戏中能攻破一层层难关,凌晨2、3点还能练级打装备。若能走回正道,做技术就想玩游戏一样,技术做不深才怪呢。走技术路线的人,一定是对技术痴迷的人。但要走得长远,我们需要把技术做穿、做透。如何做穿、做透?计算机底层(C、汇编、逆向工程、驱动、内核)、计算机算法(网格计算、音视屏压缩、语音识别„)、架构(软件工程、跨平台、多语言等)都要有涉及。只有我们掌握了这些,才能做到”看问题看到本质”、”思想有穿透力”。这些才是最宝贵的,需要沉淀下来,仅仅靠做项目、写代码是无法达到的。

2.对于走管理路线的人,是具有”完成任务为第一要务”、”有计划、善于管理时间”、”善于与人打交道”性格特点的人, 重要的是”综合素质”,而不是”专攻”。但是这些都是可以改变的,很多公司也会选择技术做得最优秀的人做管理。由于我是一个技术痴迷狂,管理这块,我没有发言权,不做多解释。

四、心态。1.人活在世界上在于奉献而不是索取,帮助别人是一件很快乐的事情, 作为程序员的我们心胸要开阔些,低调些、虚心些, 公司的李老师、老张就是一个心胸很宽广、低调的人,值得学习, 三人行必有我师,我们熟悉的只是自己的这一块、这个领域,不懂的地方要虚心向别人请教, 我见过浮躁、过于自信的人,也见过做人低调的人,发展结果完全不同。

2.乐于分享,支持开源。这是一个很需要心胸、气度的事,也是决定个人、公司发展快慢的重要砝码。技术发展日新月异,总守着自己手中的那点技术,得不到长足的发展。中国两千年的封建历史、门户关闭政策还不够惨痛吗?”技术是交流和玩出来的”,这是锐安龙哥告诉我的。他也是一个大黑客、正义的黑客,开源是黑客的一项重要精神,所以黑客能引领技术。

3.每日学习。很多人认为毕业了就不用学习了,或者不用那么那么地学习了。这是一个非常非常错误的思想,无论何时何地都要把自己当成菜鸟、应届生地去学习。书本是学习的一个捷径,Google、百度解决问题是快,但不是系统化地学习。看书要了解作者背后的知识底蕴,想一想这个问题得解决作者是怎么想到的,这样比单纯解决一个问题更进一层。更重要的是聆听作者的心声,感受大师的心态。最后给大家推荐”黑客与画家”这本书,写得真的很好,老吴不提,我还不知道。原文链接:http://hp.dewen.org/?p=56

2.给青年人的十条经验教训 篇二

1.做真实的自己,独特的个性才是自己最强大的资本,不要听从别人安排你该做什么。

Be authentic.The most powerful asset you have is your individuality, what makes you unique.It’s time to stop listening to others on what you should do.2.要比别人更努力,最终总会有收获。

Work harder than anyone else and you will always benefit from the effort.3.离开电脑世界,走进生活中去接触真实的人和物,体味人生。

Get off the computer and connect with real people and culture.Life is visceral.4.不断提升自己的技能,要亲自动手去做,光靠拍脑袋是远远不够的。

Constantly improve your craft.Make things with your hands.Innovation in thinking is not enough.5.尽可能多的去外面走走,你才会发现自己还有太多需要学习的东西。

Travel as much as you can.It is a humbling and inspiring experience to learn just how much you don’t know.6.原创仍是王道,尤其是在这个以科技为第一生产力的时代。

Being original is still king, especially in this tech-driven, group-grope world.7.尽量不要为傻逼的人工作,否则你迟早也会变得和他们一样。

Try not to work for stupid people or you’ll soon become one of them.8.本能和直觉都很重要,学会信任它们。

Instinct and intuition are all-powerful.Learn to trust them.9.这条黄金法则依然适用——做好事。

The Golden Rule actually works.Do good.10.如果都不行不通,第2条仍是任何职业生涯中最重要的。

上一篇:垃圾不落地承诺书下一篇:留学生出国必备