0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

失敗是成功之母,一名開(kāi)發(fā)工程師的工作經(jīng)歷

工程師人生 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:工程師吳畏 ? 2018-07-02 17:34 ? 次閱讀

上周我和同事們簡(jiǎn)單地聊了聊我們工作中搞砸的那些事兒。如今早已不再犯那些錯(cuò)了,所以想起過(guò)去就覺(jué)得很好笑。但是笑歸笑,其實(shí)當(dāng)時(shí)犯的這些錯(cuò)讓我們受益頗深。

分享自己犯錯(cuò)的經(jīng)歷至關(guān)重要,能讓別人從中吸取經(jīng)驗(yàn)教訓(xùn),而且可能讓他們工作起來(lái)更上手。我在這兒記錄了幾條自己最近犯的錯(cuò)。

為什么有那么多生產(chǎn)數(shù)據(jù)庫(kù)被誤刪?

幾個(gè)月之前,Reddit 上發(fā)了一篇文章,寫(xiě)的是一個(gè)入門級(jí)開(kāi)發(fā)人員在上班第一天就誤刪了生產(chǎn)數(shù)據(jù)庫(kù)。我們看到類似這種有人犯了特大的、不可磨滅的錯(cuò)誤的文章,都不免心生畏懼。我們意識(shí)到自己并不是沒(méi)可能犯那種錯(cuò)——大多數(shù)時(shí)候都是懸崖勒馬。

我在干第一份工作的時(shí)候,有一個(gè)高級(jí)數(shù)據(jù)庫(kù)管理員在上班第一天就誤刪了生產(chǎn)數(shù)據(jù)庫(kù),這種例子簡(jiǎn)直比比皆是。工作團(tuán)隊(duì)用一周前舊的數(shù)據(jù)庫(kù)備份幫他彌補(bǔ)了過(guò)失,讓他保住了工作。如今十年過(guò)去了,都仍用這件事拿他開(kāi)涮。

今年年初有天早上,我被叫去調(diào)查一個(gè)客戶生產(chǎn)中出現(xiàn)的問(wèn)題。他們本來(lái)要針對(duì)一小部分用戶進(jìn)行產(chǎn)品的 β 測(cè)試,但是他們的網(wǎng)站首頁(yè)突然什么都顯示不出來(lái)了。我猜想可能是系統(tǒng)有 bug 或者有漏洞所致。

我登錄進(jìn)生產(chǎn)機(jī)器,調(diào)出數(shù)據(jù)庫(kù),發(fā)現(xiàn) articles 表是空的。OK,這證實(shí)了網(wǎng)頁(yè)顯示空白的情況。

用戶表里面還是有用戶的,這就奇怪了,所以我們丟了所有的 articles,但起碼他們的測(cè)試用戶仍有他們的賬號(hào),我們可以解釋說(shuō)是這是個(gè)測(cè)試版,而且這種事情時(shí)有發(fā)生。

接下來(lái)一會(huì)兒我就犯迷糊了。我記不清楚自己干了什么,我認(rèn)為自己不會(huì)蠢到在控制臺(tái)窗口輸入了刪除表中用戶的指令,可情況就是這樣——現(xiàn)在既沒(méi)有 articles 表,也沒(méi)有用戶表。我呆坐著,感覺(jué)有點(diǎn)震驚。

然后我的大腦高速運(yùn)轉(zhuǎn),開(kāi)始想辦法修復(fù)問(wèn)題。我真的刪掉用戶表了嗎?是的。我們運(yùn)行備份數(shù)據(jù)庫(kù)了嗎?沒(méi)有。該怎么向客戶解釋呢?我不知道。

我記得自己去找了項(xiàng)目經(jīng)理,坐在她旁邊解釋事情發(fā)生的經(jīng)過(guò),articles 表中沒(méi)有數(shù)據(jù)了,所以網(wǎng)站看上去是空的。哦對(duì)了,我還誤刪了用戶表?,F(xiàn)在他們需要重新邀請(qǐng)所有的用戶——如果他們還能想清楚用戶都有誰(shuí)的話。哎呀。

我回到自己的座位上,感覺(jué)深受挫敗。

但是我覺(jué)得事情有些蹊蹺,我們?cè)趺纯赡芤婚_(kāi)始就丟了所有的 articles 表呢?于是我繼續(xù)深究下去,一方面是因?yàn)殡y以接受這個(gè)結(jié)果,一方面是想挽回顏面。之后過(guò)了一小會(huì)兒,我注意到了關(guān)鍵問(wèn)題。

服務(wù)器上還有另外 5 個(gè)數(shù)據(jù)庫(kù),其中一個(gè)的名字和我正在看的那個(gè)數(shù)據(jù)庫(kù)的名字非常相似。

我一檢查,發(fā)現(xiàn) articles 都在里面,用戶表也完好無(wú)損。事實(shí)證明是因?yàn)榕渲冒l(fā)生變化,無(wú)意間讓它變成了生產(chǎn)數(shù)據(jù)庫(kù),導(dǎo)致網(wǎng)站指向了全新的數(shù)據(jù)庫(kù)。我在里面看到的那些用戶呢?種子數(shù)據(jù)罷了。

真是如釋重負(fù)!一早上神經(jīng)緊繃、胃酸翻涌,搞得我渾身不適,但好在我們“修復(fù)”了所有的數(shù)據(jù),并且找到了問(wèn)題真正的癥結(jié)所在,沒(méi)有提前宣布誤刪數(shù)據(jù)庫(kù)的壞消息。

這個(gè)小插曲讓我們受益良多,最簡(jiǎn)單的一個(gè)就是:現(xiàn)在我們總是在給數(shù)據(jù)庫(kù)做備份……這可能是我們開(kāi)發(fā)人員最有效的胃藥。

總趕進(jìn)度,卻從來(lái)趕不上進(jìn)度

我最近所犯的另一個(gè)突出 錯(cuò)誤沒(méi)那么戲劇化,實(shí)際上是由一個(gè)個(gè)小錯(cuò)誤最終累積造成了大麻煩。

我們項(xiàng)目開(kāi)發(fā)的一大挑戰(zhàn)就是時(shí)間緊張(但也不全是?)

第一次開(kāi)會(huì)時(shí),我們一致覺(jué)得項(xiàng)目需要的時(shí)間比我們能夠拿出來(lái)的時(shí)間多了一倍。從項(xiàng)目一開(kāi)始,截止日期就步步緊逼,所以我們?nèi)挛宄屯ㄟ^(guò)了認(rèn)證環(huán)節(jié),以便進(jìn)入客戶真正關(guān)心的功能環(huán)節(jié)。

我只是之前在一個(gè)單頁(yè) app 中落實(shí)了一次認(rèn)證,但仍然沒(méi)有徹底理解 app 各部分是如何協(xié)調(diào)的。

盡己所能用最快的速度把 app 趕出來(lái),就是大錯(cuò)特錯(cuò),我漏掉了一些非常重要的東西:

用戶在登陸后,是通過(guò) cookie 來(lái)加載的,但是我的 app 頁(yè)面沒(méi)有給加載提供等待時(shí)間,而是根據(jù)事件順序來(lái)決定先后的,所以服務(wù)器會(huì)回復(fù)說(shuō)你沒(méi)有權(quán)限。這種錯(cuò)誤很少見(jiàn),而且很難再出現(xiàn),因?yàn)榇蠖鄶?shù)情況下事件都是按照正確的順序來(lái)完成的。

而且認(rèn)證環(huán)節(jié)也從不檢查用戶令牌是否失效,如果你不經(jīng)常訪問(wèn)網(wǎng)站,當(dāng)發(fā)現(xiàn)了沒(méi)法登上網(wǎng)站后,就需要注銷登錄再重新登進(jìn)去。

令牌應(yīng)該在每次發(fā)起請(qǐng)求時(shí)都進(jìn)行更新,但我從來(lái)都沒(méi)有時(shí)間去理解這些規(guī)則。所以這里又產(chǎn)生了時(shí)間問(wèn)題。如果我們一次同時(shí)發(fā)出幾種請(qǐng)求,收到的回復(fù)取決于他們到來(lái)的順序,那將來(lái)發(fā)送請(qǐng)求用到的令牌就是錯(cuò)的。

我們卯足勁趕進(jìn)度,但最終所用的時(shí)間還是要比給定的時(shí)間多一倍。區(qū)別就是我們開(kāi)發(fā)出的 app 里面漏洞更多了,然后甚而要花更多的時(shí)間對(duì)漏洞進(jìn)行追蹤和修復(fù)。

工作中的失誤讓我尷尬不已,在大家面前感到十分羞愧,因?yàn)槲野岩磺卸几阍伊恕?/p>

我要說(shuō)一點(diǎn):從那之后,我開(kāi)始花時(shí)間學(xué)習(xí)認(rèn)證機(jī)制,現(xiàn)在已經(jīng)理解了 OAuth,、JWT、刷新令牌和失效。我仔細(xì)閱讀了許多庫(kù)里別人寫(xiě)的認(rèn)證代碼,而且建立了基于幾種不同語(yǔ)言版本和框架的認(rèn)證流程。

失敗是成功之母

這是每次失敗的經(jīng)歷給予我的啟發(fā)。只要你愿意學(xué)習(xí),幾乎每次這樣的經(jīng)歷都會(huì)讓你從中受益。

如果人能夠從錯(cuò)誤中吸取教訓(xùn),那么就會(huì)有所進(jìn)步。如果一個(gè)隊(duì)員是第一次犯錯(cuò),我盡量不會(huì)對(duì)他表現(xiàn)出不滿態(tài)度,他們往往已經(jīng)知道自己把事情搞糟了。

但我也努力不去苛責(zé)那些總是犯錯(cuò)、屢教不改的人,他們也需要被同情。

對(duì)待犯錯(cuò),如果你能夠做到這四點(diǎn),那么就會(huì)不斷進(jìn)步:

對(duì)曾經(jīng)犯過(guò)的錯(cuò)誤可以自嘲一番

從中吸取經(jīng)驗(yàn)教訓(xùn)

在之后努力為自己正名

和他人分享,讓他人也能從中獲益。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 工程師
    +關(guān)注

    關(guān)注

    59

    文章

    1571

    瀏覽量

    68574
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3839

    瀏覽量

    64542
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為什么嵌入式驅(qū)動(dòng)開(kāi)發(fā)工程師可以拿高薪?

    技術(shù)領(lǐng)域具有不可替代的地位。 成為一名優(yōu)秀的嵌入式驅(qū)動(dòng)工程師只需要深耕以下幾點(diǎn): 1)堅(jiān)實(shí)的技術(shù)基礎(chǔ): 首先,需要有堅(jiān)實(shí)的基礎(chǔ),包括計(jì)算機(jī)組成原理、微處理器與微控制器架構(gòu)以及電路設(shè)計(jì)與硬件接口知識(shí)
    發(fā)表于 01-07 16:56

    OpenAI從谷歌DeepMind挖角三高級(jí)工程師

    近日,據(jù)Wired最新報(bào)道,OpenAI在人才爭(zhēng)奪戰(zhàn)中取得了顯著成果,成功從競(jìng)爭(zhēng)對(duì)手谷歌DeepMind“挖角”了三高級(jí)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)領(lǐng)域的專家。 據(jù)悉,這三工程師分別是Lu
    的頭像 發(fā)表于 12-04 14:13 ?324次閱讀

    硬件工程師工作必備書(shū)籍推薦

    硬件工程師工作必備書(shū)籍推薦
    的頭像 發(fā)表于 09-24 16:07 ?956次閱讀
    硬件<b class='flag-5'>工程師</b>找<b class='flag-5'>工作</b>必備書(shū)籍推薦

    嵌入式軟件工程師如何提升自己?

    嵌入式軟件工程師如何提升自己? 作為一名嵌入式軟件工程師,在這個(gè)充滿機(jī)遇和挑戰(zhàn)的領(lǐng)域里,如何提升自己顯得非常重要,它決定了你未來(lái)的發(fā)展方向和成就。接下來(lái),我們起探討
    發(fā)表于 06-12 11:20

    索尼誠(chéng)邀軟件工程師參與PS免費(fèi)手游平臺(tái)設(shè)計(jì)

    據(jù)悉,近日,澳大利亞知名媒體TweakTown發(fā)現(xiàn),索尼互動(dòng)娛樂(lè)正在為其旗下的PlayStation Studios Mobile招募一名資深的軟件工程師,負(fù)責(zé)設(shè)計(jì)PlayStation的免費(fèi)手機(jī)游戲平臺(tái)。
    的頭像 發(fā)表于 05-23 17:08 ?746次閱讀

    嵌入式軟件工程師和硬件工程師的區(qū)別?

    和通信協(xié)議,以及熟練掌握種或多種編程語(yǔ)言和開(kāi)發(fā)工具。 主要負(fù)責(zé)的任務(wù)和領(lǐng)域 嵌入式軟件工程師工作涉及到各種任務(wù),主要包括: * 系統(tǒng)設(shè)計(jì):包括確定系統(tǒng)功能、分配資源、優(yōu)化性能等。
    發(fā)表于 05-16 11:00

    如何成為一名嵌入式C語(yǔ)言高手?

    如何成為一名嵌入式C語(yǔ)言高手? 嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域的核心,而C語(yǔ)言則是嵌入式系統(tǒng)開(kāi)發(fā)中最常用的編程語(yǔ)言之。成為一名嵌入式C語(yǔ)言高手需要長(zhǎng)時(shí)間的學(xué)習(xí)和實(shí)踐。下面將介紹
    發(fā)表于 04-07 16:03

    如何成為一名嵌入式C語(yǔ)言高手?

    如何成為一名嵌入式C語(yǔ)言高手? 嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域的核心,而C語(yǔ)言則是嵌入式系統(tǒng)開(kāi)發(fā)中最常用的編程語(yǔ)言之。成為一名嵌入式C語(yǔ)言高手需要長(zhǎng)時(shí)間的學(xué)習(xí)和實(shí)踐。下面將介紹
    發(fā)表于 03-25 14:12

    單片機(jī)如何通過(guò)代碼控制硬件:一名工程師的分享

    今天跟大家聊聊單片機(jī)是怎樣通過(guò)代碼來(lái)操控硬件的。作為一名單片機(jī)工程師,我們平時(shí)的工作就像是給單片機(jī)編寫(xiě)“指令集”,讓它按照我們的意圖去驅(qū)動(dòng)各種硬件設(shè)備。
    的頭像 發(fā)表于 03-06 14:46 ?1564次閱讀
    單片機(jī)如何通過(guò)代碼控制硬件:<b class='flag-5'>一名</b><b class='flag-5'>工程師</b>的分享

    次平臺(tái)開(kāi)發(fā)工程師的“熱辣滾燙”:愛(ài)星物聯(lián)使用流程

    hello,我是一名平臺(tái)開(kāi)發(fā)工程師小王,近期了解到愛(ài)星物聯(lián)平臺(tái)的開(kāi)源版即將發(fā)布,有點(diǎn)小期待,不過(guò)平時(shí)我都是用公版平臺(tái)完成系統(tǒng)搭建和產(chǎn)品控制的,來(lái)看看我是如何進(jìn)行這“熱辣滾燙”的新流程
    的頭像 發(fā)表于 02-26 11:44 ?477次閱讀
    <b class='flag-5'>一</b>次平臺(tái)<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>工程師</b>的“熱辣滾燙”:愛(ài)星物聯(lián)使用流程

    優(yōu)秀電源工程師需要哪些必備技能?

    就帶大家細(xì)數(shù)下優(yōu)秀電源工程師具備的那些技能。、新手必備課程成為一名電源高手需要扎實(shí)的理論基礎(chǔ),涉及電路原理、語(yǔ)言編程和控制理論等多個(gè)學(xué)科領(lǐng)域。為了幫助大家更好地掌握電源
    發(fā)表于 01-29 11:29