让代码审查成为你的团队习惯

「远程工作经验谈 - 如何适应及如何管理」 一文中,我在规则这章节提到了代码审查,收到不少朋友的提问和反馈,故在本文中拓展开来聊聊。

Wikipedia 上,对代码审查的定义是

代码审查(英语:Code Review)是指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。代码审查常以不同的形式进行,例如结对编程、非正式的看过整个代码,或是正式的软件检查[1]。

可以看出,代码审查主要是为了软件质量和个人开发修养。巧合的是,但凡我接触过的靠谱的团队,无一不是在团队中推行严格的代码审查制度。这个就像是一种习惯,直接融入在团队血液之中。

为什么我们要求代码审查

人们习惯用自己能衡量的东西来判断一件事情,所以对于代码审查而言,我们能看到的是它需要花掉一些人的一些额外的时间,那些本应该用来继续做开发的时间。这也正是代码审查在团队推行遇到的最大阻力。

在我们 Fengche.co 的实践中,代码审查给我们带来的三点好处。

......

Read more →

远程工作经验谈 - 如何适应及如何管理

前记:本文源于我在知乎上回答的「团队成员都在异地办公有哪些优劣?」。在国外远程工作已经是很习以为常的事情,而国内却仍然是个新鲜事。经常也会有朋友问我如何适应远程工作,如何管理远程团队,觉得还是有挺多的可以交流的,故在这里记录点文字,希望对大家有帮助。

算算从 07 年开始到现在基本都是在异地办公,从一开始一个人兼多种角色做独立开发者,也经历并管理过一个曾多达 18 人的远程团队,到现在 3 个人创业,做团队高效协作工具 Fengche.co,依然大部分时间远程。大体上远程工作,在我看来主要包含三个方面:1)团队 2)工具 3)规矩。

团队

当我们说到团队适不适合远程工作时,这里会有两层意思:一是团队里的个人是否适合远程工具,二是这个团队适不适合远程工作。

团队个人

远程工作远不是人们想像中的自由状态,想工作就工作,不想工作就不工作。所以并不是所有人都适合远程工作,只有自律且耐得住寂寞的人才适合远程工作。“自律”,说易行难,却很重要,你在一个完全没有监督的环境,有大把的时间供你挥霍,你能否迅速调整到最佳工作状态,是工作成败的一个很关键因素。如果说当你对所做的事情充满激情而能努力工作的话,那么当激情退却的时候,能否仍然保持自律是个更大的挑战。“耐得住寂寞”是另外一个要求,即使你在一个团队里,大多数时候没有人说话,没有人扯淡,也没有人讨论,甚至当你无法很好把握生活和工作的平衡时有时一天也出不了一次门说不了几句话,所以如果你很看重或热衷职场社交活动的话,那么远程工作并不适合你。然而,一旦你习惯了这种工作方式,你会发现你可以选择更自由的工作方式,有更多的时间可以用来学习,也有更多的时间可以陪伴家人,你会喜欢上这种感觉,:)

团队情感

如果你找到了自律并耐得住寂寞的人一起工作,那么恭喜你。下面就是你得信任他,100% 的信任,如果你花时间去思考他到底是不...

......

Read more →

创业工具箱之视频篇

Jul 04, 2013 创业 工具 视频

前天在微博上发了一条消息介绍视频托管服务 Wista,很多朋友回复并给出很多很好的信息,觉得很有必要汇总一下,希望对创业者有用。

<p>一般那些有产品视频的网站我个人印象分都会有提升,但是打开视频你让我先看 30 秒优酷广告我就有点受不了了,优酷有没有提供付费免广告的服务我不知道,不过 Wistia 是个很靠谱的视频服务,可以看这个例子,<a href='http://t.cn/zQvd8NG' target='_blank'>http://t.cn/zQvd8NG</a> 国内问过各个地区的朋友都说速度没问题,清晰度也好 #创业工具箱#</p>

曾经看到过数据,用户在看到一个网站后点进去的平均访问时间是 6 到 7 秒。也就是说你只有七秒的时间来让用户了解你的产品,然后吸引那批感兴趣的用户多停留一段时间。所以很多网站在传达清晰明确的产品信息给你的同时,会提供更多辅助的形象化表达方式。我们常说,一图胜千言,一屏胜万文。有统计一个好的产品介绍视频能带来 64% 到 85% 左右的转化率提升,会让你的网站的平均访问时间提高两分钟。所以,创业者们,好好思考一下视频,严肃地。

但是,制造一个产品视频会涉及到文案、录制、后期、音乐、托管等,而中间三个是技术创业团队很少具有的能力,我相信这也正是很多产品缺乏视频的一个主要原因。所幸的是,这是一个分工合作的年代,这些专业的事情就应该交给专业的人去做。如果这个不是业务的核心,我相信付出一点点的成本来寻求更好的回报是个更好的选择。这里列一下我了解的和朋友分享的几种托管方案和制作选择。

视频托管

先假设你有了视频后,你会选择放在哪里?下面是我经历过的或者朋友推荐的。Youtube 在我亲测下来其实是非常好的选择,无论各方面来讲,可惜被墙掉了,所以本文就忽略了。

Wistia

Wistia 是目前 Fengche...

......

Read more →

黑客马拉松 - 玩脱了就行!

May 22, 2013 hackathon hacking

去年十月参加 Rails Rumble 2012,做了一个 call4review.com,虽然现在已经很少打理,但是偶尔用到几次也觉得挺有价值。这是第二次参加 Rails Rumble,2010 年和 DanielTerryDavid Pots 做了个 IMGateway,2012 年和 BenTerry 做了这个 Call4Review,每每谈论起整个过程,个个眉飞目舞,意犹未尽的样子。其实就两个字,好玩!Just for fun,这不正是黑客精神的很好诠释嘛。

当时:困倦,但是兴奋得睡不着觉。事后:几周,几个月,甚至一年后想起 Rumble的经历,依然充满各种欢乐的回忆。Daniel

犹如一场48小时的电竞比赛… 紧张刺激而又充满乐趣… Terry

是一场极限’运动’, 在严格的限定时间里产出自己最大的效能, 很刺激很过瘾. Ben

相对惭愧的是,国内的黑客马拉松参加的少,只因为习惯了远程工作,对于这种限定场地的反而感觉到了不自在。上周跟高阳聊起黑客马拉松,获得了一些有意思的信息,也知道他们最近正在搞 CodeJam。程序员大多都很宅,远程工作的就是死宅了… ❨╯°□°❩╯︵ ┻━┻ 提供和限定场地可以让参加的团队能互相交流,思想碰撞,有一种跟线上比赛完全不一样的感官享受。

这里分享一下我们参加过几次 Rumble 的经验。

  1. 做最小化的东西,你只有 48 小时的开发时间,把功能砍到不能再砍。
  2. 充分的准备,不要在比赛的时候去做选择方案的事。规则不允许提前开发,但是你应该对开发中遇到的所有技术难点都提前有尝试。
  3. 一个好的协作工具。48 小时开发是非常高强度的,交流可以靠吼,进度控制管理必须靠工具,这样团队的每个人才能专注开发。
  4. 做什么不是关键,相信大家平时会有很多创意,随便选个,最...

......

Read more →

记 5 月 11 号 Ruby 开发者沙龙

May 14, 2013 ruby event hangzhou

上周六我们在杭州举行了面对长三角的小型 Ruby 爱好者沙龙,5 个小时,6 位分享嘉宾,70多位参与者,很好很强大。

我个人很喜欢 Daniel 之前在上海搞的季度 ShanghaiOnRails 线下活动,给长三角的 Rubyists 提供了交流学习的时间和平台,每次参加都感觉收获不浅。可惜随着 Daniel 的退隐江湖,这个活动也就搁置了一段时间。上个月我和杭州 Ruby 社区的朋友聊了一下,决定在杭州也搞一期,希望未来有上海的朋友苏州的朋友也能牵头搞这件事,促进城际间的交流。其实对于活动本身,只要搞定了场地问题,其他都不是问题了,时间选个周末,讲师大家一期安排。在这里感谢一下我所在 Fengche.co 团队的另外两位创始人 TerryBen 允许我用工作时间来做这件事,感谢淘宝阿里技术协会(ATA)对社区的一贯支持和本次提供场地设备和茶歇点心,感谢 SegmentFault 提供会议报名组织支持,感谢杭州 Ruby 社区的李建业 (@fswordlee),李华顺 (@huacnlee),武鑫 (@SaitoWu)和吕戈 (@night_song) 一起组织活动。

这次沙龙分享嘉宾阵容非常强大,分享主题非常有料,很有幸能得到他们的支持,特别是远道而来的曹力 (@ShiningRay) 和黄志敏 (@flyerhzm)。6 场演讲场场精彩,我这里小记一下。

单兵如何打造日PV百万的网站架构

来自南京的曹力是现暴走漫画的 CTO 和原糗事百科的联合创始人。暴走漫画目前日均 PV 过千万,可以想像对网站架构和性能优化带来的挑战。曹力介绍了几次主要的架构变迁,单机,百万 PV 时的挑战,千万 PV 下又是如何转变,演讲风趣生动,很有暴走之风。大家可以在这里查看 PPT。因地制宜,善用 Cache,量化分析,摆事实,讲道理。会后跟曹力也交流了很...

......

Read more →

Rails 初学者指南

Apr 22, 2013 rails learning

今年 2 月初,我 和 DanielTerryKevinTeahour.FM 上聊了一期 Ruby 与 Rails 的学习经历和对初学者的学习建议 How to Learn Ruby and Rails。而这竟然成为了目前 Teahour 这么多期里面最受欢迎的一期。Rails 4 发布在即,看上去 Rails 已经越来越不适合初学者学习。所以对于初学者而言,了解正确的学习方式无痛上路显得就格外重要。

我在 06 年底开始接触 Rails 的时候,Rails 版本还是 1.2,Ruby 版本 1.8.6。那时我主要是一个后端开发程序员,不懂 Web 开发,不会 HTML,CSS,JS。但是那时的 Rails 学习起来比较简单,特别是搭配着 Agile Web Development With Rails (2nd Edition),跟着例子走基本就了解了 Rails 的方方面面。再跟自己的已知的知识体系做结合,也算非常平滑的学习曲线。

而如今,你在学习 Rails 的时候,你会发现很多额外的东西,比如 CoffeeScript,Asset Pipeline。而 Rails 4 很多新特性如 Cache Digest (Russion-Doll caching), TuoboLinks,前端倾斜更是会让新手直接晕掉。我们现在已经听到越来越多的新手抱怨 Rails 难学了。DHH 曾经发过一篇很有名的博文 Rails is omakase,中文翻译版见这里。在 DHH 和 Rails Core Team 眼里,Rails 框架希望提供的是他们认为的 Web 开发的最佳实践,而这个最佳实践,必然跟他们过去这么多年的开发经历相关。在我看来,基本上 Rails 的框架演变过程跟 Web 开发技术的演变过程是一致的。但是对于初学者而言,在没有经历过足够的痛的前提下,要理解很多改进就成了一件不容易的事情。特别是当目前 Web 开发开始向前端倾斜的时候,对开发人员的素质要求越来越高,全能化,全栈化,摆在初学者面前的是个极大的挑战。

......

Read more →

关爱程序员之 Herman Miller Embody 体验报告

上周入了梦想已久的 Herman Miller Embody 椅子,这几天也有不少朋友在问体验报告,想知道花这么多钱买一把椅子是否值得。在这我说说我的感受。

对于程序员而言,久坐是工作的一部分,我自己平均每天花在电脑前的时间是 8 到 10 小时,已经能感到腰部不适。我之前的椅子是一把人体工学椅,如果只是坐一两个小时还好,但是时间一久就感觉腰酸背疼。这一周用了 Embody 以后,基本四五个小时没有任何感觉,Embody 的设计是模拟人体脊椎,所以跟我的背部很贴服,可以说坐下去的感觉就是你意识不到你是坐在椅子上,不愧是顶级人体工学办公椅。另外一个让我觉得很舒服的是扶手,放上去很舒服,同时又可以横向左右调节,我把它调整到刚好可以自然的搭着打键盘,不需要任何发力,打字非常舒服,算是额外的一个收获。

除了腰部以外,颈部也是职业病之一。去年体检的时候,已经被告知颈部有点退行性变,建议适度运动。所以当发现 Herman Miller 的椅子都没有头枕的时候,让人觉得有点奇怪。据经销商介绍是为了约束坐姿,目前体验下来没有头枕也没发现问题,还是因为 Embody 极好的包裹性让后背非常放松。其实仔细想想你一般什么时候需要头枕,也就是在仰躺着休息的时候,需要靠头。不过话说回来,对于程序员而言,这种时候难道不应该屁股离开座位,站起来走会活动一下颈部吗?

......

Read more →

Teahour.fm, Static Site by Middleman

Teahour.fm 是是由四位程序员 Terry TaiDaniel LvKevin Wang 和我创立的聊天类节目,我们四人轮流担任主持人,每期节目自定话题并邀请对该话题深有研究的嘉宾,与大家一起分享话题背后的故事。Teahour 今年 一月十九号第一期,一周一期,到现在已经出了十一期,总共邀请了六位嘉宾,有超过一万次收听,内容涵盖 Ruby,Rails,JavaScript,Mobile,Git,个人成长,敏捷思想和开源文化多个方面。如果你是程序员但是还没听过 Teahour.fm,那赶紧听起来,不然就 old man 了,XD

这周团队在北京活动,顺便参加了 Beijing Rubyist 线下活动,分享了一些 teahour.fm 网站设计和开发的一些思考。具体 slides 可以参考 speakerdeck

我们最终选择的是 MiddleMan,一个静态网站生成器。对于 teahour.fm,目前使用静态网站相对于动态网站来说是利大于弊。

  • 不依赖数据库,不依赖解释器,只需要支持 HTML 就可以了
  • Hosting 方便,目前是直接部署在 github pages,而不需要一个 VPS。
  • 速度快,HTML 永远是最快的,前端也可以随便用 Apache,Nginx 这些高性能服务器。
  • 写作方便,基本所有的静态网站生成器都是用 Markdown, Textile 这些模板语言,相对简单,可以本地编辑。
  • 没迁移成本,不需要数据导入导出。
  • 所有文件都有版本控制

当然,选择了静态网站也就失去了动态性。目前 teahour.fm 比较缺乏这三个功能。

  • 切换 episodes 的时候不能走动画方式,而是整页刷新
  • 不能做站内搜索,只能加 google 站内搜索
  • 不能做站内评论,需要依托 disqus ...

......

Read more →

重构 Rails 项目之最佳实践

Mar 04, 2013 Rails Refactor

春节前受 Terry 邀请帮助国内的一个公益项目 Re-education 做代码重构。开放课堂项目是由教育大发现社区发起,成都 ThoughtWorks,成都彩程设计公司,成都超有爱教育科技有限公司等一起合作开发和运营的教育公益网站,是一个提供给小学3-6年级师生设计和开展综合实践课的教育开放平台。项目代码放在 GitHub,采用 Ruby on Rails 作为开发框架。

很高兴我们 Fengche.co 团队能参与到这个公益项目的开发中,我相信这是个对社会很有价值的事情。征得发起方的同意,我把这次重构工作做成了一次在线秀,也正是因为这次这样的形式,和很多朋友直接在 Join.me 上交流了很多 Rails 项目重构方面的想法。通俗点说,重构就是对内要通过修改代码结构等方法让代码变得更美,提高可阅读性和可维护性,而__对外不改变__原来的行为,不做任何功能的修改。所以我们做重构要做好两点: 1) 一次只做一件事情,不能修改了多个地方后再做验证 2) 小步增量前进,路是一步一步走出来的。同时,为了保证重构的正确性,必须要测试保护,每一次小步修改都必须要保证集成测试仍然通过。之所以要保护集成测试而非单元测试,正是因为重构只改变内部结构,而不改变外部行为,所以,单元测试是可能失败的(其实概率也不高),而集成测试是不允许失败的。基于 Re-education 的代码,这次重构主要涉及了 Controllers 和 Models 两个方面。有兴趣的朋友可以去 RailsCasts China 观看视频。

Rails 做为一个 Web 开发框架,几个哲学一直影响着它的发展,比如 CoC, DRY。而代码组织方式,则是按照 MVC 模式,推崇 “Skinny Controller, Fat Model”,把应用逻辑尽可能的放在 Models 中。

......

Read more →

The Missing Chinese Podcast About Tech

Jan 22, 2013 Podcast Tech Ruby Javascript

Terry, Daniel and me

一个月前在一次 Book Club 里 TerryKevin 聊起比较缺乏一个 Web 开发类的中文 Podcast,而 Terry 在做的 RailsCasts-China 做为视频类节目,略显不同。于是,便与 Daniel 沟通了一下,很快便达成共识要启动这个计划。

对于 Podcast,我个人并不是重度用户,以前在学英语的时候听过 English As A Second Language,现在也偶尔听一下 Mixergy5by5,不过因为个人习惯喜欢在工作时候听音乐,所以 podcast 也只能在路上或者健身的时候偶尔听听。但是对于这种技术聊天的形式,反而是一点都不陌生。之前在 Intridea 的时候,我组织了公司内部每周五的 TeaHour,每周一次坚持了一年多,而目前和 Kevin, Terry 还有 Ben 基本每一两周都有 Book Club, 技术,创业,商业,生活,各种都聊,每次都很有收获。希望这个 Podcast 也能给听众带来同样的收获,对着起大家的时间。

目前第一期的 Podcast 已出, 下载地址讨论地址。这一期主要聊了下列内容:

  1. Podcasts 推荐
  2. 关于 Railscasts-china, RubyChina 的一些讨论
  3. 对于 remote 工作和时间管理上的看法
  4. 关于 Javascript MVC 框架的讨论

对于 Podcast 的内容,我们的想法是包括访谈型和聊天型,希望每期都能有 3 到 4 个人一起,内容只要是程序员感兴趣的话题,都可以聊。如果你有感兴趣的话题或者愿意做嘉宾,欢迎联系我们,:)

因为目前刚开始,我们希望能先多做几期,所以 iTunes 链接,网站都没有开始着手,会尽快跟上。另外,名字也在征集中,希望大家能多出主意!

......

Read more →