編程不是操做鍵盤快速敲打。編程不是牢記鍵盤的快捷鍵並使用退化了的鼠標工做。若是首要考慮,編程並非要學習每種編程語言。不能經過電腦的品牌、價格、性能和操做系統來決定一個程序員是否優秀,也不能經過他們對代碼編輯器和IDEs--VS-Code、Atom、IntelliJ IDEA、Vim、Notepad++等的偏心來決定。與許多好萊塢電影潮流的觀念相反,編程毫不等同黑客攻擊。git
此外,編程不只僅是要記憶編程語言的語法和內置功能。邏輯、條件、if語句和算法不能描繪出編程的藍圖。數學、遞歸、計算機科學和設計模式也不能。雖然它們是編程的重要組成部分,可是它們也僅僅是編程的一部分。程序員
在編寫代碼以前,咱們要對項目的設計和體系結構進行了全面的規劃,以確保一個平穩的開發週期或者增長平穩開發週期的可能性。這時候,軟件設計就派上用場了。工具鏈、pipelines、公共和內部API的抽象層、模塊化、對象關係和數據庫結構都在這個開發階段進行了規劃。github
編程藝術要求咱們跳出條條框框的限制來思考,用最實用,有效且可行的解決方案解決問題。這可能就是爲何咱們被說是宅家的"I.T.guy"或"客戶支持"的緣由了。實際上,咱們的工做是查漏補缺。這好像說「編程」對「解決問題」的一種美化方式。web
換言之,計算機內外都有方便咱們的調節器,所以,咱們意識到如何閱讀和編寫文檔很重要。正確的文檔-它以詳細文檔的實際頁面的形式出現,或者像在代碼庫中散佈有價值的評論同樣簡單-這做爲程序員最重要的生命線之一。沒有它,咱們會在黑暗中迷失,沒法履行咱們做爲調試器的職責。不多甚至沒有進展,由於咱們大部分時間都花在實驗和調查框架或者瞭解遺留代碼庫如何工做。總之,這將致使很是糟糕的開發人員體驗。算法
調試已經夠困難了。更糟糕的是,代碼的執行一般不是線性的。因爲具備if語句的程序邏輯,大型項目意味着可能執行路徑的多個「分支」。咱們必須考慮每種可能的場景和錯誤,特別是涉及用戶輸入。跟蹤每一個可執行路徑所需的認知負荷使編程變得更加困難。數據庫
走出開發的世界,咱們進入一個普通用戶的角色。除了提供功能,添加新功能,修補錯誤和記錄咱們的代碼庫以外,咱們還關注普通用戶如何與咱們的應用或軟件進行交互。咱們思考能帶來良好用戶體驗的多種因素,例如(但不限於)可訪問性,可用性,用戶友好性和可發現性,UI設計,顏色主題,功能動畫和性能。編程
說到這點,性能自己就是編程的一個很重要的方面。咱們,特別是那些具備計算機科學背景的人,努力使用和編寫最節省時間和空間的算法。咱們着迷於微不足道的微妙時間尺度,以便充分利用咱們可用的內存,CPU和GPU。vim
在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