演算法+數據結構=程序,對於程序員,最重要的就是兩個:演算法、數據結構。
操作界面美觀、人性化這些不是不重要,而是這些技能相對與演算法和數據結構,一般認為更容易掌握。
B. 演算法不扎實的程序員,每一個都很慌
初學者經常問這樣的問題,然而這些其實是錯誤的問題。
對於初學者而言,你最應該優先考慮的是,哪些東西構成了程序的基礎?
最經典的一句話: 程序 = 數據結構 + 演算法 。
如果說編程語言是程序的血肉,那麼演算法就是程序的靈魂。
人不能沒有血肉之軀,但是沒有靈魂的人依然只是一個死人。
不能單純依靠演算法衡量一個程序員的好壞,但是面試的時候考演算法絕對是簡單高效的篩選手段。近些年大廠的面試幾乎必考演算法也是這個原因。每一個演算法學的不扎實的程序員,在面試的時候都很慌。
下面這些書籍應該是演算法方面最常見的經典書籍。我有幸都讀過,有些讀完了,有些半途而廢,不過基本上也都算是熟悉。順序上由易到難,從薄到厚,每本書下面我會簡單的介紹一番,希望能對你的學習有所幫助。
首先是兩本演算法入門書籍,也可以當做演算法讀物:
《啊哈!演算法》
用他的自我介紹的來講:「這不過是一本有趣的演算法書而已,和別的演算法書比較,如果硬要說它有什麼特點的話,那就是你能看懂它。」
圖文並茂,而且畫風有趣,適合新手入門,但是代碼是C的,看著比較累,文字也略顯冗長。
圖是非常棒的,啟蒙用,非教科書
《演算法圖解》
和《啊哈》類似,他的介紹是:「像小說一樣有趣的演算法入門書。」
書裡面講的很好,python代碼也很容易讀懂,比之《啊哈!演算法》,書中的例子沒有那麼有趣,但是圖很清晰,文字和代碼不冗雜。
缺點同樣是非教科書,非常淺顯,三四個小時就看完了。有一種剛剛熱身的感覺。
接下來這幾本都是最常見的書了:
《數據結構與演算法分析C語言描述》
這本書的作者幾乎不浪費筆墨在一些簡單的地方。書很薄,但是覆蓋面很廣很深,作者實在是非常厲害。
不過反過來說,就是有些地方講的語焉不詳……
這本書還有java語言版本的,但是相比之下C的更好一些。
挺好的一本書。
還有一點是翻譯不是很給力,好多人都沒堅持看完。
《數據結構與演算法Python語言實現》
英文版評分非常高,中文版評分非常低……
據說是也翻譯的不好。另外就是本書自身錯誤也不少……幾版過後依然很多沒有改過來。
書中數學證明和介紹比較簡單。因為採用Python語言的原因,比較易讀。
淺顯易懂,內容上循序漸進,環環相扣。相比於上一本,我會更推薦一些。厚度也不算厚。
《數據結構與演算法 Python語言描述》
北大教授裘宗燕的書,這本書前面寫的挺好的,尤其是在面向對象還有ADT等思想的闡述,都很不錯。
但是讀到後來給我一種虎頭蛇尾的感覺,前面氣勢如虹緒論就寫了很長,最後三章感覺有點草草收尾的意思。就像編輯在催稿,而作者很忙的樣子……
另外就是這本書的編排順序我個人也不是特別喜歡。
接下來是兩本大部頭,都是非常厚的書。
他們最大的特點就是:出現率遠大於看完率
《演算法導論》
演算法書中的權威,MIT的6.046J就是按照這個來講的。
公認最好的演算法書,組織結構合理,內容詳盡。引導讀者從思維方式上對演算法進行領悟。
書中對演算法的數學結構進行了詳盡的闡述。有非常多的數學證明。
這本書我說不出什麼缺點,只能說有些內容是因為我還沒到大牛的境界,暫時還無法體會理解。
我個人的觀點是:不要糾結於詳細的偽代碼,不用糾結於連篇累牘的講解。體會其中演算法的精髓就好。
《演算法》第四版
如果說,《演算法導論》是學術上最好書,那這本應該是實際應用最好的書。
它對數學的要求比《演算法導論》低很多,摒棄了演算法的證明。
書中具體給出了每位程序員應知應會的50個演算法,深入淺出,大量圖解。非常棒。
java基礎的話你能擼出來Hello World基本上就可以開始看這本書了,這本書最大的不友好之處在於它的第一章非常長,沒看過的人又不知道哪裡可以跳過。
這本書後面的翻譯感覺不如前邊了,不知道是換人了還是DDL了……
翻開書就會看到很多的圖,配套作者在coursera上面的課程學的話事半功倍!
接下來的幾本我看的比較少,簡單介紹一下,希望大家自己去發現和了解,不要漏下這些好書:
《編程珠璣》
很薄一本啊,但是我放在那還沒看完……
這本書被稱為: 歷史 上最偉大的計算機科學著作之一
融深邃思想、實戰技術與趣味軼事於一爐的奇書。
內容不深,但是不是一個知識點一個知識點的給你講解演算法原理的。
這本書的核心思想是讓你了解如何正確選擇和高效地實現演算法。書中還有一些趣聞軼事,看著倒是很有意思~
有興趣的同學可以看看~
《演算法競賽入門經典》系列
演算法競賽入門經典書,ACM必備書籍吧算是。書中題目對於競賽來說比較簡單,但是對於一般我們平時工程來說偏難。語言用的是C/C++,請好好做例題好好做作業,讀書的時候好好思考和復習~
反正我是沒讀過,捂臉……
《劍指Offer》
這個書很有意思,對於在校生來說我個人覺得是必看的書。沒有任何工作經驗的同學在面試的時候真的會被問懵的。這本書可以讓你了解如何應付考官日常問題,在解答面試問題的時候,書中很多方法和思路會讓考官覺得你思考的很全面,給你加不少分。
我面試的時候也曾快速掃過一遍這本書,讓我在回答問題的時候條理更清晰。書中代碼是C的,emmm,於是代碼部分我就沒太看……
《用Python解決數據結構與演算法問題》
最後給大家推薦一本在線的 免費 的演算法書。
https://facert.gitbooks.io/python-data-structure-cn/
不是大部頭,也不是讀物,新手入門足夠用,書中介紹了大多數日常需要的演算法,並且講的比較淺顯~轉行的新手基本可以通過這本書來快速掌握常用基本演算法了~
反正免費,是否適合自己看兩頁也就get了~
如果需要PDF版,可以在「程序員必修課」公眾號後台回復:「Python演算法書」獲取。
C. 為什麼國內程序員都很少進行代碼重構
說到代碼的重構對於國外的程序員提到的比較多,特別是大型的開源工程,基本上一個模塊或者函數的實現會反復的修改,一個文件能被修改成千上萬次,曾經訂閱了linux內核組的郵件,每天的收到的修改文件成千上萬,有時候一個文件都能被修改上百次,對於文件修改最瘋狂的是google的chrome源碼,重構的次數,讓你覺得每天都在重寫但是功能上感覺越來越流暢。為什麼我們周圍的程序員絕大部分時間做的不是這樣的事情。
為啥從直覺上覺得老外的寫的代買質量比我們的要高,我們國內的程序員絕大部分的時間是在趕進度,准確的來講忙著增加功能和修改bug,其實也從側面反映出為什麼國內出不了android以及Linux等影響深遠的 科技 創新,從全球開源代碼的佔比就可以看出,差距還是很巨大的。
為什麼覺得老外寫的代碼比我們的強?
1.國內軟體發展主要階段還在解決有沒有,還遠談不上強大
中國的軟體經過近幾十年長足的發展,已經取得了巨大的成就,特別在互聯網行業已經有幾個巨頭躋身世界前列了,最近炒的很熱的臉書的用戶數據泄密事件,作為當事人扎克伯格,也在論述中提到中國有幾個很厲害的互聯網公司,這說明中國在互聯網領域還是取得了相當大的成就,但是在一些核心的領域,或者門檻很高的領域差別還是非常巨大。
任何事情在發展的初級階段首要考慮的是不是有沒有,所以如同創業初期的公司會選擇短時間內搞出來個產品,哪怕是不成熟的產品,然後快速的投入市場,根據市場用戶的反應同步追蹤問題,等到產品差不多穩定,並且產品在市場上有了一席之地之後,後續的事情就要考慮優化功能,對裡面的代碼或者產品的性能進行全方面的提升,目前國內大部分的互聯網一般比較年輕,還在解決有沒有的問題,相信隨著時間的推移以及國內軟體的發展,也會有大量的高質量的開源框架代碼出來,但這一切都需要很長的時間。
所以國內的程序員大部分時間都是在趕進度和根據需求完成功能代碼。
2.軟體產業的底子還很薄弱, 歷史 積淀還不夠
舉個很典型的例子,現在很多國內的程序員到了30多歲就開始考慮後續的轉型了,因為後面的輕輕人會帶來很大的沖擊,所以大部分的30多歲的程序員都在考慮自己後路,都要考慮轉型的問題。老的有經驗的程序員反而轉型去做管理或者合夥創業了,哪有幾個還在安心搞技術,年齡大了還在搞技術的還被人鄙視,覺得自己沒有出息。
但是在國外寫代碼是一種很常見的職業,和別的工種沒有多大的差異,40,50歲了寫代碼也是比比皆是,做軟體是一種技術工種,經驗的佔比是很高的,所以老程序員寫出來的代碼更加有深度,穩定性更高,一切的根源還是產業的發展不夠成熟,需要時間和 歷史 的積淀,從這方面講國內的軟體整體產業還是比較薄弱,從業人員的整體素質和工作氛圍還有待慢慢的成熟,周圍都是有經驗的程序員在帶領著如何去重構代碼,如何提升代碼的質量,而國內大部分的程序要還是被產品經理鞭策著增加需求和修改代碼。
3.公司的文化差異
目前很多的中國技術公司更多的追求的是短期利益的最大化,在基礎軟體的投入遠遠不夠,畢竟基礎的投入很難短期見成效,在一個具體的場景,有一個產品主體的功能已經實現了,也能在用戶那邊投入使用了,一般的公司很難拿出時間來,讓你做代碼的重構,畢竟這種事情很難直接產生經濟效益。這與公司本身的文化差異有很大的關系,重視的技術或者懂得技術的公司對於這方面相對比較重視,反之就差很多。
小時候課本上就說著我們落後100年,所以高樓大廈不是一天建成的,所以在追趕的道路很漫長,所以承認存在差距,然後努力加倍的去追趕。
Time is money. 以目前國內互聯網的情況,需求應接不暇,程序員基本上都是被需求與業務趕著走,時間非常緊張,在這種情況下,程序員很多時候唯一的選擇就是趕緊實現需求的功能。所以,一個項目下來,代碼基本上都變得非常非常的「垃圾」。
也有很多程序員想過在項目結尾的時候進行代碼的重構,基本上每個程序員也都知道重構代碼的好處,但是並不代表著真正能做起來。還是那個原因,國內互聯網的速度太快,需求應接不暇,做為程序員,基本上沒有時間來做這件事情。
而另外一個原因是跟團隊負責人有關。若團隊負責人能夠意識到重構的好處,那麼他可以為此單獨劃分一段開發時間出來,讓大家分別負責一個模塊進行重構,這都是可以安排做起來的。這也需要團隊負責人如何在需求人員的需求與代碼質量的進度上做一個平衡,進行統籌安排。
最後我想說一個可能很少意識到的原因,那就是人員流動問題。國內互聯網目前人員流動非常的大,尤其是北上深這樣的互聯網發達的城市,基本上是平均兩年就會走一大波人,在這樣的情況下,也會考驗從業人員的職業道德,即我到底要把代碼寫的多好,要把代碼的可維護性做到多好,其實這都是從業人員自身需要考驗的問題,因為完成一個功能很容易,但是要考慮的全面就是另外一回事了。而人員流動帶來的另一個問題就是有一些代碼是很難看懂的,即有些代碼在人員離開後成為了「 歷史 」,無人敢動。這也會阻礙著軟體的重構工作的進行。
從我所講的這幾種情況來看,重構其實是大家都能知道的好處,但是真正實施起來卻又有現實的約束,需要負責人來做這樣的統籌安排與推動。
成本太大
大多數軟體產品的開發都是經過了很多開發人員的付出,如果進行代碼重構需要了解產品、了解框架、了解代碼邏輯,這個過程會花費大量的時間和人力成本,對於企業來說,效益是第一位的,與其花費精力進行效益不大的產品重構,不如去承接更多的項目來的實在。
領導決策
由於大部分企業的老闆都是非技術人員出身,他們更關注效益和客戶,為了符合企業的發展,在進行產品開發時會更多的採用新技術來吸引客戶,花費精力重構代碼不如開發一套新產品或者開發更酷炫的效果更具有實在意義。
代碼規范不足
由於國內互聯網較之國外起步較晚,很多企業發展時間較短,加之人員流動比較大等多方面的因素,很難形成標准、嚴謹、行之有效的代碼規范,所以很多技術人員在開發時都是根據個人風格習慣在開發,等其他人接手代碼時,缺少相關標准和文檔,很難理解代碼邏輯,花時間去了解代碼、重構代碼不如直接推翻重做來的方便。
客戶定製化需求
部分企業創業初期對企業信息化是不夠重視的,只有企業發展到一定程度才會考慮信息化建設,而由於業務的限制,大多數標准化的互聯網產品都很難滿足企業的實際需求,需要進行大量定製化的開發,對於互聯網企業來說,即使產品開發足夠完善,在實際項目中也需要進行擴展,倒不如直接在項目中進行調整。
程序員的發展限定
在國內很少有終身的程序員,大部分都會逐漸轉向銷售、售前、項目經理、產品經理等崗位,而這些崗位則需要了解業務、了解客戶,對技術的需求反而不會太高,所以與其花時間去專研技術不如將更多的精力用在業務和項目層面。
代碼能夠重構對底層框架要求深度掌握、且代碼框架本身要足夠靈活,而國內絕大部分技術人員都是停留在對框架的使用層面、少數可以完善、結合使用,極個別的在做同語言山寨或者換一種語言重寫,能夠對產品體系進行把握、與時俱進擴展實在是鳳毛麟角。隨著國家的經濟提升、IT行業逐漸成熟,在我國這么多IT公司基數下,即便是鳳毛麟角的概率,重視基礎框架、積累萃取、不斷迭代完善的一些技術公司也會慢慢嶄露頭角、涌現出來的。
【國內程序員很少進行代碼重構】,這個現象雖然沒有什麼調查統計,不過我寫了十多年代碼,也發現身邊的程序員大多數是這樣的,【寧可寫新的代碼,也不願意重構老代碼】。下面我也談談自己的看法:
系統沒有問題,就是最大的功勞
我見過的大部分的傳統行業的軟體公司或IT部門是這樣的(互聯網公司不太了解),「只要系統穩定,那麼就是最大的功勞」,而保持系統穩定最好的方法是什麼? 就是盡可能的不要動系統!
可能很多人不能理解,但很多公司確實是這樣,甚至公司對項目的考核標准中,項目有什麼突破的權重很低,是否有生產事故的權重很高。所以很多「機智」的項目組成員,千方百計的不接需求,或者把需求推給別的項目組。在這種單位裡面,別說重構了,新代碼都寫的不多。
測試覆蓋度太低,重構代碼沒辦法保證質量
代碼重構,很重要的一個問題:「重構後的代碼誰來保證?如果影響到原有的功能怎麼辦?」
這時候很有效的一個方法,是使用各種自動化的測試來保證重構代碼的質量。
但是,大部分公司,不管是單元測試還是其他的自動化測試,都是不健全的,甚至是沒有的。所以只要不是被逼不得已,程序員寧可重新寫一個方法,也不願意重構之前的代碼。
其他
進行代碼重構不是一件容易的事情,務必需要對需求熟悉;對代碼 歷史 變更熟悉;對代碼框架,模塊熟悉;對產品更新迭代做好風險把控,時間成本把控……
進行代碼重構需要能力非常高,責任心非常強的人進行,甚至需要一個優秀的團隊完成。
為什麼要代碼重構?理由一大堆,我認為主要有兩條,一是原代碼已不適合擴展新需求,二是原代碼已擁腫不堪,亂七八糟。
為什麼很少重構?除了上述分析外,還有其他因素,如人員流動快,原團隊原作者早已不知何去何從了。又如需求和業務繁多,完成工作開發都累得半死不活,日理萬機似的,哪有時間和心情重構?
謝謝大家。
1.國內程序員技術能力不足以進行代碼重構
大量的軟體從業人員連編程規范都不熟悉,怎麼可能做代碼重構?更多的人只會寫寫hello world,只會拷貝粘貼小段代碼,連if else這種語句都寫不清楚甚至漏掉邏輯,連面向對象的編程思想都沒有,談何重構?
2.國內程序員的溝通能力說服能力一般。
進行軟體重構,必須說服經理,讓經理相信重構會帶來軟體質量的提高和故障率的逐步降低,這樣經理才會安排人力進行重構。
3.國內軟體開發更注重bug的及時解決
國內軟體開發大量的人力被分配到解決短期的某個bug,沒人抽時間思考如何長久的徹底的解決軟體缺陷,其實解決bug不重要,找到軟體的缺陷或者性能低下的地方才重要,這些才是重構的點。國內加班加點疲於奔命式的開發,沒人考慮bug率是否長期內能夠收斂,總是先解決眼前的問題再說,處於一個永遠解決bug的死循環里。
這種工作模式是愚蠢的,不是smart的。
軟體開發,一定要動腦子,不要蠻干,這不是耕地,力氣大就耕的多。
重構代碼的目的說白了,就是讓軟體開發人員更自由。
謝謝樓主的問題,這是一個我特別想回答的問題?
為什麼?因為,第一,我是一個對代碼有潔癖的人,受不了一坨,一坨那樣的代碼。第二,我是一個踐行Clean Code 的人,給大家我主要負責的一個項目的一組數據(JAVA),總代碼量20萬行,UT coverage(單元測試代碼覆蓋率)82%,代碼重復率0.5%,代碼規則(sonar)違反(Code issue)0,甚至連最低的違反都沒有。
也正是因為我的項目在實踐Clean Code上的數據,我經常去給不同的團隊做分享,也對團隊對這個重構不太上心有一些理解。
大致以下幾個原因。
第一,也是最多的,交付壓力,大部分人都會抱怨,你看我們有這么多新功能,還有那麼多bug,根本忙不過來,哪有時間重構?
第二,重構意識不足,老闆,管理人員總是希望這個我們要有,那個我們也要實現?為什麼?因為別人有,別人有我們沒有可能會造成用戶流逝。即使有一些有見識的程序員和老闆反應這個重構問題,但是重構從來不是高優先順序的。畢竟,現在的軟體的生命周期可能很短。
第三,人員流動性大,這個是我聽過最奇葩的一個理由,我問一個來聽培訓的哥們,說你代碼寫成這樣,以後怎麼維護?這個哥們說,我也知道難維護,但我明年就跳槽了。
第四,設計上就不需要重構,曾經給一個保險公司做分享,我本人也是做金融相關產品後台的,我就問你們這樣寫代碼,可能三四年以後就非常難維護了,還是要盡快重構。他們的回答是,我們不重構,我們只重寫。什麼意思那?就是一個系統,三四年以後在寫一遍。
第五,程序員本身的問題,可能第一寫單元測試,修改命名,修改代碼結構,是一件很沒有成就感的事情,也是一個沒有多少附加值的事情。畢竟現在你去找工作,這個代碼質量方面的問題會問得很少。
第六,我見過的我不能反駁的一個回答,我的英文太差,不能很好的命名,而我也不想學英文。
第七,反正我已經實現了功能。
最後,用一句話來提醒程序員們,重構是多麼重要。
出來混遲早要還的,挖了坑遲早要填的。
在國內,【重構】這件事是程序員最喜歡做的事,而不是公司喜歡做的事。
但程序員喜歡並不能影響公司的決策,所以,國內的現象就是軟體系統很少有重構。
其根本的原因在於,國內的公司所推出的系統大多沒有重構的價值。
1、國內的互聯網公司存在這樣一種快節奏,那就是發現一個有價值的創意,就馬上進入開發,開發完成立即上線,並立馬推廣使用。這是一種快速試錯的模式,一旦發現系統在 社會 中沒有引起反響,那就馬上把系統再下線。這種情況下的系統哪來的重構價值呢?
2、即使一個系統上線成功了,也積累了大量的用戶,貌似為了系統的穩定性和性能,可以有重構的機會。但事實上不是,國內公司仍舊不會選擇重構,因為重構帶不來新的價值。所以,公司多數都會在系統上添加新的功能來吸引新的客戶,而不會考慮重構現有系統。
總得來說,引起重構的原因在於能夠有持續的價值。沒有價值的事,企業當然不會做,僅是程序員的一廂情願而已。
你只是見到了你所在的公司現象,不代表所有,也不能代表大部分的。
代碼重構還是存在的現象
代碼設計爛,經常出問題、擴展麻煩、維護心累、數據混亂、結果不清醒、模塊劃分混亂
就可能要考慮到重構了
呵呵,
老大說:
你趕緊去修復一下這個bug,
還有幾個功能沒有實現,加班搞一下,
pm 說:
這個功能改一下,
還有這個,界面重新調整一下,
這個業務流,現在不一樣了,
客戶需求需要多幾個功能,
老闆說:
這東西下周能出來嗎?
D. 程序員需要懂演算法嗎
這樣說吧,如果你只是從事普通的工作崗位,對演算法要求不高的話,就不必刻意的去學習了。事實上,演算法在日常編程中都會用到的,最好懂一些吧。
如果你想從事高端職業,例如AI,游戲,這就需要演算法的知識了,而且很重要!
E. 演算法與數據結構對於Java程序員意味著什麼
說數據結構沒用那是不可能的,但是要看你做什麼了。
比如說你要血java,如果你想搞網站方面的話就簡單了。
數據結構基本可以不用學,因為在web應用中,能用到的演算法的地方少之又少,幾乎就那麼幾個,想記不住都難。
但是如果你要往軟體方面和手軟方面發展的話就要學一部分了,但是這東西學是學不到的,能學到的只不過是思路,到時候自己發揮一下,想個演算法就行了,演算法這東西說難不難,難的東西有,但是沒有你能用到的。
像你這樣的情況我想說兩點:
首先,說你想從事演算法類的工作,那麼選擇什麼樣的語言都是一樣的,演算法肯定有,但是用到的都不多。剛進公司的時候一般是用不到演算法的,因為演算法都是別人想的,你也許有好的演算法,但是別人不一定採用,但是你的演算法基礎不要丟掉,因為等你當了項目經理後這個是必不可少的。
其次,你要知道,在學計算機的路上,很少有人能學什麼就做什麼,大家都在被社會潮流推動,想要不掉隊就只能隨波逐流。因為畢竟我們都不想一輩子寫代碼。大家都是拿這東西做個跳板。
學java的路很長,但是也很有趣,希望你能學好。
F. 為什麼很多程序員會鄙視MATLAB
用MATLAB的人,絕大多數都是做科學計算、工程理論計算、數值分析、金融分析用的,用戶群主要是科學家、工程總師、數學建模、金融投資決策班子等等,其中不乏院士博士,普通程序員就仰望吧,哪裡能鄙視?
因為Matlab掩蓋了大量的程序實現細節 。Matlab是由美國mathworks公司開發的一款大型商業軟體(不便宜哦),它的開發語言是M語言(一門解釋性語言,必須依賴MATLAB解釋器)。
在程序員的圈子裡面,的確存在著鄙視鏈,其中Matlab也的確遭到一大批程序員的鄙視,原因是普通程序員(比如使用C、C++編程語言的)要實現一個功能,就必須理解它的每一個細節,再來組織編碼。而MATLAB卻不同,它本身懈怠了大量的庫,很多功能你根本不需要了解他是如何實現的,在沒搞清楚原理的情況下一行代碼就可以搞定,對於那些辛辛苦苦寫很多代碼的程序員來說,是不是很氣人。其實Matlab是一種很有用的科研工具,下面我就來介紹一下MATLAB的一些更要應用。
關於MATLAB,就先介紹這么多,歡迎大吉關注太科羅技,並在下方積極留言討論。
恕本民科直言,
程序員與做科研,完全就是兩碼事!
程序員是靠編程序混口飯吃,需要優化,精雕細琢!
而做科研關心的是用數學模型來盡快驗證某個猜想是否正確,根本就不想,也不需要在程序的優化上花時間,有現成的拿來就用更好,而MATLAB中的各種應用信手拈來,方便無比,節約大把時間,何樂不為?
這就是本民科用MATLAB做科學研究的原因!
程序員鄙視MATLAB?
反過來了吧?
程序員不會做科研,所以不在一個層次!
因為程序員很少會用Matlab的,根本不知道這裡麵包含了多少技術含量
我跟你講,程序員就這表情,真是人在敲代碼,鍋從天上來。莫名其妙的背上鄙視MATLAB的罪名,也是一臉懵逼呀,而且這「很多」程序員是怎麼統計出來的?
的確,在程序員中的確存在各種語言互相瞧不起的現象。就像某個經典的笑話:某程序猿追求女神,女神說你能讓這論壇里所有人吵起來我就跟你走。某猿說Python是世界上最好的語言,果然整個論壇都炸了。女神說我們走吧,某猿不走,非得說服其他人。
對於普通程序員來說,每天需要實現多少功能,完成多少個頁面,涉及演算法的部分很少。而 MATLAB是個數學軟體,都是數學公式,自然用不上。這應該就是為什麼有些程序員「鄙視」MATLAB的原因了。
MATLAB在演算法開發、數據可視化、數據分析以及數值計算方面是其他語言所無法匹敵的。准確來說,MATLAB是一個研究工具,與C,C++,java等語言不同,其他語言更像一個構造工具。打個比方,MATLAB就好比示波器,而其他語言則是計算機,本身不具備太多比較的意義。
雖然MATLAB在數學處理方面很優秀,但它也局限在這了。程序員是一個很廣泛的工作,包括寫爬蟲,做軟體,開發 游戲 ,部署網路等等。MATLAB就算勉強能實現,編程體驗也比其他語言差。 MATLAB的「偏科」也導致了一部分人對它喜愛不起來,但也構不成鄙視的罪名。
1、使用matlab的根本就不是程序猿
2、程序猿也不鄙視matlab
3、matlab的焦點是實驗實現,而不是生產環境
4、程序猿鄙視的頂多是使用matlab的人的編程水平,因為matlab的語言復雜度和需要的特性比一般編程語言簡單太多了。但是沒哪個程序猿會鄙視使用matlab的人在其領域的專業水準。舉個例子,就好像我會鄙視劉國梁的肚子,但是我不會認為因為我有六塊腹肌我就可以球桌上干贏拿信用卡的胖子。
5、如果真有人鄙視matlab,那就好像是會打字的人鄙視牛頓手上的紙筆說它落後,僅此而已
這樣類比吧,放高中,matlab就是那種最高級別,按鈕最多,一個巨大無比的屏幕,但是只能顯示馬賽克的卡西歐科學計算器。任何一個使用ipad的人都會鄙視這玩意
但是,這貨方便啊!真方便啊,你把考題輸進去(當然很麻煩),不光給你結果,還給你過程,甚至所有參數每一秒的值都給你記錄起來,隨時回頭查看,參數是在那一秒跑飛的都能找出來
沒有程序員鄙視matlab,問題本身就不成立。
先問是不是再問為什麼。
我是程序員,用的是JS主力,含Node.js。
大學參加過數學建模,也拿過國家獎,用的就是matlab。
我不知道你哪裡得出程序員鄙視matlab這一出,高級黑?
另外,樓下瞎吹matlab是什麼工程院院士用的啥啥啥的,抱歉,我一個二本院校小菜雞也用,程序員也用。而且,我是不是可以懟C語言,誰人不用?
歸根到底,就是個引戰,兩個東西不在一條線上,有什麼可對比的?還鄙視?我們程序員也沒那功夫好吧,福報領不完,閑得慌。
作為一個寫了多年代碼的程序員,對於所謂的程序員鄙視鏈已經顯得比較麻木了,對於程序員這份職業對於大部分的人來講可能就是一份工作,工作的目的就是多拿點工資能夠更好的改善家人的生活,當然也會存在一些人發自內心的對編程這份工作感興趣,如果是發自內心的喜歡一件事情,就會非常容易出成績也會工作起來非常的輕松。對於存在所謂的程序員的鄙視鏈一般是對於剛入行的或者門外漢會這么提,軟體行業分類十分眾多而且每個種類裡面都存在很大的差異性,都有其自身的難度所在不能簡單的認為哪種編程語言就是最優的,如果有這種想法證明對於軟體的認知還只是存在於初級的階段。
對於MATLAB軟體使用主要的群體在於科研工作者,無線通信、深度學習、圖像處理與計算機視覺、信號處理、量化金融與風險管理等領域使用的比較多,屬於集成性非常強的工具軟體,軟體從本質上講就是工具般的存在,服務於各個行業如同數學在科學領域的作用,無論多厲害的軟體高手最終還是要以開發的產品為主要的代表作,對於軟體使用層級相對弱化很多,所以作為一個程序員鄙視MATLAB使用者,其實是沒有道理存在的。一個使用者一個開發者本質上沒有鄙視鏈條的存在,而且用好一個軟體也不是一件很簡單的事情,MATLAB屬於集成性非常強的很多成熟的庫文件都集成在裡面了,對於科研工作者來講是一種極好的工具存在。
程序員做的本質工作就是做出優秀的產品給用戶使用,但是很多開發者由於長期盯著功能模塊往往忽視了很多外在的東西存在,特別是初級的程序員始終覺得底層的編程語言在難度上要高於java類的高級語言,其實每種編程語言都有其存在的價值所在,而且每種編程語言都有其內涵所在,真正意義上掌握一種編程語言也不是一件很輕松的事情,從程序員的角度出發只要是掌握了一種編程語言再去學習新的編程語言都會簡單許多,編程語言雖然在語法上有區別但在編程模式上大同小異,如同線程的概念如果是在學習C語言編程的時候已經掌握了,那麼切換到別的語言也會變得順理成章,只是在語法細節上的差異而已。
在程序員領域所謂的鄙視鏈其實更多是外行在擺弄的事情罷了,對於真正意義上的程序員寧願多去看看代碼也懶得去做這種無聊的事情,術業有專攻,但是編程領域行業的差距就十分的巨大,各個領域有機的組合在一起才能夠真正鑄造出好的產品來,從目前編程大的趨勢上看應用類的編程在各個領域展示會更加的明顯,因為軟體行業經過幾十年的快速發展已經積累了大量優秀的資源庫,很多偏向於應用級的軟體就是借鑒和積累了前人的經驗。
每種軟體都有其存在的價值和屬性。而且只要生態存在那麼就會有意義存在,MATLAB的存在讓很多科研工作者提供了極大的便利,從國內軟體所欠缺的就是對於軟體基石的投入,國內大型的互聯網公司把主要的精力放在應用級層面的開發,都是想著如何開發出億萬級的用戶的應用,對於基礎層面的軟體投入想對稀少,基礎軟體層面的投入需要長期周期長見效慢,而且這種生態的建立需要相當漫長的時間,像常見的工具軟體圖形處理以及文字處理軟體,看起來不起眼都是背後的企業經過多年的時間鍛造出來的,一旦涉及到版權層面就會容易被卡脖子,華為公司公司被美國公司打壓就是典型的例子,基礎才是決定是否能夠成功的關鍵因素。
G. 對於JAVA程序員來說演算法重要嗎
主要看你Java主要用戶那些方面,假如涉及到信息和數據比較大的項目,演算法很重要,假如演算法很差,導致程序效率低下,維護難度加大。
當然假如只用於一些簡單的小程序,或者對數據篩選要求不高的,演算法的重要度就會大大的降低。