軟件工程師必學的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.pswp.cn/news/447475.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447475.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447475.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 的 chmod 命令,對一個目錄及其子目錄所有文件添加權限

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 對一個目錄及其子目錄所有文件添加權限 命令: chmod 777 -R ./html 給予html目錄下可讀可寫可操作權限。 或者 chmod -R…

Linux 下壓縮與解壓.zip 和 .rar

1)對于.ziplinux下提供了zip和unzip程序,zip是壓縮程序,unzip是解壓程序。它們的參數選項很多,可用命令zip -help和unzip -help查看,這里只做簡單介紹,舉例說明一下其用法:# zip test.zip test.jpg test.pn…

優秀的程序員VS糟糕的程序員

優秀的程序員和一般的程序員差別在哪里?怎么才能成為優秀的程序員?我們選擇了這個職業就要把他做好! 優秀的程序員: 1、邏輯能力很強,這也是解決問題的關鍵。 2、分析能力。可以很好的解決復雜問題。 3、事情做得專…

圖解 Java 常用數據結構

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 最近在整理數據結構方面的知識, 系統化看了下Java中常用數據結構, 突發奇想用動畫來繪制數據流轉過程. 主要基于jdk8, 可能會有些特性與…

程序員生存定律--使人生永動的勢能

程序員生存定律這系列的目錄在這里:程序員生存定律--目錄 喜歡從頭瞄的,可以移步。 ------------------------------------------------------------------------------- 這篇說的是精神,比較務虛,不感興趣的可以略過。 在國內有…

int 和 Integer 的區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1、Integer是int的包裝類,int則是java的一種基本數據類型 2、Integer變量必須實例化后才能使用,而int變量不需要…

度量術語之二:應用類和開發類生產率(實際度量案例)

一個令人震驚的事實是連生產率這種常見度量數據都沒有一個簡單的定義。連我們日常經常用到的公式:生產率工作產品/工作量(工作產品可以是代碼行,功能點,也可以是任何可以計數的東西,比如文檔頁數)都是錯誤的…

注解 @ModelAttribute 運用詳細介紹

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。1.ModelAttribute注釋方法   例子(1),(2),(3&#x…

編程語言 IDE 對比

IDE是集成開發環境的英文縮寫,所謂集成開發環境,就是將你在開發過程中所需要的工具或功能集成到了一起,比如代碼編寫、分析、編譯、調試等功能,從而最大化地提高開發者的工作效率。每種編程語言都有一些特定的IDE,本文…

強制更新 maven 緩存

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 mvn dependency:purge-local-repository

程序員為什么那么難升職

一個有趣的現象是老程序員很難升職,如果你因為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 這樣就安裝成功了。默認…

在動態網絡下實現分布式共享存儲

摘要:本文介紹了分布式環境下實現共享內存模型會遇到的各種問題和挑戰,并針對不同問題介紹多種算法的優劣性。本文是對現階段該領域研究現狀的總體介紹,通過本文能了解動態分布式共享內存研究的前沿狀況、挑戰與機遇。 共享內存系統是普通單…

集合拷貝通用方法、list<A> 轉換成 list<B> (屬性相同)

拷貝2個擁有相同屬性的集合實現: 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 package com.hydbest.app.lbd.marketing.common.utils;import com.alibaba.fastjson.JSON…

Linkedln技術高管Jay Kreps:Lambda架構剖析

摘要:Jay Kreps是Linkedln的一名在線數據架構技術高管,在日常工作中,Jay Kreps經常被問及有關Lambda架構的問題,為此他結合實際經驗和個人體會,針對Lambda架構進行深度剖析,分析了它的優缺點以及采用的替代…

JWT ( JSON Web Token ) 入門教程

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、跨域認證的問題 互聯網服務離不開用戶認證。一般流程是下面這樣。 1、用戶向服務器發送用戶名和密碼。 2、服務器驗證通過后&#x…

優秀程序員必備的15大技能

編程是個很復雜的玩意,但是成就優秀程序員的很多因素和我們在學校中早期學到的相差無幾。本文靈感來源于Robert Fulghum的《All I Really Need to Know I Learned in Kindergarten》。 1.分享 盡可能地使用開源,并且如果有能力的話也可以把自己的成果分…

注解 @Target 用法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Target: Target說明了Annotation所修飾的對象范圍:Annotation可被用于 packages、types(類、接口、枚…