我們都做得到了:當媽媽不看時,就給它塞了乙個餅乾,晚餐吃了太多酒,計程表過期後,讓汽車停在停車位。 我們甚至繞過deadman's curve有點太快了。 是的,我們都違反了許多程式設計的基本規則,每個人都認為這是不好的。 我們暗中喜歡它。
我們對良好的程式設計規則不屑一顧,輸入了完全不好的**,我們就活了下來。 沒有程式設計之神的閃電。 我們的台式電腦沒有**。 實際上,我們的**已編譯並交付使用,客戶似乎很滿意。
[ 也在infoworld上:10個軟體開發崇拜者加入
] 那是因為糟糕的程式設計與舔電圍欄或拉老虎的尾巴不在同乙個聯盟中。 大多數時候,它都可以解決。 該規則通常是準則或風格建議,而不是必須遵循的一成不變的指令,否則將導致**死亡。 當然,您的**可能被嘲笑,甚至可能是公開的。 但是,您違背約定的事實給顛覆(甚至是無意間)帶來了一點刺激,這種顛覆(通常(通常是))構成了令人愉悅的**的社會風尚。
為了使事情變得更加複雜,有時最好打破規則。 (噓!)**更清晰。 它甚至可以更快更簡單。 規則通常太寬泛,熟練的程式設計師可以通過破壞規則來改進**。 不要告訴老闆,但是有時候用自己的方式編碼是有意義的。
以下是九條規則的列表,有些規則可能被認為是不可逾越的,但我們中的許多人經常打破成功,並獲得成功。
[ 同樣在infoworld上:程式設計師自言自語的9個謊言
] 在學校做錯了。 在工作中,規則不太清楚。 當然,有些**塊不應該被盜。 如果它來自專有**,請不要將其摺疊到堆疊中,尤其是當它標記有版權資訊時。 編寫自己的版本。 這就是他們付錢給您的事情。
在大多數情況下,複製的優點非常引人注目,而缺點可以通過一些注意加以限制。 從信譽良好的**獲得的**已經至少應用了一輪思路。 原始作者尋找解決方案並找到了一些東西。 迴圈不變式和資料流已經計算出來。
棘手的問題是關於角色或基礎資料是否存在一些未發現的錯誤或某些不同的假設。 也許您的**混入了空指標,而原始**從未檢查過它們。 如果您能夠解決問題,那就像您的老闆正在從兩位程式設計師那裡得到建議。 它是沒有高階辦公桌的雙人程式設計。
[ 通過infoworld daily新聞通訊了解軟體開發,雲計算,資料分析和機器學習方面的最新發展
] 在過去的十年左右的時間裡,功能正規化一直在上公升。 用巢狀函式呼叫程式來構建程式的助手引用了很多研究,這些研究表明,與舊式的變數和迴圈相比,**更安全,更無錯誤,並且以任何使程式設計師滿意的方式**在一起。 奉獻者滿懷真心的信徒的說話,在**審查和請求請求中cha毀非功能性方法。 他們甚至對優點是正確的。
軟體中的大多數空格都不會影響程式的效能。 除少數使用間距指示**塊的語言(如python)外,大多數空格對程式行為的影響為零。 儘管如此,仍然有一些強迫症的程式設計師認為他們很重要。 其中一位曾經以最嚴肅的口吻告訴我的老闆我正在寫「非標準**」,他可以立即看到它。 我的罪過? 未能通過在等號的兩側放置空格來違反eslint space-infix-ops規則 。
有時,您只需要考慮比放置空間更深的內容。 也許您擔心資料庫過載。 也許您擔心空指標可能會使您的**崩潰。 幾乎所有**的一部分都比空格更重要,即使是浮誇的標準委員會也已經填寫了有關這些空格或製表符位置的規則頁面。
令人驚訝的是,有幾個好的工具可以自動重新格式化您的**,以遵守任何定義良好的插入規則。 人類不需要花時間思考這個問題。 如果它是如此重要,他們可以通過該工具執行它來解決問題。
[ 同樣在infoworld上:為什麼c程式語言仍會統治
] 禁止使用goto
可以追溯到許多結構化程式設計工具還沒有出現的時代。 如果程式設計師想建立乙個迴圈或跳轉到另乙個例程,則需要鍵入goto
後跟乙個行號。 幾年後,編譯器團隊允許程式設計師使用字串標籤而不是行號。 當時,該功能被認為是熱門新功能。
但是絕對分支不是問題。 這就是糾結。 通常,巧妙的break
或return
將提供有關該位置的**執**況的非常清晰的陳述。 有時將goto
新增到case語句中將產生比級聯if-then-else塊的結構更正確的列表更容易理解的內容。
熱愛打字語言的人們很有意義。 當我們為每個變數的資料型別新增清晰的宣告時,我們會編寫更好,更無錯誤的**。 暫停片刻來說明型別,可以幫助編譯器在**開始執行之前標記愚蠢的錯誤。 這可能會很痛苦,但會有所幫助。 這是一種束手無策的程式設計方法,可以阻止錯誤。
時代變了。 許多較新的編譯器足夠聰明,可以通過檢視**來推斷型別。 他們可以在**中前後移動,直到可以確定變數必須是string
或int
或其他型別。 而且,如果這些推斷出的型別不對齊,則編譯器會引發錯誤標誌。 他們不需要我們再鍵入變數。
這意味著通過省去一些最簡單的宣告,現在可以更輕鬆地節省一些**。 **變得更簡潔了,讀者通常能夠猜出for迴圈中名為i
的變數是整數。
[ 同樣在infoworld上:什麼是ci / cd?
持續整合和持續交付的解釋
] 但是,不管您信不信,有時候這是有道理的。 有時,您有乙個「狂飆」庫,可以在其專有的黑匣子中執行大量的智慧型操作。 有時,老闆寫了一張七位數的支票來許可黑匣子中的所有天才。 如果庫需要字串形式的資料,則即使最近將其轉換為整數,也要以字串形式將其提供給庫。
當然,您可以重寫所有**以最大程度地減少轉換,但這會花費一些時間。 有時**可以額外執行一分鐘,一小時,一天甚至一周,因為重寫**會花費更多時間。 有時候,增加技術債務要比一開始就建立技術債務便宜。
有時該庫不是專有**,而是您很久以前編寫的**。 有時,將資料轉換一次比重寫該庫中的所有內容更快。 這樣您就可以編寫悠悠球**了。 可以,我們都去過那裡。
標準規則之一是,程式設計師在大二學完資料結構課程後,切勿編寫用於儲存資料的**。 已有其他人編寫了我們將需要的所有資料結構,並且這些**經過了多年的測試和重新測試。 它與語言**在一起,並且可能是免費的。 您的**只能包含錯誤。
但是有時候資料結構庫有點慢。 有時,它們迫使我們進入標準結構,但對我們的**卻是錯誤的。 有時,庫會迫使我們在使用結構之前重新配置資料。 有時,這些庫包括帶有執行緒鎖定等功能的皮帶和吊帶保護,而我們的**不需要它們。
發生這種情況時,就該編寫我們自己的資料結構了。 有時會快很多。 有時它使我們的**更簡潔,因為我們沒有包括所有額外的**來精確地重新格式化資料。
[ 同樣在infoworld上:如何停止討厭吉拉
] 很久以前,建立c語言的某人想將所有抽象可能性封裝在乙個簡單的構造中。 在開始時,有一些事情要做,每次迴圈都需要做一些事情,還有一些方法可以告訴一切何時完成。 當時,這似乎是捕捉無限可能性的完美語法。
那是那時。 現在,一些現代的批評只看到麻煩。 發生了太多事情。 所有這些善良的可能性也同樣具有善惡的能力。 它使閱讀和閱讀變得更加困難。 他們喜歡更具功能性的範例,其中沒有迴圈,僅將函式應用於列表,將計算模板對映到某些資料。
有時候,無環方法更乾淨,尤其是當只有乙個整潔的函式和乙個陣列時。 但是有時候,老式的迴圈要簡單得多,因為它可以做的更多。 例如,當您找到第乙個匹配項後就可以立即停止搜尋,這樣比較容易。
此外,當要對資料執行多項操作時,對映功能會鼓勵進行更嚴格的編碼。 假設您要取絕對值,然後取每個數字的平方根。 最快的解決方案是先對映第乙個函式,然後對映第二個函式,將資料迴圈兩次。
沿著這條線的某個地方,乙個規則制定小組宣布每個迴圈都應該有乙個「不變式」,這就是說在整個迴圈中都是正確的邏輯陳述。 當不變數不再為真時,迴圈結束。 這是考慮複雜迴圈的一種好方法,但它會導致瘋狂的禁止,例如禁止我們在迴圈中間使用return
或break
。 這是禁止goto
語句的規則的子集。
這個理論很好,但是通常會導致更複雜的**。 考慮以下這種簡單的情況,它掃瞄陣列以查詢通過測試的一項:
while (i迴圈不變的戀人寧願我們新增另乙個布林變數,將其稱為notfound
,並像這樣使用它:
while ((notfound) && (i如果這個布林值是好名字的,那將是一段很好的自我記錄**。 它可以使每個人都更容易理解。 但這也增加了複雜性。 這意味著分配另乙個區域性變數並阻塞暫存器,編譯器可能會也可能不夠聰明,無法修復。
有時goto或jump會更乾淨。
] 一些最有趣的語言使您可以做一些真正曲折的事情,例如重新定義看起來應該是常量的元素的值。 例如, python使您至少在2.7版及true=false
版本中輸入true=false
。 這不會造成某種邏輯崩潰和宇宙的終結。 它只是交換true
和false
的含義。 您還可以使用c預處理器和某些其他語言來玩這種危險的遊戲。 還有其他語言允許您重新定義加號之類的運算子。
這是乙個延伸,但是當更快地重新定義乙個或多個這些所謂的常量時,一大段**中就會包含點。 有時,老闆希望**執行完全不同的操作。 當然,您可以檢查**並更改每次出現的情況,也可以重新定義現實。 它可以使您看起來像個天才。 無需重寫巨大的庫,只需翻轉一下即可,相反。
在這裡劃清界限也許是件好事。 無論多麼聰明和有趣,您都不應在家中嘗試。 這太危險了-真的……誠實。
from:
IT專業人士不招人喜歡的10大原因
別人眼中你是it精英,父母眼中你是棟樑之才,朋友眼中你是專業人士,但事實上並不是如此。前段時間曾經有個很形象的揭示了it人士在別人眼中的形象,很有意思。其實it從業人員常常日夜操勞,整體與機器和 為伍,號稱碼農,而且並不招人喜歡,至於這是為什麼?tr的alan norton列舉了十大緣由。1 報酬豐...
面對我們喜歡的和我們需要的,應該何去何從?
人的一生總會遇到各種需要選擇,面對人生的每個路口,我們該何去何從,如何選擇呢?其實今天要說的事情到不了人生路口的級別,不過同樣也是乙個如何選擇的問題。因為要拿乙個計算機專業的本科畢業證,我們要參加乙個自學考試。綜合各方面的因素,我們最後統一選擇了計算機資訊管理這個專業。話說這個專業大部分的課程都是很...
面對我們喜歡的和我們需要的,應該何去何從?
人的一生總會遇到各種需要選擇,面對人生的每個路口,我們該何去何從,如何選擇呢?其實今天要說的事情到不了人生路口的級別,不過同樣也是乙個如何選擇的問題。因為要拿乙個計算機專業的本科畢業證,我們要參加乙個自學考試。綜合各方面的因素,我們最後統一選擇了計算機資訊管理這個專業。話說這個專業大部分的課程都是很...