【本期分享人】:
陈皓,有线院,多业务承载深圳软件开发二部,负责过承载设备多个项目的软件架构工作,酷爱编程,喜欢以技术方式解决问题。同时,是敏捷技术教练和代码大全讲师,长期负责深圳地区代码大全高级班的授课。
【正文】
程序员,或写或读,大部分时间都在跟代码打交道,即使在少部分和人打交道的时间里,也是为了确定将会和哪些代码打交道。作为程序员也摸爬滚打了好些年,碰到了很多困难,也解决了一些问题。借此机会分享一些我的小经验,希望你能用的上。
一、学 法
1、高手与普通程序员拉开差距的关键是什么?
能当程序员,学习能力肯定不差,差距仅仅体现在是否愿意主动思考上。你会看到高手没有人是完全依靠问别人来解决问题的。他们会首先做出独立的思考,有自己的判断,然后再通过实践去验证、修正自己的判断,并对结果负责。他们不仅会问别人,更多的是会问自己。
即使是问别人问题,也是经过深入思考之后总结出来的问题。“帮忙看下我这里这个现象好奇怪啊”,“怎么提高软件设计能力呢?”这些都不能算是好的问题。“这个故障我觉得有这么几种可能,但我们怎么才能验证它呢?”就是一个还不错的问题。当然,有些时候你还需要善于借助互联网去找技术问题的答案。搜索技术问题少用那个搜索引擎。对,就是你想到的那个。stackoverflow.com应该是公认的搜索问题答案的好地方。
2、技术发展这么快,怎么才能不被“落后”?
首先,掌握多种语言的目的并不是在简历上多填写几行字。
当下看似很火的框架和技术,很可能随着时间的推移慢慢变得“落后”,但编程语言可以说是软件设计领域留下来的最珍贵最精华的作品。很多专家在书籍中(如《代码大全》)会建议程序员应该每年学习一门新的编程语言。
这里的学习,当然不是说简单的学学语法,而是深度使用后去积极思考这门语言是要解决什么问题,通过什么方式解决的。那么,即使你在工作中不会直接应用,也会给你带来很多全新的思路,你的代码一定会写的更好。
另外,还建议尽量选择差别较大的语言,比如C/C++/java可以认为是同一族的语言。我推荐以下几种编程语言:go、erlang、python。如果你能够掌握他们,你一定会收益匪浅。
3、无法做到1万小时的时间锤炼,如何也成为高手?
作家格拉德威尔在《异类》一书中提出了10000小时定律。“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。是任何人从平凡变成世界级大师的必要条件。”可问题是你有没有10000小时?或者说你能不能做到10000小时?
因此,如果你在工作中想使自己的某个方面能力有所提升,或者你想掌握某种技能,不能像上学时那样按部就班的从一年级的知识学习到六年级了,而是为这件事定一个目标,直接去实现这个目标。例如你想学习C++,你应该直接使用C++去编写项目或某些程序,而不是手捧着近千页的《C++ Primer》彻夜苦读。在这个过程碰到了实际的问题,再反过来补充必要的知识。
二、干 法
1、解决问题的几个段位
程序员的主要工作就是解决各种问题。可以说解决问题的方式是衡量一个程序员水平高低的主要标准。面对一个问题或者故障,有多种解决方式:
● 初级段位:如果一个程序员是靠猜靠蒙,可想而知那通常水平不会太高。
● 二级段位:好一点的是会加个调试打印,或用调试器设个 断点观察状态;
● 三级段位:更好一点的是会用各种测试或TDD,不需要调试器了;
● 四级段位:更好一点的是用逻辑推理、形式化验证的方式,从而可以证明程序没有问题或者推断出问题出在哪里,甚至不需要运行程序;
● 高级段位: 不仅解决了问题,还可以把解决问题的方法工具化,把同类问题全部解决掉,而且还能推广出去,产生更大的价值。
因此我们要珍惜每一个问题,追求更好的方式解决,让我们段位不断升级。
2、写代码、改代码是你成为代码高手的台阶
作为一个程序员,多写代码是提升能力的必要条件。并且幸运的是,这件事的成本非常低,有台电脑就可以。你可以在项目中选取一小部分核心业务代码反复多写几遍,既能加深对业务知识的理解,又能实践不同设计方法之间的区别;你可以把经典书籍里的例子编写出来,例如《编程珠玑》、《SICP》中的题目;遇到了某些平时靠人工繁琐重复性的工作,你可以挑战一把,编写一个工具去搞定它.......其实不用多久,你解决问题的能力会飞速提高。
当然,写的太多其实也有问题,很可能多半是“拷贝+复制”堆出来的。仔细阅读项目中的代码,一定会发现一些冗余的,重复的代码。在绝对安全的前提下,有些时候扫除烂代码比写代码更有意思。
3、你真的是沟通表达能力不强吗?
程序员通常会被认为是沉默寡言,沟通表达能力不强。刚工作的那段时间,我认为自己就是这样的人,当我描述一个问题描述不清楚时,把原因归结为没办法,表达能力不强嘛。
但是,我慢慢发现,其实当我表达不清楚一个问题时,并不是表达能力的问题,而是我自己还没有完全想清楚,而表达出来可以促使你把问题思考清楚。否则你认为你理解的问题,其实并没有。
日常工作中其实到处都是这样的机会。会议上,讨论中,培训,甚至回邮件,写文档都是一个很好的表达问题的机会。抓住这样的机会,努力用最简单流畅的语言表达你所要表达的内容。
【结束语】
其实高手和普通人的差距并不大。每遇到一个问题都把它当成一个机会,保持一个精益求精的态度面对每一件事情、每一行代码,力求做的比别人好一点点。日积月累,每个人都会变成高手。
本文借鉴了邓辉、孙鸣的《我们的核心竞争力》宣讲和武研所魏猷君的一篇总结,谢谢你们!