A. 如何成為編程高手,程序員要看什麼樣的書籍,有經驗的人說一聲,做好是大師級別的人物
作者:金蝶中間件公司CTO袁紅崗
不知不覺做軟體已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上並沒有成為高手的捷徑,但一些基本原則是可以遵循的。
1. 扎實的基礎。數據結構、離散數學、編譯原理,這些是所有計算機科學的基礎,如果不掌握他們,很難寫出高水平的程序。據我的觀察,學計算機專業的人比學其他專業的人更能寫出高質量的軟體。程序人人都會寫,但當你發現寫到一定程度很難再提高的時候,就應該想想是不是要回過頭來學學這些最基本的理論。不要一開始就去學OOP,即使你再精通OOP,遇到一些基本演算法的時候可能也會束手無策。
2. 豐富的想像力。不要拘泥於固定的思維方式,遇到問題的時候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想像力是建立在豐富的知識的基礎上,除計算機以外,多涉獵其他的學科,比如天文、物理、數學等等。另外,多看科幻電影也是一個很好的途徑。
3. 最簡單的是最好的。這也許是所有科學都遵循的一條准則,如此復雜的質能互換原理在愛因斯坦眼裡不過是一個簡單得不能再簡單的公式:E=mc2。簡單的方法更容易被人理解,更容易實現,也更容易維護。遇到問題時要優先考慮最簡單的方案,只有簡單方案不能滿足要求時再考慮復雜的方案。
4. 不鑽牛角尖。當你遇到障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當我遇到難題的時候會去玩游戲,而且是那種極暴力的打鬥類游戲,當負責游戲的那部分大腦細胞極度亢奮的時候,負責編程的那部分大腦細胞就得到了充分的休息。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。
5. 對答案的渴求。人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最後沒有得到答案,在過程中你也會學到很多東西。
6. 多與別人交流。三人行必有我師,也許在一次和別人不經意的談話中,就可以迸出靈感的火花。多上上網,看看別人對同一問題的看法,會給你很大的啟發。
7. 良好的編程風格。注意養成良好的習慣,代碼的縮進編排,變數的命名規則要始終保持一致。大家都知道如何排除代碼中錯誤,卻往往忽視了對注釋的排錯。注釋是程序的一個重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經清楚地表達了你的思想,就不必再加註釋了,如果注釋和代碼不一致,那就更加糟糕。
8. 韌性和毅力。這也許是"高手"和一般程序員最大的區別。A good programming is 99 weat and 1ffee。高手們並不是天才,他們是在無數個日日夜夜中磨練出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個測試,找個10000以內的素數表,把它們全都抄下來,然後再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。
B. 用記事本寫代碼的程序員都是高手么
用記事本寫代碼的程序員不都是高手。
問題本質要不要用集成開發工具寫代碼而言,是不是用記事本寫代碼和編程本身厲害與否沒有多大的關系,倒是有很多人建議在初學編程的時候,先以記事本學習為主,這種是有一定道理的,畢竟記事本寫代碼空白一張對於初學者來講需要考慮的東西對於掌握基本的東西多點,畢竟很多介面在寫的時候沒有了聯想功能只能靠大腦去想,倒是真能鍛煉自己的獨立能力。
說到記事本寫代碼,要說這方面表現得比較厲害的在linux下面直接完全的鍵盤操作不用滑鼠,工作效率高得驚人,當然需要記住大量的快捷鍵,要比直接圖形界面的操作效率高很多,linux下面直接搞好VIM能夠體會到純鍵盤操作的快感。
決定編程水平的高低主要分成三個部分:
1.編碼水平,這是程序員的基本功,能把想做的功能給完成了,而且性能質量很高屬於高手。
2.編程思想,這是決定程序員水平高低的關鍵,任何東西都需要指導思想,正常的編程模式也不會超過100個體系,常見的多進程模式,網路編程模式等等學會了套路無論什麼編程語言用起來照樣比較暢通,編程思想絕對水平高低。
3.框架思想,這種屬於在編程思想和編碼水平之上的東西了,邁向頂級的關鍵,絕大部分屬於普通的程序員,真正在食物鏈頂層的才有幾個,有些有這種能力但是沒有展示的機會,也是挺可惜。
所以看編程水平的高低,更多是內在東西,快捷鍵使用再流利,沒有主心骨,一樣也是花架子,看一個人水平高低還是要看做出過什麼東西,很多老工程師在面試的時候,問的不是做過什麼項目,一般是問現在市場上還有當初做過的產品沒,產品才是最好的簡歷。
C. 程序員等級劃分:看頂級高手如何編程
有腦子,很聽話,很認真,但基礎不好,代碼有局限性 這類型的程序員大多是工作一到兩年的程序員,但和上面的不同,他們很有腦子思路很好,而且很聽經理的話,做東西很認真,做不完了自己會加班寫,學新的東西也很快,但是有一點不好的是,他們有很多理由說自己沒時間學習基礎,這些人一般是在學校沒有學好,出來之後後悔了,學起來很認真,由於學了些新的知識,起點高,看不起基礎的東西,從不想著沒事去看看編程基礎,看看演算法,看看數據結構,總是以為我都能做出這樣的項目了,還看那些小東西會很丟人的,於是在公司從不看回家更不想看,時間長了,技術會有很大的局限性,對某一塊技術很不錯,但是對其它技術不怎麼好,於是在接到一個項目時,總喜歡使用自己現有的,會的技術去實現,轉了一圈又一圈總算是把東西寫出來了,而且還是加班完成了,但是代碼的性能,穩定性,和效率上差的很遠,擴展性也談不上,時間一長,項目一多起來,就會出現多次反工,因為需求是會不斷變化的,於是自己的代碼也要變化,感覺很是理所當然,一個項目沒事,接手的多了就麻煩了,新項目剛到手,老項目就出問題了,不是這里有點小毛病就是那個功能要升級,於是新項目放下,著手改老項目,手上能有三四個項目時,就會忙個不停,改的多了,沒辦法再改了就得重新設計,或是直接說這個功能實現不了。 其實在這個階段的朋友很有潛力的,只要花點心思補習一下自己的技術缺陷,多看看高手的代碼,寫之前想一下,設計一下,自然事半功倍,千萬不要有眼高手低的心態。 真正的高手Nb人物是怎麼工作的------------程序員 1.不隨便改變需求 他們不會主觀的改變一些東西,不管是對還是錯,如果要改的話他們會在開會時,或是私下跟你提出來,通過後再改,否則會按需求辦事 2.不寫沒有思想的代碼 在寫功能時會加上一些人性化的功能,比果加個小圖標,加一些驗證,處理一些操作習慣,加加快捷鍵,處理好Tab順序,等這些,不用你說,他們自己會處理好。 3.不寫沒有遠見的代碼 他們在寫代碼時會想,不會是單純的實現功能,他要想,如果別人也要用這個方法怎麼辦,以後要改的時候怎麼辦,代碼這樣寫是不是合理,是不是會影響性能,然後才會」吝嗇「的出手。 4.不寫不負責任的代碼 我們寫代碼一是為客戶用,二是方便其他人看,不單單是自己維護,要對自己的代碼負責,從自己手上出去的代碼代表的就是自己的臉,代碼不好,人家會「打臉」的。他們不願意挨打所以他們負責。 高手在編程效率方面可能並不比普通程序員快多少,因為他們會吝嗇自己敲下的每一行代碼。這種「吝嗇」有兩方面的含義,一是項目的架構性和整體性考量,二是從性能和優化的角度進行Coding。其實,這里所映射的是一個開發者的技術視野。 有多位技術專家強調項目執行時的全局觀。面對一個項目,即使是團隊中的普通一員,也要力求從項目整體架構的角度審視開發需求,對各個模塊、介面和通信做最優化的預想和配置。這樣可以從全局審視整個項目的技術布局,預判可能出現的問題。 在確定了整體之後,落實到具體的模塊實現,每一行代碼不但有上下文的考量與規劃,還要具備模塊間的整體布局。這是模塊內的技術視野,比如介面的定義、注釋的可讀性、代碼的執行效率等。當你寫下一行代碼前,要考慮它是否會對整個系統造成影響,是否方便其他介面進行調用,這些都是一個開發高手的「技術潛意識」。 據一些經常帶領入門級開發者的技術經理介紹,多數人只考慮自己所負責的模塊進行開發,缺乏一個全局性的技術視野和對代碼性能苛刻的態度,這樣雖然能按交付日期完成項目,卻對項目質量和開發者的自我提高有很大阻礙。 開發高手是代碼閱讀者。大多數技術專家的代碼閱讀量是普通程序員的百倍,代碼閱讀的時間比寫代碼的時間要長得多。 多數程序員只把程序開發當成一份工作,他們在乎平台的前景、語言的優劣、報酬的高低;他們不願為一個技術點反復鑽研,不願為一個bug精心測試,不願為自身技術水平的提高多花時間。而開發高手往往具有單純的技術夢想,願意為技術付出自己全部的時間。
D. 如何看出一個程序員的技術能力和水平
其實,評論一個程序員技術的高低,不是看他會多少技術,又懂多少技術。參加過什麼大型的項目,也不是看他有沒有自己的博客,github有多少star。
而是看他解決問題,定位問題的能力。這個很重要,真的很重要。
技術可以很快上手使用,但是解決問題定位問題的能力不是輕易就行的。特別是在高壓下解決問題的能力。
下面是師姐為大家整理的一些建議:
解決問題
1.代碼的命名要規范。
代碼是寫給人看的好嘛!代碼是寫給人看的好嘛!代碼是寫給人看的好嘛!
headImg是什麼鬼?我能以為是banner么,頭部的圖片,請原諒我蹩腳的中式英語!avatar這個呢、portrait這個呢?會不會更好些?英語不好就不能用好有道、google翻譯么?還有用中文拼音命名的,親,我們用的是英文做為腳本好么?你要用這樣的,用易語言可好?!
瘋了!
為什麼要用框架?一個很重要的原因是命名規范,目錄規范,結構規范,分層規范,有利於團隊協作,不要本末倒置!
2.架構和規劃能力很重要,模塊分層,解耦設計什麼的,文件目錄嵌幾層?
這其中又跟命名的能力能搭上點關系。命名都命不好,目錄結構怎麼建?
url不要做的漂亮些嗎?不考慮seo了?
你喜歡addGoods還是喜歡goodsAdd?
請你尊重點我的那些初高中英語語法好么?
3.協助能力、可持續能力。
最好的程序代碼是脫離其產生者的。
為自己程序處處救火的程序汪並不是一條好汪。
我記得一句話就是:別想著你的代碼以後還有機會重構!
每次說,額,這里我後面會改的,會改的,但是可惜,現實情況是根本不會給你這個時間的。
代碼寫出來,一是要爽了自己,二是也要爽了別人。
4.debug的能力、總結能力、學習能力真的很重要,代碼寫出來真的花的時間不長,但擦屁股的時間比寫代碼的時間多多了!
出了問題不記錄,寫個博文都好啊,我可沒那麼強大的記憶力,所以最討厭考記憶力。
5.不要一貫的使用各種演算法,秀演算法的你們夠了,要寫去寫底層,應用的場景比較多。
應用層面的程序,演算法的應用不是特別多,大部分都是業務代碼。以這個作為評價標準的,真心然並卵。
E. 如何認識計算機高手
大概在另外一撥人的眼裡,成為計算機學科的高手應該是把數學學好。你們這群人都只是低端的碼農,只有把高等數學學好,精通概率、統計、隨機過程、抽象代數,熟練掌握各種建模方法,才是計算機科學的王道。再結合各種領域知識,年薪百萬輕輕鬆鬆。弄點高級演算法幾十億被收購瞬間財富自由。
技術只是技術本身,計算機發展了這么多年,無數新技術層出不窮。每個人都靠著自己的專長在這個領域發家致富。有的人是因為懂客戶需求,有的是擅長做設計,有的人擅長把成熟的技術應用到傳統的學科之中。匯編只是這茫茫技術中的一種而已。
本質上來講,高手的本身並不是掌握了什麼技術,而是能夠幫助別人解決問題。一種技術只是解決問題的一種方法,而不是唯一的方法。如果解決這些問題需要精通匯編,那麼你一定需要掌握。如果想解決的問題並不需要了解匯編知識,你大可以不掌握。匯編知識與很多其他知識在知識本身這個層次上並無優異之分,只不過在計算機領域更底層一些。
最後,計算機的基礎知識,比如操作系統、資料庫、計算機網路、編譯原理,該了解的肯定要了解,該入門的要入門。
至於是否要精通,如果你發現在你成長的過程中遇到的瓶頸,是對於底層的了解,那你就應該精通。
F. 來聊聊怎樣辨別一個程序員水平的高低
看頭發。熱愛技術的人,會不自覺的熬夜,不解決某個問題誓不罷休。
G. 從哪些點上可以體現一個程序員的實力
對於一個程序員來說,剛上任的新手,如果能夠將工作任務高效地處理,證明其工作能力還是具備一定的基礎的,企業大可繼續留任試用。如果這個程序員不僅能夠在短時間內高效處理工作內容,且對於工作的細節也十分地考究,充分全面地考慮,必然也代表其工作思維和普通員工不同。一個程序員如果對於工作只是在應付差事,那麼必然其能力也不會好到哪裡去,因此,一定要觀察期對待工作態度是否認真,然後進行其能力的初步判斷。
H. 有哪些老程序員都知道對新手很有用的經驗
一說到程序員,想必大家的第一印象就是頭發少,很大程度上就是因為壓力大導致的,有生活壓力,也有工作壓力。
今天說說工作方面的壓力,想必看到這個問題的小夥伴都有一個認知,就是一個項目往往比預期的要長,說不定從哪天開始就加班了,一出現BUG真的要人命。此時,考研新老選手心態的時候和經驗的時候了,老程序員或許能從容應對,新手可能完全不知錯所。
這些信息包括戶口檔案、社保、公積金等信息,程序員新手可能跳槽比較頻繁,有人甚至還換個城市工作。除了戶口可能其他的信息都亂了,可能當時覺得不那麼重要,但是十年、二十年後,可能會非常重要。
·工作日誌可以提升腦容量;
·不要先寫框架再寫實現,要反過來;
·重構/優化/修復Bug,不要同時做;
·簡化開發流程,加快迭代速度;
·紙筆是最好的工具,其次是markdown;
·畫出結果,一目瞭然。
·要學會進行清晰的命名;
·問問題前先調查,要問到點上。
·不要小看程序員
I. 如何辨別一個程序員水平的高低呢
有的時候單純靠一個面試很難辨別一個程序員的水平是什麼樣的。原因很簡單,因為很多面試題在網上都有,如果刻意准備那麼一般都能回答的不錯。所以想辨別一個程序員的水平需要一定的方法。
上述幾方面我們稱為應能力,還有一些軟能力也是非常重要的,比如責任心,對技術的態度,學習能力等等。當然,這些就更難考量了,本文暫不介紹。
如果上述幾方面都比較不錯,那麼這個程序員的水平應該是不錯的。即使對目前的工作的知識儲備可能還有欠缺,但經過一段時間後必然可以