先想一想自己的假設和其他人的假設。來自不同**商的工具可能內建不同的假設,即便是相同的**商對於不同的工具,其假設也可能不同。
當其他人正在報告乙個你不能重複的問題的時候,去看看他們在做什麼。他們可能會做一些你從來沒有想到過的事情,或者他們的做事順序與你的截然不同。
我個人的原則是,如果我有乙個不能確定的錯誤,那麼我會先考慮是不是編譯器的問題,然後再去檢查堆疊是否損壞。特別是當新增跟蹤**會使得問題移動的話就更要這麼做了。多執行緒問題是bug的另乙個**,有時候令人焦躁得簡直想拔光頭髮,或者直接想摔電腦。當系統是多執行緒的時候,最好傾向於簡單的**。我們不能依賴除錯和單元測試來發現任何一致性的bug,所以設計的簡單性是最重要的。
所以,在你不分青紅皂白地去責怪編譯器之前,先想一想福爾摩斯的這條建議,「一旦你排除了種種不可能,剩下的不管有多麼難以置信,一定就是真相」。
我們生活在乙個有趣的時代。隨著軟體開發逐漸遍布全球各地,你會發現有很多人都可以**的工作。所以你需要不斷學習以保持競爭力。否則,你就會落伍,停滯不前,直到有一天,這份工作不再需要你,或外包給一些更廉價的勞動力。
那麼我們能做些什麼?有些雇主很慷慨,會提供培訓以拓寬你的技能。也有的人會說我沒時間或者沒這個資金去接受任何培訓。所以,關鍵是要擺正心態,學習是對自己的負責。
這裡有一些學習的方法。而且許多資源都可以在網際網路上免費獲取:
每個具備行業經驗的程式設計師肯定參與過**庫岌岌可危的專案。系統很糟糕,並且改變這邊總是會破壞另一邊不相關的功能。每次新增模組,程式設計師只能想著盡可能少地改變**,每次發布都膽戰心驚。這座軟體的摩天大樓隨時有坍塌的可能。之所以改動**會如此傷腦筋是因為系統太糟糕了。但是即使你知道系統出了問題,卻又因為投鼠忌器,而不得不聽之任之。任何乙個外科醫生都懂得,傷口要想癒合就必須得切除腐肉。雖然手術會帶來痛苦,但絕對比任傷口發炎潰爛要好。
不要害怕你的**。沒有人會在乎當你搗鼓**的時候有沒有暫時破壞了什麼東西。只要你做的改變不會讓專案重新回到開始狀態,就不會令人崩潰。投入時間重構,能讓你受益於專案整個生命週期。這樣做還有乙個額外的好處是,由於你有過這種處理病危系統的經驗,所以你對它應該如何工作非常內行。要善於應用這些知識,千萬不要反感這些寶貴的財富。重新定義內部介面,重構模組,重構複製貼上**,並通過減少依賴來簡化設計。你可以通過消除特殊情況顯著降低**的複雜性,因為特殊情況往往是因為錯誤的耦合特點導致的。慢慢地從舊結構過渡到新結構,測試一路同行。如果你想要一下子完成乙個大的重構,那麼往往會因為各種頻出的問題而考慮中途放棄。
專業程式設計師的乙個最重要的特點是有責任心。專業程式設計師會為他們的職業生涯、預算、日程安排承諾、錯誤、技能技巧負責。乙個專業的程式設計師不會將責任推卸給別人。
如果你是專業的,那麼你就需要為自己的職業生涯負責。你有責任去閱讀和學習。你有責任去時刻關注最新的產業和技術。但是許多程式設計師覺得這應該是他們雇主的工作。no,大錯特錯。想一想醫生?想一想律師?他們都是靠自己來培養和訓練自己的。他們的下班時間多用在了閱讀雜誌報刊上。他們時刻關注著最新的資訊動態。所以,我們也應該如此。你和你雇主之間的關係,已經在雇用合同上作了詳細的說明,簡而言之就是:你的雇主承諾支付你薪酬,而你承諾做好工作。
專業程式設計師會為他們編寫的**負責。除非他們知道這些**是有效的,否則就不會發布**。現在,好好思考這個問題:如果是你,你會不會在不透徹了解**的情況下就直接發布**?專業程式設計師不希望qa找到任何bug,因為這些**都是經過他測試之後才發布的。當然,qa依然會發現一些問題,因為沒有乙個人是完美的。但作為專業程式設計師,我們的態度應該是讓qa找不到任何缺陷。
專業程式設計師也是好的團隊成員。他們負責地對待整個團隊的輸出,而不是只顧自己的工作。他們樂於助人,善於向彼此學習,在需要的時候甚至會鼎力相助,為了專案前仆後繼。
測試的價值是程式設計早期階段就灌輸給軟體開發者的乙個理念。近年來,單元測試,測試驅動開發和敏捷方法的興起,證實了我們開始注重於在開發周期的各個階段進行測試。但是,測試只是你可以用來提高**質量的許多任務具之一。
回過頭去看,當c語言還是乙個新事物的時候,cpu時間和任何型別的儲存都是非常寶貴的。第乙個c語言編譯器注意到了這一點,所以選擇了通過去掉一些語義分析,來減少**之間的傳遞次數。這意味著,在編譯時,編譯器檢查到的可能只是可被檢測到的bug中的一小部分。為了彌補這個缺陷,stephen johnson寫了乙個名為lint的工具——它將從你的**中刪除一些沒有價值的東西——從而實現一些已被它的兄弟c語言編譯器撤掉的靜態分析功能。然而,靜態分析工具卻因為可以給出大範圍的誤報警告和一些沒有必要遵循的靜態文體慣例的警告而倍受讚譽。
現在的語言、編譯器和靜態分析工具的設計和以前已經大不相同。由於記憶體和cpu時間變得相對比較便宜,因此負擔得起編譯器檢查更多的錯誤。幾乎每一種語言都擁有至少乙個工具,用來檢查風格指南的違規行為、常見問題以及一些狡猾的有時候可能很難捕捉到的錯誤,如潛在取消引用空指標。更高階的工具,如c的splint,以及python的pylint,是可配置的,這意味著你可以通過命令列開關或在ide中,使用配置檔案來讓工具選擇放過其中的哪些錯誤和警告。splint甚至還能讓你在注釋中註解你的**,以便於更好地提示你的程式是如何工作的。
優秀程式設計師能寫出好**,這是毋庸置疑的。壞程式設計師則不能(他們能寫出好**,就不是壞程式設計師了,哈哈)。他們總是在生產其他人不得不消滅的怪獸。你的目標是寫出好**,對不?那麼你應該成為好程式設計師。
好的**並不是憑空而來的,也不能靠運氣然後恰巧讓你瞎貓碰到死老鼠。為了獲得良好的**,你必須努力的改進。過程是艱難的。但是如果你確實關心**的話,那麼你一定能收穫好**。
僅靠技術並不能成就好的程式設計。我碰到過一些非常聰明的程式設計師,他們能夠產出令人印象深刻的演算法,能夠熟記語言標準,但卻寫出了最可怕的**。這種**,閱讀起來很痛苦,使用起來很痛苦,修改起來更是令人痛不欲生。我也碰到過一些非常謙遜的程式設計師,因為堅持簡單的**,所以寫出來的程式更優雅,更易於表達他的意思,和他們工作非常愉快。
基於我多年的軟體生產經驗,我得出的結論是,差強人意的程式設計師和偉大的程式設計師之間的真正區別是:態度。好的程式設計在於專業的方法,以及一種竭盡全力希望寫出最好軟體的期望。
要成為乙個優秀的程式設計師,你必須對自己的**負責,真正關心**——養成積極向上的心態。偉大的**是由大師精心雕琢的,而不是由那些馬虎的程式設計師胡亂寫出來的。
成為專業程式設計師的 6 個技巧
1.在你責怪別人之前,先檢查自己的 先想一想自己的假設和其他人的假設。來自不同 商的工具可能內建不同的假設,即便是相同的 商對於不同的工具,其假設也可能不同。當其他人正在報告乙個你不能重複的問題的時候,去看看他們在做什麼。他們可能會做一些你從來沒有想到過的事情,或者他們的做事順序與你的截然不同。我個...
怎麼成為專業程式設計師
我每天都開車去上班,但我的駕駛水平遠遠不如專業車手 類似的情況,天天程式設計可能並不足以使你成為一名專業的程式設計師。那麼,什麼才能把乙個普通人變成一名專業車手或者專業程式設計師呢?重要的並不是經驗本身,而是 努力的學習 也就是要不斷地挑戰自身能力之外的東西。專門的訓練會有效。訓練的主要價值在於發現...
成為高效程式設計師的搜尋技巧
對於缺乏程式設計知識的人來說,完全有可能編寫乙個網頁或小程式。如果在用google搜尋相關示例時幸運的話,可以搜到現成的 即使是經驗豐富的程式設計師,通常也會為了節省時間和精力而在網上搜尋解決方案。如果不借助搜尋技術 網路及集體智慧型,現代化高效程式設計是難以想象的。因此,搜尋技巧對高效程式設計師變...