成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

要理解好的代碼,你需要多多編寫“不好”的代碼

開發 前端
編程語言只是工具。使用的時機、原因以及方法取決于我們自己。不能因噎廢食,我們該改進的是使用方式。

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

網絡上有許多 “切記不要…”的文章:不要使用繼承(inheritance),千萬別用單例模式(singleton),scrum將被淘汰。這些真的都不能用嗎?如果語句真的很差勁,我們又該如何甄別哪些建議可取呢?

沒有完美的編程語言,也沒有最好的編碼方式,有的只是指南(也就是已知的缺陷)。很多編程建議十分夸張,每個人都告訴你不要再做這做那。照這樣發展,每個指令都是故障之源,我們很快就沒有指令可用了。就如同人們并不指望開卡車過木橋能到達對岸,但這不意味著木橋沒有承載力,也不是說人們不該開卡車。

編程語言只是工具。使用的時機、原因以及方法取決于我們自己。不能因噎廢食,我們該改進的是使用方式。

[[342887]]

怎樣辨別糟糕的建議?

好的建議有三個組成部分。首先,信息本身;第二,何時使用;第三,何時不用。糟糕的建議通常缺少第二和第三部分——通常呈現出永久適用的特征。

一個常見的話題是:“不惜一切代價避免使用繼承機制”。如果沒有適用和不適用條件,你可能會盲從建議而舍棄面向對象系統(OO系統)最關鍵的工具。如果該建議變成:“繼承機制是非常好的工具,但深層次機構(deephierarchies)通常有害。”這次問題很顯然出在“深度”上,這個解釋精準且洞悉了問題——淺層次機構是好的。

另一個要注意的就是語言。很多作者往往“肆意下筆,從不更正”,這樣的基調在充斥著互聯網。為了撰寫“肆意”而“肆意”撰寫是極有害的,作者不會說明他的建議并非普遍適用。為了避免語氣折損,他們往往不點明不適用條件。好的建議應是友好的,而不是強硬的。每個真誠幫助過你的人都不會是怒氣沖沖的。

[[342888]]

圖源:unsplash

經驗之談

涉及到編碼,有兩條經驗尤其適用:

(1)  創造和維護語言非常昂貴。如果新語言中不斷加入某種機制,那說明該機制十分重要。這就是全局作用域、繼承機制和如果語句仍然存在的原因。任何一篇聲稱該摒棄它們的文章都忽視了這些機制的重要性。

舉一個很好的例子:類型系統。Python和JavaScript因為不需要分類而吸引了許多開發者,之后就會后悔用無結構語言寫了上千行代碼。“落伍的”Java和C#就不存在這個問題(也不是說它們就沒缺點)。

這就難怪TypeScript會出現。類型系統會返回弱類型語言——你輸入一部分,編譯器會補足剩下的。這一想法非常成功,分別通過 var 和 auto關鍵詞打入了C#和C++的世界,甚至Python現在也引入了類型系統。

(2) 與之相反,第二條經驗是:現代語言從設計上淘汰了混亂的部分。

這就是宏、goto語句和顯式內存管理消失了的原因。過去,Java的垃圾回收機制(GC)飽受抨擊,但幾乎所有現代語言的GC都不再需要Java虛擬機(JVM)了。

最近移除的是空指針異常。像Kotlin和Swift這樣的現代語言用設計執行null檢查,C#8也是同樣的,Raw threading和async callbacks也存在自己的問題。現在,我們編寫異步程序時就可以使用便捷的async/await語法。

[[342889]]

圖源:unsplash

而這一切都說明:想做一個更好的程序員,需要了解編程語言的歷史。

大多語言由富有工具意識的人創造,由社群指引著發展。每次加入新要素,整個群體都會專注地探討元素的相關性和對群體的價值,也包括如何完善元素設計。改變和移除元素時也是如此,Python 3做了許多引人矚目的突破性改變,都卓有成效。

多編寫不好的代碼

我們使用的是數十年以來的創新成果和失敗設計。

只有潛心于“劣質的”C/C++代碼,你才能真正地領略到垃圾堆疊的語言之美。這之前你只是想象過去編碼有多痛苦,那些寫過單例模式并深受其擾(有很多問題,比如編寫測試)的人才能真正理解那種痛恨。

教科書上的示例與實際操作千差萬別。前者不過是個提示,后者才會真正改變你的編碼方式。

大多人開始的時候都不會使用Git或Unit Tests來編碼。這些項目往往漏洞很多,也經常不能運行。沒有Git,你無法得知是否不小心更改了什么。沒有測試,你的代碼會在某次故障后直接不再運行。諸如此類的體驗是促使我們每天使用這些工具的原因。

要真正理解如何寫好代碼,首先要會寫不好的代碼。有幾種能促使自己編寫糟糕代碼的方式(或者找到現有片段的缺點),其實歸根結底一件事:試著用另一種方法編碼,從而得知你的方案有多好或者過去有多糟。

下面是你閑暇時間可以做的事:

  • 學習一門父系語言: 舉例來說, Kotlin的父系語言是Scala,Swift等語言的誕生是為了解決Objective-C存在的問題,C#取代了Java。學習父系語言能為你展示過去沒有但“今天擁有的”,也使人們更加珍惜今天人們唾棄的很多工具。
  • 學習一門“承繼”語言: C++開發者應該嘗試Rust,Java開發者試試Go,Python對應Julia或Nim,JavaScript對應TypeScript或Dart。與學習父系語言不同,學習承繼語言將揭露現有缺陷及怎樣解決。
  • 學習LISP:很多人覺得這個語言很怪。LISP沒有變量,它是純函數式編程語言(比Haskell簡單)。你不需要精通這門語言,只需嘗試寫一些算法,比如斐波那契(Fibonacci)、快速排序算法( quick-sort)或者哈夫曼編碼(Huffman coding)。如果沉下心慢慢做,你會發現變量在很多情況下并不重要。
  • 用純C語言寫一個文本處理器: 為文本文件設置一個路徑,打開它并刪除所有換行符,在每個句號后(.)加入新換行符,然后重組每個單詞,保持第一個和最后一個不變。如果處理后每一行都保持平行就值得表揚。它能快速反映出字符串處理的巨變。
  • 找出設計模式:準備一個設計模式的清單,并打開你正在做的或做過的項目。花些時間閱讀每種模式,并找到某種模式適用的地方。想象每個模式運用在這個項目中將會多簡潔,這是將設計模式整合到項目中的最佳方法。

[[342890]]

圖源:unsplash

這些技巧要么改變你的編碼方式,要么幫助你審視已完成的代碼。無論哪種都會讓你意識到一切都不是想象得那樣光鮮亮麗。

我并不是在講對與錯,也不是講怎樣編碼,而是在邀請各位多多編碼。代碼是一種新的語言,嘗試用兩種方式完成同一件事情,多寫代碼才是碼農的終極進階之道。

 

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2018-03-30 10:02:08

代碼規范維護工程師

2023-01-09 15:16:17

2014-12-19 09:59:50

代碼

2019-11-08 09:20:57

代碼開發工具

2015-04-15 15:01:56

代碼好代碼科學定義

2011-08-15 10:10:47

編程

2014-08-28 11:12:14

谷歌

2022-06-21 12:27:12

JavaScript前端

2015-08-03 09:20:33

代碼精華

2015-07-17 10:02:48

寫代碼

2015-06-25 13:36:56

好代碼科學定義

2012-07-11 10:51:37

編程

2013-03-22 16:43:03

可讀代碼代碼的藝術代碼編寫

2013-06-05 17:14:26

移動開發寫代碼編程

2022-05-10 10:28:21

JavaScript代碼

2015-07-13 10:48:44

OC代碼程序員

2016-12-09 13:30:44

大數據

2015-04-08 11:09:28

優秀程序員深入理解你的代碼

2017-06-28 16:18:22

編程程序員開發

2022-05-07 10:01:20

好代碼壞代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色婷婷久久综合 | 欧美一级大黄 | 婷婷精品 | 国产免费观看久久黄av片涩av | 免费看一区二区三区 | 一级黄色影片在线观看 | 成人av高清在线观看 | 欧美日韩久久精品 | 精品久久久久国产免费第一页 | 日韩欧美一区二区三区免费观看 | av国产精品毛片一区二区小说 | 国产精品18hdxxxⅹ在线 | 久久久久一区二区三区四区 | 99色在线视频 | 亚洲国产精品suv | 亚洲福利 | 欧美偷偷操 | 成人在线免费观看视频 | 久国产 | 亚洲精品一区二区三区中文字幕 | 九色www| 91精品国产综合久久久久久丝袜 | 一区二区三区在线 | 欧 | 欧美视频成人 | 91网站在线看 | 精品网 | 欧美成人a∨高清免费观看 色999日韩 | 老司机久久 | 国产成人综合在线 | 成人免费在线观看 | 中文字幕在线一区 | 久久三区| 亚洲中午字幕 | 国产视频中文字幕 | 久久久国产一区二区三区四区小说 | 亚洲精品99999 | 男女视频在线观看网站 | 国产精品久久视频 | 色久伊人 | 欧美日韩国产精品一区 | 99热欧美|