對於一名優秀的程序員來說,面對一個項目的需求的時候,一定會在腦海里浮現出最適合解決這個問題的方法是什麼,選對了演算法,就會起到事半功倍的效果,反之,則可能會使程序運行效率低下,還容易出bug。因此,熟悉掌握常用的演算法,是對於一個優秀程序員最基本的要求。
那麼,常用的演算法都有哪些呢?一般來講,在我們日常工作中涉及到的演算法,通常分為以下幾個類型:分治、貪心、迭代、枚舉、回溯、動態規劃。下面我們來一一介紹這幾種演算法。
一、分治演算法
分治演算法,顧名思義,是將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。
分治演算法一般分為三個部分:分解問題、解決問題、合並解。
分治演算法適用於那些問題的規模縮小到一定程度就可以解決、並且各子問題之間相互獨立,求出來的解可以合並為該問題的解的情況。
典型例子比如求解一個無序數組中的最大值,即可以採用分治演算法,示例如下:
def pidAndConquer(arr,leftIndex,rightIndex):
if(rightIndex==leftIndex+1 || rightIndex==leftIndex){
return Math.max(arr[leftIndex],arr[rightIndex]);
}
int mid=(leftIndex+rightIndex)/2;
int leftMax=pidAndConquer(arr,leftIndex,mid);
int rightMax=pidAndConquer(arr,mid,rightIndex);
return Math.max(leftMax,rightMax);
二、貪心演算法
貪心演算法是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的局部最優解。
貪心演算法的基本思路是把問題分成若干個子問題,然後對每個子問題求解,得到子問題的局部最優解,最後再把子問題的最優解合並成原問題的一個解。這里要注意一點就是貪心演算法得到的不一定是全局最優解。這一缺陷導致了貪心演算法的適用范圍較少,更大的用途在於平衡演算法效率和最終結果應用,類似於:反正就走這么多步,肯定給你一個值,至於是不是最優的,那我就管不了了。就好像去菜市場買幾樣菜,可以經過反復比價之後再買,或者是看到有賣的不管三七二十一先買了,總之最終結果是菜能買回來,但搞不好多花了幾塊錢。
典型例子比如部分背包問題:有n個物體,第i個物體的重量為Wi,價值為Vi,在總重量不超過C的情況下讓總價值盡量高。每一個物體可以只取走一部分,價值和重量按比例計算。
貪心策略就是,每次都先拿性價比高的,判斷不超過C。
三、迭代演算法
迭代法也稱輾轉法,是一種不斷用變數的舊值遞推新值的過程。迭代演算法是用計算機解決問題的一種基本方法,它利用計算機運算速度快、適合做重復性操作的特點,讓計算機對一組指令(或一定步驟)進行重復執行,在每次執行這組指令(或這些步驟)時,都從變數的原值推出它的一個新值。最終得到問題的結果。
迭代演算法適用於那些每步輸入參數變數一定,前值可以作為下一步輸入參數的問題。
典型例子比如說,用迭代演算法計算斐波那契數列。
四、枚舉演算法
枚舉演算法是我們在日常中使用到的最多的一個演算法,它的核心思想就是:枚舉所有的可能。枚舉法的本質就是從所有候選答案中去搜索正確地解。
枚舉演算法適用於候選答案數量一定的情況。
典型例子包括雞錢問題,有公雞5,母雞3,三小雞1,求m錢n雞的所有可能解。可以採用一個三重循環將所有情況枚舉出來。代碼如下:
五、回溯演算法
回溯演算法是一個類似枚舉的搜索嘗試過程,主要是在搜索嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就「回溯」返回,嘗試別的路徑。
許多復雜的,規模較大的問題都可以使用回溯法,有「通用解題方法」的美稱。
典型例子是8皇後演算法。在8 8格的國際象棋上擺放八個皇後,使其不能互相攻擊,即任意兩個皇後都不能處於同一行、同一列或同一斜線上,問一共有多少種擺法。
回溯法是求解皇後問題最經典的方法。演算法的思想在於如果一個皇後選定了位置,那麼下一個皇後的位置便被限制住了,下一個皇後需要一直找直到找到安全位置,如果沒有找到,那麼便要回溯到上一個皇後,那麼上一個皇後的位置就要改變,這樣一直遞歸直到所有的情況都被舉出。
六、動態規劃演算法
動態規劃過程是:每次決策依賴於當前狀態,又隨即引起狀態的轉移。一個決策序列就是在變化的狀態中產生出來的,所以,這種多階段最優化決策解決問題的過程就稱為動態規劃。
動態規劃演算法適用於當某階段狀態給定以後,在這階段以後的過程的發展不受這段以前各段狀態的影響,即無後效性的問題。
典型例子比如說背包問題,給定背包容量及物品重量和價值,要求背包裝的物品價值最大。
❷ 程序員一定要演算法能力強嗎
演算法能力強對於低級點的程序員不是必須但是成為高級的程序員就是必須的了,演算法學的好的話,不論對你思考問題的方式還是對你編程的思維都會有很大的好處。演算法的學習不只是理論的支持,更需要你不斷的在理論的基礎上去code,去思考。
❸ 大部分已經幹了兩三年的程序員水平是怎樣的
見過四年的比十年的強,不過又過了一年,被反超了,關鍵是行動,學習!
❹ 大家都知道高級程序員很吃香,那麼高級程序員和黑客到底誰更厲害
非從業人員對於程序員和黑客的外在形象就存在著不一樣的認知,因為電視電影和網路上的段子,普通的程序員一般都是有才能卻一點不風趣的男性,常年一件格子襯衣,幾根稀疏的頭發,雖然賺的錢不少,卻不會花錢裝扮自己;而黑客的形象就完全是另一種,他們很神秘,可能我們身邊隨便一個人在暗地裡都可以是黑客,黑客還喜歡穿黑衣服,帶黑色的帽子,不喜歡以真面目示人。
相對的,普通程序員也不會關注黑客關注的很多點,比如CAPTCHA這種可能就直接引入個第三方的來防禦了,並不會自己去實現一遍。還有加密演算法這種,也幾乎只有黑客才會去研究。普通程序員可能研究的就是壓縮演算法。黑客的攻擊手段多種多樣,有的甚至不會寫代碼,比如《我是誰–沒有絕對安全的系統》里就有一位,根本不寫代碼,通過翻垃圾桶,開鎖偷看資料這類操作搜集很多有用的信息,從而發起攻擊。一般稱這種為手段『社工攻擊』。
❺ 你見過最厲害的程序員是怎麼樣的
以前曾經做過十餘年的編程,見識過不少程序員,其中有兩位是比較厲害的。
第一位,J同學,非科班出身,糧食專業畢業的,之後在一個食品廠工作,因為比較清閑,於是他突發奇想,想考某個211的計算機研究生,就去買了書來看,但是要實踐啊,他又沒有計算機,就有空總去公司的電腦室蹭機器用,電腦室的人,就讓他幫忙開發一個工資管理系統,不知道是不是想為難他,結果他研究生是沒考上了,但是經過一個月的摸索之後,居然把工資系統給做出來了。讓電腦室那些科班畢業的人臉上掛不住啊!
之後他就斗膽去了一個國內知名的企業應聘程序員,居然還給應聘上了,慢慢做到了華南區的技術總監,再後來他幾個同事出來創業,高新挖走他。
他這個人就是傳說中的怪俠,非常低調,樸素,不按時上班,不按時下班,工作效率非常高,愛抽煙,請教他什麼問題,他一時想不出來的話,就去外面抽根煙,煙抽完了,回來就會有答案,反正非常神奇。
第二位,B同學,科班出身,211大學計算機研究生,當時是他的導師跟我們單位有來往,推薦過來的,我面試的他,惜話如金,聽說他C語言非常厲害,但是當時我們做項目需要PB,他說他不會,我就說,那給你一個星期的時候,你回去學習一下,再來面試。一個星期後,再過來,給他一個小模塊,很快就做出來,非常棒,之後,項目的技術難題,大部分都是他解決的。平時,他也不怎麼跟我們來往,但是有事就做,也不打 游戲 ,按時上班,按時下班,非常討厭加班。
遇到技術問題,下班後打電話給他,他不接的。有一次,我們第二天系統要上線,大家都在忙著測試,加班,他到點就走了,領導追到電梯門口,問他,XX哥,你走了,他說了一個字,是,就進電梯了。後來也是被高薪挖走,聽說到現在40歲也還沒結婚。
我們公司有一位非常厲害的程序員,基本上一個人當做一個排兵力使用。也就是說一個人寫代碼的效率基本上抵得上10+人的能力,一年隨隨便便寫個幾十萬高質量的代碼。這種人對編程語言的理解已經到了登峰造極的地步,且能夠靈活自如地使用。
在自己編碼能力強的同時,對架構的理解能力也是超強,一個大的系統能夠很快地進行模塊拆分,快速的定義不同模塊間的交互介面,可以快速的安排任務下去。
另外代碼的質量基本上沒地說,導致跟著他的測試人員幾乎發現不了Bug,這哥們在寫代碼的同時基本上順手就把單元測試寫好了,代碼質量高的簡直出奇。
當然了,至於學習什麼新的開源框架或者新的技術架構,基本上就是2-3天的功夫,就可以全面掌握。
目前為止,公司一直當做寶一樣供著。
我見過最厲害的程序員,是在2001年入職的一間香港電路板公司的電腦部經理,他也是最值得我尊重的程序員,那他最厲害的地方在哪裡呢?
編程語言只懂Foxpro DOS版本,但所有的ERP流程,英文、管理方法說得滴水不漏,有一次和財務的同事聊天,才知道他的月薪達8萬多。
很多程序員最怕大老闆提問題,但在他的眼裡,大老闆提問題就是一個商機,多多少少都要老闆加工資加設備。 高情商的表現就是無論下屬或老闆通通管理得服服帖帖,包括我自己,甚至老闆還沒有說話就己經知道老闆的心思了。
老闆分配的編程任務應期三天完成,絕對不過4天。軟體開發效率的提高,自然要依賴下屬心甘情願的加班付出才行,做到這一點,真的是難能可貴。
最厲害也是我最佩的一點就是,40多歲了頭發還沒有一點白的跡象,每天高效率的工作,下班後就拋開工作的煩惱,盡情桑拿按摩享受。
我認為最厲害的程序員不是編程技術,而是如何利用編程技術,不知道你認不認同?
應該是讀研時的學長,精通java和Python,畢業後進去微軟研究院工作。
當時和他在一個項目組,他獨立完成了教學平台語言分析模塊,NLP 模塊。我們團隊任何問題都能很快給出解決方法,前端後端都擅長。
當時我剛接觸linux,他就已經把Linux作為工作學習唯一的選擇。經常用terminal 操作,敲起代碼太帥了
誠邀,本人在杭州華為研究所工作,之前在一家創業公司工作過,公司里一個工作10年的大神,撐著整個創業公司,老闆總能拿到某些項目源代碼,不同語言的,c c++ .net java總之很多,給他,一禮拜就可以全懂了,所有語言基本都是1禮拜搞定(玩代碼的都知道精通一門語言後學其他的特別容易,不外乎面向對象的,面向過程的,然後就是各種API )上手做項目,之前很多不懂的問題問他都可以從本質上分析得很明白,主要是基本上看幾眼就可以知道哪裡錯了。或者大概方向,我後來去華為,都是他建議的,現在還在那公司的他聽說是技術總監了,應該不怎麼敲代碼了。
核心的代碼總是有那一兩個程序員來實現的。比方說現在微信的一開始的核心代碼。
比方說Linux的核心代碼, 都是由林納斯·托瓦茲編寫的, 並且為了能夠讓開源社區的人一起進行開發, 又編寫了Git版本控制。當你不滿意某個軟體或者系統的時候, 能夠自己實現並製作出更好的也許就是厲害的程序員吧。一直到現在很多的系統分支都是來源於Linux的內核。
最後如何成為最厲害的程序員, 還是要學習基礎核心的知識, 操作系統, 數據結構, 演算法, 編譯原理, 計算機網路, 在這個基礎上學習編程都是為了更好地實現自己的心中所想。為什麼這樣寫, 這樣寫會產生什麼效果。 為什麼Golang最近這么熱, 為什麼鴻蒙會被看好, 它又和其他的有什麼區別, 就可以自我判斷, 而不是見風就是雨。
最後希望自己也成為那個最厲害的程序員。
很久以前,我用win98的時候有次我系統崩潰了,因為我是電腦白痴,我朋友給我介紹了一個高手來幫我修電腦。
他看了一下電腦,問我有沒有98的盤,我說沒有。
他想了一下,叫我把固定電話拿給他,我想修電腦要電話干什麼,但人家是高手,我也不好說什麼,就把電話拔下來給他了。
他把電話線空著的一頭接在電腦的一個插孔內,然後進入dos,就開始在電話上不停的按著鍵,他按鍵的速度異常快,但是只按0,1兩個鍵,我搞不懂這有什麼用,但也不敢問,看了半個多小時,他還是不停的按這兩個鍵,我徐徐的有些困,我問他這東西要搞多久,他說要幾個小時,我給他倒了杯茶,就一個人去隔壁睡覺了。
醒來的時候,一看已經過了4個多小時,我起身到隔壁,看見他正在98裡面調試,過了一會兒,他說,你試試,我坐上椅子用了一下,真的好了,我當時也不懂電腦,謝過人家就走了。 後來我慢慢對電腦有了了解,終於了解,原來當時那位高手是用機器語言編了一個98系統,我後來問我朋友那位高手的下落,我朋友說前幾年去了美國之後,杳無音訊....
五年前有幸在一家軟體公司做產品經理。小的軟體公司。坐標西安。招人還挺不好招的。雖然給的薪水還不錯。但是真心不好招人。這種小軟體公司沒有名氣。真正牛逼的人都不來。
百試幾百人,包括做產品和前端的也算在裡面。光程序員這塊。有百分之六十的投簡歷的都是從某培訓機構出來的。所以的項目經歷。和待過的公司都是一模一樣,有明顯的人為的痕跡。
但是後來實在沒有人手。招了一兩個,差。差。差。真是差到極點
後來又經人推薦,招了一個,說是做安卓開發的。結果連個軟體的心跳包都調不好。軟體的升級這塊都搞不定。最後還是我這個外行,逼著他。一點一點卡,才把軟體升級這塊稍微搞上路了。
說出來真是讓大家笑話,華為的外包中軟國際。有個孩子實在忍受不了裡面的虐待,在裡面工作了一年半。然後跳到我們公司。這個孩子,才是稍微讓人可以用一下。就是起碼。你給他的工作。他能完成。其他的人都是在摸魚。因為這個公司的老闆以前也不是做手機軟體這塊。沒有資源,不認識人。
他是做電腦PC軟體,到後面做BS系統多一點。其實這種沒有技術含量,找的別人的框架。去修改。
普通人見不到最牛逼的程序員,最牛逼的程序員,一定是在最牛逼的軟體或者互聯網公司的深宮後院裡面。還沒出世的。就像當初的張小龍,史玉柱,裘伯君一樣。
你現在能看的牛逼的,感覺牛逼的。都是因為你不懂這個。你才覺得牛逼。包括前幾年比較活躍的黑客們,製造一些病毒。這都不是牛逼。包括熊貓燒香的李俊,普通人覺得他可牛逼了。但是真正的他出來後,去金山 360這種公司,提鞋別人都不要。
因為搞破壞不是牛逼。也不是自己水平有多牛逼。
我來講一個我見過最厲害的程序員。
這個程序員是我第一份工作碰到的大牛,我的第一份工作在中興通訊成都研究所,當時是做操作系統研發的。
我們當時經常會做一些培訓和技術分享,那時候我才入職3個月,我發現公司里有個人每次技術分享時候,就很多人去聽,並且會議室爆滿,連站的地方都沒有,然後我有次也去聽了一下, 第一每次目睹大牛的風采,因此操作系統是最底層的研發工作,會涉及到內核這塊知識,而linux內核知識特別抽象,看書根本很難看懂,但是這個大牛能把很難的東西講的很容易理解,並且在會上面對大家的提問總是能對答如流,實在是厲害。
而後我通過公司里的老員工才了解到,這位大牛是自學成才的,他的文化程度才初中,破格錄取到中興通訊,當時是操作系統部門的技術專家,他都能自己編寫操作系統,對各硬體都非常了解,也出了很多書。可見興趣是最好的老師,讓他能夠在程序員中發光。
必須是ACM大神,樓天成,樓教主。不了解他的可以網路之。是個天才一般的存在。
幾年前清華大學找同學玩,他那時是清華軟體學院的學生,突然說要帶我去見他的偶像,還說是最後的機會了,我們跑去計算機學院,當時博士正在答辯,通過在場的同學找到了他,他很靦腆的千呼萬喚始出來。他們兩在那裡交流了半個多小時,最後互留了EMail,我跟他聊了些我專業的內容,他還蠻好說話。 後面還通過這位同學認識另一位ACM屆大神,上海交大的戴文淵。我對編程略有了解,主要還是崇拜天才。
❻ [探討]優秀程序員和一般程序員差別在哪
還記得研發頻道此前發表過的一篇《白班程序員 VS. 夜貓子程序員》嗎?在這個世界上有兩種程序員,我們稱之為:Day Programmers(白班程序員)和Night Programmers(夜貓子程序員)。本文我們將探討優秀程序員和一般程序員有哪些差別,看看您是屬於那一種?來自知乎網上的大牛們各抒己見,一起來看下他們是如何區分的。創業者郭凜:如果純以編碼能力來看,可分為五類1. 拷貝型拷貝型選手就是傳說中的「代碼拷貝員」了,他們對實現功能幾乎沒有思路,所作的事情就是從網上或是之前其他團隊成員寫的代碼中拷貝出片段,然後放到項目中,如果運行項目出現了期望結果,則表示任務完成。這類人只會改代碼,卻不會寫代碼。他們大多對編程毫無興趣,只是希望以此糊口而已。2. 新手型當產品有功能需求時,由於經驗有限,程序員並不完全知道要如何實現這個功能,需要通過學習、尋找資料等方式來解決問題。這種情況下的編碼過程,程序員的主要目標是「完成功能」,那麼很難有多餘的心思去考慮邊界條件、性能、可讀性、可擴展性、編碼規范等問題,因此代碼bug可能較多,穩定性不高,常常會發生開發花費1個月,改bug卻要改上好幾個月的事情。3. 學習型這類程序員對所在領域的語言已經比較了解,對於一般功能可以有較為清晰的實現思路,給出需求時可以通過自己的思路來實現,並且會一定程度上考慮邊界條件和性能問題。但僅此而已,他們對可讀性和可擴展性考慮很少,也沒有項目級別的考慮,主要是希望通過實現代碼來練手或是學習。這類程序員最大的表現在於喜歡「創造代碼」,即使有現成的實現,他們也希望自己來實現一套,以達到「學習」的目的。他們不喜歡復用別人的代碼,看見項目中別人實現了相類似的功能,他們會以「需求不同」的借口來自己重新實現一套。這類人一般來說對技術有著較為濃厚的興趣,希望能夠通過項目來進行學習。從項目的角度來說,這種做法最大的麻煩在於開發周期可能較長(相比直接使用現成的實現),並且會使得項目代碼膨脹,影響未來的維護。但這類程序員由於有興趣,如果好好培養或許會成為明天的牛人。4. 實現型這類程序員一般有較為豐富的經驗,由於寫得太多,因此不再追求「創造代碼」來進行學習,同時對所在領域可能涉及的很多第三方框架或是工具都比較熟悉,當接受到產品需求時,對功能實現方案已經瞭然於胸,因此他們可以快速的實現需求,並且對邊界、性能都有一定程度的考慮。因為能夠快速實現需求功能,經常會被團隊評價為「牛人」。但他們一般僅僅停留在「完成功能」級別上,對代碼的可讀性、可擴展性、編碼規范等考慮較少,對項目總體把握也較少(例如控制項目膨脹、方便部署等架構級別的東西)。這類程序員最大的表現在於喜歡「開發項目」,卻不喜歡「維護項目」。他們產出的代碼最大的問題就是維護較為困難,可能過上幾個月回頭看自己的代碼都會暈頭轉向。因此即使是自己寫的代碼,仍然不願意維護,一般會苦了後來人。因為介面設計的缺乏,當需求變更時,發現代碼要改的東西太多,然後抱怨需求變化,卻很少認為是自己的代碼問題。這樣的項目如果經過長時間的變更維護,最終會變得難以維護(一般表現在需求變更響應時間越來越長)甚至無法維護,最終要麼是半死不活,要麼是被推倒重來。5. 架構型這類程序員比實現型更進一步,他們經驗豐富,對相關框架和工具等都很熟悉,「完成功能」、「穩定性」、「性能」這些已經不再是他們的追求,更優美的代碼、更合理的架構才是目標。這類程序員代碼設計大多建立在對需求的詳細了解和對需求變更的預測上——可擴展性較好;代碼細節也盡量多的考慮邊界情況、性能——穩定高效;代碼命名和注釋都恰到好處——可讀性較高;同時在開發過程中他們會不斷重構,對代碼做減法——保證項目可持續發展等等,但由於考慮問題較多,單從「實現功能」階段來看,完成速度不一定會比「實現型」要快。只是到了項目中後期優勢才會慢慢體現出來。知乎刪代碼工程師 安江澤:創造型、管家型、學院派、鍾表型、折騰型1. 創造型/創新型以創造/創新為樂的程序員。以新的方法解決現有問題,發明方法解決尚未解決的問題。問題本身並不限於技術領域。矽谷很多技術創始人具備這類的品質。雖然他們創業後都不再全職寫代碼,但他們這種品質貢獻了他們事業的第一步。2. 管家型以管系統演化為樂的程序員。有潔癖,有強迫症,容不得系統有一點的瑕疵。如果你招聘了一個程序員/架構師,2-3年後你的互聯網產品再也沒有在可見/可擴展性上遇到瓶頸,他多半是這種程序員。3. 學院派型通常在CS某一領域擁有博士學位,或者深受他們的影響的人。對該該領域興趣濃厚,通常參與企業核心競爭力相關的研發工作。當然,也有一部分也具備第一種特質,中途去改變世界去了。4. 經驗型在行內具有多年豐富的經驗,可承擔責任,考慮全面。團隊擁有了這種人,通常會少走很多彎路。但面對新的挑戰還是要和其他人站在同一起跑線上的。5. 鍾表匠型喜歡並擅長把一個系統從里到外研究通透的人。分享出來都是從里到外讓人垂涎欲滴的干貨。很多後端工程師都是這種類型。6. 折騰型擅長「折騰」,方案沒有最好的,只有最難的。興趣廣泛動手能力強,通過折騰留下很多技術積累。想用哪一塊的新技術?先問問他把,8成他很久前就已經玩過了。7. 肉盾型哥甲高血條長,加班如同切菜一般,逼急了不睡覺也行。只伸手要過兩件東西:原型和咖啡。適合打閃電戰。當然,可能事後要打打後勤重構下代碼。iApp4Me創始人、iOS開發者郝培強:七大標准 邏輯思維很重要優秀程序員的標准:要懂邏輯,這點其實挺難達到,很多很不錯的程序員其實邏輯能力不行,所以我覺得限制了他們更深一層次的發展,或者說限制了他們解決特別復雜問題的能力。要有分析能力。這也是解決復雜問題不可或缺的能力。要會自學,技術發展速度很快,如果沒有自學能力會被淘汰的。所以在中國英語要好,不然看不懂最新的技術走向。要有良好的時間管理習慣和意識。要有耐心,肯於付出。要有良好的工作習慣。會看且勤於看文檔。產品管理、IT項目管理 何明璐:優秀程序員具有較明顯的自戀和偏執特徵對編程有濃厚的興趣,由興趣能驅動自己的探索和鑽研精神,優秀程序員一般喜歡用業余時間探索和自己琢磨點東西,研究點開源框架和源代碼,關注新技術,喜歡研究和探索演算法,邏輯方面的內容。優秀程序員一般比較懶於做重復的事情,對於重復事情有獨有的程序員思維,即通過程序或其它自動化方式解決重復問題,而留更多時間去思考。優秀程序員更多的會從簡單功能實現,花哨的界面轉移到對安全,性能,可擴展等底層架構的關注。優秀程序員一般有較明顯的自戀和偏執特徵,有較為希望獨自工作的特徵,比較難於被非技術背景管理者駕馭,高度強調自我能力價值的被認可,而且很多優秀程序員並不是好教練。優秀程序員一般有較為扎實的演算法,數據結構等理論知識的基礎。這些讓他們在迅速進入新領域的時候快人一籌。總結:不管是優秀程序員還是一般程序員,小編認為只要你喜歡思考,愛學習,對編碼有興趣,那麼你就是最好的。當然掌握技術才是硬道理,套用別人的一句話「不想當CEO的程序員,不是好的產品經理」。程序員們,加油吧!
❼ 大多數程序員演算法很垃圾嗎
大多數程序員演算法垃圾。根據查詢相關信息顯示:大多數程序員的演算法是根據課本上的老舊的演算法,效率低,沖突率大。
❽ 普通的程序員和大神級的程序員有什麼區別
❾ 編程技術人員是不是都是很牛逼
不見得都是牛逼的。
但牛逼不牛逼 有多個維度衡量
例如 BUG率,代碼風格,解決問題的能力。
❿ ACM:參加過ACM的大牛是不是練習時都要把每個演算法敲幾十幾百次呢
ACM比賽可以帶紙質資料,准備一份模板是很有必要的,所以演算法模版很重要,記住模版一定要權威,不要網上雜七雜八的拿來當模版,一份好的模板一定會對你的編程習慣和演算法實現打下良好的基礎。但是,ACM比賽的等級越高,模版的作用就越小,畢竟比賽不是套模板。
沒有人會把每個演算法敲幾百遍,大牛更加不會,敲十遍還記不住的話,一百遍也沒用的,重要的是對演算法本身的理解。如果你真正理解了演算法但寫不出來,那是你編程水平問題,這樣應該多看看大牛的代碼,多看看模板。
大牛不是演算法模板敲的多,而是對演算法理解的深刻並加上做的題目多,演算法就像數學公式,你記住公式難道就能考高分了嗎。重要的是運用啊,一個數學高手對於新學的公式他可以隨時推導出來,因為對公式真正理解啊,推的多了自然記住了,不是嗎。對於新手,先不要學演算法,先去poj做水題,就是簡單的題目沒什麼演算法,水題不要做太多,100題就差不多了。接下來就該系統的學習一下演算法了,《演算法導論》和《演算法藝術與信息學競賽》是我覺得必看的兩本書。另外,歷屆NOI國家隊選手的論文也是很有價值的,也屬於必看。接下來繼續去poj做題,多思考,做不出來就網路,google,poj做題的人非常多。做題可以查漏補缺,之前沒碰到過的 演算法都可能在題目中體現,碰到沒學過的演算法就網路學習,然後選一個好的放到你的演算法模板庫,poj做題1000以上想不成大牛都難!
我只想說大牛基本上都是這么過來的,當然不排除個別天才,不過我沒碰到過也沒聽過誰不做大量的題就能成為牛人的,畢竟天道酬勤。