软件工程师必学的9件事

本文是html5tricks原创翻译,转载请看清文末的转载要求,谢谢合作!

三年前,我还在巴塞罗那的神经科学实验室工作,忙着研究脑电波、教授心理学上的认知系统课程。而今天,我以设计和写软件为生。

你或许会满头黑线:隔行如隔山,这转变也忒快了吧。其实不然,早在以前我就已经写过很多软件了——比如想理解扫描出来的有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秒或者更少?好吧,这才是正常值。你的思绪就像一只猴子,它在树上跳来跳去,看到哪个枝干最近就抓着哪个跳过去。你可能还不理解,我再重新用专有名词表述一下:现在比较流行的说法是联想性思维。如果你想发明创造,那么联想性思维绝对是不可或缺的好工具,但是它却是专注的杀手。幸运的是,专心致志是可以学习的。现在有非常非常多号称“能提高生产力的高科技”,但是都还停留在表面因素。谁都不希望在写软件的时候,思绪飘啊飘得在想意大利面怎么做才更好吃。我们需要驯服这只顽皮的猴子,一劳永逸。

不过适合我的方法可能并不适合你。我通过定期使用上述沉思的方法(这方法还有其他有益之处)从而获得了很大的成效。不过即便是如此,我也不敢保证每个人都适合。我所要推荐的是,要保持你的头脑处于最佳状态,这很重要。还觉得冥想是在浪费时间?我们每周都会去健身房锻炼身体,不过在心理锻炼上你得花上至少两倍于此的时间:减去几磅杂念。锻炼自己的思绪以便保证在工作时自己的头脑可以专注更长时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解 Java 常用数据结构

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与…

编程语言 IDE 对比

IDE是集成开发环境的英文缩写,所谓集成开发环境,就是将你在开发过程中所需要的工具或功能集成到了一起,比如代码编写、分析、编译、调试等功能,从而最大化地提高开发者的工作效率。每种编程语言都有一些特定的IDE,本文…

程序员为什么那么难升职

一个有趣的现象是老程序员很难升职,如果你因为3K工资太低而要辞掉工作,你的上司宁可去外面找一个5K工资的新人,也不会来挽留你。那么程序员为什么那么难升职,这里总结了几点。你上司的问题你晋升困难,最大的主观原因在…

Docker 安装 Redis (Redis 配置)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 获取 redis 镜像 docker pull redis 不加版本号默认获取最新版本,也可以使用 docker search redis 查看镜像来源 查看本地镜像…

百度首席科学家 Andrew Ng谈深度学习的挑战和未来

摘要:7月7日上午,百度首席科学家Andrew Ng应邀做客中国科学院自动化研究所并做了《Deep Learning:Overview and trends》的学术报告。 【编者按】人工智能被认为是下一个互联网大事件,当下,谷歌、微软、百度等知名的高…

Linux 安装 jdk ( 两种方式 )

安装jdk有两种方法:手动安装 yum安装。 方式一: yum安装 1、查询要安装jdk的版本, 命令:yum -y list java* 2、安装jdk1.8 yum install -y java-1.8.0-openjdk.x86_64 3、查询jdk版本:java -version 这样就安装成功了。默认…

Linkedln技术高管Jay Kreps:Lambda架构剖析

摘要:Jay Kreps是Linkedln的一名在线数据架构技术高管,在日常工作中,Jay Kreps经常被问及有关Lambda架构的问题,为此他结合实际经验和个人体会,针对Lambda架构进行深度剖析,分析了它的优缺点以及采用的替代…

JWT ( JSON Web Token ) 入门教程

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后&#x…

注解 @Target 用法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Target: Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚…

java 并发包之 LongAdder 源码分析

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 LongAdder是java8中新增的原子类,在多线程环境中,它比AtomicLong性能要高出不少,特别是写多的场景。…

解决:Command line is too long. In order to reduce its length classpath file can be used.

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 原本可以正常运行的项目,突然出现这个错: Command line is too long. In order to reduce its length class…

性能提升利器之固态硬盘和序列化漫谈

摘要:假设我们已经构建了下一个杀手级应用,而且变得越来越受欢迎,突破负载极限,以我们目前的增长的速度,需要在3个月内将需要将性能提升10倍。我们该怎么做? 【编者按】当面对一个性能扩展问题时&#xff…

查看本机IP的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 打开网络和共享中心 2.更改适配器设置 3. 右键选择 状态 4.选择详情 5.找到IP

来自前苹果高管Heidi Roizen的经验之谈

摘要:Heidi Roizen曾是T/Maker的联合创始人兼CEO;此后Heidi Roizen加入苹果公司担任开发者关系的高级副总裁。本文她分享了8条箴言,希望能为各位开发者带来启迪,体会生活与工作上的人生感悟。 【编者按】Heidi Roizen曾是T/Maker的…

解决:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408,

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.只是想启动elasticsearch,报错如题: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c…

Docker CEO Ben Golub:Docker借助开源、天时走向成功

摘要:Docker CEO Ben Golub接受了Gigaom专访,他表示,Docker正是借助开源、天时走向了成功。而作为Docker前身,现任CTO Hykes在运作dotCloud过程中,发现多平台的需求越来越受到用户关注,于是Docker孕育而生。…

果断Mark!Searchcode——源代码搜索利器

摘要:Searchcode是一款免费的源代码/文档搜索引擎,汇聚Github、Codeplex、Sourceforge等多家开源站点,拥有超过20万个项目、180亿行源代码,能以特殊字符、语言、仓库和源方式从90多种语言找到函数、API的真实代码。 Searchcode是…

elasticsearch 安装( 阿里云ECS )、远程访问、启动报错处理

附另 2 文章: elasticsearch-head 安装 kibana 安装 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 从网上下载到 linux 版本的 tar 包:elasticsearch-6.7.…

解决:git: command not found、apt-get: command not found、git 安装

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 运行 git 失败,因为没有安装 git。 于是就安装:apt-get install git,于是得到后一个报错。 原来 a…

为什么程序员要尽量少写代码

软件开发的一个最基本的事实是写代码,但是最大的误区之一就是把写代码当做工作。当我作为一个程序员第一次参加工作的时候,就犯了这样的错误。老实说,写代码真的是一件特有意思的事,它的强大功能,它的多种作用等等都让…