自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇百萬年薪程序員博文,Python程序員心得,我視它為生存指南!

開發(fā) 后端
我個(gè)人認(rèn)識(shí)一些非常有才華的開發(fā)人員,他們可以一帆風(fēng)順地創(chuàng)建極好的軟件。正是這些天賦人士,使得外行人對(duì)我們這個(gè)行業(yè)充滿了很高的期望。但我要說的一個(gè)可悲的事實(shí)是:并非每個(gè)人都是忍者/大師/明星開發(fā)者。

我個(gè)人認(rèn)識(shí)一些非常有才華的開發(fā)人員,他們可以一帆風(fēng)順地創(chuàng)建極好的軟件。正是這些天賦人士,使得外行人對(duì)我們這個(gè)行業(yè)充滿了很高的期望。但我要說的一個(gè)可悲的事實(shí)是:并非每個(gè)人都是忍者/大師/明星開發(fā)者。

我就不是這些閃耀的新星,我只是一名平庸的開發(fā)者。如果你也不是天才玩家,那么本文將指導(dǎo)你如何在這個(gè)行業(yè)中生存下去。

最簡(jiǎn)單的事情——只要google一下

我記不了很多東西。像標(biāo)準(zhǔn)庫中的函數(shù)和方法、參數(shù)位置、軟件包名稱,樣板代碼等等,都在我腦容量之外。

所以,我必須使用google搜索。我每天都這樣做。我也一直在重復(fù)使用舊項(xiàng)目的代碼。有時(shí)我甚至從StackOverflow或Github復(fù)制粘貼答案。是的,我的開發(fā)其實(shí)可稱之為:StackOverflow驅(qū)動(dòng)開發(fā)。

但我并不孤單。許多其他開發(fā)人員也這樣做。有一個(gè)受眾面很廣的twitter討論就是由Ruby on Rails的創(chuàng)建者所啟動(dòng)的。

那么,為什么一開始會(huì)認(rèn)為這種行徑是不好的呢?因?yàn)樗腥舾扇秉c(diǎn):

  • 會(huì)導(dǎo)致你復(fù)制到糟糕的設(shè)計(jì)決策或易受其他人攻擊的代碼
  • 會(huì)形成一種依賴心態(tài):要是我們不能google到內(nèi)容,那么只能向人求助了
  • 沒有網(wǎng)就不能工作

但是,我不認(rèn)為這些是大問題。它甚至可以作為是你的秘密武器。我有一些建議可用于減少其負(fù)面影響。

生存指南:

  • 使用IDE來獲得自動(dòng)完成和建議,所以你不必google編程語言的基礎(chǔ)內(nèi)容;
  • 記住你曾解決過這個(gè)問題的地方(而不是如何解決的)。這樣你便可以隨時(shí)在那里找到解決方案;
  • 所有粘貼到項(xiàng)目中的代碼你稍后都應(yīng)該進(jìn)行分析、重構(gòu)和審查。這樣我們?cè)诳焖偬峁┙鉀Q方案的同時(shí)也不會(huì)損壞項(xiàng)目。

一切保持簡(jiǎn)單明了

我們說什么,機(jī)器就做什么。即便是錯(cuò)的,它們也毫不遲疑。所以,軟件開發(fā)中的主要問題不是機(jī)器,在于開發(fā)人員的心智能力。而這玩意提升的空間是非常有限的。所以,我們——作為平庸的開發(fā)人員——不能將有限的腦力浪費(fèi)在創(chuàng)建復(fù)雜的抽象、模糊算法或不可讀的長代碼塊上。你需要保持一切簡(jiǎn)單明了。

但是,我們?cè)趺磁卸ùa是簡(jiǎn)單還是復(fù)雜?我們使用WTFs / Minute方法來衡量代碼質(zhì)量。

這個(gè)原則很容易理解。每當(dāng)你在代碼中發(fā)現(xiàn)一些你不明白的東西時(shí)——哦,這太復(fù)雜了。怎么做呢?

  • 重寫,使設(shè)計(jì)更干凈
  • 提供文檔
  • 給最棘手的部分添加注釋。但請(qǐng)記住,注釋應(yīng)該描述的是代碼本身

如何從頭開始保持簡(jiǎn)單明了

  • 對(duì)變量、函數(shù)和類使用正確的名稱
  • 確保程序的每個(gè)部分只做一件事
  • 純函數(shù)優(yōu)于正則函數(shù)
  • 正則函數(shù)優(yōu)于類
  • 僅在強(qiáng)烈需求的情況下使用類

不自信的我

一些開發(fā)人員會(huì)證明自己可以提供高質(zhì)量的代碼。請(qǐng)看圖中的這位女士:阿波羅登月計(jì)劃的首席軟件工程師Margaret Hamilton。那幾乎有她人那么高的是什么呢?好吧,那正是她為登月任務(wù)編寫的代碼:

[[236774]]

但是,每當(dāng)我編寫任何代碼時(shí)——我都不自信。即使是項(xiàng)目最簡(jiǎn)單的部分,我也可以把事情搞得一塌糊涂。搞糟的原因包括:

  • 語言錯(cuò)誤
  • 邏輯錯(cuò)誤
  • 設(shè)計(jì)錯(cuò)誤
  • 樣式錯(cuò)誤
  • 安全錯(cuò)誤
  • WTF錯(cuò)誤(我向來最為喜歡的!)

關(guān)于“學(xué)習(xí)如何編寫沒有bug的代碼”的魔法書是不存在的。因?yàn)樗熊浖加衎ug——除了這個(gè)框架之外。遇到bug我們就應(yīng)該處理掉。

關(guān)鍵要點(diǎn)是:每個(gè)人編寫的代碼都不應(yīng)該帶有明顯的錯(cuò)誤。對(duì)的,至少,我們應(yīng)該朝著這個(gè)目標(biāo)去做。但是我是如何保護(hù)我的項(xiàng)目免受我的摧殘呢?方法很多。

生存指南:

  • 編寫測(cè)試。編寫很多測(cè)試。從集成測(cè)試到單元測(cè)試。在每次pull請(qǐng)求前在CI中運(yùn)行測(cè)試。這可以避免一些邏輯錯(cuò)誤;
  • 使用靜態(tài)類型或可選的靜態(tài)類型。例如,我們?cè)趐ython中使用mypy,在javascript中使用flow。積極作用:更清潔的設(shè)計(jì)和“編譯時(shí)”檢查;
  • 使用自動(dòng)樣式檢查。每種語言都有很多樣式檢查器;
  • 使用質(zhì)量檢查。有些工具在你的代碼庫上運(yùn)行一些復(fù)雜的啟發(fā)式算法來檢測(cè)不同的問題,比如這個(gè)代碼行內(nèi)有太多的邏輯,這個(gè)類是不需要的,這個(gè)函數(shù)太復(fù)雜了;
  • 審查你的代碼。在合并為master之前對(duì)其進(jìn)行審查。以及合并后的某個(gè)時(shí)間也是如此;
  • 付錢讓其他人來審核你的代碼。此手段可以產(chǎn)生巨大的積極影響!因?yàn)槿绻悄吧拈_發(fā)人員來查看你的代碼,他們更容易發(fā)現(xiàn)不一致和糟糕的設(shè)計(jì)決策。

不僅適用于我

大約十年前,在我的團(tuán)隊(duì)開發(fā)出我們的第一個(gè)大型軟件項(xiàng)目時(shí),我們將其作為java源文件發(fā)布。然而,它無法在目標(biāo)服務(wù)器上編譯。這距離需要提交給客戶只有若干小時(shí)了。這是一個(gè)巨大的失敗!最后我們用盡辦法終于能夠啟動(dòng)并運(yùn)行了,但不可否認(rèn)這真的是一次刻骨銘心的體驗(yàn)。

發(fā)生這種情況是因?yàn)闃?gòu)建管道中存在眾多配置和復(fù)雜性。而我們無法妥善管理這個(gè)系統(tǒng)的復(fù)雜性。所以,從那一天起,為了減少這種復(fù)雜性,我嘗試在隔離的環(huán)境中打包我的程序。并且在實(shí)際部署發(fā)生之前在這個(gè)環(huán)境中測(cè)試它們。

在docker(通常還有容器)崛起的近幾年,事情變得簡(jiǎn)單起來。docker允許你在相同的隔離環(huán)境中運(yùn)行開發(fā)、測(cè)試和生產(chǎn)。所以,你永遠(yuǎn)不會(huì)錯(cuò)過任何重要的事情。

那么你會(huì)怎么做?說說我自己,我在創(chuàng)建服務(wù)器、初始配置或連接的時(shí)候總是會(huì)忘記一些事情。因?yàn)橛羞@么多需要記住的事情!幸運(yùn)的是,這些我們都可以自動(dòng)化。有很多不同的工具可以自動(dòng)化部署過程,這些工具厲害極了,如:terraform,ansible和packer。閱讀工具信息,找出實(shí)際需要哪一個(gè)用于任務(wù)。

我也嘗試盡快建立CI / CD。這樣,如果我的構(gòu)建在測(cè)試或部署中失敗,那么就會(huì)有報(bào)告發(fā)我。

生存指南:

  • 自動(dòng)化用于部署的任何內(nèi)容;
  • 使用docker進(jìn)行應(yīng)用程序開發(fā)、測(cè)試和部署;
  • 使用部署工具。

應(yīng)用程序部署后,我仍然不自信

終于,我的應(yīng)用程序已經(jīng)進(jìn)入了產(chǎn)品階段。它可以工作了。我可以休息休息,應(yīng)該不會(huì)出什么問題了。等等,不!一切都崩潰了。是的,我沒有說錯(cuò):一切。

實(shí)際上,有一些工具可以使得查找和解決現(xiàn)有問題更加容易。

  • Sentry。當(dāng)你的任何用戶發(fā)生錯(cuò)誤時(shí)——你將收到通知。幾乎綁定了所有編程語言;
  • 使用不同的服務(wù)和工具將多個(gè)進(jìn)程和服務(wù)器的日志收集到一個(gè)地方;
  • 服務(wù)器監(jiān)控。這是你可以為CPU,磁盤,網(wǎng)絡(luò)和內(nèi)存配置顯示器的地方。你甚至可以在用戶實(shí)際破壞你的服務(wù)之前發(fā)現(xiàn)需要增加的時(shí)間

簡(jiǎn)而言之,我們需要監(jiān)控生產(chǎn)中的應(yīng)用。我們有時(shí)使用所有這些工具,有時(shí)只使用最需要的部分。

學(xué)無止境

需要學(xué)習(xí)的東西是無窮的。如果我們想編寫出好的軟件,那么我們需要不斷地學(xué)習(xí)怎么做。沒有捷徑也沒有魔法。每天進(jìn)步一點(diǎn)點(diǎn),就會(huì)越來越好。

總之,我們需要理解兩件基本的事情:

  • 每個(gè)人都會(huì)遇到問題。關(guān)鍵是我們得對(duì)這些問題做好準(zhǔn)備;
  • 我們可以將問題的源頭控制到一些可接受的水平。

這些與你的心智能力或心態(tài)無關(guān)。 

責(zé)任編輯:龐桂玉 來源: 今日頭條
相關(guān)推薦

2020-03-30 08:30:53

年薪程序員水貨

2018-04-23 11:00:06

程序員養(yǎng)生健康

2011-07-12 13:35:04

程序員

2019-09-21 21:25:04

程序員代碼優(yōu)雅代碼

2013-07-04 13:50:14

2015-07-28 17:58:22

程序員指南

2009-06-22 09:06:57

程序員技術(shù)升級(jí)

2013-08-20 09:33:59

程序員

2012-03-06 09:22:46

程序員

2009-03-26 09:22:05

2021-02-20 13:55:35

程序員計(jì)算機(jī)技術(shù)

2013-07-24 14:17:10

2020-05-06 08:21:37

程序員年薪能力

2019-01-23 09:10:37

2009-05-21 15:58:12

程序員工作經(jīng)驗(yàn)職場(chǎng)

2011-05-13 14:34:02

程序員

2018-12-29 10:08:34

程序員年薪互聯(lián)網(wǎng)

2021-04-20 16:51:07

程序員技術(shù)開發(fā)

2022-07-20 16:57:18

程序員高薪職業(yè)

2013-04-17 10:28:40

程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)