程序员的职业素养 01

今天,大辉请了《程序员的职业素养》的译者之一余晟给我们进行了一次分享。

原本大辉在邮件中说邀请余晟分享正则表达式相关的内容,但是因时间仓促,而且正则也没太多好分享的。于是,余晟就结合其大学和工作上的经历给我们分享了程序员的职业素养这一话题。

余晟分享了“面向接口编程”、“学生式编程”,程序员个人努力,探究事物本质的习惯、基础学科的重要性、中美软件开发管理的差异、盛大创新院的经历、降级论等,最后总结了程序员职业素养的3个方面。

面向接口编程

某些程序员遇到有挑战性的问题,交给“高手”实现,自己仅仅是使用封装好的功能,不愿意去深究本质。

学生式编程

只考虑理想情况,对于异常情况没有进行处理,导致程序遇到异常时就罢工。

程序员的个人努力与探究事物本质的习惯

余晟第一份工作两个月就成长为Team Leader与其努力和探究事物本质的习惯是分不开的。

中美软件开发管理的差异

余晟认为中美程序员的个人实力上没有什么差距,但美国程序员开发出了很多优秀的产品,在开源领域独领风骚,而中国程序员却没有太多的表现的主要原因是国人在软件开发管理方面做的不够好,规范的流程让一群普通人能够创建较为成功的项目。

他以一个在雅虎和百度工作过的朋友的经历作为说明:雅虎的项目具有完善的流程规范,一个项目讨论过程中形成的文档,聚合导出后会发现其如论文一样规整;百度,最终则会获得各种文件格式和各种书写风格的文件。

还举了波音飞机的流水线转配,工人使用木锤安装机翼上的某个零件,这样细致规范的工作打造了复杂先进的飞机。

(这个观点我持怀疑态度。虽然规范很重要,但顶尖程序员创造更多的价值。另外欧美在开源领域做的比较好是一部分也是由于国情的原因:语言、理想主义 vs. 现实主义。相信国人在开源领域也会越做越好的。)

盛大创新院的经历

其在盛大创新院时基于Lucene开发的搜索引擎,根据业务场景,实现自定义分词系统,最终因感觉代码不规范,不好意思贡献给社区,产品也没有得到太多的使用。

(我认为这种做法是不可取的,直接贡献出去不久可以了。惭愧的是到目前我只是说说,还没有贡献过,接下来我会尝试贡献一些Drupal的代码,为Drupal社区的发展贡献自己的一些力量。)

降级论

互联网与传统行业结合能够创造更大的价值。

程序员职业素养的3个方面

1. 扎实的基础,探究事物本质的习惯

基础是自我提升的保证。

2. 提升自己的开发效率,自动化

程序员应该善于给自己开发各种实用的小工具来提升自己的开发效率。另外,不仅仅给自己用,还应该尝试给其他人开发工具,自用和给他人用所面临的问题会有很大的差异。

3. 产品意识

程序员的苦逼有一部分原始是自己造成的。程序员应当具备产品意识,开发处更人性化更好的产品,减少使用者的困惑。虽然这些东西看似属于产品经理的职责,但产品经理并不能够面面俱到,另外好的产品经理属于少数。举例:1)其公司某仓库的手持扫描仪因为网络没有连接,却给出“无法解析域名”的提示,导致使用者的困惑;2)某程序修改配置后,需要重新加载配置才能够生效,按钮的文字使用“生效”而不是“加载配置”让使用者能够更加容易理解。

 

团队的执行者

困境

前两天走在回家的路上和同事说到:已经工作了一年,但感觉还没有学会很好地工作。后来在《程序员》的一篇文章[1]里看到了“执行者”这个词,立刻套在了自己的身上——感觉自己就是一个执行者,但这不是个好的定位,因为缺少了独立思考与解决问题的能力。

是什么造成了这种状况呢?我认为有两方面的原因:团队方面和个人方面。

团队方面

我所在的PHP组,项目相对离散,几乎每个人都是维护着各自的项目,没有太多的交集,至少我个人找不到团队的归属感。另外,我目前主要负责维护的项目是公司内部使用的,功能相对稳定,没有明确的后续开发计划,因此经常被安排其他项目的零散的维护任务,但仅仅是临时的介入,多个项目之间进行切换是件比较不爽的事情,也找不到那种为了产品的持续改进而努力奋斗的氛围。

个人方面

对于现在面临的状况与我个人对其的处理方式有很大的关系。起初自己的技术实力很菜,通过他人的安排来进行任务开发,现在技术已经有了一定的成长,但是还是没有转变过来这种状态。虽然感觉有些不爽,但是没有有效地表达出来,或者是表达出来后没有持续跟进,导致问题并没有得到解决,我还是处于这种状态,累积起来整个人就会变得压抑起来。

另外由于项目之间的关联性较少,导致整个人相对闭塞一些,长时间这样,也变得有些狂妄和浮躁起来。

现状

两周前和入职师傅有了次谈话,收获良多,之后决定改变自己对待所处状况的处理方式,积极表达出自己的真实的想法,对待一些问题变得更加坚持一些。而后,经过一些事情和个人思考之后,上周终于决定加入到公司的一个此前我一直不愿意全职加入的团队中,虽然现在仍然不是全职,但是主要的精力将投入到其中去。上周参与了该团队的几次讨论后,有种终于找到组织的感觉,因为这是一个团队,一个为了开发出更好的产品而努力的团队,一个可以相互交流的团队,一个为了共同的目标奋斗的团队。我将不仅仅是一个团队执行者,期待着下一个阶段我的表现的说。

[1]: 《程序员》 2012.02 敏捷结对编程实践

Gonna Sailing ;-)
==END==

My 2011 and pre-My 2012

2011

刚刚回顾了下My 2010 and pre-My 2011,整体的感觉是“挖了很多坑却没有凿好一眼井”。

时间线
2011.03.01 开始丁香园实习
2011.05.28 返校,拼凑论文,准备答辩
2011.06.23 毕业,拿到毕业证和学位证
2011.07.07 回到丁香园,试用
2011.08.01 转正

关键字
挖坑 问答 工作 OpenX 菜鸟

数字的力量
1   颗智齿被拔除,还有一颗等待中
2   次分享,问答网站介绍、OpenX初探,质量有待提高
3   次活动,淘宝懒懒交流会、淘宝技术嘉年华、淘宝前端技术分享沙龙
30+ 本书,没有记录,数字记不清了,但阅读量太少了
47  篇博文
101 篇OhLife日记

博客更新
计划2篇/周,实际更新了47篇,小于1篇/周,而且很多还是个人的碎碎念,因此博客并没有什么流量的说。

GTD
断断续续地整了一段时间,但是一直没有很好的管理自己的生活。

行动力
好的地方,网络小说基本上戒了。不过有段时间花在视频上的时间有些多。

身体健康
“好了伤疤忘了疼”、“不长记性”类型。
体重增加了。
锻炼没有坚持,不过又重新开始跑步了。

自信与自评
原来我是外向的人。

其他
第一次租房的时候没有注意合同条款,最后是交了毁约金了事。
对互联网产品的理解更加成熟一些,但是还是没有有效地利用它们。
信息过载依然很严重。
开始用更好的心态进行学习总结,但是还没有另自己满意。

和同学合作开发站点但是不了了之,我负主要责任。

虽然不是很明显,但感觉很多方面都有进步的说,希望更进一步的说。

2012

2012,船票还没搞到,生活还在继续,梦想还在前方,努力前行即可。

关键词
MVP focus GTD English JavaScript PHP

数字的力量
12 次分享
12 次活动,包括技术/非技术类
77 本书,文学、社科、设计、技术
77 篇博文

技术提升
PHP/MySQL
Zend Framework (1&2)
OpenX
JavaScript/jQuery
HTML(5)/CSS(3)
Linux/Ubuntu
工具:VIM 正则表达式 Shell Git/GibHub

个人项目
MilkyAds —— Just another OpenX folk.
SevenWords —— A simple words memory booklet.
{focus} —— Collect your most visited sites to per page.
webOS

MilkyThinking
用心经营个人站点MilkyThinking,将会扩展个人站点的内容。
博客更新频率1.5篇/周,增加技术类文章的比重,考虑将技术类博客独立出来。

时间管理
基于GTD进行探索与实践,有计划且不失灵活性。

信息过载
Google Reader逐步清理
清理此前积攒的内容、资料
选择几个优质博客重点阅读,如:StackOverflow官方博客、CodingHorror

互联网产品
新浪微博、人人、Twitter等产品如何更有效地使用?
知乎、SegmentFault、StackOverflow、V2EX等,参与到一个社区中去

生活健康
形成节奏感
坚持锻炼
减肥

PS:虽不是很完善,但大部分都涉及了。

Gonna Sailing ;-)
==END==

《我可能不会爱你》观后感

周四晚上下班回来后,打开优酷看到了《我可能不会爱你》,看了简短的剧情介绍,只有13集[1],加上此前对林依晨扮演的角色的喜欢[2],就打开看了看,结果是面临诱惑又一次控制不住自己[3],一定要把它看完,但明天还要上班的说,于是看了几集;第二天,也就是周五,下班后回来看到很晚(可以说是通宵);周六晚上回来后终于看完了最后一集。今天,决定写点什么吧,一来保持自己每周更新的频率,二来写点其他的想法。

这部电视剧讲述的故事是:一个男生喜欢一个女生,但是很久不敢表白,之后,男生阴差阳错的很多次没有完成表白,只好继续维持着“最好的朋友”的关系,只因为太熟悉各自都不敢直面自己的内心,还互相帮助着对方寻找人生的另一半……之后,男生选择了离开……再之后,女生发现了男生的喜欢,意识到自己真实的内心……最后,两个人走到了一起。

看完这部电视剧,我的一些收获:

  • 爱情,人的另一半仅仅会在有限的圈子里寻找,爱情是偶尔的Moment与更多的是平淡的历久弥新的生活。
  • 旅行,我也想去旅行一段时间,3个月[4],放空,体验,思考。
  • 工作,热爱自己的工作,努力认真地工作,成长需要时间。

[1] 以前在学校里看过几个日剧好像都是13集,一个通宵就可以搞定。不过我被这部电视剧的13集骗了,每集90分钟,是日剧长度的两倍。
[2] 《天外飞仙》里的小七。
[3] 老毛病,要么不开始,要么就要看完。称之为毛病的原因是目前只对简单的事情有效。
[4] 不知道要去哪里,不知道要准备些什么,也不知道需要多少Money,但先准备着。

Gonna Sailing ;-)
==END==

PHP最佳实践之编码规范

本文编译自上面展示的幻灯片,作者为Zend Framework架构师、项目负责人。

编码规范的目的

  1. 效率
  2. 可维护性
  3. 协作

效率

如果没有编码规范,你将会:

  1. 经常格式化他人的代码
  2. 6个月前的代码和今天的代码具有不同的视觉结构
  3. 修改旧代码的时候,不时遇到语法错误,如条件语句缺少括号、列表数据遗漏逗号等等

可维护性

遵循编码规范,你的代码将具有可预见的布局,包括文件布局和代码布局。容易阅读的代码将会容易理解、维护和重构。

协作

团队成员遵循编码规范,任何程序员可以拾起并理解他人的代码,这将帮助他们进行维护和重构。还可以更加高效的进行开发,获得更高的客户满意度。

编码规范提供了什么?

  1. 文件布局的一致性
  2. 代码布局的一致性

使用公共规范

不要发明自己的规范,不管是为个人还是为公司。因为你并不特别,你的PHP代码也不是独一无二的。他人已经探讨过这个问题,你可以受益于集体的智慧。

为什么使用公共规范?

  1. 客观 – 选择将不是基于主观的喜好,而是实际的经验
  2. 招聘或外包的需求 – 容易判断求职者的经验或代码的质量
  3. 兼容性 – 遵循你用到的库的编码规范

已有的选择

  1. PEAR 编码规范
  2. Zend Framework 编码规范
  3. eZcomponents 编码规范
  4. PHPLib

PEAR编码规范

PEAR的规范是最广泛接受并使用的编码桂冠,这很大程度上受到PEAR用户数的影响,也是得益于该规范的整体质量与明确性。

PEAR命名约定

 类名(Classes)

  1. 混合模式
  2. 首字母大写
  3. 使用下划线分隔逻辑包和代码的边界
  4. 示例:Spreadsheet_Excel_Writer, Services_Google_AdWords

文件(Files)

  1. 文件名和类名一一对应(一个类一个文件)
  2. .php 后缀
  3. 类名的下划线对应着目录结构
  4. 没有松散的PHP代码
  5. 示例:Spreadsheet_Excel_Writer ==> Spreadsheet/Excel/Writer.php

变量(Variables)

  1. 驼峰模式(CamelCase)
  2. 首字母小写
  3. 示例:var $firstName =

常量(Constants)

  1. 全部大写
  2. 下划线分隔单词
  3. 示例:const DB_HOST =

私有和受保护的属性(Private or protected properties)

  1. 首字母为下划线
  2. 示例:private $_username;

函数与方法(Functions & Methods)

  1. 驼峰模式
  2. 首字母小写
  3. 示例: function toString()

私有和受保护的方法(Private or protected methods)

  1. 首字母为下划线
  2. 示例:private function _doLogin()

缩进(Indentation)

  1. 使用空格(Spaces)而不是制表符(Tabs)(永恒的圣战)
  2. 每层缩进使用4个空格
  3. 目的是跨编辑器获得一致的视觉效果

行长度(Line Length)

  1. 建议75 – 85个字符

不使用Shell风格注释(#)

块格式(Block formatting)

  1. 函数和类的左括号在声明的下一行,同一层缩进
  2. 控制结构保证左括号和声明在同一行
  3. 所有的控制结构使用括号,没有例外

更多PEAR编码规范的信息

当前规范:http://pear.php.net/manual/en/standards.php

提名规范:http://pear.php.net/manual/en/pear2cs.php

总结

  1. 使用公共的编码规范
  2. 总是遵循编码规范

Gonna Sailing ;-)
==END==

Just Do It – 写点什么

晚上在整理自己此前产生的零散的碎片,其中有些是写给自己的激励的话语。如“也许刚开始自己的见解很粗陋,但是除了我自己,who cares?所以没所谓啦,大胆去写就行了。”

是的,对待某些问题,我目前的想法可能是片面的甚至可能是错误的,但是谁能够一开始就做的很完美,即使那些我认为很牛的人也不能够。

因此,问题的关键就在于执行力了。不要让自己内心的怯懦禁锢了自己前进的脚步。开始去做吧,只要用心,在这个过程中我将会成长起来,我也将会发掘自己真实的兴趣所在。

不用在意自己的能力,不用在意别人的眼光(其实是自己内心的偏见),做就行了。

Just Do It!

Gonna Sailing ;-)
==END==

“淘来换”上线第一天

昨晚将应用上传到虚拟空间搭建起了“淘来换”,关于“淘来换”的具体情形在前一篇文章里进行了描述,这里讲述一下上线第一天的经历与感想。

上午

六点多,上床睡觉。

九点多,起床。登录到淘来换,想发布自己的几本书籍信息上去,发现无法发布成功,被提示是垃圾信息,不知道什么原因造成的,也不知道会不会对其他用户造成影响,于是想检测一下数据库数据来发现问题。登录到HelloHost,在操作页面点击虚拟空间的cPanel面板,却无法打开页面。在更换浏览器、网络接入途径、机器之后仍然是无法打开。只得发布工单(HelloHost中对求助邮件的称谓)给HelloHost的工作人员。

下午

吃过午饭回来后,尝试并成功通过其他的途径访问到淘来换的数据库。很快便发现了无法发布信息的原因所在,解决掉之后,将信息成功发布。后了解到是大海在熟悉站点操作的时候进行的一些操作,导致我的帐号被当作垃圾用户(Spammer)了。

解决了我们的第一个热心用户发布内容的电话号码的乱码问题,并给他发送了一封通知邮件(发现我有这方面的潜质)。

三点左右,去听了大海的关于Web容量规划的分享,有些收获,了解了一些名词与信息。由于初次的原因,大海的表现不是很好,还有很大的提升空间。

之后去校医院进行学校的体检,是一个交钱走流程的形式,医生就随便看看,然后盖章。不过还是了解了点信息的:1)我有些近视(我讨厌眼镜);2)我有两个智齿;3)最后被抽了半管血,下周一去取结果,不知道校医院的血液检测会不会专业些、负责些。

被大海告知去毅字楼取毕业照片(没有我的存在)。从毅字楼出来的时候,听到几个童鞋在讨论“大四的学生怎么还不卖东西?”,可惜当时没有冲上去推销我们的站点的勇气,下次一定不能这么怂。

回到宿舍,和大海交流了下,对站点进行了一些小的调整。

晚上

六点多的时候爬到床上,睡到十点多。

HelloHost的工作人员回复了我的工单,解决了遇到的问题,成功登录到cPanel。虽然不是即时的支持,但效率还可以吧。

花了些时间继续捣鼓我的“知乎邀请码”的生意,目前还无一人购买。张明烁童鞋很支持我的生意,愿意提供他的邀请名额出来。

总结

由于还是不十分熟悉我们使用的开源应用,导致目前站点还存在不少问题,比如中文翻译很烂的问题,邮件通知的问题(邮件格式不正确,导致受到的邮件无法正常解析,这可能是由于该开源应用的国际化方面做的不好),一时半会儿我也不能解决掉这些问题,因为没有太多时间。从这件事上我学习到,在搭建站点之前应该尽可能多了解一下你使用的应用,因为上线之后你不能轻易进行改变了。当然也不能因为不熟悉就一直拖着,试着去找一个平衡点。

由于淘来换是我进行的第一次尝试,在上线前也没有考虑太多(脑袋一热就发布了),因此很多方面做的不好,还有很多工作要做。希望自己能够通过这次经历,好好进行总结。在我目前筹备中的下一个站点(小众的分享交流社区)上线的时候,自己能够做的更好些。

接下来应该设想一下推广的途径,发布信息,吸引更多的人参与进来,让平台成长起来,具体怎么做,就不得而知了。I’m thinking now!

Gonna Sailing ;-)
==END==