Android开发12年高级工程师:作为 IT 行业的过来人,我想对你们说~

作者:Charles Stone

链接:https://www.zhihu.com/question/31507922/answer/53881101

前言

曾在大公司写了好些年程序,不过下面这些经验跟写程序可能没啥关系。新人最需要快速掌握的,是职场规则。

流量预警:本文长度超过长,但是实用希望你们能坚持看完,新手9大技能树天梯系统,无图。开卷有益,欢迎各位老同学来看。

  • 永远先想清楚,再去动手。>>(我是不会说自己每周只敲一天代码的)
  • 不懂要问!问之前先尽可能去查!>>(萌萌地跑来问我的下属,是把我当作GOOGLE机器人助手还是书橱?)
  • 求助之前要先自己尽力去解决,搞不定及时求助!>>(上司和同事不是给你打杂的;事情搞砸了再求助毫无意义)
  • 你脑子的想法,不通过口头特别是文档表达出来,它事实上不存在。>>(写文档,写注释,写日程表,写计划表,写会议纪要……不说了)
  • 公司的各种设计指南、编程规范、XXX规范要仔细学习>>(否则去参加外面的培训公司接受培训需要花钱还不靠谱)
  • 新技术是好东西,但自作主张用了,多半是作死,特别是自作主张用开源软件的家伙>>(我手下要是自作主张用开源软件,最起码一个大过处分,不预警,直接通报)
  • 各种接口不要随便乱改;花半天先把接口吵清楚再动手,有益无害。>>(当年专职负责吵接口吵了大半年呢,每个人都眼巴巴看着你的感觉好奇妙)
  • 公共配置项不要乱动,特别是配置库和编译器的>>(出问题了找BUG找死人啊)
  • 我这条路走了10多年了在这里我也是整理了一份Android高级工程师进阶必备系统学习资料,需要的可以点击【学习就能领取了!有想学习,提升自己的点进去看看 有惊喜哦!一定不会让你失望的。

下面是9大技能树:如何XXX系列

★★★如何对待上司★★★

  • 上面吩咐了做啥事,脑子好就记住,脑子不好就拿本子写下来,然后去做。>>(反正最多说三遍,再不好好学习就打入冷宫)
  • 安排的工作一般都要接;接不了的要清楚说明客观原因,而且要客气。不要在其他人面前拒绝。>>(随便拒绝工作安排,基本都是作死;当着外人不给上司面子,这不是作死而是作大死)
  • 如果工作安排不清晰,请主动与上司沟通,明确关键的时间点和交付物。沟通前自己要有预案。>>(没有上司喜欢不带着脑子跑来问问问的下属的)
  • 如果完成工作需要其他资源,先尽力协调,再向上司求助,并明确说明理由和已协调结果。>>(他出面跟人撕逼需要子弹,不要让他自己到处找子弹)
  • 上司的技能树和技能点分布,可能跟你完全不同>>(自己那坨技能点不全是金子,别人的技能也不全是屎,世界主体仍是分工合作)
  • 自己的工作可以求助,但工作主体仍然是你;每次求助都是偷师的机会。>>(谁给谁打工?这很重要)
  • 遇到例外情况,及时反馈给上司;确信自己有能力且得到授权的,可以同步开始解决,否则等指示>>(不反馈那叫知情不报;不解决那叫消极怠工;自己乱搞叫越权行事)
  • 事情进展顺利也要定期反馈进展;每日三省吾身,不要让别人逼着你写总结。>>(老旧的Unix程序默认没有return,但你不是它。他跑来问的时候,心里是充满疑惑的)
  • 是男人都会犯错(from DuangLong),但相同的错误不要一而再、再而三地犯>>(上司不是你爹,他口水干了就会变得异常烦躁)
  • 不要随便发脾气,更不要对着上司发脾气>>(否则的话,很快就会通过惨痛教训明白:平等、自由都是相对的)
  • 在绝大部分情况下,不要跟上司谈情说爱玩暧昧,搞基也不行>>(除非你打算辞职)
  • 不要当上司是sb;如果觉得他不是很懂,委婉地教会他。>>(绝大部分情况下,后果是下属sb了)
  • 我不排除有很恶心的上司,但你的上司是一种非常珍稀、宝贵的业务资源。好好对待他,不要有意无意地滥用他、损耗他,尽量让他开心。否则等到闯祸了,让爹妈来公司保佑你么?比上司更能保佑你的是你的客户。

★★★如何对待同僚★★★

  • 我知道一定会有人大叫着说:如今是平权时代,哪里有什么狗屁上司。好吧。
  • 一般情况下,把你的同僚当作上司对待——可以套用上面的大部分建议>>(你敬人一尺,人敬你一丈。鬼知道什么时候同僚变上司)
  • 工作要通过定期碰头协商分工和通报进展>>(要不你单干吧)
  • 答应了别人的事情要做到,要不就不要答应;>>(做不到比拒绝的后果更严重)
  • 有啥事情可能起纷争时,事先讲好道理,商议好规矩>>(这一条是金科玉律!)
  • 不要吝啬于分享经验,但不要随便发表看法>>(大家都喜欢对自己有帮助的人。但看法么……说者无心听者有意)
  • 一定要有几个死党,关键时刻可以帮你扛扛工作、通风报信;>>(谁没有难处呢?但没人欠你的)
  • 今天求助了别人,记得日后要还,晚还不如早还。反之同理。>>(纸牌屋)
  • 条数是不是很少?混过几年职场后,大部分人就挂在这几条上。

★★★如何对待业务★★★

  • 业务不是编程,业务是钞票。
  • 搞清楚自己的岗位职责;搞清楚跟你工作直接相关的周边岗位职责>>(基本入门要求)
  • 搞清楚业务流程,自己在其中的位置;搞清楚公司靠神马赚钱,自己在其中的作用;>>(最好的公司都是流程化运作的,没有也要理出来)
  • 编程之余,多看看公司对应的商业和工程专业书籍但请务必记住:业务不是学来的,是干出来的>>(业务不是编程和0/1,业务是非常复杂的,它很难掌握但比程序的变化要少得多)
  • 搞清楚你对老大,同僚,周边部门的价值;搞清楚老大,同僚,周边部门对你的价值;>>(不清楚这些,工作中怎么互帮互助 or 谈条件 or 撕逼)
  • 经常跳出自己的岗位看问题,有极大好处>>(否则很容易固执己见讨人厌呢)
  • 要区分有价值的功劳和没有价值的苦劳>>(否则白忙一场空)
  • 干得好就可以多要钱,但要有理有据,最好的办法是拿好的考评>>(连考评周期和规则都没有的公司,还是算了吧)

★★★如何对待编程★★★

  • 脱离业务的编程毫无价值,除了毕业生
  • 精通一门语言,最好是C和JAVA,脚本随意;其他的都可以类推。
  • 软件程序质量的底线,是你知道你的程序和编译器到底都干了啥。因此:程序语言中的高级技巧都是巨坑,如果没有十足的必要和把握,不要用。
  • 编码注释是最好的文档?不全是,学会Office和MindManager,否则试下用编程表达流体力学。
  • 熟记常用的调用接口(系统,数据库,函数库,中间件),其他的备好手册,不要费太多脑。
  • 有括号,不要浪费脑子去记忆运算优先级。更不要随便相信高级运算符。
  • 让别人能看懂代码,否则自己也会看不懂。
  • 时刻谨记性能和存储约束,它们可以交换;更可以跟钞票交换。如果这两者严重受限,高级程序语言都是渣。
  • 任何复杂的系统都可以分解,函数和有限状态机是最重要的概念。类、对象不一定重要(想不到吧),模版、继承、派生很容易坑了你。
  • 绝大部分的“跨平台”、“可扩展性”设计目的,大部分还是要依赖重构去解决。更悲剧的是,很大比例的重构是由于这两类设计而导致的。
  • 谨慎对待重构,一般来说初次重构的失败率高达50%以上,大多数情况下是质量问题导致失败。所以,要做好3个版本的成本预算。新人玩重构?百分之百失败。
  • 函数、API、消息、通讯报文没有区别,都是接口
  • 常用算法并不多,复杂算法要学好数学和库
  • 开源软件不要乱用,其授权文件和律师团可能让公司破产,一定要问老板和律师!
  • 商用软件收费并不仅仅是因为功能,还有性能和质量。开源软件的质量良莠不齐。
  • 好好读编程规范!好好读编程规范!好好读编程规范!
  • 不要依赖于DEBUG!事先想好软件逻辑可以节约大量的DEBUG时间。
  • 硬件是会坏和异常的!服务器、配置库不说了,传感器和执行器同理。
  • 人是会犯错的,而且很经常!做好代码和数据备份;检查输入,尽量控制输出。

★★★如何对待工具★★★

  • 不能提高工作效率的工具毫无意义
  • 工具是拿来用的,不是拿来炫技的
  • 优先考虑测试工具,其次考虑编码工具,最后考虑代码检查工具>>(理应如此,但实际上哪个好到手就先整哪个,呵呵)
  • 工具本身是带缺陷的,要考虑潜在缺陷的风险和代价,否则会死得很难看。
  • 开发系统集成的IDE最“好”用;纯编辑器请随心,注意保存配置数据。
  • 一个需要大量配置才能实现功能的工具,要慎用。
  • 优先选择收费的商业工具,除非实在没钱。
  • 带有“云”系统的工具,呃,去与老大对话,观察他是否变成了大菠萝第一章的BOSS。
  • 很多奇奇怪怪的小工具会做很多奇奇怪怪的事情,特别是安全类工具。留个心眼。
  • 如果找不到合适的工具,自己写一个,注意性价比(哦,我们有个小小的工具团队)
  • 开发环境几乎永远比客户的运行环境奢华,时刻记住这一点。
  • 买一套你用得顺手的硬件外设,包括键盘、鼠标、显示器,这个投入相当划算。(听说新浪的开发环境是众所周知的负面案例)
  • 奇怪的键盘布局会降低效率,慎用此类逼格高的键盘。
  • 有午休的开放办公室,慎用噼噼啪啪的键盘鼠标,否则可能导致你的脸噼噼啪啪作响。
  • Office是最应当掌握的非编程类工具,没有之一。
  • 抛弃各种IM工具,回归到电话、短信和Email。还需要说理由?
  • 努力变成你的老大最好用的工具,否则他会寻思着换工具,就像你寻思着换键盘一样。

★★★如何学习提升★★★

  • 最好的学习,是工作中学习,学以致用。因为这样目的最为明确,效率最高,正向负向刺激最强烈。
  • 找个好师傅,默认情况下抱紧上司的大腿。一天最多问他一次,逼着自己先想清楚再去问。
  • 编码不是目标,实现功能不叫大牛。一般对代码的优化集中在性能,可维护性,可扩展性,安全性和质量健壮性上。大牛们就牛在这里。
  • 不要把工作带回家!学习同理。家里有太多分散注意力的事情,而且非常容易模糊各种边界和deadline。
  • 某些公司有严格的信息安全管理制度,不可以在公司做自己的事情。那在家里好好布置一个书桌书架,并尽量减少干扰。
  • 出于集中精力的考虑,书桌上应当尽量简单,比如不要有妹纸和电视,嘿嘿。每天2个小时的时间,把所有干扰都排除;要么就不学,要学就沉浸进去。
  • 在家里做东西学东西,同样要坚持有特定目标,否则都是胡乱学,成不了体系出不了东西。
  • 社区是好东西,但很零散,不能依赖。官方手册和文档是最系统的,开源可看代码。
  • 不要沉浸在具体编码中,理清目标,逻辑,流程,模块和状态迁移。更重要的是理清业务。
  • 逻辑思维清晰、表达简明扼要、英文起码阅读无压力。>>(沟通都成问题就不要谈提高了,真的)
  • 写博客、上论坛撕逼、写教材、做培训讲师,对理清逻辑、提升表达和建立个人品牌很有帮助。>>(好为人师不是错,知错就改好同志)
  • 在这里我整理了一份Android高级工程师进阶必备系统学习资料,需要的可以点击【学习就能领取了!有想学习,提升自己的点进去看看 有惊喜哦!一定不会让你失望的。

★★★如何对待租房★★★

  • 首先请搜索此文章:怎么花最少的钱提升出租屋的格调? - Charles Stone 的回答
  • 其他:房租不要超过工资的1/3(日后供楼也是同理)跟谁一起租很重要,最好跟死党一起租房子,否则宁愿单住作为程序员,房子要能摆下一张大书桌!

★★★如何对待妹子★★★

  • 一般来说,公司里的妹纸更可靠>>(只是相对论而已)
  • 尽量找到共同的兴趣爱好>>(找不到?迟早出事)
  • 通过宠物勾搭,又快又多>>(狗男女就是这么回事)
  • 有花堪折直须折>>(最好的兄弟会对你说:承让)
  • 要学会怎么识别lcb>>(这是猛追三个月以后的else处理分支)
  • 没有我的火眼金睛?带她去游泳>>(咳咳,咳咳)
  • 无论娶或不娶,0.03就在那里>>(咳咳咳咳,不要淘)
  • 把妹比搞革命更困难,革命尚未成功,同志就仍需努力>>(身体是革命的本钱,把妹还要事业)
  • 三观一致挺重要的>>(这就是祖训的门当户对)
  • 在打算跟妹纸共度余生之前,最好离开双方家庭同居一段时间>>(独立生存能力挺要命的)
  • 后代的家教质量主要取决于女方,妹子的学历越高越好>>(要打我的妹纸们,有本事放开BB!)
  • 有BB之后,要祈祷不要被丈母娘坑>>(各种祖传秘方神马鬼,哈哈哈哈)
  • 你是妹纸程序员?生娃要做好计划!>>(这件事非常非常重要,特别是如果还想在事业上有进一步发展的话。毕竟最少有6个月事业和生仔不能两全,生完了还要奶几个月娃,挺辛苦的。所以,选择高强度工作的间隙,跟上司和同事打好招呼,自己的工作写好委托清单。就算是意外得子,也要趁着孕期早做准备。否则生仔去了工作一丢,周围这个怨念啊~)

★★★如何保持安康★★★

  • 吃喝和减肥?看这个吧:什么样的食物满足好吃、顶饿、低脂低热这几项要求? - Charles Stone 的回答
  • 饮食要规律,早中晚三餐都尽量都吃,多喝水>>(胃病、胆囊炎、胆囊结石啥的,30多岁的人很多的)
  • 保护好你的颈椎,关键是显示器要够高,用书垫高它或者买个升降支架>>(颈椎病严重的话,手会废掉,不开玩笑)
  • 保护好你的手指和手腕,椅子高度要调节好,键盘鼠标不要用太烂的。>>(请自行搜索“脉管炎”)
  • 保护好你的腰椎,可以考虑站立办公、站立会议、经常起来走一走。车上的座椅要调好。>>(神马椎间盘突出啊之类的……)
  • 保护好你的眼睛,夜晚的屏幕四周一定要有背景光,手机比PC屏幕更伤眼睛。>>(长时间玩手机对颈椎也是大杀器)
  • 晚上不要经常熬夜,基本睡眠要保证,否则白天精神会不好,同事间的印象会很差>>(我是坏榜样)
  • 找个女朋友有助于养生>>(生活会变得规律很多,食材会丰富很多,体育活动更有动力,夜晚不会焦躁不安……)
  • 锻炼这玩意是因人而异的,不要疯狂锻炼,关节受损极难恢复>>(特别是登山、羽毛球、瑜伽,搞过头了非常容易受伤)

熬了10多年,能写的不太少。
欢迎准毕业生们提出各种脑洞大开的问题,呵呵。