一個好的程序員就是一個懶惰的程序員
盡管您可能不想在面試中帶頭去做,但懶惰是使優(yōu)秀程序員與其他人區(qū)分開的一種基本哲學(xué)。 優(yōu)秀的程序員對基本任務(wù)的感覺是相同的,例如遍歷記錄集并根據(jù)結(jié)果執(zhí)行簡單的邏輯,就像小學(xué)生攻擊數(shù)學(xué)作業(yè)一樣,有著同樣的熱情,但要減去成熟的怪胎,但可能要減去抱怨要完成的工作。
面對現(xiàn)實(shí)吧,編碼有時只是數(shù)據(jù)輸入的一種高級形式。 這是要通過而不是讓我們的牙齒陷入的東西。
通常,這是一個機(jī)會。
通過懶惰成為一名優(yōu)秀的程序員的藝術(shù)是總是在尋找模式和打包方式。 目的是盡快解決項目令人費(fèi)解的沉悶部分,以便我們將更多的時間和精力集中在實(shí)際的問題解決上。
公平地說,大多數(shù)程序員在某種程度上都知道這一點(diǎn)。 畢竟,對象和函數(shù)是開發(fā)的基本構(gòu)建塊,而應(yīng)用程序只是打包的構(gòu)建塊,不斷地傳遞以產(chǎn)生結(jié)果。 但是優(yōu)秀的程序員將這些想法帶到了一個極致。
在這一點(diǎn)上,我將停止并陳述希望顯而易見的事情:反之則不成立。 懶惰的程序員很少好。 你知道我在說的人。 也許他們喜歡在運(yùn)行查詢時執(zhí)行該查詢并在屏幕上盯著屏幕三分鐘,而不是打開一個新選項卡并處理另一段代碼。 也許他們認(rèn)為不需要適當(dāng)?shù)腻e誤處理,因為"代碼應(yīng)該可以正常工作"。 或者,也許他們很好,可以走很長一段路,因為他們在那里可以按照告訴他們的方式做,并且即使計劃存在明顯的低效率,也不會偏離計劃。
優(yōu)秀的程序員是懶惰的,因為他們喜歡在項目中比較困難的部分上工作,而不是鍵入基本上是自己編寫的代碼。
這不是完成最少工作的競賽。 這不是要在5點(diǎn)鐘出來,而要在第二天早上8點(diǎn)之前完全忘記工作。 優(yōu)秀的程序員是懶惰的,因為他們喜歡在項目中比較困難的部分上工作,而不是鍵入基本上是自己編寫的代碼。 實(shí)際上,比較優(yōu)秀的(通常是最懶惰的)程序員在半夜醒來,喊著"啊哈!" 這是因為他們在入睡時解決了一個特別棘手的難題。 或者,他們看著餐桌旁的另一半,因為自從食物擺在桌子上以來就一直在腦海中編碼,突然意識到他們根本不知道在準(zhǔn)假中進(jìn)行的談話到底是什么。
我當(dāng)然從來都不是喜歡只鍵入代碼的人。 無論大小,我都喜歡打包。 大大小小的? 哎呀,即使很小。 在為諸如D&D和Pathfinder之類的桌面游戲開發(fā)隨機(jī)地牢生成器時,我經(jīng)常需要檢查地圖上某個點(diǎn)周圍的特定半徑。 它可能是一個陷阱,可能從一個方格的地方冒出來,或者是一個事件可能從兩個方格的地方發(fā)生,或者是一個可能從四個方格的地方發(fā)現(xiàn)聚會的遭遇,無論距離多遠(yuǎn),SQL幾乎都是相同的。 因此,我沒有在where子句的同一部分中鍵入內(nèi)容,而是編寫了一個函數(shù),該函數(shù)將接受x / y坐標(biāo)和半徑以吐回SQL。
簡單。 但是,它使我免于數(shù)十次手動鍵入操作,而且甚至更重要的是,它確保where子句不會出現(xiàn)錯字。 這意味著半個小時都沒有仔細(xì)檢查代碼,只是發(fā)現(xiàn)我鍵入的是3而不是4。
當(dāng)在寶藏表中查找物品以填滿箱子或在遭遇表中的怪物來制造伏擊時,我遇到了類似的模式。 字段名稱已更改,但基本算法相同。 將有一條記錄,記錄中包含權(quán)重或頻率(應(yīng)從數(shù)據(jù)集中隨機(jī)提取的頻率),條件(例如生物或?qū)毑氐母叨?,遭遇或物品的類型?和主鍵 識別它。 具體細(xì)節(jié)可能會發(fā)生變化,但是您如何從此類數(shù)據(jù)集中隨機(jī)選擇記錄保持不變,因此誕生了一個繁重的功能。
有時做某事的最懶惰的方式是讓代碼編寫代碼。 我從來都不是開發(fā)平臺附帶的模板的較大支持者,但是我非常喜歡自己編寫代碼。
當(dāng)我開始第一個"實(shí)際"編程工作時,我們使用Visual Basic訪問Microsoft SQL Server。 (是的,我是恐龍。我什至還記得在大學(xué)時在綠屏終端上鍵入內(nèi)容以在VAX / VMS大型機(jī)上進(jìn)行開發(fā)。)創(chuàng)建數(shù)據(jù)輸入表單的通常方法是包括一個鏈接到字段上的記錄集對象 表單,但是Microsoft附帶的記錄集對象并非沒有自身的錯誤和性能問題,因此我們將"手動"完成這一部分。 在這種情況下,這意味著寫出我們自己的代碼來插入,更新和刪除記錄。
這導(dǎo)致大量代碼在表單上的字段中查找值,以手動構(gòu)建INSERT或UPDATE語句。 乏味。
盡管Microsoft的記錄集對象并不總是可靠的,但它至少使執(zhí)行這些基本功能所需的代碼量最少。 因此,為了在避免記錄集對象本身的同時模仿此好處,我開發(fā)了一個類,該類將表單上的字段與數(shù)據(jù)庫中的字段進(jìn)行比較,以便自動生成執(zhí)行這些基本任務(wù)所需的SQL語句。 顯然,這比我在這里要講的要復(fù)雜一點(diǎn),但是結(jié)果復(fù)制了記錄集對象的好處(更輕松,更小的代碼塊),同時減去了主要的干擾因素(可能是錯誤或效率低下的代碼,您無法控制) )。
當(dāng)我轉(zhuǎn)向使用MySQL與PHP一起工作時,遇到了相同類型的問題。 大表=許多代碼=無聊。 此處比較大的區(qū)別是,技術(shù)人員較少,他們會在同一文件中處理HTML事務(wù),因此我想確保一些簡單性。 有時候,那些大塊的代碼實(shí)際上對技術(shù)水平較低的人來說比對完成相同事情的更復(fù)雜的系統(tǒng)更容易處理。 解決方案:生成可運(yùn)行以自動生成在數(shù)據(jù)庫中插入,更新和刪除記錄所需的基本PHP代碼的代碼。 基本上,構(gòu)建自己的模板。
這些示例并沒有使用戶眼花撩亂,而是表明無論代碼的大小如何,程序員都應(yīng)該尋找模式。 即使創(chuàng)建SQL SQL where子句以在一定距離內(nèi)引入記錄之類的簡單操作,也可以對完成項目所需的時間產(chǎn)生積極影響。 我甚至擁有給定where子句的函數(shù),可以給我一個表的最小值或最大值。 從長遠(yuǎn)來看,將錯字排除在外的事實(shí)可以使這些功能值得。
我們大多數(shù)人在程序員的陪伴下工作了幾年,很高興能日以繼夜地逐行輸入無意識的代碼,因此沒有緊迫感尋找最有效的途徑。 我并不是說這些都是不好的程序員,但是,如果您花費(fèi)最多的時間來完成項目的每個部分,那么當(dāng)出現(xiàn)令人驚訝的難題時,您更有可能落伍。 而且?guī)缀蹩偸怯幸粋€驚喜。
在這里尋找編碼中的模式會帶來最大的收益。 無需鍵入代碼即可節(jié)省時間,無需花太多時間就可以實(shí)現(xiàn)每個人都想花很短時間才能實(shí)現(xiàn)的功能,但實(shí)際情況要長得多。
懶惰的程序員的基本心態(tài)? 始終尋找一種模式。