最近在stackexchange网站上看到了一个非常好的问答,有人问:你做过的最有效的提高你的编程水平的一件事情是什么?
回首作为一个程序员这些年来的生活和职业道路,我使用了很多种不同的方法来提高我的编程技能 —— 阅读代码,编写程序,阅读书籍,听讲座,看视频,等等。
我的问题是:你做过的最有效的提高你的编程水平的一件事情是什么?对于那些想提高水平的程序员,你的建议是什么?
我希望你们提供的答案是各种各样的,并且不是那种“放之四海而皆准”的答案 —— 我希望得到适用于不同人的不同的答案。
有很多人给出了自己的答案,在这里,我将其中最受认可的前三种答案选出来翻译给大家。
最受欢迎的回答:学无止境
没有特别的先后次序…
- 和比自己更聪明的人一起工作
- 永远乐意听取他人的意见,不管对方是低级水平,一般水平,资深,还是大师。职称头衔并不代表一切。
- 学习其它的框架/语言,学习它们是的工作原理和思想,拿它们跟你已知的技术做比较。
- 学习各种设计模式,最佳实践理论,然后用它们检查自己先前的知识,在需要的时候使用这些模式。
- 结对编程
反对Joel说的一切。 😉
第二受欢迎的回答:成为多面手
争取成为一个‘多面手万事通’
在我职业生涯的早期,我在一种数据库和编程语言上是个专家。不幸的是,这种数据库在“数据库战争”中落败了,我才发现我的职业道路…很窄。在此之后,我下定决心以后决不能把自己封在一个小空间里。我开始学习所有手头上能接触到的东西:Windows,Unix,C,C++,Java,C#,Perl,Python,Access,SQL Server,Oracle,Informix,MySQL,等等。不管什么样的新的,不常见的工具或技术,我都成为“大拿” —— “去问克雷格(作者自己),他要是不会,他会去学会的。”结果,我做了各种各样的项目,从为环境监测做嵌入式系统,到为导弹防御做命令和控制系统。
我在各种的公司里唯一遇到的问题是:它们坚持要把我固定在一个专门的研究方向内,而我的专门研究是要成为一个多面手。[编辑: 也叫做学识渊博的人或多才多艺的人或多领域专家。]
有些事情需要留意 … 高科技界里知识的半衰期是多少?根据摩尔定律(Moore’s law):18-24月内,半数你学到的知识都会过时。错误的遵循这种规律的专家会轻易的在这种技术发展的压力崩溃;一个多面手要做的事就是不断的丰富自己的技能,并从应用这些技能的经历中吸取教训。
第三受欢迎的回答:不要跟臭棋篓子下棋
我一直认为自己在不错的程序员中也算是个“灌篮高手”。直到有个家伙——我们叫他艾伦——被招进团队。艾伦很显然在很多方面都比我优秀。也比我年轻。他让我认识到,在过去的这些年里,我没有多少长进。我是一个特定技术方向的程序员,而且是水平一般。
这惊醒我应该自觉的不断提高自己的水平,特别是我写的代码的水平。
艾伦引导我学会了很多东西。他告诉我,大部分我写的代码在今后的数年里都将一直维护和进行扩展,写代码时要将这点铭记在心。我应该为我的代码写自动测试程序。艾伦说代码的开发一定不能停止在第一版上,应该不断的重构,提炼,让它达到完美。我发现,我对这些语言和工具的使用都还有还很大的改进空间。
从艾伦那我学到的最重要的一件事情是:永远不要停止学习。
数年后,艾伦离开了公司。我的心里突然感觉空荡荡的。这些年与他为伴让我在技能上提升到了一个全新的水平,我知道现在我比团队里的其他人优秀很多。他们仍然写着糟糕的代码,犯着以前犯过的错误。我努力教育他们,但他们对此不感兴趣。事实上,他们讨厌有人这样傲慢自大的指出他们犯的错误。
于是,几个月后,我也离开这这个公司。我去了一个很小的公司,在一个很出色的团队里工作。那里每个人都渴望学习更多知识,我喜欢这样的。
我很幸运能遇到艾伦。没有他,我也许现在仍然待在那家死气沉沉的公司和那帮食古不化的家伙在一起,哪都去不了,想的全是自己的私利。
这个讨论在stackexchange网站上的地址是这里。
从我个人而言,我觉得第三个答案对我最有价值,不知各位同行们有什么感受?请写在评论里与大家分享。
其实第三点就是站在另外一个角度的第二点,归根结底还是第一点。当然,意识到第三点很重要,做到第一点很难,最庆幸的莫过于能依赖第二点
严重同意第三点,我最近的跳槽就是因为第三点。
另外我近来越来越觉得第二点重要:程序员的生涯可能会很长,越早接触多点东西,以后的路越好走,思路越开阔
第三点是大公司的通病。
大部分人都在养老,口头上叫嚣着创新敏捷,代码则是一团糟。
我也想跳槽了。。
同意第三点。不只是大公司,很多初创公司也是这种水平。想和更优秀的人一起工作,真的不容易。
能有一个比自己水平高并能交流思想的人需要多大缘分?
哪怕是水平相当,目前一个都没有,好累…
如果第三个答案对“我”最有价值,那对于“我”周围的那些高手,岂不是。。。。。。。。
先做到第二点才能达到第三点。。。
如果自己就是臭棋篓子,想和比自己聪明的人一起工作人家却不肯怎么办?
第二点 取决于一个人学习的能力,有的人不但不喜欢学习,而且学东西真慢,简直是恶性循环
最后一点很重要,但也不能强求,选择去留是要综合考虑的
我毕业后在一家小公司工作,很幸运,给一个极其优秀的同事打杂。那同事性格不怎么样,不过我脸皮也很厚。他教了我很多,代码设计,优化,写代码时就应考虑后期的调试。后来他走了。再后来,我也走了。然后来了这个外企大公司,只能在乱七八糟的代码上小心翼翼的解bug,也没法做改进,那个郁闷啊,纠结啊,迈入中年,这份工作薪水还行,也不用长期加班,但想念和优秀的人工作的日子啊。
好令人怀念!
不要与下臭棋的人一起工作!
学无止境 技术一般般 菜鸟级 可是乐于学习 不过在工作中都一直是自己在摸索 自学 一直想在一个很活力的团队工作 遇到问题以前讨论 不会的问题可以请教 可是我进入的公司团队都是那种很死气沉沉的 基本都是各干各的 老大根本什么事情都不管 工作初期最大的收获得是将基础的练熟 可是再有本质的提升恐怕一直这样 是很难的 。
艾伦说代码的开发一定不能停止在第一版上,应该不断的重构,提炼,让它达到完美。
国产项目永远大多都停留在1.0版本,后续版本大多都是为了配合时间的流逝刻意打补丁、升级上去的。
改变自己比改变别人更加容易。
第一:扪心自问,自己喜欢编程吗?在双眼看到代码的时候,在双手敲击键盘的时候,是不是激动不已?是不是可以连续几个小时研究代码?
第二:自己想要什么?也许你要的只是一个可以跑的demo,那就不要把自己的精力花在无谓的优化上,更要防止过度设计。
传言乔布斯说过一句话:A类人和B类人无法一起工作。
当然这句话的含义和第三点不完全是一回事。但与一些不思进取甚至拒绝反思的人在一起工作,不会对你有太多好处。如果碰巧他写的代码又很糟糕,那么你最好选择其他环境工作。因为你积累了数年甚至数十年来完善自己的知识框架,磨练自己的判断力,升级自己的决策系统,你知道怎样更好地修桥,就绝不能把这些资本丢掉,和一群食古不化的家伙一起摸石头。
就像原文说的那样,不仅你什么长进也不会有,而且会成为团伙中不受待见的人。
不可否认,每一个对计算机有着兴趣的人都会希望能够跟更强的人一起工作和学习,只要有着决心毅力,我相信这类人也会成为别人所希冀“打辅助”的对象。
但是若成为了这样的人,却还抱着这样的想法回避那些正在成长的程序员们,岂不是会造成了环境的两极分化?
所以,还是要善待那些在你周围一整天都在虚心请教学习的人。其实,看着别人成长也是一件挺幸福和成就感的事情啦
的确,这是平衡的艺术~
当年小学课本里的小白兔只要白菜,没想着要白菜种子。如果当时硬是教他种如何白菜,想必会不高兴的。
教别人种菜,在这个过程中自己同样会有收获,单单是给白菜,恐怕不会收获到什么。
Just practise. That’s it.
同意第一点,但要区分重点和次重点。某些知识,如算法,在多种程序设计语言和操作系统上均可用,而且是基础知识;这方面的学习个人认为是重点。没必要追新鲜知识,却必须把握知识的本源。
我觉得这3段讲的都是一句话。。stay hungry stay foolish
专注卓越!
写代码
我认识是不要保留自己曾经写过的代码。。。无限次的重复制造轮子 最终会做出最趋近于完美的轮子
我想这就是 “好公司”和”坏公司”的气氛不同吧
这三点都感觉很重要。要有一个永不停止学习的心!加油!
加油!
答案三很明显说的是态度问题…能力是一方面, 态度是另一方面…能做到是一方面愿意去做是另一方面…