硬件环境:

  • 开发工程师:Retina MBP 13 寸(8 GB 内存 + 2.6 ~ 2.8 GHz i5 CPU + 256 ~ 512 GB SSD) + Dell U2312 HM (23 寸,1920 x 1080 分辨率)。
    我当初入职时是 MBP 13 寸(8 GB 内存 + 2.9 GHz i7 CPU + 512 GB 机械硬盘),现在入职都变成 Retina 屏了,电脑坏了或淘汰了都可以换新的 rMBP。
    我平时主要盯着 Dell 显示器,MBP 的屏幕一般是放聊天窗口和邮件等,也就没在意了。
    性能上的不足之处是没有 SSD,除了开机慢倒也没啥,反正我几个月才关机一次(为了更新系统)。
  • 测试工程师:Retina MBP 13 寸 + Dell U2312 HM。
    福利是有几十台测试机,包括各种 iPhone、iPad、iPod、Android 机型,可以自己用。
    还有一些 Mac Mini 用来做测试和构建。
  • 产品设计师:iMac / Retina MBP 15 寸 + Dell U2312 HM。
    两者二选一。之前是都配 iMac,直到有的人需要移动性,就换 MBP 了。

大部分开发工程师不用鼠标,一部分会自带机械键盘。
笔记本电脑可带回家办公,也可使用自己的电脑。
如果觉得配置不够,还能加钱升级配置。离职时按 3 ~ 4 年(忘记具体年限了)折旧返还剩余金额。如果使用满 3、4 年,可以当成个人财产带走。

软件环境:

对测试和产品设计不了解,就只说开发了。

  • 操作系统:OS X。
    此外还有
    @高昌健 提到的 Zhihu Boxen,用来提供开发环境的虚拟机,避免因 OS X 与 Debian 的不同,而导致上线时遇到兼容性 bug。
    不过知乎日报并没有使用该工具,因为使用的库兼容性比较好,也不需要那些附加的功能。另一个原因是我不喜欢用虚拟机。
  • 编辑器 / IDE:
    后端:大部分用 VIM,少数用 PyCharm,还有一小撮用 Emacs。
    前端:Sublime Text、TextMate、Atom、VIM、PyCharm。
    iOS:XCode、AppCode。
    Android:Android Studio。
    基础架构:VIM、Emacs。
  • 版本控制:Git。
    入职当天就能访问知乎主站的代码了,没有什么需要对自己的员工保密的代码。
  • 通讯:Slack、Google Talk、Email、电话。
    很多内部服务会和它们集成。
  • 任务管理:Phabricator。
    Web 开发流程大致是在 Phabricator 上建立 task -> 提交 diff 并关联 task -> 单元测试 -> reviewer 审查代码 -> 合并 diff -> 上线测试 -> 关闭 task。
    某些项目、服务因为人手不足,只有一个开发者,连 reviewer 都没有,所以不一定会用这么复杂的流程。
    至于移动开发和基础架构的开发,我就不甚清楚了。
  • 部署:
    Web 后端:
    本地部署就不提了,提交 diff 等待 review 时会触发事件,CI 可根据配置自动构建代码并测试。
    主站需要上线时,使用内部开发的 Heroin 系统选择上线到测试环境或生产环境。随后,Heroin 的 bot 会在 Slack 里通知上线的情况。

    其他项目和服务暂时没那么好的待遇,需要手动去上线(其实也就一行命令),用到的工具大致是 Fabric + Buildout + Supervisor + Gunicorn + Tornado。
    Fabric 用来执行远程命令,根据事先写好的脚本,执行更新代码、构建、关联配置、重启应用等事项。
    Buildout 用来安装 Python 的第三方库。搭建了私有的 PyPI 源,用来加快下载代码的速度,以及发布私有的库。
    Supervisor 用来管理应用的进程。
    Gunicorn 主要是用来在服务器内做负载均衡的,比直接挂 nginx 的效果好。
    Tornado 用于运行 Web 服务。

    移动客户端:
    不是很熟悉,只能介绍一些我看到的。
    需要构建 iOS 客户端的测试版时,会往一台 Mac Mini 上发起命令,然后自动开始构建。构建完成时,会语音播报更新内容,提醒大家更新;并且邮件发送更新通知,可以用 TestFlight 更新。
    不过 TestFlight 被 Apple 收购后变得不好用了,于是改成在 CI 上发布测试版了,可在网页上直接安装。
  • 辅助工具:
    日志:使用内部的 Kids 服务,将 logging 收集到日志服务器。可在 Web 页面实时监控已订阅的日志,或者搜索所有的错误日志。
    性能监控:使用 Graphite 和 descartes 展示 statsd 发送的记录。
    警报:通过短信、邮件、Google Talk、Slack 等各种方式通知相关的负责人,内容有可用内存不足、硬盘剩余空间不足、load 过高、任务队列过长等。
    日报:通过邮件发送一些技术指标。
    还有一些工具看上去配置好复杂,不会用=。=


网络环境:

  • 能正常访问 Google、Twitter、Youtube……
  • 平时网速还好,遇到萌妹入职导致一堆人转发带照片的邮件,或者 OS X / iOS 发布新版本,就很蛋疼了。
  • 有专职网管负责解决各种疑难杂症。