怎樣度過第一份編碼工作的艱難時期?
本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)
軟件工程或是數(shù)據(jù)科學(xué)對于很多人來說,實在不是一件容易的事。特別在沒有編碼經(jīng)驗的情況下,如果第一份工作是在這兩個領(lǐng)域,會讓人士氣低落。
我常常收到“尋求改進(jìn)方法”的留言或者私信。但事實上,你真正需要的是有人對你說“你能做到!”
本文總結(jié)了我在第一份軟件工程工作中犯的錯誤。假如你和那時的我一樣,正在經(jīng)歷艱難的日子,這篇文章應(yīng)該能夠給你幫助。
1. 巧妙即可,無需可讀
寫好代碼很難,理解錯誤的代碼更難。剛開始時我們很可能難以直觀理解,有一個高級開發(fā)人員就以下問題提出了建議:
- 過度抽象
- 同一行上有多個嵌套的if/else語句
- 過度使用鏈?zhǔn)椒椒?/li>
- 從堆棧溢出復(fù)制或粘貼正則表達(dá)式,不帶注釋
將邏輯壓縮到盡可能小的空間里,使筆者自覺很聰明。但代碼的可讀性就消失了。根據(jù)克尼根定律:調(diào)試的難度是編寫代碼的兩倍。因此,如果讀者盡可能巧妙地編寫代碼,那么根據(jù)定義,就因為不夠聰明而無法對其進(jìn)行調(diào)試。
2. 提交審閱的代碼合并了多個功能
筆者最先學(xué)到的事項之一,就是不要在同一個請求中組合多個特性。這對于審查代碼的人并不友好。超過幾百行的代碼,會讓其他人很難在腦海中走一遍執(zhí)行過程。
有時這是tickets范圍不佳的結(jié)果。所以筆者總是告訴新開發(fā)人員,如果他們認(rèn)為可以將ticket進(jìn)一步細(xì)分為子ticket,則應(yīng)回推,越小越好。
3. 使用無上下文的變量名
想出好的變量名非常困難,但那時我很想要盡快完成它。所以筆者選擇了腦海中浮現(xiàn)的第一個名字。
- 用戶的姓氏是uln。
- 一組電子郵箱是array。
兩者都不算好主意,并且使得任何人都很難理解所寫內(nèi)容,甚至包括筆者自己。
4. 讀取特性Ticket后立即編寫代碼
圖源:pexels
花一周的時間在一個特性上,然后才意識到這一特性是錯誤的,這實在是太尷尬了,然而筆者不止一次犯過這個錯誤。
放松心態(tài),理解業(yè)務(wù)問題,并且圍繞其規(guī)劃代碼,這對于工程師而言工作量很大。從中吸取教訓(xùn),在筆者自己的創(chuàng)業(yè)計劃開始之前,讓新的開發(fā)人員詳細(xì)規(guī)劃一些tickets。這種微觀規(guī)劃水平有助于理清思路,制定更有效的解決方案。
5. 注釋過多或過少
最初,筆者沒有任何注釋。
第二階段時,筆者每一行都有注釋。add_two_numbers的函數(shù)將會有著 # adds 2 numbers的注釋。這就有點矯枉過正了。
回想一下,直到筆者閱讀了其他開發(fā)人員編寫的足夠多的代碼,并且注意到希望他們添加注釋的地方,才明白了注釋的真正用處和正確數(shù)量。
6. 推送重復(fù)和未使用的代碼
筆者做了如下所有工作:
- 已存在于應(yīng)用程序中的書面功能
- 保留自動生成但未使用的文件(即:測試文件)
- 添加了未使用的軟件包
有些框架會自動生成許多不必要的文件。當(dāng)開始使用一個應(yīng)用程序時,也不知道所有的現(xiàn)有代碼。筆者發(fā)現(xiàn),避免這些問題的最佳方法是,在提交代碼供審閱之前,一定要仔細(xì)閱讀自己編寫的代碼。
圖源:unsplash
7. 允許安全漏洞
筆者很感謝一位出色的高級開發(fā)人員,使筆者的代碼免受黑客攻擊。我做了下述所有操作:
- 允許SQL注入
- 允許通過URL跳轉(zhuǎn)訪問受限頁面
- 僅用于前端驗證
- 具有增量ID的命名空間URL
建立一份有著最佳安全實踐的心理檢查清單花了很長時間,現(xiàn)在筆者查看其他開發(fā)人員代碼時會使用該清單。
8. 編寫低效的數(shù)據(jù)庫查詢
筆者在開始第一份工作時,對數(shù)據(jù)庫一無所知。大概花了一年的時間才弄明白數(shù)據(jù)庫索引。
那時我寫了很多N+1 queries,并且創(chuàng)建了db表來存儲大量沒有索引的數(shù)據(jù)。這兩者都是應(yīng)用程序緩慢而讓人煩悶的原因。
9. 使用基于錯誤的條件邏輯
條件語句if/else是軟件的核心部分。在偽代碼中,它們通常是這樣的:
- if x is true
- do this
- else
- do that
但是筆者在編寫自己的第一個投門磚軟件時,就充滿了如下的邏輯:
- do this
- if this fails
- do that
有時需要挽救一個錯誤,比如當(dāng)碰到一個不可靠的API時。偶爾出現(xiàn)這樣的問題是可以的,但這不能是常態(tài)。
編寫軟件是一件困難但充滿成就感的事,實踐能讓我們很快成長起來。正處于困難的時期的小伙伴們,但行好事,莫問前程,結(jié)果會在你努力的過程中悄悄地來。