最可怕的产品经理

IMG_3642

很久以前,PM 两个字母的缩写代表了 Project Manager(项目经理),那是一个软件工程横扫世界的年代,人们为了精准的完成一个软件项目,设计出了各种开发规范和工程过程,项目经理可以制定出细致到每个月每个周和每天的工作计划,最后,项目延期了……

时至今日,PM 早已改弦更张,成为产品经理的代名词,在这样一个以用户和产品为中心、设计和用户体验改变世界的时代里,产品经理被赋予了太多的职责和意义,他们主宰着产品的特征、设计、实现和用户心理,如果负责了公司的核心产品,他们甚至决定了公司生死存亡的命脉,他们画原型如拾草芥,做交互如履薄冰,产品特性增一个就多了,减一个就少了,他们始终念念不忘的是:设计上的完美并不是没有东西可加,而是没东西可减。

不一定有回响……

产品经理常常处于各种纠结之中,他们想尽可能让产品表现的聪明而有原创性,又担心自我的迷失,因为人们在登山的时候总是会忽略那些能够直达目标的小径,我们被蓝色湖泊上飘荡着雾气吸引,在高山上怒放的美丽花朵之间徜徉,而忘记了真正的目标。然后,很多产品就这样死掉了……在这样一个创业者遍地开花的年代,大部分的产品不仅会老去,而且会消失,这是它们的宿命,也是产品经理的宿命。

不过产品经理们是不会屈服的,因为有两个神一样的产品经理永远伫立他们的前方,对于他们来说,乔布斯和张小龙是偶像,也是永远无法跨越的鸿沟,神的每个举手投足都能吸引亿万人的目光,让人仰望,让人忧伤,就像盖茨和林纳斯之于程序员。

有灯塔就有远方,就有希望!

Continue reading

Linux 开发模式带给创业者的启示

8346252906_98579b9d09_o

十五年前,我第一次在工作中使用 Linux 的时候,并不知道这个操作系统会对我的生活和职业产生多么大的影响。十五年后,我在「Linus,一生只为寻找欢笑」一文中写到:

当大家使用 Google 搜索时,使用 Kindle 阅读时,使用淘宝购物时,使用 QQ 聊天时,很多人并不知道,支撑这些软件和服务的,是后台成千上万台 Linux 服务器,它们时时刻刻都在进行着忙碌的运算和数据处理,确保数据信息在人、软件和硬件之间安全的流淌。

Linux 不仅仅从技术层面影响人们的生活,其本身就产生了很多有意思的话题和文化,我读了不少 Unix/Linux 相关的书籍,很多技术内容已经忘得一干二尽,但那些话题、模式和文化,却像醇香的好酒、美丽的传说,历久弥新,不断的为我带来思考和启发……

1、最初的想法,并不是决定性的

Linux 并不是凭空创造出来的,当年林纳斯(Linus)只是觉得迷你版 Unix 操作系统 Minix 的终端太难用了,既不能登录学校里的 Unix Server,也没法上网。这种功能缺陷对林纳斯这样的极客来说是无法接受的,于是他决定从硬件层面开始,重新为 Minix 设计一个终端仿真器。

当时是三月,也可能是四月,就算彼得盖坦街上的白雪已经化成了雪泥我也不知道,当然我也并不关心。大部分时间我都穿着睡衣趴在相貌平平的计算机前面噼噼啪啪的敲打键盘,窗户上的窗帘遮得严严实实,把阳光和外部世界与我隔离开来。 经过不眠不休的编程之后,终端仿真器做出来了,但那个时候林纳斯已经意识到自己的雄心壮志远不止于此,神山上的另一座圣杯「操作系统」已经向他发出了召唤,于是始有 Linux。

另一个伟大的操作系统 Macintosh,同样起步于一个微小的项目,期间历经换帅、更名、争吵、妥协,最终与 NextStep 经过长达四年的整合才形成现代的经典操作系统 OS X(参见《MacTalk·人生元编程》)。

几乎所有成功的产品都是边走边看做出来的。伟大的梦想,常常始于微不足道。

所以,很多人问我如何找到一份长期稳定的工作时,如何开启一个能够带来巨大成功的项目时,我只能说,最初的想法,并不是一切,开始去做就好了。

Continue reading

Docker 传奇之 dotCloud

2010年,几个大胡子年轻人在旧金山成立了一家做 PaaS 平台的公司,起名为「dotCloud」,这个名字让我想起了微软的「DotNet」。

dotCloud 主要是基于 PaaS 平台为开发者或开发商提供技术服务。什么是 PaaS 呢?PaaS 的全称是 Platform as a Service,也就是平台即服务,这个概念在2010年热的一塌糊涂,直到现在也没凉下来。举个例子来说,传统的软件产品开发一般是这样的:

1、确定产品定位和需求,确定首次迭代的范围。
2、制作界面原型。
3、技术选型,然后根据技术选型为每个开发者搭建开发环境和技术栈,例如 Java 环境、Python 环境、Ruby 环境、数据库、中间件等等。
4、构建基础技术框架和服务,包括日志、存储、消息、缓存、搜索、数据源、集群扩展等等。
5、模拟用户容量,构建测试环境。
6、开始编写真正的业务代码,实现产品功能。
7、迭代开发/测试,生生不息,周而复始,直到头发掉光为止……

如果采用完善的 PaaS 平台,可以直接忽略3、4、5三个步骤。无论你选择哪个技术栈,PaaS 都会为你提供相关的配套设置,包括语言环境、运行环境、存储和各种基础服务。dotCloud 不仅支持诸如 PHP、MySql 等传统技术框架,还包括 Node.js、MongoDB 等新兴技术。基于 dotCloud 提供的开发工具和技术框架,你可以直接使用 dotCloud 的 SDK 编写代码和构建业务服务,并在联网的时候把这些代码推送到云端,实现自动部署和测试。

dotCloud 把需要花费大量时间的手工工作和重复劳动抽象成组件和服务,并放到了云端,另外,它还提供了各种监控、告警和控制功能,方便开发者管理和监控自己的产品。dotCloud 最初运行在 Amazon 的 EC2 上,不过由于 dotClout 高度的抽象层次,理论上 dotCloud 可以运行在各种各样的云服务上面(我猜这就是 Docker 的功劳)。

Continue reading

程序员如何选择技术方向

最近写了「当程序员老去」「程序员真正的价值」两篇文章,传播甚广,今天是第三篇:「程序员如何选择技术方向」,史称「程序员三部曲」。 那之前写的几篇程序员文章算什么呢?算前传吧。以后再写程序员文章算什么呢?算后记吧。

2008年秋天的一个午后,温暖的阳光透过落地窗落在我面前这个长长的写字桌上,桌子对面坐的是一个瘦小的程序员,他的名字叫小明,小明有些茫然,他看着我,不知道该说些什么。

程序员都是很严谨的,我不得不首先发出一个 System Call:

你在客户现场这半年做什么工作? 写单元测试。 还有呢? 没了,就一直写 JUnit。 别人也写单元测试么? 没人愿意写单元测试,只有我写。

……

你为什么想来研究院呢? 我想写一些真正的程序。 什么是真正的程序? 比如 Java,比如面向对象编程,你总要写一些类和各种各样的方法,而不是一直写 Test Case。 好的,沿着这个楼梯上三楼,那里有一群和你一样的程序员,他们不仅写 Java,还写 JavaEE 相关的各种程序,你会找到自己需要的东西。 真的么? 真的

那时候我风华正茂,没有现在这么老成持重,阳光照在我的翘着二郎腿的脚面上,一切都显得十分虚幻,在小明的眼里,那时的我估计很像「黑客帝国」里的墨菲斯,但是他不能确定自己是不是「The One」。小明疑惑的看了我一会,最终还是上楼了。至此,他完成了第一次技术方向的选择。在三楼,他碰到了一群同样严谨的程序员,他不仅学会了写真正的 Java 程序,而且掌握了部分 Web 编程和服务器端编程,包括 JavaScript、JQuery、Spring、Hibernate、JMX、Web Service 等等。小明变得快乐起来,渐渐摆脱了注定孤独一生的阴影。

过了一段时间以后,小明已经不满足只写 Java 相关的程序了。有一天他看到我手里的 iPhone 和 Mac,仿佛见到了初恋的情人,眼中重新燃起了绿油油的光芒,他知道了 iOS 开发者这回事。很快,他花掉了所有的银子购买了 Mac 和 iPhone,开始日夜兼程,学习 iOS 开发。他在写 Java 的间隙编写 Objective-C 代码,在编译 Web App 的同时构建 IPA,在清晨的微光中调试程序,在每个夜晚与模拟器窃窃私语……他完成了第二个阶段的技术方向选择。

Continue reading

程序员真正的价值

value

问:池老师,我是个不爱互动的人,但是您所有的文章我都看了,非常感谢您的引导,我入手了人生第一台 MBP。现在问题来了,但是找不到更合适的人解答,只能求助于您了,如果您有时间的话。问题是这样的:我有个32bit unix file(开启一个服务进程),在 Mac 上执行时错误提示是:exec format error,但是在 Linux 服务器却可以执行,为何?Mac 上有可以运行的方案吗?期待您的回复,不胜感激。

答:Linux 和 OS X 是不同的操作系统,可以尝试在 OS X 里重新编译这个文件。

问:非常感谢!如果没有文件源码是不是就只能认命了?

答:可以在 Mac 上装 Docker,然后对服务进行端口映射就可以了。

答:茅塞顿开。谢池老师。

以上是我和一位读者的对话,这位小伙子在拿到答案之后像一缕烟尘一样消失无踪,之后再也没有出现过。

在微信上加了很多 MacTalk 的读者之后,经常会收到一些奇奇怪怪的问题,关于职场、关于选择、关于朋友、关于 Mac、关于技术等等,不一而足。但是我能回答的却很少。问题不好没法回答,问题太复杂没法回答,问题领域超出我的认知也没法回答,耗时太长的问题我也没时间回答,实在是惭愧的紧。好在偶尔也能够帮助一些小伙伴解决一些实际问题,心理上略感安慰,比如上面这个问题。

把这段程序员之间的对话翻译一下,大致是这么个故事:

Continue reading

当程序员老去

oldcoder

程序员将代码注入生命去打造互联网的浪潮之巅,当有一天他们老了,会走向那里,会做些什么?


很多年以后,在我60岁的那天早晨,天刚蒙蒙亮我就起床了,先去公园晨练,然后回来做早餐(50岁的时候我学会了做饭),送完外孙上学,刚好8点。由于北京从2020年开始单双月限行了,这个月是单月,所以只能挤地铁。人一如既往的多,一小伙子要给我让座,看了看他的小身板,我说不用,你也是干 IT 的吧,今天咱们都是程序员。

来到公司,墙上那条新贴上去的刺眼规定总是让我很不舒服:所有的服务器端语言必须使用 Come,移动端语言使用 Swallow,还在使用 Java、C、Go 和 Swift 语言写程序的,罚款500元。我不知道自己还能学会几门新语言,工作了四十年,我已经用过一百多种编程语言了……

上午十点,00后 Team Leader 跑过来告诉我,池大大,新上线的智能手表操控 UI 是您老做的吗?好像出了点问题。我说是老王上周做的,他老花眼早就不该做 UI 了,这周没来,据说动脉硬化了。唔,那您帮他改改得了……

这个上午,老板又收到了两份在家办公申请,其中包括老冯的,申请理由是:腰不好。坐着站着都不能解决问题了,只能把屏幕安装在天花板上,躺着编程。我还行,一直打羽毛球,腰好,身体就好,吃嘛嘛香。不过今天中午却没什么食欲,因为牙疼,各种牙都开始松动了,只好在食堂里挑了点软乎的饭菜吃了。

下午部门开会。我发现唯一的70后主程(主力程序员)记忆力减退了许多。说完第8个功能点的实现后,丫突然来了一句:好,以上是第1点,现在来说第2点。直到下班,我们一直都在说第2点。会后主程怪我为什么没有提醒他,其实我一共提醒了他13次。不跟他计较,明年他65岁,就要退休了。

分配到需求之后,下午的工作就是画界面做表单填程序,这个工作我做了几十年,已经非常熟练了,编码的时间总是最快乐的,不知不觉就晚上10点了。回家吧,过了9点就可以打车了。

夜晚11点回到家,菜凉了,孩子们都睡着了。我躺在冰凉的床上,打开一本《Come 语言编程实战》开始读。程序员,是一个终身学习的行业……

Continue reading