03 April 2013

作为一名程序员,如何逐步改进自己的工作,享受优雅的生活?

首先声明,到目前为止,我的生活,可以说完全没有质量可言,惶论优雅,但所谓穷则思变,如果不想办法改进,这一辈子,可能也就是这个样子了,无限循环。

勤学

很多同事得知我在这家公司服务将近十年,都很吃惊,是的,人生能有几个十年?

但是十年资历,不能成为我懈怠的理由,从开始到现在,我一直很努力,大到一批项目,小到一款软件,甚至一个组件,处理起来都一丝不苟。

我没有过人的天分,如果在某些领域或有所谓,那也是我付出时间和精力的结果。

有时候,我会花六到八小时,去升级或安装 Linux 平台下的软件,有的最终成功,如 PyQt4,有的归于失败,像 Rails3,至今无法加载 OpenSSL。我很少感觉这是在浪费生命,失败亦然。解决依赖和配置编译的过程,让我更清醒的认识计算机,挫折和等待,令我的心智更加成熟。只要用心,每一步都有其价值。

这都是学习的过程。

知止

此处的知止,和大学里的论述,稍有差别:

知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。

而更接近佛教里的观点:

明确原则,理清期许。

对目标、归宿和自己的原则立场有明确了解,扫除妄念,专心一境,达到寂静的境界。

计算机的世界,哦不,其实任何一个知识领域,都是丰富多彩的,而人的精力,其实是有限的,特别是我们这些普通人,无法过目成诵,也不能一点即通,如果目标定得太多,最后很难有所成就。过去几年,我就犯了这样的错误,崇拜国外的极客,前端后端双修,各种语言信手拈来,于是我也铺开了去看,结果,没能精通任何一门语言,还浪费了不少时间。

如今,我只专注工作中实际用到的知识,Java/Scala, Python, JavaScript, CSS,而且,实实在在的写代码。亲手编写一个小的脚本,能完成既定的目标,比看一个小时的语法书,收获更多。

责任

这不仅是你作为程序员,需要修炼的品格,做人亦是如此。

如果一个项目,明天就要上线,你是否会在今天完成一切测试,哪怕不吃饭,不睡觉?

这在初入行的时候,就是这么做的,虽然累,但是心里踏实,也赢得了信任。

现在呢?

我不用通宵加班了,因为效率提升。

但我对责任二字,从未放松过,这是一种承诺,无论多么辛苦,你都要兑现。

分享

我为什么在群里分享东西,分享这么多东西?

因为每个人的精力都有限,把好东西提交到这里,是希望感兴趣的人择其一二仔细研究,有所得之后,再反馈回来,这样才是大家一起学习。

PS:我发的东西,很多也是没有仔细用的,只是看了觉得好,如果你也觉得不错,请深入。

我也谢谢你:)

管理知识

作为程序员,很难直接以知识谋生,但知识是能力的基础,心中没有交织成网的知识,很难独当一面,做项目也好,做服务也好,都是这样。

不要相信自己的大脑,能记住所有的东西,写下来,才是真实的。

选择一款你喜欢的知识管理工具,比如我用 Confluence,看到那些自己精心整理的词条,心中踏实,信心倍增。

善用佳软

我经常和我的同事强调,写好代码,和用好工具,是程序员两大生存法宝。

因为我不是计算机专业出身,基础不好,一直以来都倾向于使用好的软件,来优化我们的工作。这些年,我在团队中推广使用以下软件:

  • Confluence
  • Trac
  • Total Commander
  • Intellij IDEA
  • Everything
  • Markdown
  • GitHub
  • EmEditor
  • Sublime Text 2
  • Youdao Note
  • Xmind
  • Axure RP

它们都是杰出的产品,极大的提升了工作的效率和质量。

我的团队成员,也推荐了以下好的工具:

  • FastStone Capture
  • Doit.im

其实你很早就已经知道:磨刀不误砍柴工。

规范编码

最近使用 PyCharm 写 Python 脚本,不时遇见提示:

PEP 8, expected 2 blank lines, found 1

or

PEP 8, too many blank lines(3)

原来 Python 不仅要求严格的缩进,对代码块之间的空行,都有规范。

那么想想:

  • 你的目录结构规范吗?
  • 你的变量命名合理吗?
  • 是否编写了必要的注释?
  • 你的方法是否负担过重?

哪怕你是 Java 程序员,也不妨参考 Python 的编码规范。

重复专注

这是我能想到的,最简单的成功的方法了。

3月29日,OSChina 发布了一篇译文:如何学编程,JUST DO IT!,如果你更喜欢读原文,可以点这里

有一段话,印象特别深刻:

这逐渐成为了一个愚蠢的破冰话题,“hey,你花了两个小时解决 CoffeeScript 中的空格问题么?看看我,花了一天的时间, 写了 21 层函数和 200 行一模一样的 HTML 代码。”

目标导向

有的时候,我发现我的团队成员,他们不是不努力,但解决一个并不太复杂的问题,却花费了太多的时间。

虽然,在这个过程中,他们也学到了很多知识,但是,我们的项目,都是有固定的交付时间的,而且,如果你能更快的解决问题,除了赢得信任,更赢得了做其它更有价值的事情的机会。

浪费时间的原因有很多,其中一个,就是被别人的思路带到沟里去了。

很多工作,都是需要同事之间的配合,有并行作业,也有流水作业,我们接到自己的任务的时候,难免受到其它同事思路的影响,或出于尊重,或缘于偷懒,如果目标一致,那参考既成经验,是非常有价值的,能让你少走很多弯路。

但是,如果你们的目标都不一致,你还照搬他的方法,很有可能,会绕一个更大的弯。

记住,先找准目标,再定方案。

灵活变通

如果说目标导向还相对简单,这灵活变通,就有一定的难度了。

的确,变通,需要你有更加丰富的知识和经验,和跳出常规思维的能力,出奇制胜。

我们曾经接到一个投票的需求,乍一看,和常规的在线投票不同,不是直接对作品本身进行投票,而是对作品的属性进行投票。

而我们的投票框架,只支持对产品进行投票,我们新来的同事犯难了,想各种方法,对框架进行改造,但是都不怎么成功,因为大型应用的投票,涉及的东西还是蛮多的,缓存,定时任务,这此东西没有搞明白,是不敢修改框架的。

后来,我给他们一个方案,你不要总想着价格、油耗、售后等都是品牌的属性,你把他们设计为对象,不就OK了?new 一个品牌的同时,依次 new 价格、油耗和售后三个对象,投票不针对品牌,而是直接对价格、油耗和售后进行,不就不用修改现有框架吗,而且,还方便整体排名。

提升,是一辈子的事情。



blog comments powered by Disqus