此处重点,本文章来自转载:Apocalypsa

这篇文章讲了什么?

如题,本屌入职100天之后的经验和教训,具体包含:

  • 对开发的一点感悟。

  • 对如何提问的一点见解。

  • 对Google开发流程的吐槽。

如果你

  • 打算去国外工作。

  • 对Google的开发流程感兴趣。

  • 想成为一个不错的开发者。

那么请继续阅读。

如果你

  • 觉得使用英文单词和缩略语就是装逼(例如此人LRui@和其代表作)。

  • 无法忍受一个来自新人的言论。

那么请点击页面左上角或右上角的关闭,谢谢。

正文

区别

不同于一般公司,Google所使用的技术绝大多数是自己的技术,基础类库、文件IO、网络通信,什么都是自己的。尽管开源了不少,但更多的东西是不对外开放,这样就带来两个问题:

  1. 缺乏学习资源(由于Google技术大多不对外开放,所以是没有书籍可供参考,只能通过内部教程和文档再加上项目代码,自己去一点点摸索)。

  2. 出了问题没法Google(废话,Google会把自己的内部技术放到Google Search上么),也没法Stackoverflow(同前)。

以上两点对于本屌这个曾经的微软系程序员打击极大——至少本屌从来没有在没有书看且没法Google的环境下写代码做项目。

经验&教训

  • 使用邮件列表(Mail list),讨论组(Discussion group)。

  • 学会如何使用Email提问。

  • 如果必要,联系代码原作者。

文档vs代码

Google的文档是非常出色的——无论是设计文档还是API文档都很专业,但前提是你的项目有文档。

比如本屌做第一个项目时,打开项目文档时看到的是这货:

然后问mentor要文档时mentor的表情:

另外的一个问题是同步,你看到的文档很有可能不是最新的:

所以即便按照文档编写代码,也会有一定的几率出错:

  1. 没有依照文档,代码有问题。

  2. 依照文档,但文档有问题。

  3. 文档和代码都有问题。-_-

在被以上可能性痛虐三周之后,本屌终于领悟到凡事都要靠代码这个硬道理,走上了写什么之前都要看三遍代码(文档代码,项目实现代码,项目引用代码)的康庄大道。

经验&教训

  • 代码即是文档,引用即是示例代码。

  • 文档只是辅助。

提问

看文档读代码并不能解决所有的问题,如果一个任务纠结了15分钟还没有头绪,准备提问吧。

找准提问对象

每个人都有自己擅长的领域,问正确的人正确的问题会极大提高工作效率,反之亦然。

这就要求对身边的同事有一个了解——知道对方擅长什么,不擅长什么。刚刚入职时本屌有一个毛病,就是把所有的问题都倾泻在mentor一人身上——一开始mentor会耐心的解答,但是时间长了就发现他的反应变的越来越慢,后来经Manager提醒才恍然大悟,开始和每个同事交流,并阅读他们的CV以了解他们的经历,提问问题的效率大大增加。

清晰描述上下文和目标,而非实现

提问的首要因素是描述你想做什么(What you want),而不是描述你做了什么(What you've done)——xxx对这个话题有精彩的描述。

比如说在GuiceBerry里如何使用GuiceBerryRule引用Guice注入的对象是一个很蠢的问题,因为:

  1. 涉及到了实现。

  2. 问题本身就是错误的。

而如何在JUnit下实现一个全局的Pre/Post Method而不使用继承,就是一个不错的问题:

  1. 明确的上下文和目标。

  2. 逻辑合理,且不涉及任何实现(Implementation)。

寻找Pointer,而非Value

多数情况下解决问题需要的只是一个链接(Pointer),而并不需要整个方案(Value),好比C语言为了提高效率传递Pointer而非Value,Caller给你一个Pointer,Dereference的任务交给Callee即可。

另一个比方是问路,一个正常的问路人绝壁不会要求指路人把他带到目的地去——一条正确的路线或一份清晰的地图就足够。

经验&教训

  • 问正确的人正确的问题。

  • 寻求Pointer,而非Value。

交流

话题

尽管UK充斥着中国制造,但中国对于他们来说仍然是一个神秘的国度,所以初次和外国人聊天聊China是个不错的话题,Food、Kungfu和Weather都是不错的选择。

然而不能总聊China——不停地说自己的国家谁都会烦,这时就需要去了解他们的文化,除了技术以外,本屌比较喜欢聊新闻、电影和电视剧。

活动

融入国外生活的另一个方式是参加他们的活动——每次室内攀岩、桌球或是乒乓本屌都不会落下,算是乒乓外交吧。

比较有趣的是他们都认为中国人个个都是乒乓高手,尽管本屌的水平并不怎么样。

此外在国外Pub和Party也是重要的社交场合,不过电影里看到的不太一样。前者是几个人边喝酒边扯淡,后者是一堆人边喝酒边扯淡,由于本屌的英语水平实在拙计,所以这种场合一般只有练听力的份 -_-

经验&教训

  • 对于天性闷骚的天朝IT屌而言,运动是一项很好的融于外国人圈子的方式。

  • 和外国人交流的难点在不在于1v1私聊,而在于1vN群聊,文化背景的缺失加上不同的口音使得交流难上加难。

  • 用Blog练习Formal writting,用Reddit上练习Informal speaking。

开发

编程 V.S. 开发

首先说说本屌对编程和开发的理解。

  • 编程(Programming)偏向于计算机科学(Computer Science)这一端,涉及到离散数学,数据结构,算法设计,人工智能等等,侧重于计算机,目标在于让计算机完成一个指定的任务。

  • 开发(Development)偏向于软件工程(Software Engineering)这一端,涉及到进度管理,软件架构,交互设计等等,侧重于团队,目标在于让团队按时交付可用的软件。

  • 学校里侧重编程,公司里侧重开发。

  • 编程为开发提供理论基础,开发把编程转化为商业价值。

应届IT屌从学校到公司的最大的转变就是从编程到开发的转变:

  1. 一部分人接受转变,从各种项目经验中吸收教训,成为卓越的开发者(Developer,比如DHH)

  2. 一部分人拒绝转变,钻研基础理论,成为卓越的研究者(Researcher,比如Wangyin)

  3. 至于剩下的——就是真正意义的码农(Code monkey,恕不举例)。

经验&教训

  • 本屌的理论基础薄弱+天赋一般,编程这条线路走不通,所以成为一个专业开发者是本屌的目标,也是接下来几年的努力方向。

  • 准备这个书单做起。

代码评审

Google对代码质量要求很高,任何提交的代码都需要自备测试,且需要得得到具有代码审查资格的专家开发者的认可,即LGTM(Looks Good To Me)。所以Google写代码大概是这样的:

最惨的当属第一次代码评审

至于本屌的第一次代码评审

不到200行程序,大改四次,小改155处,耗时三周。

搞的本屌感觉此生都不会再爱了 -_-

但代码审查仍然是必须的:

经验&教训

  • 团队中编写代码不同于个人程序,需要遵守很多规则和潜规则:大到基本的Coding Style Guideline,小到Project-specific Convention。

  • 英语词汇量很重要,不同的词汇会带给代码不同的含义,例如build,create,establish,calculate和compute都表示构建一个对象,但它们的引申义就很不一样。

熟悉关键技术

关键技术,就是自己日常工作所依赖的技术以及工具。使用频率越高,越需要熟练。

本屌在入职头两个月就犯了老毛病——啥都想学,啥都想碰,看这个人说Parserc就去搞,看那个人说Haskell炫就去做,结果连个屁都没搞出来,效率还一落千丈。

直到春节请了两周假自省了下,才发现问题所在:自己仍然在用学校时的方式在公司工作——什么都好奇,什么都想学一把。

但问题在于现在是在工作,有明确的任务和时间点,而且本屌远远做不到游刃有余,这会玩个人拓展不是找事么。

于是春节回去后重新制定了学习目标:

  1. 熟练Google的内部工具链,通读这些工具的设计文档,架构文档和使用手册。

  2. 熟悉Google的基础类库,阅读文档,做练习,并阅读其实现

  3. 熟悉自己项目架构和关键代码。

然后每周除了周六都在折腾上面的一坨。效果很显著——开发效率比之前高了至少一倍,不少问题变的可以独立解决。

经验&教训

  • 人的精力是有限的,尤其是工作之后。

  • 工作的主线任务是高效完成工作,拓展能力等支线任务等主线任务搞妥了再搞也不迟。

  • 学习很重要,但要计算机会成本——不是所有的学习都能带来足够的回报。

  • 80/20分配,8成时间学习工作相关内容(这里指直接相关),2成时间学习工作无关内容。

总结

  1. 学会用各种方式问正确的人正确的问题。

  2. 80%时间熟练工作技术,20%时间个人拓展。

  3. 理论+实践,不断迭代,学习如何成为一个卓越的开发者。

此外如果觉得自己水平不错,欢迎站内信我进行内部推荐。

以上。

Google新人的成长思考相关推荐

  1. 6000字讲透!特适合产品新人的成长指南(附成长路径图)

    我们曾经都是个新人,都有被别人叫菜鸟的时候.多年以后,有的人从菜鸟变高手,有的人却从入门到放弃,一直菜到世界尽头. 可见,成长路上并非坦途,没有得到恰当的指引和合适的土壤,结果必定是天差地别. 笔者工 ...

  2. 有哪些IT初学者(新人)成长为技术大牛的真实经历?

    这里是修真院前端小课堂,本篇分析的主题是 [有哪些IT初学者(新人)成长为技术大牛的真实经历?] 第一章 定调 IT技术是以年来计算的,为什么会是以年来计算,等你们看完就会明白一点点. 做技术的,会就 ...

  3. 聊点实在的,一线技术人的成长思考总结

    作为长期奋战在一线的技术人,我深刻体会到如下几个思维能力对技术人成长的重要性,熟练运用这几种思维可以帮助我们快速地进入到新的领域,在分析.定位和解决问题上有很大帮助. 抽象思维:帮助我们快速抽取面对问 ...

  4. IT人才招聘一位资深HR前辈写给新人的成长启示录

    一位资深HR前辈写给还在路上的HR的<HR成长启示录> "人生的路很长,但关键的只有几步."即便是熟知职业生涯规划的HR,当你走上职场发展之路时,依然会遇到各种困境,往 ...

  5. 一线技术人的成长思考总结

    简介: 作为长期奋战在一线的技术人,我深刻体会到几个思维能力对技术人成长的重要性,熟练运用这几种思维可以帮助我们快速的进入到新的领域,在分析.定位和解决问题上有很大帮助.作为长期奋战在一线的技术人,我 ...

  6. 我与谷歌共成长--谷歌常用的技巧#我和 Google 谷歌共成长

    1.转换时区.货币和单位 搜索"convert 1 USD to 1 INR"类似的字词就可以将谷歌作为简单转换的首选工具. 2.获得股票走势表 可以直接在搜索框中输入它,就能直接 ...

  7. 资料下载:敏捷个人的成长思考.pptx(第1次线下活动2011.04)

    本文挪至 http://www.zhoujingen.cn/blog/629.html PDF下载地址:http://down.51cto.com/data/207112 推荐:你可能需要的在线电子书 ...

  8. IT新人如何快速成长

    毕业3年,换过一次工作,如果加上内部换岗的话,我也当过三次新员工了.我自己当新员工的时候做的不是很好,当时自己也说不清为什么.今年身边来了很多新同事,我也带了三个徒弟,换个角度再来看新人的成长,我也发 ...

  9. 职场新人如何快速成长

    工作中,我们经常会听到这样的声音,"谁谁谁各方面都不如我,领导却很重视他,给他涨了工资,不给我涨......".诸如这类的抱怨,在每个公司都是常见的.那么,为什么同一时间进入一个新 ...

  10. 熊写代码这三年:阅读写作与技术成长

    本文是非技术向的随笔,慎点! 熊写代码这三年:阅读写作与技术成长 从属于 程序熊的自我修养系列.临近毕业,随手写了篇随笔,聊以纪念我过去研究生三年间的技术之路,感谢陪伴我这三年的家人,感谢所有陪我一起 ...

最新文章

  1. VRRP在企业网中的应用(H3C设备)
  2. AOP、注解实现日志收集
  3. hdu5643 King's Game(约瑟夫环+线段树)
  4. 多视图关联选择的例子
  5. 此安装程序必须使用 java 开发工具包 (jdk) 执行_彻底搞懂Java开发工具包(JDK)安装及环境变量配置...
  6. C/Cpp / static 关键字
  7. 探索性数据分析(EDA)-不要问如何,不要问什么
  8. SOA架构设计和相关案例分析
  9. Playing with OS(操作系统)
  10. Android中Service的一个Demo例子
  11. 手把手教你在Windows下搭建React Native Android开发环境
  12. 【Mybatis】TKMybatis 介绍和使用
  13. 【thinkphp 基础 3】配合phpstudy进行验证码拓展安装
  14. angular 访问图片路径错误
  15. AppCompatActivity设置透明背景
  16. A19T三极管,A19T的规格书
  17. luogu1042 乒乓球(NOIP2003普及组第1题)
  18. 简易词典Android界面代码,Android 有道词典的简单实现方法介绍
  19. Unity中Scale详解
  20. Java IO流之规律总结

热门文章

  1. 服务器无线通信方案,无线数据传输模块组网及功能
  2. 智能人物画像综合分析系统——Day16
  3. CH341应用升级为CH347软硬件注意事项
  4. Ubuntu系统搜狗拼音无法输出
  5. 心理账户--《别做正常的傻瓜》摘记1
  6. 快学数据挖掘—数据探索—贡献度分析
  7. Excel 2010 SQL应用048 比较两列数据是否相同
  8. 产品经理知识体系——职责
  9. lilo.conf - lilo 配置文件
  10. html5图片做成简单拼图,html5版canvas自由拼图实例_html5教程技巧