阅读更多

7顶
0踩

非技术

转载新闻 软件工程师应该知道的9件事

2014-11-27 11:04 by 副主编 mengyidan1988 评论(2) 有5140人浏览
三年前,我还在巴塞罗那的神经科学实验室工作,忙着研究脑电波、教授心理学上的认知系统课程。而今天,我以设计和写软件为生。

你或许会满头黑线:隔行如隔山,这转变也忒快了吧。其实不然,早在以前我就已经写过很多软件了——比如想理解扫描出来的有40GB那么多的大脑数据,我得捋起袖子、埋头苦干,写个能紧缩这些数据的脚本。所以我一直以来就是一个能干的程序员。但是直到我最终下定决心辞去了这份在学术上能有所建树的工作,转去一家朝气蓬勃的创业公司打工,我才明白了什么是软件工程师——而更重要的一点是,知道了软件工程师是干什么的。软件工程师并不意味着你得学会更多的编程语言、类库、算法和设计模式。它是一种心态。

如果我能早点懂得这些,我的工作肯定要轻松的多。不过亡羊补牢,犹未晚矣。

下面是我写给自己的注意事项,是我在这三年里学到的经验教训,有的甚至是惨痛的。

1.智力不是万能的

如果你还年轻,聪明机智能让你的道路走得更加顺畅。聪明能让你鹤立鸡群。如果你有强大的表达能力就更妙了。老实说,聪明和好口才能让我们在高中和大学里所向披靡,轻轻松松就能拿到个好成绩。——如果你两项都具备,那么首先要恭喜你,你是一个幸运儿。但是同时你也很不幸。因为当你毫不费力地考上一个好学校,随便看看就能通过考试,其他智力不如你的人却因此学到了将来会受益无穷的品质:勤奋、耐心、协作等等。

当今社会太过于看重智力。当我告诉别人我曾经在神经科学方面工作过,大家第一个反应往往是:“哇,你肯定超聪明的!”我不得不说,我认识很多人或许智力方面不及我,但是却的的确确是更为优秀的神经科学家。

智力毫无疑问能为你打开前行的大门,但是如果光有聪明,工作是永远不可能做好的。勤奋、严谨、可靠的网络,最后还有守信等等,不光是在软件工程领域甚至在其他专业都是必须的基本品质。而这些是学校不会教给你的。

2.为你自己鼓掌

这句话可能大家看到过很多次了,但是这的确有着其不可忽视的重要意义。无论结果如何,只要努力了,那么就应该为自己自豪,为自己鼓掌。不是所有努力都会有成果。我们谁都喜欢在报刊杂志上出现自己的名字,但是中间过程却异常艰辛。首先得想出一个好的课题,否决一些假设,然后才能一步一步进行研究——这个课题可以大至人类也可以小至在试管里漂浮——根据需要而定,然后严格分析数据和验证统计资料,如果发现有错误就毫不犹豫重新开始。看着过程就头皮发麻!

写软件意味着要规划特点、研究现有的开源代码、学习新的模式和编程语言、修复bug、重构及维护等等。如果在这些过程中你丝毫没有感觉到乐趣,只是把这些步骤当做是得以发表论文、发布产品的工具,那么你永远也不可能在这个领域真正有所建树。如果你在提升自己技能方面没啥目标,那么我建议你还是尽快转行,哪怕是去做科学家、工程师还是别的什么,都比现在这样浪费时间要好。

为自己鼓掌、以自己为荣意味着,你在做的项目是自己喜欢的,可能这些项目看上去又小又蠢,为了不影响整个项目的顺利完工,可能根本没有必要投入精力马上去做,但是你就是孜孜不倦、刻苦攻关。只因为两个字:喜欢。有意思的是,这似乎在软件社区是个相当普遍的现象——我们每天在用的很多产品开始仅仅是因为开发者个人的爱好而已——但是却在科学界极为少见。下面是Konrad Lorenz(奥地利动物学家、动物心理学家、鸟类学家、诺贝尔奖优胜者)写的我最喜欢的一段话之一,和大家分享:

引用
“对研究型科学家而言,
在早饭前
回顾丢弃宠物的假设
就是最棒的晨练了。”

如果你感觉这听起来很愚蠢,那么也许你并不应该成为研究型科学家。

3.学习新工具

学习新工具不只能够扩大抽象的知识领域,并且在有的时候借助这些工具还能帮助我们解决问题。付出总有回报,一切很快就会见分晓。

学习新工具的一个好办法就是类似上面提到的要自己喜欢,毕竟兴趣才是最好的老师。当你构建好新模型或者别的什么之后,可以试着用另一种工具再构建一次。要记得,失败是成功之母,人都是在逆境中成长,在失败里学习的。不过如果你认为没必要继续了,学到的已经足够了,或者不可能成功,或者对此你已毫无兴趣,又或者你发现这个挑战超出了你的能力范围,那么就此放弃也可以。

以下是我强烈建议学习的一些好工具:

  • Git和Github。有了Git,妈妈再也不用担心我的备份了。而Github上有超多的事例代码,这样你就不必老是自己重新写过了。
  • 插图软件。我个人比较喜欢Inkscape,不过Adobe Illustrator和新出来的Sketch 也一样棒。
  • 学习如何有效使用文本和代码编辑器。
  • 学会如何讲话。
  • 涉猎Python, R, HTML 和 Javascript等等的基础知识。

对一个问题的解决方案往往会受到我们所用工具的限制。学习新工具也是为了能跳出这个框,从其他的角度看问题。

如果你还在上大学,那么我强烈建议你每周定一天时间用于学习新工具。如果你已经是在搞研究的博士,那么可以每周两天。从长远来看,这会节约你解决问题的时间,别人会因为你的高效率而震惊赞叹。如果你觉得你没有那么多空余的时间,也不需要给自己压力,可以向年长的同事请教,如何去正确分配时间。

4.成为利益相关者

众所周知,主管以及CEO总是把公司的利益放在首位,这是他们的工作职责。

但我们谈到公司的最大利益,我们往往指的是利益相关者的最大利益。而现在的问题是:哪些是主管和CEO眼中的利益相关者,这些利益相关者的利益又占多少比重?

如果你的老板认为他/她自己是唯一的利益相关者,那么赶紧走吧。不然的话,要是找到合适的家伙,你就会被抛弃。还有哪些会是利益相关者呢?投资者或者慷慨的捐献者,员工,学生,还是全人类,都有可能,关键是要尽快找出来。并且如果你不在利益相关者当中,那么离开。

5.发布

“发布”这词已经成为了科技领域的新宠。它的意思是把我们的产品从仓库中取出来展示给消费者。这不仅仅是一个动作,更是一种心态。如果不能把产品成功交付给客户,那么意味着我们以前的工作毫无价值,是无用功。关于这一点,是我们要时刻谨记的。

以前在学术界的时候,我写的大多数软件必须一一对应系统。而现在要为五十万用户写软件,这真的大不相同。

这也意味着,如果不能发布一个完美的产品,我们就得一直迭代。所以如果想尽快得到一个完美的产品,那么发布吧!有压力才有动力,集思广益,查漏补缺。

6.了解80/20法则

80/20法则的基本意思是,花上20%的时间能实现项目80%的预期效果,然后剩下20%的项目成果则需要80%的时间才能拿下。举个例子,假如你从郊区开车前往市区:在20%的时间里走了80%的路程,但是当你碰上交通堵塞,呵呵,剩下20%的路程就会用去你很多很多时间。

那么了解这个法则有什么意义?因为如果没有这个法则指导,很多人往往会低估完成一个项目所需要的时间。科学家和工程师更是容易犯这种错误。不光是这个法则,还有部分是经验问题:懂得越多,就越能更好的预测开工之后会遇到的各种问题,而这一点是很多人想不到的。

如果你还没有这方面的经验,那么可以将你认为所需要的时间乘以五,希望经过五分之一的时间之后,你会明白对80/20法则有所了解。

7.不要出卖自己的灵魂

我攻读我的博士学位完全是个错误。其中一个错误我把它叫做“学术犯罪”。因为那个时候我觉得如果我不去读博士完全是浪费了我的天赋。不过我觉得我有所亏欠于那些支持我学术生涯的人——教授和支付我奖学金的人——因为我最后并没有去搞研究。他们投资了我的未来但是很可能会失望,因为他们的投资并没有成果——我并没有成为一名伟大的科学家。不过这是他们的问题,不是我的。

这同样也适用于任何其他工作。人们给你投资,是他们利益最大化的选择。这并不意味着你由此需要出卖自己的灵魂。

8.离开自己的安乐窝

以下是我对世界的看法:



在一个你熟悉的地方,舒适又安全,你可能学进去很少。然而当处于恐慌的心态中,你可能啥都学不会。

每个人都有自己的“狗窝”,在这里,你放浪形骸无拘无束,角落里藏着什么都清清楚楚。不过如果你想学到新事物并且能够迅速成长起来,那么首先你得离开这个“安乐”的地方,自己在学海里迎风破浪“苦作舟”。

当然,如果你感觉不堪重负,那么其实矫枉过正,已经处于恐慌的境地了。可怜的你,风浪太大掉海里了!现在唯一能做的就是尽量保证自己能活着等别人来搭救。

而正如上图所示,在到达恐慌的境地之前的最高点,我们能学得更多,成长得更快,变得更优秀。找到你的学习最高点。

9.驯服思维之猴

舒适地坐下来,闭上眼睛,平稳的吸气呼气。感觉一下当当空气流出你的鼻子流过上嘴唇皮肤带来的美好。什么都别想,好好感受。

大脑放空多久了?有五分钟了?可能不会。一分钟?太棒了。20秒或者更少?好吧,这才是正常值。你的思绪就像一只猴子,它在树上跳来跳去,看到哪个枝干最近就抓着哪个跳过去。你可能还不理解,我再重新用专有名词表述一下:现在比较流行的说法是联想性思维。如果你想发明创造,那么联想性思维绝对是不可或缺的好工具,但是它却是专注的杀手。幸运的是,专心致志是可以学习的。现在有非常非常多号称“能提高生产力的高科技”,但是都还停留在表面因素。谁都不希望在写软件的时候,思绪飘啊飘得在想意大利面怎么做才更好吃。我们需要驯服这只顽皮的猴子,一劳永逸。

不过适合我的方法可能并不适合你。我通过定期使用上述沉思的方法(这方法还有其他有益之处)从而获得了很大的成效。不过即便是如此,我也不敢保证每个人都适合。我所要推荐的是,要保持你的头脑处于最佳状态,这很重要。还觉得冥想是在浪费时间?我们每周都会去健身房锻炼身体,不过在心理锻炼上你得花上至少两倍于此的时间:减去几磅杂念。锻炼自己的思绪以便保证在工作时自己的头脑可以专注更长时间。
  • 大小: 122.4 KB
来自: 码农网
7
0
评论 共 2 条 请登录后发表评论
2 楼 rfx0 2014-12-26 16:08
文章内容确实不错~~
1 楼 gao_xianglong 2014-11-28 09:16
给个赞。。。。。。。。。。。。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 腾讯2017实习生研发工程师及软件测试最新面经!

    2017研发工程师三月初的时候无意中收到深圳腾讯云的电话(对方表明身份后,说看到我的简历,想和我聊聊。当时没有电面经验再加上也没有进来也没有投简历,爽快的答应聊就聊呗。上来就是技术 之前三月初的时候无意...

  • 软件测试工程师经典面试题

      软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位,问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux...

  • 软件开发工程师证书有用吗_关于软件工程师职业证书你知道多少?

    等级划分 本职业分为初级软件工程师、中级软件工程师、高级软件工程师三个等级。 那么考取计算机行业的证书都需要哪些条件呢?和考取计算机资格证都需要注意哪些事项呢? 初级软件工程师 初级软件工程师应具备下列...

  • 软件架构师应该知道的 97 件事

    软件架构师应该知道的 97 件事  1.客户需求重于个人简历(Nitin Borwankar)  客户需求至上。为了自己的简历更炫而采用新技术是沽名钓誉,往往事与愿违。  2.简化根本复杂性,消除偶发复杂性(Neal Ford)  ...

  • 软件测试工程师的日常生活

    软件测试工程师的一天是怎么度过的呢?其实可以按照时间轴进行分为三个阶段:

  • 软件开发工程师证书有用吗_java软件工程师证书有用吗?

    很多人都想考java软件工程师证书,那么这个证到底有什么用呢?下面小编就来为大家分析分析。我们可以简单的先开口想要拿到JAVA软件工程师资格证书需要哪些知识:1、J2SE平台Java程序设计,包括各种Swing图形程序设计,...

  • 如何成为一名汽车软件工程师?

    作为汽车软件工程师,肯定都知道图1的V流程,左边的需求,设计,右边的测试。在工作中,V流程的各环节几乎都做过,很有感触。图1 V流程,引自[2] 首先谈需求,没有需求就没有V流程后面的设计和测试。先看下需求的...

  • 【架构实践】架构师应该知道的 97 件事

    …… 下面是架构师应该知道的 97 件事。 1.客户需求重于个人简历(Nitin Borwankar) 客户需求至上。为了自己的简历更炫而采用新技术是沽名钓誉,往往事与愿违。 2.简化根本复杂性,消除偶发复杂性(Neal Ford) 分析...

  • 什么是软件测试工程师

    说到软件测试的前途,我觉得应该说是软件测试人员的职业规划,请注意我说的是人员,因为这个岗位的前途肯定是有的,就算要陨落也不是在你这一代测试工程师中陨落,因为这是一个新鲜的岗位,是个年轻的岗位,未来...

  • 机器视觉软件工程师的生活是怎样的?

       大家好,本人是刚刚入职的视觉工程师,现在已经一年了,也给大家分享一下在这一段时间里,我做了什么,以及学到了什么。对了,虽然我只做了两个月的视觉工程师,但是我已经连续写了12年的日记了,我想把这个好...

  • 软件测试工程师面试必备技能

    一年之际在于春,新年伊始,又到了跳槽的好季节,不知道你是不是已经安于现状,就自己的经历来分析下作为测试工程师跳槽前应该准备哪些知识,才能在面试官面前表现出众。 主要分享内容如下: 被面试到的 Linux 命令...

  • 《软件架构师应该知道的97件事》 读书笔记

    问题出在你没有认清自己的角色,你还是把自己当成工程师,而项目投资人明白他在跟你谈判工程师总是想尽办法寻求合作,谈判者则绞尽脑汁占得先机,谈判时绝对不能在对方的第一个要求上妥协让步 2.一行代码比五百...

  • 「职业解读」软件测试工程师

    可能大家很多人不知道软件测试是干嘛的,可能有些听过的不会就是这里点点那里点点吗?今天,带大家详细地了解一下软件测试工程师这个职业 01 职业内涵 测试开发工程师,是指测试开发出来的项目,并且日常会...

  • 写代码就能成为软件工程师?这可不是同一件事

    导语:什么样的开发者才能被真正地称之为软件工程师?有人说,只要会写代码即可;也有人说,“10x 编码者”必然是一位软件工程师;还有人说,只要熟悉各种软件开发原则就能满足这一岗位的需求。实则,想成为一个资深...

  • 软件测试工程师简历项目经验怎么写?--1000个已成功入职的软件测试工程师简历范文模板(含真实简历)

    二、软件测试工程师:简历模板 三、软件测试工程师:简历包装 1.基本信息: 2.教育背景: 3.专业技能 4.工作经历 5.项目经验 6.自我评价 四、软件测试工程师:简历总结 一、前言:浅谈面试 面试是我们...

  • 揭密字节跳动薪资职级,资深软件测试工程师的收入你想象不到

    下面的《软件测试工程师发展规划路线》和配套【资源】,应该会给你带来帮助和方向:需要的朋友可以在文末打包获取。 《软件测试工程师发展规划路线》 一、测试基础 了解测试的基础技能,掌握主流缺陷管理工具的使用...

  • 软件测试工程师笔试题(附带答案)

    软件测试工程师笔试题,试卷内包含分数

  • 远程软件工程师的10个最佳实践

    最佳实践之九:学会说是 作为一个软件工程师,参与的每一个项目都有一系列的问题需要解决,需要与他人合作,以及需要学习新的编程语言或新技术。我们都可能是一个很容易说“是”的人,为一个项目做贡献,或者提供...

  • 嵌入式工程师学习路线(软件类)

    嵌入式工程师系统学习路线规划

Global site tag (gtag.js) - Google Analytics