技术人的职业发展智慧

我先分享职业生涯中的两个教训,希望对年轻程序员有启发。第一,不要只做 Code Review 和 Design Document,要知道它背后本质的要求,要开发新的算法,把本质的和革新的东西写下来,让别人能够反复看,这一点我工作两年后才慢慢意识到,希望刚入行的程序员早一点明白。另一个,在学校期间,你可能会看很多 Paper,里面有非常多炫酷的算法,但是在工业界真正能实现产品的算法是一种 trade-off,也就是说工程技术是折中的。

了解自己的职业导向

职业发展过程中,我们要做的第一件事情就是了解自己,如果你工作了足够长的时间,你会发展出一个比较固定的导向,这些职业导向并不存在价值判断,每种导向上都有优秀的人。

  • 第一种人最在乎某件事能否给自己带来最好的回报,带来更大的影响力、更好的资源,这个叫做进取心;
  • 另一种人追求的是一个可以预测、比较稳定的工作模式,比如很多公司时间长了以后,会形成一个稳定的中间层,这类人更在乎工作价值是否被领导、环境认可;
  • 还有一种人,在程序员里面会比较多,他们喜欢某件事情带来的挑战,更在乎牛人的评价,或者是在开原社区里面的影响力;
  • 还有一些平衡型的人,不仅关注工作、业绩,也在乎 work-life balance,要求工作和生活、人际关系、个人成长取得平衡。
  • 最后一种,90 后程序员比较多,追求个性、独立,但是一件大的项目通常需要团队配合,追求独立的人会比较吃亏。

了解技术人的职业发展阶段

技术人的职业发展阶段,大概可以分为三个阶段。

  • 技术新人。这一阶段要赢得领导和同事的信任,获得授权。比如你的职位是软件工程师、UI Design,这是很明确的授权,还有一些不是很明确的授权,比如某些事情你做的非常好,然后默认这件事情就是你的了。
  • 垂直领域专家。工作 2 到 3 年内获得独立贡献者的动手能力,这个阶段要做垂直领域的专家,在领域内获得扎实的技术能力。如果公司把你提升为小组长,你要能够指导下属,帮助他们做决策和判断。
  • 技术领导者。这个阶段需要通过他人获得成绩,你会领导别人,或者影响别人,甚至你没有正式 title,但大家也愿意跟着你做。这个阶段要关注他人,愿意花自己的时间帮助别人,要获取资源、调配资源,以及使组织走对方向。

发现自己的 0,1,无穷大

我提出一种模型,跟每一位一线工程师都有关系,我们最近也经常拿这个模型去考虑产品,怎么定位,怎么取舍需要开发的功能,我把它叫做 0,1,无穷大模型。

先说一下 0 和 1。假设我们现在需要一个开发,高性能计算平台工程师,这个岗位需要什么基本能力?需要会这门语言,懂并行计算,知道怎么并行调度,或者把一个算法部署到多核上面去,这些必须能做到的叫做 1,在 1 这个事情上不允许你有 0,这就是你面试过程中为什么会失败?因为你出现了一个 0,对不起,你进不来。

下面说一下 1 和无穷大。1 的地方你投入再多都是饱和的,要找到无穷大。比如我们有些员工沟通能力、逻辑能力很强,但是动手写代码能力不行,他在项目起步阶段,说服上下游方面很厉害,但一旦项目立项,这方面就是 1 了,就该停止了,所以一个人最重要是发现无穷大的部分。假设我是一个做系统优化的工程师,我要看到计算的核心部分,通常是一个循环,大概四到五层循环,里面可能还会有条件跳转、向量处理,那如果你在这方面能力做到无穷大,能更快确定计算的最核心部分、最耗时的部分,而且很快确定仿存的模式对计算带来什么阻碍,这就是在无穷大的事情。所谓无穷大对一项产品或者技术来说,就是投入的越多得到的越多,你要看自己无穷大的能力跟公司的要求是否匹配,假设你的无穷大对公司来讲是 1,那么你就使错了地方。

抉择时刻 — 工作中的价值观

年轻的时候,第一二份工作对一个人价值观的塑造非常重要,但当你慢慢成长起来,到三四十岁的时候,面临工作中的问题、人际关系中的问题、生活中的问题,你需要有自己的价值观,这就需要你平时多花时间去思考,尤其是在互联网企业,在一个开放的市场里面,每天都能看到对你和你的企业的不同评价,如果没有自己的价值观,你的精神会奔溃。

之前有个同学问过我价值观的问题,我给过一个答案,不完美但值得你去思考,我当时的回答是任何一份工作都不值得赔上你的三观,前提是你的三观是坚定的并且你有能力做出选择。

职业发展中隐含的变量:信任的速度

比较大的组织经常讲战略、执行,讲资源,好像战略乘以执行,资源再足够就能得到好的结果,但是这里还有一个参数是信任。一个工作为什么给 A 不给 B?为什么跟 C 合作不跟 D 合作?这些归结为一个字就是 Trust,我信任你,我愿意交给你,我想得到这份授权,我就需要获得这份信任。

一个人能否被信任由什么决定呢?我们通常认为信任是一个人的品质问题,但实际上信任涉及四个维度,一个是所谓的品质,比如正直诚实;第二个是动机,如果在有竞争性的部门里面工作,把你的动机说清楚很重要,这是合作的前提;第三个是之前项目的业绩和结果;第四个是能力。

我记得很早以前,有个手下问“在比较弱的时候,是不是可以做一些模糊的打擦边球的事情?”他可能忘了一件事情,信任包括他过往的业绩,所以说江湖大佬会说出来混总要还的,Trust 很难建立,但是破坏起来却很容易,很多企业真正的天花板在哪呢?就在 Trust,行业给它的信任、社会给它的信任已经到顶了。如果你做过坏事,你没有去更改,你还去狡辩,就很难获得信任,就跟日本一样,日本跟中国的关系、跟韩国的关系、跟东南亚被他侵略过的国家的关系,有个上限,因为日本从来没有道过歉。

拥抱变化,成为更好的自己

技术人要知道,你的年龄是会增长的,如果只是年龄变化,其他不变,你就会被替换掉。当年我决定离开摩托罗拉去因特尔的时候,我问自己一个问题:我此时的这个位置,继续用我或者招几个新人培训一下,哪个更合适?当我觉得后者更合适的时候,我就开始想做出点变化了,后面几年经历都是如此。谨记最舒服的时候就是最危险的时候。

我在面试过程中经常会遇到一种人,从简历上看他有非常辉煌的过去,但是在最近一个职位上他做了很长时间,比如三四年没有变化,或者他不曾去想换一种创新的方式去做事,像这样的人,在快速发展的企业里面就没有位置了。

当然,你在有红利的企业可以这样做,那是另一种事情了,比如石油、石化、电力等资源型的企业,再比如因特尔在处理器行业里面,已经做了 50 年了,这个行当已经到了指数增长的最上方,它可以吃技术红利,但是在高速发展、四面开花的高新技术企业里,是没有这种好地方的,只要有一个地方足够舒服,就说明有问题。

蔡京家的葱丝小姐 – 你的机缘与共业

从一个简单的故事讲起,故事的名字叫“蔡京家的葱丝小姐”。南宋有个赋闲在家的员外很有钱,他想去体验一下达官贵人家里是什么样的,正好蔡京宰相家败落了,外员就从宰相家高薪聘请了一位做菜的丫鬟,觉得宰相家的厨子能力一定很强,结果这个丫鬟根本就做不了菜,因为宰相家的佣人分工非常细,这个丫鬟的纤纤玉指是拿来剥葱的。

这能总结出什么?结论很简单,在一个企业里面有两类人,一类是 1×N,一类是 N×1,第一类人,第一年进入公司,作为新人,适应工作,之后以这个方式和能力做了 N 年,另一种人,不断挑战变化,N 年有 N 种做事的能力和方式,以及负责不同的项目。

这类似佛法讲得“因缘”,“因”是指你是颗什么样的种子,你很聪明,读书的时候有很好的科研训练,这是“因”,但是如果你去了一个很稳定的、没有挑战的工作岗位,就像种子放在水泥地上是长不出什么果子的。

人无远虑,必有近忧:时代发展的外部性

人无远虑,必有近忧,我们要看到时代发展的外部性。这里的外部性,一方面是指那些舒服的、资源型的、有路径可以依赖的单位越来越少,好日子或者说免费的午餐已经不在了,如果你现在在一个舒服的位子上,你最好趁这个阶段好好突围学习,不然将来你就没有能力适应变化了;

另一方面,时代的外部性还有整个经济的增速变缓,Job Market 对技术人员的技术复杂性要求在变化。从称呼的变化上也能看出这种变化,二十年前我们管自己叫“软件工程师”,现在大多数技术从业者管自己叫“码农”、“程序员”,这种称呼的变化意味着技术的复杂性使得分工越来越细,细到对一个技术人来说,如果你不去主动向下扎,你很容易被替代,这就是码农,不行换一个就完了。所以你不仅要会编程,你还要去了解底层,这能让你有一定的反脆弱性能力,对长期发展是有利的,这就要求技术人要回归技术本质,去经典教科书里再回炉,了解整个系统是怎么回事,还有就是找到自己的护城河,就是不管你换什么样的组或单位,你在某个方向的投入是积分的,是可以不断积累的。

提出字节序概念的计算机科学家 Danny Cohen 逝世

近日,著名计算机科学家 Danny Cohen 病逝,享年 81 岁。

Danny Cohen,计算机科学家,1937 年 12 月 9 日—2019 年 8 月 12 日。

Danny Cohen 为计算机科学做出了巨大的贡献,他参与了 ARPAnet 项目,并帮助开发了互联网的各种基础应用程序;他率先提出字节序(endianness)的概念;其开创性工作为现代 VOIP 服务开辟了一条道路;Danny 还开发出首批的集群计算部署系统,为现代云技术铺平了道路;此外他还开发出了第一个可视化飞行模拟器。

Danny 最为人所知的事迹是在 1980 年通过其具有重大影响的论文《论圣战以及对和平的祈祷》(On holy wars and a plea for peace),为计算机科学界引入了字节序的概念,IETF 保存了该论文。Danny 将字节序归结为一个异常简单的问题:消息中正确的字节顺序是什么?并用外行人听得懂的浅显语言解释了这个问题,逐层解读,这一具有深远意义的贡献使他在现代计算历史长河中拥有一席之地。

Danny 在 1978 年对他所谓的“数字语音电话会议”开展了一番早期工作,数字语音电话会议是现代 VoIP 技术的基本理念,从 Skype 到基于无线数字应用软件和套件的语音呼叫都依赖于该技术提供支持。

2012 年,互联网名人堂将 Danny Cohen 列入名录,以表彰这位先驱。

关于 Danny Cohen 的更多信息,查看:

bash-step-to-step

bash 跟着敲

前言:本文不单单是介绍常用的命令,还融入了bash语法,每个知识点都有浅显的例子配合,让你很容易消化并吸收,最后还有一个boss任务等你挑战,耐心学完的同学肯定会有很大的收获的。

查看原文:https://github.com/cookieY/bash-step-to-step#export

prodigal son turned back

浪子回头

原唱:茄子蛋乐队。
《浪子回头》是茄子蛋乐队发行于2013年的歌曲,演唱语言为闽南语。相信不少人对歌词一头雾水,但还是能听到一些情怀与沧桑。
这是描述一个年少轻狂的、关于友情的故事,如果可以,推荐你们去看一看这首歌的MV,满满的回忆感。

茄子蛋《浪子回头》歌词音译
浪子回头(歌词音译)

烟一支一支一支地点
婚~叽 gī 叽 gī 叽 gī 爹 diang
酒一杯一杯一杯地干
就~叽 boy 叽 boy 叽 boy 爹 荡
请你要体谅我
呛 哩 爱咿 体 谅 哇
我酒量不好别给我挖坑
哇 酒 量 波 候 麦 嘎 卧 葱 坑
时间一天一天一天的走
西干-叽 刚 叽 刚 叽 刚 爹 走~乌
汗一滴一滴一滴的流
锅~叽 滴 叽 滴 叽 滴 爹 老~嗷~乌
有一天我们都老
乌叽刚-囊隆老
带妻子一起
cua 波 gian 到 丁
浪子回头
隆 子 were 涛
亲爱的 可爱的 英俊的 朋友
亲爱爹 阔爱爹 颠多爹~扁优
垃圾的 没品的 没出息的 朋友
公扫爹 摸拼爹 摸多优泥~扁优
在坎坷的路骑我二流摩托车
滴 康 K 诶 哆 咔 哇 luang 嘭 O 哆 哇 咿
反正我的人生像是狗屎
怀 滴 歪 井 熊 刚 那 搞 赛
我没钱没妻没子只有一条命
瓦 波 七 波 窝 波 giang 刚 那 几 掉 命
朋友阿
扁 优 哇
一起来赌吧
到 丁 来 boy 啊
烟一支一支一支地点
婚~叽 gī 叽 gī 叽 gī 爹 diang
酒一杯一杯一杯地干
就~叽 boy 叽 boy 叽 boy 爹 荡
请你要体谅我
呛 哩 爱咿 体 谅 哇
我酒量不好别给我挖坑
哇 酒 量 波 候 麦 嘎 卧 葱 坑
时间一天一天一天的走
西干-叽 刚 叽 刚 叽 刚 爹 走~乌
汗一滴一滴一滴的流
锅~叽 滴 叽 滴 叽 滴 爹老~嗷~乌
有一天我们都老
乌叽刚-囊隆老
带妻子一起
cua 波 gian 到 丁
浪子回头 隆 子 were 涛

在坎坷的路骑我二流摩托车
滴 康 K 诶 哆 咔 哇 luang 嘭 O 哆 哇 咿
反正我的人生像是狗屎
怀 滴 歪 井 熊 刚 那 搞 赛
我没钱没妻没子只有一条命
瓦 波 七 波 窝 波 giang 刚 那 几 掉 命
朋友阿
扁 优 哇
一起来赌吧
到 丁 来 boy 啊
烟一支一支一支地点
婚~叽 gī 叽 gī 叽 gī 爹 diang
酒一杯一杯一杯地干
就~叽 boy 叽 boy 叽 boy 爹 荡
请你要体谅我
呛 哩 爱咿 体 谅 哇
我酒量不好别给我挖坑
哇 酒 量 波 候 麦 嘎 卧 葱 坑
时间一天一天一天的走
西干-叽 刚 叽 刚 叽 刚 爹 走~乌
汗一滴一滴一滴的流
锅~叽 滴 叽 滴 叽 滴 爹老~嗷~乌
有一天我们都老
乌叽刚-囊隆老
带妻子一起
cua 波 gian 到 丁
带妻子一起
cua 波 gian 到 丁
带妻子一起
cua 波 gian 到 丁
浪子回头

月薪3K与3W网络工程师差距

  1. 很幽默。
  2. 培训体系给我们灌输了很多内容,比如STP/VTP/RIP/OSPF/BGP/MPLS/路由重分发等,但实际项目中用得最多的往往是VLAN,很多项目OSPF都不需要,直接一条静态路由搞定。
  3. 在这个基础网络同质化的年代,卖交换机不得不谈点高大上的方案与技术,什么敏捷交付/策略随行/业务编排、什么SDN/VXLAN,至于用不用另说。(试问买顶配车型的土豪们,所有功能你们都用到了吗?)

如果你工作了好几年,还是只会划个VLAN,配条静态路由,插上console干完通了就走,又能怨谁 月薪3K呢?这种工作,找个高中生培训2个星期CCNA,他也会干,你的核心竞争力在哪儿?

网络上经常有人讨论 网络工程师与程序员,其实也不得不承认,网工平均待遇比程序员低,因为存在太多低级 “操作工” 。但高级网络工程师待遇真不一定比同等资历的程序员低,何为高级? 反正高级网工基本不敲命令行了,高级程序员也不写代码了。

当然,初入社会的小菜鸟,谁都难避免 “操作工”阶段,但你要学习,要成长呀,人往高处走,水往低处流!

谈谈高薪 网络工程师能力

1. 整体架构能力

经过几十年发展,网络早已经不只有交换机、路由器,安全也不仅仅有最初的防火墙、入侵检测。平时我们谈网络其实早已 泛网络化,包含:路由交换、安全、无线、网络优化、存储、数据中心、容灾备份、云计算等等。整体架构能力就是熟悉这些产品、技术和方案,能够结合客户场景/业务 合理规划设计,能做超大项目整体架构设计的人,其实是超越了售前/售后的另一类人。

2. 技术细节

很多人的学习是停留在表面的,包括我,就像年轻医生,一般问题都能解决,但遇到十年一遇的疑难杂症,还是得要老专家出马。听完培训课程,敲敲实验,大部分项目做起来没压力,但要想成为车小胖那样的“老专家”,有时间还是老老实实看 TCP/IP卷一、路由卷一卷二、RFC文档。

3. 排错思路

原厂售后是很稀缺的资源,主要在做 大项目售前测试和高等级故障处理。大部分项目售后实施人员都是 外包公司或集成商,一个优秀网络工程师不在于你命令敲定多666,也不在你能记住多少厂商的命令行,这都是在配置手册里面复制粘贴的事情。重点是排错、解决问题的思路。

4. 经验

刚考完CCIE的应届毕业生,技术原理/命令非常6,但待遇还差得远。

分享一个大家常见售前坑售后的故事:某项目实施阶段,交换机不支持某招标要求的功能,售后小菜鸟直接跟甲方负责人说,这个功能我们不支持,甲方非常生气,后果很严重。 如果是售后老鸟肯定不会直接跟甲方“坦白”。问题出了,现在关键是解决问题,把情况同步相关售前、销售,让他们想办法解决: 是找替代解决方案,是找研发开发新版本,还是去做客户商务关系。这本不是售后的责任,如果你不说或者直接跟客户说,这就是售后的问题了。

时间沉淀

寻找正确的“甩锅”方式,不甩烫死你,甩错了烫死别人,你也得负责。这就是经验。

5. 其他软实力

软实力非常多,诸如:沟通交流、言谈举止、演讲呈现、坚韧不拔、勤奋好学等等,你人帅人美也算,每个人的软实力是不一样的,发现它,发挥到极致,记住“弥补缺点永远比发扬优点困难”。

6. 机遇与平台

一次好的机遇,一个好的平台,能让你少奋斗十年。

人生几十年,你总不会一直点背,机遇总留给有准备的人。

当然,几乎没人能具备所有能力,也不是每个人运气都很好,但只要不断学习,提升自己,明天就会有希望,祝好!

来源:https://blog.51cto.com/weilan2222/1978735

wordpress 自动升级失败地解决方案

因多种原因导致下载失败,超时等多种问题,使用手动麻烦,容易出错

现在找出一种方案,实现半自动方式:

手动下载,需要的版本文件
https://downloads.wordpress.org/release/zh_CN/wordpress-xxx.zip
一定要选择 zip 地,要不可能解压不了

把下载地文件放到 wp-content/temp 文件夹下,并设置服务用户(如 www)可写

并更改后缀为 tmp,获取更改后文件绝对路径;/…../wp-content/temp/wordpress-xxx.tmp

修改文件:vim wp-admin/update-core.php 大约在559行,下载前位置($update = find_core_update( $version, $locale ); 后面),添加下面代码,保存;
$update->packages->full=$update->download=”$webroot/wp-content/temp/wordpress-xxx.tmp”;

从版本5.4以后更新使用了不同的包,所以下载内容变为

https://downloads.wordpress.org/release/wordpress-5.5.3-no-content.zip
同样放到一个可写的目录如:wp-content/temp/wordpress-5.5.3-no-content.zip
在find_core_update下面添加代码:$update->packages->no_content=”$webroot/wp-content/temp/wordpress-5.5.3-no-content.zip”;

修改文件(5.5以后文件变化了):vim wp-admin/update-core.php 大约在675行

5.6在799行

在界面上点自动更新,OK enjoy.

初级、中级和高级开发人员之间的差异 The Differences Between a Junior, Mid-Level, and Senior Developer

作者:Daan
翻译:Sambodhi

有一句话在开发人员圈子广为流传:“初级开发人员的标志就是需要在中级和高级开发人员的指导下完成工作。”所以,我们不要苛刻初级开发人员写的代码对错严谨,毕竟每个开发人员都有这样的一个过程。据译者观察,初级开发人员往往认为自己写的代码都是高质量的;而中级开发人员认识到了软件知识会影响代码质量;中高级开发人员则认识到硬件知识会影响到代码质量;高级开发人员反而认为自己写的部分代码质量不够高,需要恶补硬件知识和编译器等相关知识……至于骨灰级开发人员,可以写出高质量代码,并能够充分考虑各种情况。本文,后端开发者 Daan 讲述了初级、中级和高级开发人员之间的区别。

作为初级、中级或高级开发人员,并不仅仅跟多少年的编程经验相关。初级开发人员甚至可以比高级开发人员年龄要大。这一切都取决于技能。不过,这并不意味着高级开发人员必须是所有方面的专家,但可以肯定地说,高级开发人员要比初级、中级开发人员熟练得多。

既然高级开发人员与初级、中级开发人员的区别不仅在于编程技能,那么到底有什么区别呢?

知识

很显然,高级开发人员比初级、中级开发人员掌握更多的知识。了解设计模式、架构、自动化测试、性能、安全性等,这是初级开发人员缩小与中级、高级开发人员之间的知识差距的好方法。

了解软件开发中的事情应该如何进行是很重要的。但是,仅仅知道这些知识并不能让你成为高级开发人员。知识并不是开发人员之间最大的区别,它只是其中的一个因素。

编程

不管大多数人是怎么想的,编程并不是与计算机进行通信。编程是关于与人类交流指导的计算机。最终,代码被编译并转为一连串的 0 和 1。

代码必须对将来使用它的其他开发人员有意义。一个以前从未见过代码的新团队应该能够阅读代码并开始研究新功能或进行 bug 修复。这就是初级和高级开发人员之间的巨大差异所在。

在这一比较中,我将把中级开发人员排除在外,因为,在编程技能方面,中级开发人员处于一个灰色地带。显然,中级开发人员介于初级和高级开发人员之间,他们可能更倾向于高级开发人员。这主要与经验有关,因为中级开发人员可能至少经历过一次整个开发周期。他们犯过许多最简单的错误,并从中汲取了教训。

如何识别初级开发人员?

初级开发人员缺乏经验。有些人刚刚毕业,正在开始他们的第一份全职工作。初级开发人员的心态通常是能够让代码工作就万事大吉了。工作软件和良好的软件对他们来说,没什么不同。

编写简单的代码其实是一件很困难的事情,这恰恰就是初级开发人员不擅长的事情。初级开发人员倾向编写花哨的代码。你可以通过古怪的代码、过于复杂的抽象来识别出初级开发人员。这就是初级开发人员炫耀的方式,好让其他开发人员知道他们编写的代码有多牛逼。其实,他们这一做法是错误的。

初级开发人员只专注于代码的计算机方面,而忽视了人性方面。

那么,高级开发人员呢?

当你查看高级开发人员编写的代码时,你心里可能会嘀咕:就这些吗?代码的其余部分在哪里呢?高级开发人员编写的代码,看上去简洁、直接了当,甚至还可能让人觉得很愚蠢。而这正是开发人员在编程时可以拥有的最大品质之一。高级开发人员遵循的是 KISS 原则:保持简洁,愚蠢。

译注:KISS 是英文 “Keep it Simple and Stupid” 的首字母缩写,意思是 “保持简单和愚蠢”,其中 “愚蠢” 不是 “傻”,它还有 “迟钝”、“不敏感”、“乏味”、“无价值” 等综合含义。另一种对 KISS 的解释是:“Keep It Simple,Stupid” 由于中间加了逗号,意思就变成了 “保持简单,傻瓜”,是一种祈使语态,带有调侃的色彩。

好的目标不是越复杂越好,反而是越简洁越好。这就是 KISS 原则。符合 KISS 原则的目标都是关键的,而非包罗万象;目标必须确定优先顺序,而关键的目标则是资源和努力的重心。总结开发人员在编程过程中的经验,大多数应用程序的设计应保持简洁和单纯,而不掺入非必要的复杂性,这样的应用运作成效会取得最优;因此简单性应该是软件开发中的关键目标,尽量避免不必要的复杂性。

高级开发人员以不同于初级开发人员的方式思考他们的代码。高级开发人员编写的代码会考虑到可维护性和可扩展性。这与初级开发人员的思维方式完全不同:高级开发人员考虑的是必须与代码打交道的人,而初级开发人员只是考虑如何让代码在计算机上工作。

不仅仅是编程技能的问题

除了编程技能外,还有一些其他因素可以告诉你谁是哪种类型的开发人员。

一般来说,初级开发人员执行最简单的任务或影响较小的任务。他们不参与任何架构设计。中级开发人员也不负责设计解决方案,他们只是执行任务。与初级开发人员的不同之处在于,只要分配给他们相对常规的任务,他们就会执行这些任务,而无需过多的监督。而高级开发人员则完全可以自己开发应用程序。

但这并不意味着高级开发人员在开发过程中没有任何问题。实际上,每个开发人员每天都会遇到很多问题,这点是不会改变的。对于高级开发人员来说,也是概莫能外。

区别在于高级开发人员知道如何提出正确的问题,以及如何处理这些问题。当涉及到相对常规的任务时,中级开发人员可以提出正确的问题,但在更复杂的任务上就力有未逮,需要高级开发人员的帮助了。

高级开发人员永远不会迷失方向,他们知道如何以正确的行动来跟进问题。但是,这并不意味着高级开发人员不能向其他开发人员寻求帮助。有时,最好的方法就是向其他在该领域有经验的开发人员寻求帮助。

中级开发人员也应该能够提出正确的问题,只要他没有被分配到需要深入知识层面的高度复杂的任务。

你不应该指望初级开发人员能够立即提出正确的问题。由于初级开发人员缺乏经验,他们需要更有经验的开发人员的指导。初级开发人员需要获得必要的资源,或向正确的方向大力推进。

晋升下一个层次

作为开发人员,我们都想提高自己,变得更好。但是,你可以采取哪些步骤来晋升到下一个层次呢?

从初级开发人员到中级开发人员

由于初级开发人员缺乏经验,因此至少要经历几次整个开发周期,这一点是很重要的。这样一来,你会掉进很多陷阱中,并学会如何在下一次避免它们。

说到编程,你应该学习如何编写简单的代码。想想下一个将要处理这段代码的人。你还应该学习如何调试,因为这将使你能够更好地理解这一过程中发生的事情。

此外,你应该熟悉最佳实践,并了解架构、性能、安全性等。缩小到达中级水平所需的知识差距。

从中级开发人员到高级开发人员

从中级开发人员到高级开发人员可能会相当困难。有些开发人员在整个职业生涯中,始终处于中级水平。

高级开发人员知道什么可以走捷径,什么永远不可以走捷径。这些都是从过去所犯的错误中汲取的教训。

如果你想要成为高级开发人员,就必须准备好接受没有人知道如何解决的任务。但你应该知道的不仅仅是如何完成工作。

作为高级开发人员,你的工作还包括帮助经验较少的开发人员。当他们不知道如何做某些事情时,你就是他们的后备力量。

高级开发人员掌握了他们的技术栈,这可能不会让你感到惊讶。记着,成为高级开发人员可不仅仅是编程技能,还要了解你所在公司中使用的所有工具和应用程序。

结论

初级、中级和高级开发人员之间的区别并不全在于有多少年的经验。当然,可以肯定地说,高级开发人员比初级、中级开发人员更熟练,但知识并不是最重要的因素。

与初级开发人员相比,高级开发人员编写的代码更简单,并且思维模式也不同。但这不仅仅是编程技能。知道要问什么问题,以及如何跟进这些问题是至关重要的。只有那些拥有丰富经验的高级开发人员,才知道在如何在任何情况下做到这一点。

作为一个初级开发人员,你应该专注于如何编写简单的代码,并经历多个开发周期。要从中级开发人员晋升到高级开发人员,你应该专注于学习,而不仅仅是解决常规任务。你应该愿意承担最艰巨的任务,成为技术栈的大师。高级开发人员的另一个职责是为经验不足的开发人员提供后援力量。

我将引用 Martin Fowler 的一句话作为结束语:“任何傻瓜都可以写出计算机能理解的代码,而优秀程序员可以写出人能读懂的代码。”(Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

作者介绍:

Daan,荷兰的后端开发者,密码学爱好者。

原文链接:

The Differences Between a Junior, Mid-Level, and Senior Developer