程式設計不是...
程式設計不是操作鍵盤快速敲打。程式設計不是牢記鍵盤的快捷鍵並使用退化了的滑鼠工作。如果首要考慮,程式設計並不是要學習每種程式語言。不能通過電腦的品牌、價格、效能和作業系統來決定一個程式設計師是否優秀,也不能通過他們對程式碼編輯器和IDEs--VS-Code、Atom、IntelliJ IDEA、Vim、Notepad++等的偏愛來決定。與許多好萊塢電影潮流的觀念相反,程式設計絕不等同黑客攻擊。
此外,程式設計不僅僅是要記憶程式語言的語法和內建功能。邏輯、條件、if語句和演算法不能描繪出程式設計的藍圖。數學、遞迴、電腦科學和設計模式也不能。雖然它們是程式設計的重要組成部分,但是它們也僅僅是程式設計的一部分。
設計和規劃
在編寫程式碼之前,我們要對專案的設計和體系結構進行了全面的規劃,以確保一個平穩的開發週期或者增加平穩開發週期的可能性。這時候,軟體設計就派上用場了。工具鏈、pipelines、公共和內部API的抽象層、模組化、物件關係和資料庫結構都在這個開發階段進行了規劃。
我們與偵錯程式共存
程式設計藝術要求我們跳出條條框框的限制來思考,用最實用,有效且可行的解決方案解決問題。這可能就是為什麼我們被說是宅家的"I.T.guy"或"客戶支援"的原因了。實際上,我們的工作是查漏補缺。這好像說“程式設計”對“解決問題”的一種美化方式。
換言之,計算機內外都有方便我們的調節器,因此,我們意識到如何閱讀和編寫文件很重要。正確的文件-它以詳細文件的實際頁面的形式出現,或者像在程式碼庫中散佈有價值的評論一樣簡單-這作為程式設計師最重要的生命線之一。沒有它,我們會在黑暗中迷失,無法履行我們作為偵錯程式的職責。很少甚至沒有進展,因為我們大部分時間都花在實驗和調查框架或者瞭解遺留程式碼庫如何工作。總之,這將導致非常糟糕的開發人員體驗。
考慮到所有可能的場景
除錯已經夠困難了。更糟糕的是,程式碼的執行通常不是線性的。由於具有if語句的程式邏輯,大型專案意味著可能執行路徑的多個“分支”。我們必須考慮每種可能的場景和錯誤,特別是涉及使用者輸入。跟蹤每個可執行路徑所需的認知負荷使程式設計變得更加困難。
使用者體驗
走出開發的世界,我們進入一個普通使用者的角色。除了提供功能,新增新功能,修補錯誤和記錄我們的程式碼庫之外,我們還關注普通使用者如何與我們的應用或軟體進行互動。我們思考能帶來良好使用者體驗的多種因素,例如(但不限於)可訪問性,可用性,使用者友好性和可發現性,UI設計,顏色主題,功能動畫和效能。
效能和優化
說到這點,效能本身就是程式設計的一個很重要的方面。我們,特別是那些具有電腦科學背景的人,努力使用和編寫最節省時間和空間的演算法。我們著迷於微不足道的微妙時間尺度,以便充分利用我們可用的記憶體,CPU和GPU。
在web開發的背景下,網路優化是一個需要掌握的重要概念。我們很努力地來減少和壓縮我們的HTML,CSS和JavaScript,以減輕來自伺服器響應的有效負載。影象和其它雜項資源也被壓縮和延遲下載,以最小化使用者在頁面可用之前需要下載的資料量。
但是,有時我們會過於沉迷於效能。當我們不必要地專注優化程式碼庫的某些部分而不是關注實際(專案)進度和生產中需要做什麼時,過早優化就成了問題。這種情況下,我們必須明智地判斷程式碼庫的哪些部分確實需要優化。
安全性
除了軟體的UI和邏輯之外,作為程式設計師,我們還要對使用者的安全負責。在我們這個時代,資料是非常令人垂涎且貨幣化程度很高的(資源),確保使用者個人的資訊保安是比以往任何時候都更重要。我們採取額外的措施保護私人資料,因為使用者信任我們的軟體。如果我們不堅持履行這一責任,我們肯定不是真正的程式設計師,甚至不是長期的。
在接近安全的時候,我們永遠不會太安全。普遍的經驗法則告訴我們,“永遠不要信任使用者輸入”
。這甚至可以被視為“最佳經驗”
,竭盡全力去淨化資料和使用者輸入。如果我們不夠謹慎,我們不僅會使我們的軟體和基礎設施面臨巨大的風險,而且還會冒著損害使用者敏感資料的風險,這些使用者資料是我們作為程式設計師承諾保護的。
但是,安全性並不僅限於使用者資料和輸入。病毒,蠕蟲,特洛伊木馬,廣告軟體,鍵盤記錄器,勒索軟體和其它形式的計算機惡意軟體繼續在全球數百萬的計算機和其它裝置上傳播和肆虐。即使經過數十年的硬、軟體技術的改進,也不存在無懈可擊的系統。安全性是一種不斷被磨練的工藝,但永遠不會完美,因為總會有好奇的少數人探究並尋找各種可能的方法來破解系統。
因此,不管面向的怎樣的使用者群,如果我們還沒將安全性納入優先考慮範圍的話,那麼我們應謹記要將安全性設計作為最重要的優先順序之一。這樣做是為了保護我們的使用者免受上述威脅的影響,這些威脅可能會造成諸如資料丟失,檔案損壞和系統奔潰等不便之處。
團隊協作讓夢想成真
即使它不一定和程式設計相關,團隊協作在軟體開發中也起著不可或缺的作用。由於任何大型專案的所有複雜性和活動部分,一個人不可能以常規迭代的快速節奏或者在客戶或任何監督人的嚴格期限和時間限制下開發出高質量的軟體。
這就是為什麼我們有各種各樣的團隊,他們專注於程式設計的諸多方面的其中之一。一個人永遠不會擁有所有技能和知識,並將每個方面的點有效的粘合在一起。一個團隊可能負責UI設計和保證可訪問,而另一個團隊可能負責軟體本身的功能開發。如果將各個專業團隊的所有能力結合起來,最終的軟體將具有最佳功能,使用者體驗,效能和安全性,(軟體)它將會在財務和實際限制範圍內使用。
對於時間管理和會議期限,工作流程組織和自動化至關重要。我們花時間正確配置我們的構建工具和管道,因為這樣做將為我們節省大量時間。一般而言,投資回報隨著時間的推移而增加。
與他人愉快地工作
為了闡述團隊合作的理念,我們與同行建立良好的關係,因為最終專案的成功在很大程度上取決於團隊人員良好的相處。我們努力營造一個鼓勵性的工作環境,在這環境下,經驗豐富的人要經常引導新人。
由於我們是以團隊形式開發軟體,因此我們必須留意其他人是否能讀懂我們的程式碼。為了保證開發週期的長期可持續性,程式碼可讀性和可維護性被認為與專案的邏輯和功能同樣重要。我們始終要編寫良好,可讀的程式碼,同時提供資訊化的GIT提交資訊和文件說明,因為這些肯定會幫助我們和其它人更好地理解我們寫的程式碼。
說到其他人閱讀我們的程式碼,程式碼審查是一個很好的機會,可以更多地瞭解程式設計中的最佳實踐。這也是熟悉程式碼庫以及其底層設計和架構的另一種方法。雖然建設性的批評對接收方是令人不愉快和難以處理的,但重要的是將其作為合理的建議,以便作為程式設計師的我們進行改進。
程式設計很難
程式設計囊括許多方面,包括使用者體驗,效能,安全性和團隊協作等功能。僅僅關注一個方面而忽略其它方面是不夠的。對於複雜和重要性的專案,它並不是鍵入幾行程式碼就能取得成功。它需要大量精心規劃,設計,考慮和團隊協作才能取得成功。事實上,在程式設計時花費的時間比在打字時花費的時間多,特別是在長時間的除錯過程中。
最後,程式設計實際上是連續的,不間斷的學習。適應性和不間斷的學習是這個行業生存的關鍵。如果我們不努力繼續學習,我們就不能期望能跟上潮流。在這種指數級的科技改進的動盪行業中,我們必須跟上它的快速節奏,以免陷入困境。
全世界的開發人員都是辛勤的工作者,我想通過認識到這點來結束本文。寫這篇文章,我不得不反思一個開發團隊的日常工作流程。我不得不探究常常被我們忽略的程式設計和軟體開發的許多方面。從那時起,我對計算機中安裝的所有軟體都有了更多的瞭解。為此,今天,我提倡大家要感謝下程式設計師,無論其經驗如何。沒有他們,我們會在哪裡呢?
永遠不要把他們的努力看做理所當然。
原文 https://dev.to/somedood/programming-is-hard-2p87
文章首發 https://github.com/reng99/blogs/issues/10
更多內容 https://github.com/reng99/blogs