分类目录归档:思想

关于回收站的隐喻

huishouzhan

Windows 回收站清空后找不回来,微软为什么要这么设计?

现实世界的隐喻:

你有垃圾要扔,于是随手碰到了桌下的垃圾桶里。如果发现扔错了,就随手拿出来。 -> 回收站

垃圾桶满了,或者你刚好要出门,于是将垃圾桶里的垃圾提起来,扔到外面的垃圾箱。 -> 清空回收站

这时,如果你发现扔错东西了,仍然可以找回来,只是需要更大代价,去外面的垃圾箱翻,也有可能已经被清洁工收走了 -> 用软件恢复被清出回收站的文件,视情况而定,有一定成功和失败的几率。实际上,在文件系统中,这样的删除是做个标记,表明这部分空间可以开放使用了。如果刚好还没被使用,就能恢复。

垃圾被运到垃圾填埋场后,仍然有一定的几率被找回(如果真那么重要),当然你需要付出更多代价 -> 更强的恢复软件,甚至一般的格式化后仍有可能恢复文件。

如果想彻底把垃圾销毁怎么办?粉碎…烧掉 -> 用文件粉碎机之类的,不仅标明空间可用,还去覆盖数据以前占据的空间。

隐喻是设计中非常重要的方法。之前写过一篇详细的文章,也举了回收站的例子:http://blog.zuimeia.com/index.php/yin-yu/

如果引入云的概念,这个隐喻会不一样,可以以空间为代价,换取很多平行宇宙。

所以,别以为你删除了文件,就真的删除了~ 很多老师都吃过这亏…

开发在做什么?

开发者

之前经常有同事、朋友或者家人在问我一些类似的问题:

1、”你们在做些什么?”

2、“你们做的东西我们不懂”

对于外行人来说,不了解开发是完全正常的,毕竟开发是一个相对比较专业的职位。
对于互联网公司其它职位人员,例如产品、设计,不了解开发在做什么是不正常的。
尤其是对于创业公司,说明是流程上出了点什么问题。

  • 问题产生的原因

原因是双方面的,提问者与被问者都有问题。

提问者的问题:

1、不懂技术,这里指的技术不是指具体的系统架构或者编码执行工作,也不涉及到具体的语言或者工具细节。应该说是“技术常识”,比如说基本的技术可行性空间及产品开发流程。技术常识的获取其实是很容易的。多看看36氪之类的科技类博客,并且不绕过其中的技术概念;与技术人员的日常沟通;合理的利用搜索引擎。都会让你看起来更懂一点技术。

关于这一点有个笑话挺有意思的:在一个互联网公司里,产品、设计、运营人员认为工程师是无所不能的。在工程师中,女工程师认为男工程师是无所不能的。在男工程师中,普通工程师认为高级工程师是无所不能的。剩下那个高级工程师,每天在谷歌上绞尽脑汁地搜索各种问题。

有的时候别人懂得更多,就是更会用一点搜索引擎而已。

2、缺乏完整的项目经验。不懂技术是问题2产生的原因,而缺乏项目经验则是问题1产生的原因。在一个项目完成之后,有的人可以掌握整个项目流程,有的人还是局限于自己的那点点工作。这倒没有什么好坏之分,但是在创业公司,有一定的项目管理知识,能向自己的领域周围伸出一些触角,会大大提高项目流畅度与质量。

被问者的问题:

开发者应该更多地分享专业领域内的知识,毕竟这对于大部分人来说,是一个神秘的领域。这也是我写这篇文章的原因。“你都没说过,我怎么会懂呢?”。

那么,回到正题,开发者究竟在做什么,或者应该做些什么呢?

  • 从技术部职位划分上来看

通常在大公司技术职位有:前端工程师、iOS工程师、Android工程师、运维工程师、测试工程师、后台工程师。
运维这一块又可以划分为SCM(配置管理)、SQA(软件质量保证)、DBA(数据库管理)、服务器管理、安全管理。
后台工程师按语言划分:Java工程师、C/C++工程师、Python工程师、Ruby工程师等。
后台工程师按职能划分:程序员、架构师、项目经理、算法工程师。

当然,在大公司跟创业公司完全不一样,可以说是两个世界。大公司像是一台机器,每个人是一个零件,只需要专注于自己的那一小块领域。而创业公司要求每个人都是多面手,一个人可以解决所有问题。

但是这对开发人员只是在“写代码”这个言论有所澄清。

  • 从产品开发流程的演变来看

刚开始的时候,互联网产品开发并没有那么细致的分工,基本就是一个或者几个人凑在一起,大家既懂技术又懂产品,不懂的一起做做也都懂了。
也没有那么多换个壳到处都可以用的思想与方法论。大家一起研究用户需求,搭建产品概念,画UI,写代码。这是非常高效的一种工作方式。

后来逐渐划分为产品、开发这两个职位。一部分的产品开发人员脱离技术,去做一些产品需求相关的工作。

后来苹果强势崛起,产品开发流程中加入了“设计”这一环节,强调用户体验。

无论产品、设计、开发,都是产品整体开发流程中非常重要的环节。

这里我所疑惑的,是做这些事情的人而已。一些老的互联网从业人员,经历了这些流程变更,视角非常全面,能力也非常全面。
而现在新入行的年轻人,有的一出来就当产品经理,不懂技术也不懂设计。有的一出来就当工程师,只会写写代码。有的一出来就当设计师,只会在界面上思考问题。

流程上的细化让新入行的人视角变得狭窄,事实上的合作效率也变得更低。有的时候还会造成团队间的对立。

这时候正确的做事方式应该是:

1、明确自己所做事情的价值。
2、在产品开发流程中积极地与其它人沟通,获取一些沟通需要的知识。
3、对未知的事物保持敬畏,不要人云亦云,尊重与理解他人所做事情的价值。

在一次次的产品开发流程中,一个人应该变得视角更加全面,善于沟通,懂得从全局思考问题。

这里我所强调的是技术人员需要懂产品、懂用户体验。
产品最后从你手上诞生,如果你的所做仅限于实现,而不是思考如何将它变得更美好,那这必将是一件毫无灵气的作品。

  • 从开发者的日常工作来说

1、产品开发工作,这是最具体的一部分。包括技术可行性研究、技术方案研究、架构设计、编码开发、测试。
2、产品运维工作,包括产品上线发布、服务器搭建与维护、代码维护、数据库维护、查看log、查看用户反馈、Bug fix等。
3、技术积累,技术不是一朝一夕的事情。一个互联网公司要想基业长青,技术的积累是非常重要的,它让一家公司有足够的底蕴。这也是Google、Amazon这样的公司与其它IT公司的重要区别。
4、新产品、新技术的跟进与研究。这个应该是所有人都需要做的。对于一个开发来说,我相信大部分人不会满足于去实现一个功能或者产品。每一个开发首先是一个独立开发者,能够完成从用户研究、需求分析、产品设计、系统架构、编程开发、上线运营的整个流程。在其它环节有可以信任的人担任的条件下,可以专注于系统架构/编程开发环节,但是对产品本身的质量依然需要把控。
5、多接触生活,多体验世界的美,产品的美。也省的别人老说咱们是左脑思维者,不够文艺。举两个网站作为例子:
最美应用:http://brixd.com/nice
体验之美:http://blog.zuimeia.com

  • 为什么像淘宝这样的网站需要几千工程师开发与维护?

这也是很多人的疑惑,理论上只是做个网站,一个人就可以搞定了。
这里直接链接一个知乎的答案:http://www.zhihu.com/question/20303645

工程师的生活

今天和几个同事出去吃饭,席间大家各种开玩笑。
不知道谈到什么话题,一个同事说:但是你没我们那么阳光~
另一个同事紧接着说:所以你是程序员~~

这其实是一种正常的不能太正常的玩笑,但是却引起了我对一些社会环境的思考,我觉得有必要跟大家说明一些问题。
这些台词的潜台词,显然会让人联想起一种各种论坛描述的场景:程序员->加班->苦逼->生活灰暗->不阳光。

首先我先否认“程序员”这种职位提法。这种忽略思维过程,仅将最后执行的一部分工作作为职位描述的说法过于肤浅。
(抱歉,看完“黑客与画家”一书后,我的看法发生了改变,是我没有理解程序员所包含的意思,程序员这种说法一点问题也没有)。
所以,请不要用“写代码的”、“美工”这样的词汇,最起码应该用“工程师”、“设计师”,或者用一些抽象的提法“造梦师”、“寻梦师”也不错。

那么,话说回来,工程师的生活是否真如人们描述的那么灰暗无光呢?

首先,以我接触到的人来说,我工作4年,做过开发、项目管理、产品等职位(我承认做得都比较浅),接触到的大部分技术人员都有这些特征:幽默、乐观、具有产品大局观、注重细节。当然,有的时候难免入戏太深思维转不过弯。少部分人是技术的执着与狂热者,迈向技术专家的路子,成为互联网公司最为倚重的中坚力量。

其次,工程师的生活跟普通人也没什么差别。该吃饭时吃饭,该睡觉时睡觉,该加班时加班,该泡MM时就勇敢上。普通人可能以为工程师是绝对左脑思考者,注重逻辑,远离生活。实际上大部分工程师业余爱好一点儿不比普通人少,文艺范的工程师满大街跑。提到文艺范,这里顺便推荐个网站。
最美应用:http://brixd.com/nice

为什么接触到的跟社会舆论差距会这么大呢?我一直在思考这个问题。

原因一,我之前是在大公司,大公司比较强调技术积累,产品稳定的前提下对技术创新支持的倚重逐渐加大。而小公司或者一些创业公司,以实现目标为导向,考虑的并不长远。但这个应该算不上原因,因为实现目标为导向,是整个团队的事情,是创业初期的必然过程,跟工程师职位没什么关系。

原因二,工程师这个职位相对来说有点门槛,普通人难以理解其价值。毕竟不懂产品的人都可以说产品怎么怎么样、不懂设计的人可以说设计怎么怎么样、但是不懂技术的人却无法说架构或者代码怎么怎么样。由于技术脱离普通群众,加上工程师习惯的冷幽默。这个职位被一部分人妖魔化,再加上人云亦云的天性,这种现象其实是非常可悲的。

原因三、普通人应该没什么意愿去妖魔化这个职位,只是人云亦云而已。那么源头还应该是工程师本身。因为互联网行业的崛起,社会需求量太大,新入行的工程师难免做一些低级、重复的coding工作。由于视角低、也没有前进的意愿,自己对这个职位产生了排斥情绪,这种情况在中国也不是少数。很多初级程序员你能从骨子里看出他们的自卑。相反,在高级技术人员看到的是更广阔的视角,更深刻的认识,更骄傲的姿态。这种情况,想必日后在产品、设计这种相对较新的职位也会碰到。

在我看来,在一个创业团队中,做什么相对都没那么重要,重要的是你认可自己的价值、认可别人的价值。愿意主动地去沟通解决问题,而不是拘泥于自己的专业领域。如果你是工程师,你的优势在于先啃下了一块最硬的骨头,这会成为你以后做事的良好基础。

做什么都一样,如果你是朝专业化方向发展,那么你的成就取决于你钻的多深,你的优势在于会成为各个公司哄抢的宝贝,你可以坐地起价,并且清闲的生活。如果你是朝综合化方向发展,那么取决于你散发的光芒有多大,每个人都可以将自己的光环笼罩别人,无论是产品、设计、还是技术。

如果你知道在中国,李彦宏、马化腾、周鸿祎、雷军、丁磊、李开复、求伯君、史玉柱、张朝阳都是技术出身,也就是俗称的程序员,你还会觉得程序员的生活灰暗无光吗?还是你的视角太狭隘?