106

计算机工程师的修养

 6 years ago
source link: https://zhuanlan.zhihu.com/p/30521417?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

计算机工程师的修养

作者:黄健坤

以下观点是作为一名工作在互联网一线多年的工程师的个人看法,不代表群体意见,仅供参考。有不同见解、意见请与本人交流、沟通。谢谢!

  • 背景知识。互联网是什么,工程师是什么?工程师的作用是什么?
  • 工程师的个人能力和怎么提高?
  • 本人认为对工程师影响比较大的几个方面:一、地域;二、企业;三、团队或领导;四、薪酬。

一、背景知识:相关名词基本概念

  • 计算机

为什么要先说计算机?因为它是本文的一个基础,应该说,没有计算机,很大程度上也不会存在计算机工程师这类人!那么什么是计算机:它是现代用于高速计算的电子计算机器,可以进行数值、逻辑等运算,并具有存储功能。是可以按照程序运行、自动、高速的处理海量数据的智能电子设备。计算机的出现,首先是离不开创造者,20世纪伟大的数学家之一:约翰·冯·洛伊曼(John von Neumann)。

  • 互联网

互联网是一个庞大的网络,他是由大大小小的网络组成起来的,而每个网络以一个通用的协议相连,形成一个逻辑上的巨大网络。而这种将计算机互相连接在一起的方法叫“网络互联”,在这个基础上发展覆盖全世界的全球性互联网络称互联网。 近年来,中国互联网的发展日新月异,影响着不仅仅是互联网本身的产业,传统行业也受到了不同程度的冲击。互联网+更是让传统行业在互联网帮助下,开启新的篇章。在互联网时代给传统行业注入了新的元素、创新,使得传统行业在互联网的帮助下更加快捷、有效的推广与服务客户等相关事宜的管理和运作。

  • 计算机工程师(以下统称工程师)

计算机有存储、运算等能力,如何将这些能力运用到个人、组织、企业等高效、有序的事务管理与客户服务当中,则是工程师的作用。企业通过工程师在计算机上不断创新与研发各种满足不同行业需要的软、硬件或者产品,从而解决需要高效大量运算以及存储数据的问题。

  • 编程

编程是编写程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,是计算体系按照该计算方式运行,并最终得到相应结果的过程。而编程的人则为计算机工程师。

二、工程师能力

  • 好好规划自己的路,不要跟着感觉走;
  • 不要仅仅成为技术高手,而是要做综合素质高手;
  • 知识涉猎不仅要专,还一定要广;
  • 什么样的朋友都需要交,范围不要仅限于工程师;
  • 要学会推销自己;
  • 该做的事一定要先做,不要等到失效了就晚了;
根据个人的经验,工程师需要从以下几个方面来着手:
曾担任过工程师、高级工程师、研发Leader、项目负责人等职务。
本人从事工程师这个行业多年,既在小公司以及创业公司工作过,也在大公司工作过。
  • 专业技能
案例一:
本人在A公司的时候,接手一个比较大的项目,为什么说大,两方面:一是项目包含的工程多,当本人看到整个工作组当中有十几个工程时,就一脸懵B了,心想:尼玛,一个人搞那么多个工程,什么破玩意,需要那么多工程吗?二是:看完了所有工程的代码结构,更是让人无语,十几个工程用一种语言,用了不下三种开发框架,甚至没有框架进行开发,本人刚接触的这个项目的时候,是新学的这门语言,所以看懂了第一个工程后,兴致勃勃地再看第二个工程用的是另一个框架的时候再次懵B了,接着第三个也可想而知。本人花了不少的时间在弄清楚到底这些框架的区别以及怎么使用的,而且在代码的可读性上也非常差。
本人是有着代码重度洁癖的工程师,可想而知,心中的涌现出无数的未知符号(怨念)。本人认为:作为一名工程师,哪怕是经验不足,首先,对于应该说明的点需要有注释,向后来者提供当时你的思路是什么,以及某些代码的作用是什么。别人看不懂你的代码,但注释总该能看懂了吧?如果说连注释都写不清楚,那本人就更没话说了,回幼儿园重新来过吧! 其次本人认为:作为一名靠谱的工程师,自己的代码应该自己先测试,通过单元测试和黑盒测试并举的方式去做,这样才对自己的成果才有说服力和成就感。如果说让测试测出这里有问题那里也有问题,而这些都是自己能够发现的,本人觉得该工程师编程的前途渺茫,甚至可以尽早换工种。

计算机是一门科学,如何科学的掌握与计算机的“沟通”和“运用”方法的能力,是工程师的必修课。

编程能力:编程是工程师必不可少,之所以能称为工程师,就是具备了编程的能力,即与计算机“沟通”的能力。计算机本身包含的内容多且复杂,工程师应尽可能的了解其内在的原理,并从项目实战当中总结经验,丰富自己的编程以及工程管理认知。很多人问,初级工程师和高级工程师的区别在哪?并不一定是指编程水平的问题,而是在以往的工作经验当中总结出来的一套丰富编程能力的思维,并且在不同编程语言,甚至抛开了编程来说,应对不同行业的需求,都能快速用自己的经验来完成实际的项目需求的解释。

语言能力(这里指的是编程语言):计算机始于外国人,在编程的过程中,基本都是英语,很多文献、理论知识也是英语,所以在一定程度上,英语的水平也或多或少的影响中国人对计算机的理解水平。当然,现代编程语言的发展,也出现了中文编程语言,但很难发展,原因有很多,就不再赘述了。

互联网思维:互联网思维不仅仅是在互联网企业需要具备,在传统行业也可以(甚至是必须)具备的能力,未来的社会发展朝向的是:大数据、近距离、趋透明、便操作、易分享等方向。如何将多个方向的融合在一起,从而为社会做出巨大贡献,是整个社会的难题。现在的我们不管到哪都是提到“大数据”,那么究竟大数据时代,我们应该如何怎样把“大数据”利用起来,工程师在这方面有先天的优势,因为计算机能帮助工程师进行存储大量数据,以及计算大量数据。

  • 学习能力:

首先:要说的就是编程语言能力,这个是”硬件“,不是说天下文章是一家,别人分享的东西你拿来用没问题,但一定弄清楚道理,自己也要说得明白。再有就是语言能力,不仅仅要专一门,而且在面对新项目、新语言的时候,要利用自己对计算机的理解,快速地去学习并且消化他,要知道,时间、业务并不容你效率慢吞吞。

第二:编程能力,上文案例一中提到的各式各样的框架、各种各样的工程,不是不行,但需要合乎情理的去进行管理。每个程序都需要有良好的风格,拿出去给别人看,要让人看得赏心悦目,就像看一篇美文一样,这是要有时间去积累的。

第三:文档能力,工程师面对的文档各式各样:需求说明,接口说明,环境说明,配置说明,代码注释等。一个良好风格的文档,给自己不仅仅是明确的目标,更是给与你合作的人的一种享受。

第四:英语能力,文章开始也说了,计算机始于匈牙利人(约翰·冯·洛伊曼),使用的是英语,一直沿用到现在,除非你个人非常niubility,写了一门自己能认识的计算机语言,哪怕是中文!不然对于英语,还是努力去提高吧!

第五:创造能力,现在的工程师,大多是Google、Baidu,有就用是了,但拿来用的程序有问题,那就容易出大麻烦,也不容易深究其原因。工程师应该去了解多方面的解决方案,什么是好的,什么是优的,哪一个更适合自己,或者在自己的能力、时间范围允许的条件下,自己去创造。

  • 人文修养:
案例二:
案例一中提到的多项目的工程当中,某天遇到了一个数据问题:其业务出的数据比数据组出的数据要多(具体是什么数据就不展开了),项目负责人在公司内部的聊天工具中,新建了一个讨论组,将本人、数据组对接人、产品经理等人拉进来,并让本人去跟数据组的同事一起排查。 本人在了解完问题后,就去与数据组同事进行沟通排查,在沟通的过程当中,本人遇到一个工程师非常典型的问题,与其难以沟通,本人在理解其的意思后,多次向该数据同事提出排查方案,说了半天,本人说本人的,他说他的,思维就没有在一条线上。最后本人只能妥协地跟着他的思路一步步往下走。虽然最终找到问题,但花了比较长的时间。
还有另一个细节,也是本人认为工程师需要注意的,沟通是需要看对方是谁,对于本案例来说,问题是由产品经理提出的,反馈给产品经理结论的时候应该让其看得懂,说得明白。然其数据组的同事通过粘贴自己排查工程中的某些程序和程序跑出的结果来说明结论。对于懂该程序的产品经理来说,可能懂,但如果碰到一些并不是工程师出生的产品经理,那所粘贴的这些程序和结果,本人想问:对其有什么意义?所以我们在沟通的时候,也需要考虑受众。说得难听一点,所谓:”遇人说人话,遇鬼说鬼话“!
案例三:
本人在2012年的时候,曾在一家互联网广告公司担任服务端研发Leader,由于当时的业务增增日上,并且业务稳定,CTO让本人分享其开发的应对公司业务的工作内容,当时来听这个介绍的人员几乎包含了整个公司的上百号人,包括技术人员、销售人员、管理人员等(当然本人也提前得知这个消息)。
在整个过程中,本人从框架的网络拓扑、技术架构、技术如何应对业务扩展、服务怎么扩容等方面介绍了整个技术团队的工作内容,整个过程如同行云流水。
当此次分享结束后,CTO问本人,认为这次分享的结果感觉如何?本人满怀信心的说:个人觉得还不错,能把技术团队的内容介绍给大家。但没想到的是,CTO的一句话,让本人的信心不知道跑哪里去了:你的这次分享,太技术了,对于技术团队,他们能懂。对于业务团队,完全可以不听,有的根本就听不懂你在讲什么?你要知道什么样的人要讲什么样的话。
这次经历之后,本人在之后的做其他分享准备的时候,都会犯难,为什么:因为要考虑到听众,他们是谁?想从这次分享得到什么?什么样的语言他们能听懂、什么听不懂? 这种准备分享的工作,本人没有总结出什么要点。但主要还是从实际去出发,看清自己分享的对象,用对象熟悉的语言去说明你要分享的内容,这个熟能生巧地过程是慢慢积累的,本人也仍然在努力着。

工程师的工作主要是面对计算机,每时每刻与计算机打交道,而现代计算机还没出现真正的人工智能(这里是指计算机没有思维),计算机只能在工程师的机器指令下完成相应的工作。 然而,现代的网络发展,已经不是某一个人就能完成一个项目的时代,这里就涉及到人与人相互关系的问题,包括客户、同事以及与项目有关的人员。对于工程师的而言,除了专业技能,最大的挑战就是沟通能力。不管是在与客户沟通需求、还是团队分工时的讨论等,都要具有一定文学修养、人际关系和沟通意识。

  • 心理素质

说起心理素质,先跟大家分享一下:

案例四:
2012年6月,对于一个初创一年左右的广告平台,由于一个严重设计,导致持续一周并且每天20万直接收入问题,这是很沉重的教训。本人和直属领导两人,几乎除了睡觉就是绞尽脑汁地想解决方法,开句一嘴玩笑但又切实际的说:就连洗澡的时候也在想。从遇到问题,两天之内排查问题,再到四天改完多个版本的代码并进行测试,最终七天内修复在线问题,这段时间中,是工作职业生涯中压力最大的时期,天天嘴里、眼里、心里、工作上,除了跟”钱“挂钩,没有别的。

现在看来,回顾这段经历,如果没有好的心理素质,会怎么度过?在这并不是说本人心理素质有多强,或许换了别人,两三天搞定也有可能。但本人想强调的事,不论是谁、不论何种工作、不论遇到什么问题,保持好的心态去面对,总会有豁然开朗的一天。特别是计算机、互联网这类日新月异,每天几乎都在有大变化的行业里,心理素质的稳定,可能是决定成就的基本素质之一。

  • 自我管理
案例五:
世界现代史上有这样三个人。第一个人年轻时曾经信奉巫医,酗酒成癖,嗜烟如命,有两个情妇;第二个人刚刚走上社会时最大的特点是贪睡,每天到中午才起床,每晚要喝一公斤白兰地,曾因吸食鸦片被两次赶出办公室;第三个人曾经是国家级战斗英雄,坚持素食,不吸烟,只是偶尔喝一点啤酒,在整个青年时代没有任何违法犯罪的记录,一次都没有?
在这样三个人中,哪一个能成为造福人类的人呢? 毋庸置疑,多数人的选择都是第三个人。然而,这个选择是大错而特错了。这三个人都是第二次世界大战期间的风云人物:第一位是富兰克林·罗斯福,身残志坚,连任四届美国总统;第二位是温斯顿·丘吉尔,英国历史上最著名的首相,曾获1953年诺贝尔和平奖;第三个是臭名昭著的阿道夫·希特勒,一手夺去了几千万无辜生命的法西斯恶魔。

当今社会,怀抱着你的是一个多元化、信息化的环境。对于工程师来说,有各种各样可能适合你的机会,而这些机会,只要你有雄心和智慧,就不怕没有达不到的目标。而达到目标之前,首先要管理好自己,认识你自己,无论是知识方面、沟通方面、时间运用、以及未来目标等要做出合理合情的安排:

知识方面,需要对已有的知识进行不断回顾和总结,还要保持对新事物的学习与创新,保持应对社会变革的前瞻性、竞争力。

沟通方面,不断加强自我的认知能力,语言总结能力,与人的沟通能力。

时间运用,把一切不重要的事情都忘掉,每天完成最重要的一件事情并从中获取积累,比什么都做但做不成功更能取得成功。

未来目标,本人觉得程序员的未来并不仅仅只是程序,还要有管理、推销的本事:管理自己的项目、管理自己的团队、管理自己的人生目标;推销自己的产品、推广自己的成果、最重要是把自己推广出去。

三、影响工程师的环境

  • 地域

地域对工程师的影响毋庸置疑要排在首位,互联网日新月异的时代,保持编程的前瞻性,一般情况下始于大城市。中国排在靠前的如:上海、深圳、北京、广州、西安、成都等。 在互联网发展快速的大城市,不仅仅是接收新事物的速度、而且相对工作来说,机会也更多,当然竞争也会比其他城市要大。本人有一个朋友,回去了三线城市做工程师,一段时间后想在本地换工作,结果是找不到第二家自己认为合适的企业,又跑回了北京。

  • 企业

业界经常讨论是先去大公司好,还是先去小公司好。这个看人而异。

本人至今面试的人数不下百人,现在以旁观者的角度来描述一下。

首先,大企业看的是什么?

如果是毕业生,一般会看你所属的毕业学校、以及在校园内有什么实践经验,最重要的是在面试时你表现出来的能力。只要你的这三项都还不错,一般情况毕业生就可以去了;

如果你是工作跳槽(也就是社招),那先看的是你的简历,什么是简历?简单的履历。有些面试者写的简历天花乱坠、有些不知道想表达什么、有些写的不能体现自己能力,那么一般情况下,还没等到面试,就被pass了。再次,考察你是否稳定,为什么想换工作,最近几年工作是否频繁换等。面试的时候要注意,不该说的别说太多,点到为止,说得越多,可能问题越多,当然,必须在保证能把自己推销出去的前提上。如果这几样都还不错,你也可以去该公司了。

如果你选择了大公司,那么你的工作待遇、工作环境,可以给你带来不错的生活状态,以及大公司的很多资源你可以随时用等。但互联网大公司都有一些诟病,比如:制度化、沟通成本、创造力等,都是大企业很难再次爆发式增长的原因。

再说小公司: 小公司面临的问题可能会很多,如:福利待遇不稳定、基础服务建设不完善、人员管理几乎没有、简单粗暴的流程管理等。但我想说,越是这样的公司,越是挑战自我的地方。很多去小公司的人,多数成为多面手,他们不仅要做程序开发,还要进行人员管理,甚至大到公司的运营、发展等。

本人的观点是:如果你是一个刚出来的毕业生,能去一个大公司就去大公司,先看互联网到底是什么样的情况,也能在大公司学习到沉淀了多年的稳定因素都是什么。然后再根据自己的喜好,来则取以后的道路。如果选择去小公司,首先要看行业,如果该公司面对的行业本身不适合工程师,除非不再想做工程师的人,那么还是别考虑了。再次,要看清楚公司的境况与团队的人员情况,下文还会提到团队的问题。小公司、哪怕是创业团队,是一个很锻炼人的地方,在个人的履历生涯中,本人建议工程师去体验一下。

  • 团队和领导
案例六:
《权利的游戏》龙妈丹妮莉丝·坦格利安有三条龙,龙会喷火,可以说不怕任何人,但为什么龙妈任然需要招募同僚?当中有一幕给本人影响极深,在斗兽场中,一条龙被一群拿着长矛的武士围着被刺的身受重伤。这告诉我,即使一个人的能力在怎么牛,那也不可能抵挡或者打败一群正规化的军队。

现代社会,一般情况下,已经不是靠某一个人就能完成某个项目,都是靠群体的智慧,并且分工合作换来的结果,所以,在考虑自身成长的时候,一定选择对于自己发展比较有利的团队进行合作。这样自身得到发展,团队也因此受益。

什么是好的领导?本人认为,他会指引你做正确是事情,而不仅仅是把事情做正确了。把事情做正确了,但不一定做的是正确的事情。很多刚出社会且没有经验的人,会接受领导给的指令,不管他的要求是什么,直接不假思索地就去做。执行领导的命令没错,但需要考虑这样做是否是正确,能否产生正确的效应。不是说领导说的就是对的,做错误的事情,不仅仅影响个人认知,也影响团队效率。

  • 薪酬

根据Codementor的官方在2017年7月发布的,用薪酬、地区人均消费、生活品质来分析,硅谷当然是工程师梦寐以求的地方,中国上榜的仅仅只有两个地方,香港(36)、上海(37)。相对本人所在的北京,排名41。互联网发展迅速的大陆城市,北、上、广、深,工程师的收入水平较世界水平其实还不错,但为什么不在其列,主要是房租或房价、以及生活水平、交通情况等让其拉低了水平。

现在互联网的工作薪酬,已经不是本人那个刚工作的时期,行业发展迅速的同时,同等水平的薪酬也不断在提升。就本文当前,北京的各个阶段的大概薪酬水平情况如下(不排除例外):

应届毕业生或初级水平:5k-15k

普通程序员:10k-20k

中高级工程师:15k-未知

技术专家:20k-未知

管理型技术人才:一般20K以上

致谢


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK