日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

最近我在接受采訪時被問到我關于成為一名偉大程序員的見解。這是一個有趣的問題,我認為我們都可以是偉大的程序員,無論我們的天賦如何,如果我們遵循一些規(guī)則的話——我相信——這應該是常識。實際上,這些規(guī)則并不只適用于編程領域,也適合任何專業(yè)。

當然,這10個要點中的所有內容并不都是完全正兒八經的,有些事情只是我的看法,你的情況可能會有所不同,所以如果出現(xiàn)矛盾的話,不要耿耿于懷。

成為偉大程序員的 10 個要點

 

這些要點是:

1.學習如何提問

提問題的程序員基本上有這些類型:

  • 完美主義者:特別是在詢問關于某些開源工具的問題時,他們可能已經通過代碼進行了調試,發(fā)現(xiàn)了問題的真正原因。但是即使沒有發(fā)現(xiàn)真正原因,完美主義者也會講明白這個問題,重現(xiàn)步驟,建議可能行得通的解決方法,或者甚至是,建議可能行得通的修復途徑。事實上,完美主義者沒有問題。只有答案。
  • 話匣子:這個人實際上沒有問問題。他們表明他們的想法,有時會到處放置浮夸的問號。對于問題,他們給出的是他們的思路流程,如果你揣著答案等的話,他們要么自己找到了答案,要么在多封電子郵件之后才問出真正的問題。“哦,對了,我發(fā)現(xiàn)這個需求是完全錯誤的,我用一些其他的技術解決了這個問題。實際上,我完全改變了庫。”呵呵。只希望他們別再問問題了。
  • 笨蛋:代碼在這。我不知道哪里出錯了?請幫幫我。
  • 經理:對于這種類型的人,時間就是金錢。問題一定很短,答案越快越好。令人令人啼笑皆非的是,因為保持問題簡短(意即:不完整,不簡潔),大多數情況下,會丟失很多重要的細節(jié),然后為了解答問題,程序員只能請求更多細節(jié)。所以,經理(自然會失望,因為他得到的并非是一個答案而是一個新的問題)會再次發(fā)送一個短的訊息,并且更緊急地要求答案。循環(huán)往復。最后可能需要1-2周的時間才能解答。
  • 抱怨者:這類人不問問題。他們一直一直抱怨,直到問題消失。如果情況沒有變好,那就有了更多的理由抱怨。

現(xiàn)在應該清楚的是,一個精心準備的問題(簡明扼要,簡單,簡短,但有足夠的細節(jié))將會產生更佳的答案。如果你確切知道對于該問題你需要學習什么,那么更有可能得償所愿。

2.學習如何不提出問題

實際上,最好盡量避免提問。或許你可以自己弄清楚呢?當然情況并不總是如此。許多事情你根本無法知道,通過詢問領域專家,有助于找到抵達成功最快和最有效的途徑。但是,經常自己去嘗試解決問題有很多好處:

  • 通過這種艱辛的方法學到的東西能夠更好地保存到記憶中——我們將牢牢記住所學到東西。
  • 自己去尋找答案更有價值。
  • 你不會制造“噪音”。還記得前面所說的“話匣子”嗎?除非你詢問的人有責任回答問題(從而推遲他們的工作),否則他們可能會在不了解你的思維過程的情況下,來嘗試回答每一個不完整的“問題”。這對任何人都沒有幫助。
  • 通過推遲問問題(至少一段時間),你可以收集更多的相關信息,然后提供給可能能夠回答問題的人。想想“完美主義者”,他們首先花更多時間尋找細節(jié),然后自己解答問題。
  • 通過訓練你可以更擅于提問。這需要時間。

3.不要遺留破碎的窗戶

最近有一篇非常有趣的文章,是關于不要留下破窗戶的。文章的本質是永遠不要妥協(xié)于質量。永遠不要成為逃兵。永遠不要遺留…破碎的窗戶。以下引用自這篇文章:

“當我們采取一些捷徑在最短的時間內提供一些東西時,反映了我們的粗心大意的代碼會讓我們之后的開發(fā)人員(來自同一個團隊,未來的團隊,甚至我們自己!)得出一個重要的結論:對我們所生產的代碼付出足夠的關注并不重要。應用程序漸漸開始惡化將是一個不可阻擋的過程。”

其實,這并非意味著要成為一個完美主義者。有時,修復破碎的窗戶是可以推遲的。但是,通常情況下,對于允許窗戶被打破和保持打破狀態(tài),沒有人會覺得開心。我們程序員不開心,我們的客戶不開心,我們的用戶不開心,我們的項目經理也不開心。這是一種態(tài)度,是作為專業(yè)人士的核心內容。Benjamin Franklin怎么看呢?

“低價格的甜蜜被遺忘之后,低質量的苦澀將回味悠長。”

一切都是如此。“低價”是我們用一種草率的方式來實現(xiàn)某些東西而獲得的快速勝利。

4.軟件應該是確定性的。這就是要瞄準的目標!

在理想化的世界中,軟件中的一切都應該是“確定性的”。我們都應該是函數式程序員,編寫沒有副作用的純粹的函數。如String.contains()。無論執(zhí)行以下操作多少次:

assertTrue("abcde".contains("bc"));

…結果總是相同的,都是預期的結果。哪怕宇宙爆炸對這一計算也沒有影響。這是確定性的。

我們也可以在我們自己的程序中,而不僅僅是在標準庫中做到這一目標。我們可以嘗試盡可能多地編寫無副作用的確定性模塊。這真的與我們選擇什么技術無關。確定性編程可以用任何語言完成——即使函數語言有更多工具也可以通過更復雜的類型系統(tǒng)來防止意外的副作用。但是我所示的例子是一個JAVA示例。對象方向允許確定性。對的,像PL / SQL這樣的程序語言允許確定性。如果要在索引中使用函數,那么需要請求確定性的函數:

CREATE INDEX upper_first_name ON customer (upper (first_name));
-- Deterministic function here: -----------^^^^^^^^^^^^^^^^^^

這又是一個規(guī)則問題。有副作用的過程/方法/“函數”是為“破窗戶”。有副作用也許會更容易維護,當然希望最終可以消滅副作用。但這通常是自己騙自己。當將來的某一天意外突現(xiàn)的時候,就是你付出昂貴代價的時候。別不相信,說曹操曹操就到。

5.接受意料之外的事情

程序員始終應該遵守墨菲定律。一切都可能被打破。并且它即將被打破。作為軟件工程師,我們應該謹記它是會破掉的。因為我們的世界是不確定的,所以我們正在實現(xiàn)的業(yè)務需求也是不確定的。我們只有在終于能夠確定的時候,才能實現(xiàn)技巧#4(確定論)。否則,我們將不可避免地進入不確定論的世界(也就是“現(xiàn)實世界”),即一個將會出錯的世界。所以,要以此為基礎。接受意料之外的事情。訓練你內心的洪荒之力,從積極的角度預見各種麻煩。

當然,如何以簡潔的方式寫代碼來預見各種麻煩就是另一個故事了。如何從那些可能會失敗的東西(因此不需要處理)中辨別那些將會失敗的東西(因此需要處理),還是需要通過一些實踐滴。

6.不要貨物崇拜。不要教條主義。始終具體情況具體對待。

所有教給你的內容都存在潛在的錯誤。即使是那些流行語。引用一句很不錯的話:

“我的職業(yè)生涯至少有50%是為了幫助或解脫由教條主義引發(fā)的一個個災難。

我們的職業(yè)充滿了虛假。我們喜歡把自己當作數學家,堅持最純粹的思想,認為它們一定是正確的。

那是一條歧路。我們的職業(yè)構建在數學的基礎之上,但除非你進入范疇論或關系代數的時髦世界(即便你真的進入,我也懷疑一切是否是“正確的”),否則你就得面對現(xiàn)實世界務實的業(yè)務需求。好吧,坦率地說,這離完美還有十萬八千里。讓我們來看看一些最流行的編程語言:

  • C
  • Java
  • SQL

你真的覺得這些語言一點都不像數學嗎?行,不如我們先來討論段錯誤,Java泛型和SQL三值邏輯。這些語言是由實用主義者建立的平臺。所有這些都有一些非常酷的理論背景,但最終,還是有了這些工具。

對于建立在語言之上的所有東西也是如此:庫,框架,設計模式,甚至架構。沒有什么是對的或是錯的。一切都是為某些上下文設計的工具。想想在其上下文中的工具。永遠不要把這個工具當成一個獨立的理由。我們不是“為藝術而藝術”。

所以對這些質疑說不:

  • XML
  • JSON
  • 功能編程
  • 面向對象編程
  • 設計模式
  • 微服務
  • 三層架構
  • DDD
  • TDD
  • 實際上:*DD
  • 不勝枚舉

所有這些都是某些給定上下文的好工具,但并不總是如此,要學會具體情況具體對待。保持好奇心,開發(fā)創(chuàng)造力,知道何時才需要使用這些工具,將有助于你成為一個更優(yōu)秀的程序員。

7.就是干

這是真理。話說,總有一些牛人出類拔萃,能夠傲視群雄,讓人鞭長莫及。

但大多數程序員只達到“好”的級別,或是有潛力達到“好”的程度。那么怎么才能成為一名好的程序員呢?正如羅馬不是一天建成的,偉大的軟件也不是一天可以寫成的,受歡迎的人并非我們這個時代唯一的英雄。我遇到過許多默默無聞但偉大的程序員,他們孜孜不倦地攻克軟件難題,解決了許多小公司隱蔽的問題。

偉大的程序員都有一個共同點:遇到問題就是干。練習,實踐。每天都致力于工作與學習,然后變得越來越優(yōu)秀。

想要更擅長SQL?那就干吧!每天都嘗試用一些新功能編寫一個SQL語句。使用window functions。分組。遞歸。分區(qū)的外連接。MODEL和/或MATCH_RECOGNIZE子句。不需要每次都交付生產,就是為了實踐。這些都是有價值的。

8.專注一個主題(從長遠的角度)

可能只有很少一部分“優(yōu)秀的”全棧開發(fā)人員獨領風騷。事實上,大多數全棧開發(fā)人員都將位于中間水平。當然,一個小團隊可能只需要幾個全棧開發(fā)人員,就可以涵蓋很多業(yè)務邏輯,快速推出一個新的軟件。但是,軟件將非常笨拙,“馬馬虎虎能工作”。也許這對于只要可行即可的產品階段來說就已足夠,但從長遠來看,會導致全棧開發(fā)人員將沒有時間來正確分析(或預見!)更復雜的問題。

主要專注一個主題,并真正擅長這個方面。真金不怕火來煉,只要你有本事,那么走到哪里都需要。所以,致力于你的職業(yè)生涯,做一些真正好的東西,而不是“差不多就行”。

9.涉獵廣泛

雖然你應該主要關注一個主題,但不應該完全遺忘其他方面。你永遠不能馬上真正擅長SQL、擴大、擴展、低級性能、css、面向對象、需求工程、架構等等的所有內容(見技巧#8)。這是不可能的。

但你至少應該明白它們每一個的本質。你需要明白何時SQL是正確選擇(以及何時不是)。何時低級別性能的調整很重要(何時不是)。CSS原則上如何工作。面向對象、FP優(yōu)點。等等。

你應該花一些時間涉獵這些(以及更多)概念和技術,以便更好地了解它們的重要性。知道何時應用它們,然后再找專業(yè)人士來實際執(zhí)行工作。

涉獵新的范式和技術,有助于你用全然不同的思維方式思考,可能你會在以后的日常工作中不自覺地以某種方式用到它們。

10.保持簡單,傻瓜式

愛因斯坦曾說:

“Everything should be made as simple as possible, but no simpler.”(“任何事情都應該盡可能簡化,直到沒法再簡化為止。”)

沒有人能夠處理巨大的復雜性。在軟件中不能,在生活的任何其他方面也不能。復雜性是好軟件的殺手,因此簡單性是使能者。易于明白。難于實現(xiàn)。你需要大量時間和實踐才能識別和生產出簡單。當然,你可以遵循許多規(guī)則來實現(xiàn)簡單化。

最簡單的規(guī)則之一就是使用只有幾個參數的方法/函數。讓我們來看看吧。前面提到的String.contains()方法就是如此。我們可以寫”abcde”.contains(“bcd”),不閱讀任何文檔,每個人都能立即了解這做什么以及為什么。該方法做了一件事情,并且只做這一件。沒有復雜的上下文/設置/其他傳遞給該方法的參數。沒有“特殊情況”,也沒有任何警告。

此外,在庫中簡化比在業(yè)務邏輯中要簡單得多。那么我們能實現(xiàn)嗎?也許吧。通過實踐。通過重構。但像偉大的軟件一樣,簡單性也不是一天可以搞定的。

(高級技巧:應用康威定律。在一個業(yè)務超級復雜的環(huán)境中編寫又好又簡單的軟件是完全不可能的。要么你選擇復雜性和丑陋,要么你最好擺脫那個業(yè)務)。

分享到:
標簽:程序員
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰(zhàn)2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定