新人入职100天,聊聊自己的经验&教训

这篇文章讲了什么?

如题,本屌入职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开发新人入职100天,聊聊自己的经验&教训 个人对编程和开发的理解 技术发展路线的更多相关文章

  1. 新人入职100天,聊聊自己的经验&教训

    这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...

  2. (后端)Java新人入职——配置环境及安装开发工具(完全)

    转自csdn:执笔记忆的空白 很多新人对于进入新公司,相关工具的安装和环境变量的设定很苦恼.又苦于没有完整的配置开发环境的资料,我这里写一篇操作步骤的案例, 至少让你能把开发工具安装起来,并实用起来, ...

  3. java开发,入职半年。对未来迷茫,如何发展?

    蛮多人私密我一些问题,关于面试,关于技术的,我只能说有些路只能靠自己去走,没人可以帮到自己,哪怕偶尔帮一到两次,但是技术的路这么长,总归需要自己独自成长的.附一张自己藏书的照片,与各位共勉 工作三年多 ...

  4. java开发,入职半年。对未来迷茫,如何发展

    蛮多人私密我一些问题,关于面试,关于技术的,我只能说有些路只能靠自己去走,没人可以帮到自己,哪怕偶尔帮一到两次,但是技术的路这么长,总归需要自己独自成长的.附一张自己藏书的照片,与各位共勉 工作三年多 ...

  5. java开发,入职半年,对未来迷茫,如何发展?

    分享-更多精彩图片尽在大师助手 个人建议,在JAVA方面,先学好JAVA SE.不管如何,基础才是上层建筑的一切.推荐去看jdk源码,推荐1.6或者1.7版本.因为1.8版本的源码中会有很多lambd ...

  6. “入职一年,那个被高薪挖来的Android开发被劝退了。”

    其实,在很多小伙伴的想法中,是希望通过跳槽实现薪酬涨幅,可是跳槽不是冲动后决定,应该谨慎啊~ 01 我的学弟,最近向我吐槽,2020 年上半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满 ...

  7. 入职钉钉接近半年,谈谈自身的新人landing体会

    一.适应新环境 到了一个新环境里,身边的一切都比较陌生,与同事和领导都不太熟,一开始说话说不到一起都比较正常.在和同事吃饭的时候,多听多参与聊天,主动一些,逐渐熟悉起来就好了. 另外,我的工作台bas ...

  8. 入职两个月,WPF开发感想

    1 .新工作,新开始 2.WPF初次接触以及学习MVVM开发模式 3.后台数据操作,ORACLE 存储过程(边做边学) 4.总结 4.1工作开发中的小问题 ,遇到的坑:  4.2 解决的问题,学校到的 ...

  9. 低代码开发LCDP,Power Apps系列 - 搭建入职选购电脑设备案例

    低代码简介 上世纪八十年代,美国就有一些公司和实验室开始了可视化编程的研究,做出了4GL"第四代编程语言",到后来衍生成VPL"Visual Programming La ...

随机推荐

  1. 带监督的文本分类算法FastText

    该算法由facebook在2016年开源,典型应用场景是“带监督的文本分类问题”.   模型 模型的优化目标如下:   其中,$<x_n,y_n>$是一条训练样本,$y_n$是训练目标,$ ...

  2. Web项目MySQL配置文件运维

    root@mysqltest:/etc/mysql/mysql.conf.d# cat mysqld.cnf # # The MySQL database server configuration f ...

  3. Linux解决安装包无法找到问题Unable to locate package rar

    1:问题 在默认安装的Linux中有时候会找不到需要安装的软件包,那就需要更新了 例如在执行apt-get install xx的时候就报错了 E: Unable to locate package ...

  4. Redis内存淘汰机制

    转自:https://my.oschina.net/andylucc/blog/741965 摘要 Redis是一款优秀的.开源的内存数据库,我在阅读Redis源码实现的过程中,时时刻刻能感受到Red ...

  5. linux 查找文件或者服务

    [root@localhost ~]# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/m ...

  6. guava 学习笔记 瓜娃(guava)的API快速熟悉使用

    1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API C ...

  7. Android蓝牙BLE低功耗相关简单总结

    在看Android4.42的源代码时看到有加入对BLE设备的处理.看的一头雾水,多方百度,最终有种柳暗花明的感觉. 本文总结来源于百度多篇文章,欢迎转载.分享交流 BLE蓝牙概念 BLE:Blueto ...

  8. Word批量调整插入图片大小

    做标书,word中需要插入大量图片,实为一些证书.文件的扫描文件.但插入后,大小不是想要的,太小了,打印出来看不清.需要调整,需要批量调整. 这是一个不错的方法: 选中第一张图片,按页面调整大小到适合 ...

  9. Excel常用快捷键大全

    一.关于处理工作表的快捷键总结 1.插入新工作表 Shift+F11或Alt+Shift+F1 2.移动到工作簿中的下一张工作表 Ctrl+PageDown 3.移动到工作簿中的上一张工作表 Ctrl ...

  10. JAVA设计模式——第 8 章 适配器模式【Adapter Pattern】(转)

    好,请安静,后排聊天的同学别吵醒前排睡觉的同学了,大家要相互理解嘛.今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电 ...