① 程序員一般喜歡瀏覽哪些網站呢能否推薦一二
CSDN (Chinese Software Developer Network) 創立於1999年,是中國的IT社區和服務平台,為中國的軟體開發者和IT從業者提供知識傳播、職業發展、軟體開發等全生命周期服務,滿足他們在職業發展中學習及共享知識和信息、建立職業發展社交圈、通過軟體開發實現技術商業化等剛性需求。
博客園是一個面向開發者的知識分享社區。自創建以來,博客園一直致力並專注於為開發者打造一個純凈的技術交流社區,推動並幫助開發者通過互聯網分享知識,從而讓更多。很多大牌的老司機,還依然喜歡這個博客平台。
② 剛踏入職場的程序員,如何快速踏實地提升自己的能力
程序員提升主要靠實踐,跟一個完整的項目能最大限度的提升項目能力,以後找工作不用愁啊,現實工作中很難達成,你可以去找找培養這方面人才的,提升一下自己,你看看願碼ChainDesk,有你需要的
③ 關於C加加和java
C++之父評論C++與Java
http://soft.yesky.com/info/223/2414723.shtml
linux之父炮轟C++:
http://os.51cto.com/art/200709/55562.htm?1366380720
Java之父評價C語言之父:我用盡了形容詞
http://www.csdn.net/article/2011-10-19/306010?1366380958
C++之父評論C++與Java
如果人們非要拿C++和Java來作比較,我建議他們去閱讀TheDesignandEvolutionofC++,看看C++為什麼是今天這個樣子,用我在設計C++時遵從的原則來檢驗這兩種語言。這些原則與SUN的Java開發小組所持的理念顯然是不同的。除了表面語法的相似性之外,C++與Java是截然不同的語言。在很多方面,Java更像Smalltalk。(Sun的培訓教材清楚地寫道:Java在設計上採用了與C++相似的語法,與Smalltalk相似的語義。所以可以說Java與C++是貌合神離,與Smalltalk才是心有靈犀。)Java語言相對簡單,這部分是一種錯覺,部分是因為這種語言還不完整。隨著時間的推移,Java在體積和復雜程度上都會大大增長。在體積上它會增長兩到三倍,而且會出現一些實現相關的擴展或者庫。這是一條每個成功的商業語言都必須走過的發展之路。隨便分析一種你認為在很大范圍內取得了成功的語言,我知道肯定是無有例外者,而且實際上這非常有道理。
上邊這段話是在Java1.1推出之前寫的。我確信Java需要類似模板的機制,並且需要增強對於固有類型的支持。簡單地說,就是為了基本的完整性也應該做這些工作。另外還需要做很多小的改動,大部分是擴展。1998年秋,我從JamesGosling(Java語言的創始人)那裡得到一份建議書,說是要在Java中增加固有類型、操作符重載以及數學計算支持。
還有一篇論文,是數學分析領域的世界級大師,伯克利大學的W.Kahan教授所寫的HowJava'sFloating-PointHurtsEveryoneEverywhere(且看Java的浮點運算如何危害了普天下的芸芸眾生),揭露了Java的一些秘密。我發現在電視和出版物中關於Java的鼓吹是不準確的,而且氣勢洶洶,讓人討厭。大肆叫囂凡是非Java的代碼都是垃圾,這是對程序員的侮辱;建議把所有的保留代碼都用Java重寫,這是喪心病狂,既不現實也不負責任。Sun和他的追隨者似乎覺得為了對付微軟罪惡的「帝國時代」,就必須如此自吹自擂。但是侮辱和欺詐只會把那些喜歡使用不同編程語言的程序員逼到微軟陣營里去。
Java並非平台無關,它本身就是平台。跟Windows一樣,它也是一個專有的商業平台。也就是說,你可以為Windows/Intel編寫代碼,也可以為Java/JVM編寫代碼,在任何一種情況下,你都是在為一個屬於某個公司的平台寫代碼,這些代碼都是與該公司的商業利益扯在一起的。當然你可以使用任何一種語言,結合操作系統的機制來編寫可供JVM執行的程序,但是JVM之類的東西是強烈地偏向於Java語言的。它一點也不像是通用的、公平的、語言中立的VM/OS。私下裡,我會堅持使用可移植的C++作大部分工作,用不同的語言作餘下的工作。
「Javaisnotplatform-independent,itistheplatform」,B.S的這句評語對於C++用戶有著很大的影響,有些C++高手甚至把這句話作為自己的簽名檔,以表明對Java的態度和誓死捍衛C++的決心。
Linux之父炮轟C++:
糟糕程序員的垃圾語言(1)2007-09-0913:33劉江劉江@圖靈我要評論(14)字型大小:T|TLinux之父為Linux內核開發而專門打造的版本控制軟體Git已經引起了業界的廣泛關注。DmitryKakurin查看源代碼之後,發現使用的是純C而非C++,表示不可理解。引起了Linux之父炮轟C++:糟糕程序員的垃圾語言。AD:2013大數據全球技術峰會低價搶票中
Linux之父炮轟C++:糟糕程序員的垃圾語言Linux之父話糙理不糙不得不看的兩次從C++回歸C的高手評論C++C語言是否該扔進垃圾桶為什麼每個程序員都應該學習C語言?每個程序員都應該學習C語言?我可不這么認為C語言已經死了,5個需要忘卻它的理由用C設計用C++編碼為什麼使用C++C++0x:嶄新的C++,還是另一個Java?編程語言的三大定理動態語言為何難堪重任動態語言面面觀Linux之父LinusTorvalds為了Linux內核開發而專門打造的版本控制軟體Git已經引起了業界的廣泛關注。昨天,有一位DmitryKakurin老兄在查看了源代碼之後,發現使用的是純C而非C++,表示不可理解,他直言:「別拿可移植性說事兒,這是屁話(BS,bullshit)。「(此外,他還批評Git蠻力地直接操作文本,既啰嗦又易錯,而且很難跟上高層代碼邏輯。)」這個BS引起了Torvalds的強烈反應,他用「*YOU*arefullofbullshit.」(你才滿嘴屁話呢)作為自己反駁的開場白。接著,他先轉向了對C++的罕見的火葯味十足的炮轟:「C++是一種糟糕的(horrible)語言。而且因為有大量不夠標準的程序員在使用而使情況更糟,以至於極容易產生徹頭徹尾的垃圾(totalanttercrap)。老實說,選擇C就是為了把C++程序員踢出去。……我有這樣的結論,任何喜歡用C++而不是C開發項目的程序員可能都是我希望踢出去的人,免得他們來搞亂我參與的項目。C++會導致非常非常糟糕的設計選擇。你們這些C++程序員總是一上來就用語言的那些『漂亮的』庫特性比如STL、Boost和其他徹頭徹尾的垃圾,這可能對你們的程序有所『幫助』,但是卻會導致:
——當庫無法工作時無窮無盡的折磨(別跟我說什麼STL尤其是Boost很穩定而且可移植性很好,那全是屁話,而且一點都不可笑)
——低效的抽象編程模型,可能在兩年之後你會注意到有些抽象效果不怎麼樣,但是所有代碼已經依賴於圍繞它設計的『漂亮』對象模型了,如果不重寫應用程序,就無法改正。也就是說,使用優秀的、高效的、系統級的和可移植的C++的唯一方式,最終還是限於使用C本身具有的所有特性。項目限制只用C,意味著參與的人不會搗亂,也意味著會得到許多真正懂得底層問題,而不會折騰那些白痴『對象模型』垃圾的程序員。
所以,我很抱歉,但是對於Git這樣效率是主要目標的軟體,C++的所謂優點只是巨大的錯誤。而我們將看不到這一點的人排除在外卻成了一個巨大的附加優勢。如果你想要用C++寫的版本控制系統,去玩Monotone吧。他們確實使用了『真格的資料庫』,使用了『漂亮的面向對象庫』、使用了『漂亮的C++抽象』。可是說老實話,所有這些對某些計算機專業人士而言富於吸引力的設計決定,其最終結果確是一堆可怕、難以維護的垃圾。」【070907更新】Torvalds和DmitryKakurin爭論繼續中。對Torvalds的回擊,Dmitry反唇相譏:「隨著只用C編程的恐龍們逐漸滅絕,你很快就會發現只剩下自己一個人在固執己見。用Git貢獻者的數量是說明不了問題的。<顯然C++開發者也能夠貢獻C代碼。但是以為他們喜歡這種方式,那可就錯了。
沒有C的時候我用匯編編程。然後在C++誕生之前,我轉向了C。現在我使用C++和C#,而且不再走回頭路。差勁的程序員用任何語言都寫不出好程序。但是為了將差勁的貢獻者拒之門外這樣一個沒譜的理由而懲罰優秀的開發者,這簡直是胡鬧。」只過了10幾分鍾,Torvalds就回貼了:「和你不同的是,我實實在在地給出了不喜歡C++的原因,而且指出了它可能導致的各種問題的一些例子。而你呢,沒有給出一條像樣的使用C++的理由。事實上,Git比其他軟體配置管理軟體都要好,而好的品味(taste)和C正是原因之一。」
對上面的最後一句話,Torvalds後來又做了如下補充:
「說得更具體一些:
——簡單和清晰的核心數據結構,非常精益(lean)且頗具雄心的曖昧管理著它們,將「簡單勝於花哨」這一方法發揮到極致。
——有意識地不抽象數據結構和演算法,因為它們恰恰是Git核心的全部要素(wholepoint)。 如果你想用更花哨的語言,C++絕對是最糟糕的選擇。如果想要真正的高級特性,那就選擇有垃圾回收或者好的系統集成的,而不是既缺乏C的簡約(sparseness)又缺乏C的直接而且沒有重要概念的高層綁定(high-)的東西。 一言以蔽之,C++正處在困境當中,它既無法幫助原型化或者簡單的GUI編程足夠簡化從而真正可用,不是C那樣積極地鼓勵你使用簡單和直接的語言構造的精益系統編程語言。」 (另一位同學插了一句:這還沒有提到很難找到兩個C++編譯器支持同樣的特性。)「這與什麼恐龍毫無關系。好的品味永遠不會過時。將C與匯編語言相提並論,恰恰說明你對自己所討論的問題缺乏起碼的概念(don'thaveafrigginidea)。」
Java之父評價C語言之父:我用盡了形容詞
摘要:Java之父JamesGosling在上周發布了關於討論C語言之父DennisRitchie的簡短博文稱:C語言撐起了一切,他的影響巨大,並超越了科技世界。
Java之父詹姆斯·高斯林(JamesGosling)在上周發布了關於討論C語言之父丹尼斯·里奇(DennisRitchie)的簡短博文:丹尼斯·里奇辭世的新聞如五雷轟頂。過去幾天已經有很多資訊報道此事。他的影響巨大,並超越了科技世界,雖然他的大多影響都不為人知,但完全可以感受到。C語言撐起了一切。我的整個職業生涯也是從C語言和Unix中發展而來。對當今的大多數工程師而言,很難理解我在20世紀70年代感受到的幸福愉快感。當一種編程語言最終出現,我(其他人也)可以從匯編語言提升到一種真正的編程語言。我們可以做任何一切,過去我們得編寫所有低級位系統。在C語言之前,編程語言達不到任務:開銷太大了。系統的復雜性是真的阻礙了用匯編語言編寫大型軟體。C語言就像代碼的JATO。(編註:「JATO」是「Jet-fuelassistedtakeoff」的縮寫,字面意思:「輔助起飛的噴氣燃料」。這個系統通過小型火箭提供輔助動力,以幫助超載的飛機起飛升空。)下面是詹姆斯·高斯林此文的一些評論:TruelyJames.,.dentertaining.RIPRitchie!!!說的很對,詹姆斯!對於每個計算機專業人士,他們所接觸的第一種編程語言就是C語言。(C語言)有著如此多的令人驚奇的地方,這也使得學習過程非常有趣。安息,里奇!!!Greatonesarefalling.IstillloveC.Sosimple.Sopowerful.一位巨星的隕落。我仍然愛著C語言。如此簡單,如此強大。:.'tfound.Itwasagoodtime.我記得C語言就是程序員的冒險:有很多小坑,一不小心就陷進去。即便很多年過後,還有一些我沒有發現的。那是個美好時刻。Theequationisquitesimple:RichieislikeEinstein,pureGenius.AlltheITisbuiltonK&Rworks.Thanksman,andRIP...等式非常簡單:里奇就像愛因斯坦,純粹的天才。IT業的所有都基於肯貝漢和里奇的成果。感謝,安息……文章出自:nighthacks譯文來自:伯樂在線
④ 程序員6年只幹了50個小時工作,被開後稱是編寫了自動化工作腳本
很久之前,Reddit上出現了一則匿名的自白帖子:「 大概六年前到現在,我在公司什麼活都沒干 。」
這個化名為FiletOFish1066的程序員稱自己供職於一家知名的 科技 公司,實際上無所事事。
他寫道,謀得這份質量保證工作的八個月後,他使自己的全部工作完全自動化。「我可不是開玩笑。每周40個小時,我去上班,在辦公室玩《英雄聯盟》,瀏覽Reddit,想幹啥就幹啥。 在過去這六年,正兒八經的工作我可能也就幹了50個小時 。」
上司意識到他在六年內所做的工作比大多數矽谷程序員在一周內所做的工作還少後,就把他開除了。
這個故事在網上的技術圈子迅速傳播開來,最終促使這位主人公不僅刪除了帖子,還刪除了整個帳戶。
我發現歪果仁也跟中國人一樣愛看熱鬧,不嫌事大!
大概一年後,一個自稱是Etherable的用戶向互聯網上最重要的程序員論壇之一Stack Exchange上的Workplace版塊發了一個問詢帖:
「我沒有告訴僱主我的工作已自動化,這是否不道德?」這位內心矛盾的程序員說,他接受了一份美其名曰是「數據錄入」的編程活;六個月前,他編寫了使整份工作自動化的腳本。此後,「 上一個人過去常花一個月才能完成的工作現在只要10分鍾就能完成。 」這份工作是專職性質的,帶來的好處是Etherable可以在家辦公。
這個程序取得了近乎完美的效果。
後來這個帖子引起了分歧,評論鋪天蓋地。(現在瀏覽量將近50萬人次。)意見分成兩大派,一派覺得Etherable在欺騙僱主,至少在蒙蔽僱主;另一派認為這個程序員只是找到了一種巧妙的方法來完成手頭的工作。Etherable從未回應隨至而來的討論。也許是被受到的關注程度(世界各地的媒體都在競相報道此事)嚇壞了,這個用戶銷聲匿跡,只留下了那則帖子,關於誰可以使工作自動化、在什麼樣的條件下這么做的討論越來越備受關注。
可以稱之為自發自動化(self-automation)或自行自動化(auto-automation)。在大規模自動化這個幽靈困擾一線員工的那一刻,自行其事的程序員表明這個威脅到了程序員的手裡,如何變成天賜之物,不管僱主是不是知情。由於FiletOFish1066和Etherable都匿名發布帖子,隨後很快消失,因此兩人都聯系不上,無法請他們發表評論。但他們的故事表明,職場自動化會有多種形式,並由高管以外的人來主導。
生性樂觀的經濟學家和未來學家吹噓, 自動化的好處在於,將工作交給機器有望消除無須動腦子的重復性工作 ,讓人們可以一心撲在有趣又有創造性的工作上,或者更要緊的工作上。
磚家你確定現在程序員乾的都是不動腦子的工作?
你還確定,時間多出來之後,
程序員會干有創造性的工作?!
幾十年來程序員們一直在編寫使工作自動化的代碼。編程通常需要用到在不同的層面(從代碼格式化到合並至不同的代碼庫)添加自動化的工具,大多數人根本沒有走到使工作完全自動化或幾乎完全自動化這個極端。
我通過Reddit和電子郵件的私聊信息與十來個聲稱有類似經歷的程序員聊天。這些自發自動化人士處理過庫存管理、報表編制、圖形渲染、資料庫管理和各種各樣的數據輸入。
有個人還使他妻子的全部工作自動化。大多數人要求匿名,以保全工作和聲譽。
一位很早是自發自動化人士的名為Gary的程序員告訴我:「一開始,我的工作每天實際上要干8個小時。」他在一家大型企業連鎖酒店工作,這家連鎖酒店在90年代開始實現計算機化工作流程。Gary很快意識到在花大量時間重復同樣的任務,於是他開始 下班後學習編程 。他說:「大概 花了三個月的時間,我用Lotus 1-2-3(當時一款很流行的PC電子表格軟體)編寫了一段代碼,不僅使個別的重復性任務自動化,實際上還使整份工作自動化 。」他沒有一五一十地告訴上司,其職場生活的質量大大提高了。
他告訴我:「一整天很空閑感覺怪怪的,於是我趁空了解酒店的其他系統。」後來他幫助管理層消除了那些系統中的瓶頸。自行自動化消除了瑣碎的工作,減輕了他的壓力,並讓他可以撲在真正感興趣的事情上。他說:「實際上,我將這份崗位變成了自己喜愛的崗位,即排查故障。」在離開公司前兩周,他交給老闆一張軟盤,裡面裝有這個程序和解釋如何運行的說明文檔。Gary說,老闆對他辭職頗為不安,直到他交出了軟盤,介紹程序如何運行,並告訴老闆萬一有問題可以打電話給他,老闆才放下心來。 後來電話沒來過一個。
在大多數領域,一線員工對於他們的工作是否自動化,或者如何實時、何時實施自動化很少有任何正式的意見。自發自動化人士明白,自由化由勢必從中收益的一線員工、而不是由自上而下的公司命令來安排自動化會什麼樣。一些人欣然享受多出來的閑暇時間,另一些人利用多出來的時間來學習新技能,應對新的編程挑戰。
ps:你確定不是玩手機?
不過,許多自發自動化人士害怕與辦公室外面的人分享代碼。即使一個程序無可挑剔地完成了工作,許多人還是覺得為牟私利而搞的自動化是錯誤的。人力勞動本質上是善良的(以及員工應始終最大限度地為僱主提高生產力),這比任何自動化腳本更深深地融入到美國的職場文化中。而大多數僱用合同明文規定,工作時間開發的知識產權屬於僱主。因此,員工可能所做的任何效率提升或自動化改進都往往歸僱主所有。
一位程序員沒有把他使其工作完全自動化的真相告訴公司,因為擔心公司到時聲稱知識產權歸公司,並拒絕補償他。另一位只肯自稱是Jordan的人告訴我,他曾無意中使整個部門的工作自動化。現在他用自動化腳本每年省下「好幾周」的時間。Jordan表示,他和同事們保持緘默,絕不透露自動化技術,以便控制使用自動化技術的方式:「我們通常不對外透露這些工具。」
另一位程序員竭力向老闆隱瞞使其年薪5萬美元的工作完全自動化的概況。管理層可能通過網路查看其電腦屏幕上的內容, 於是他運行預先錄制的視頻,掩蓋他實際上沒在工作的事實。 Etherable在尋求建議的帖子中寫道:「我覺得這么做不對。」
一些程序員表示,就因為使工作自動化,自己已被公司炒魷魚。2011年,一個名為AcceptableLosses的用戶寫道:「 公司拿去了我開發的軟體,派一個白痴頂替我,並立即以「不服從」為由解僱了我 。我開發了一款每年讓這家公司獲利100萬美元的軟體,對方卻僅僅為了省下每年約3萬美元的工資而開除了我。我真是自掘墳墓啊。」
正因為如此,自發自動化人士擔心的倒不是道德問題,而是不想被僱主開除或盤剝,正如伍德科克特別指出的那樣,僱主「不僅要求我們的所有時間歸他,我們開發的所有東西也歸他。」他推測,謹慎的自發自動化人士「不信任我們的工作場所。上司會說『謝謝你,幹得漂亮。現在再做一次。』」
很少有員工渴望完全自我自動化,但似乎越來越多的員工對於使用腳本來處理繁忙工作感興趣。網路上有眾多這方面的博文和實用文章,比如《我如何用Node JS使我的工作實現自動化?》,也有眾多播客介紹每一種想像得到的自動化:小公司、營銷和智能手機。這簡直就是一個蓬勃發展的家庭手工業。
照目前情況來看,自發自動化大有助益。但隨著自動化技術變得更廣為人知,它們可能完全成為管理層期望員工擁有或學會的另一種技能,並最終讓企業受益,並以另外某種方式使這些人成為有用的員工。
《哈佛商業評論》雜志寫道:「員工將越來越需要使自己的工作自動化,否則就滾蛋。放眼全球,我們會看到更多自上而下的管理層命令,要求搞自下而上的自動化項目。」而老闆及員工開發的機器人軟體會再次品嘗勝果。
在此之前,任何使用代碼的人都可能應該考慮自發自動化帶來的好處。可以以此來測試自動化如何為普通員工帶來更高的生活質量,盡管談不上完美。伍德科克告訴我:「問題在於自動化要有效,自動化要民主化。不是公司企業在提供自動化,這向前邁出了一步。它仍然不是民主化過程。」自發自動化人士在單獨行動,決定何時、如何把自己的工作換成代碼。而理想情況下,自動化決策將在同事和同行給出意見的情況下共同做出,以便可以均勻分攤好處。
自發自動化人士表示,程序員有獨特的條件,可以與僱主就員工應該保留哪些自動化帶來的效益展開談判,比如時間更短的工作周以及更靈活地從事自己感興趣的工作。從理論上來講,自發自動化人士可以在屬於中產階級和工薪階級的程序員當中組織和分配自動化技術,從而打造有望實際上獲得15小時工作周的一個行業。這似乎是千載難逢的機會,可以努力為把人放在首位的自動化模式創造條件。
你如何看到互聯網蓬勃發展,越來越多產業自動化發展,今後人們能做什麼呢?
歡迎評論
點擊【右上角,關注 子瑜說IT 】持續更新IT資訊以及web前端開發教學
⑤ 如何看出一個程序員的技術能力和水平
其實,評論一個程序員技術的高低,不是看他會多少技術,又懂多少技術。參加過什麼大型的項目,也不是看他有沒有自己的博客,github有多少star。
而是看他解決問題,定位問題的能力。這個很重要,真的很重要。
技術可以很快上手使用,但是解決問題定位問題的能力不是輕易就行的。特別是在高壓下解決問題的能力。
下面是師姐為大家整理的一些建議:
解決問題
1.代碼的命名要規范。
代碼是寫給人看的好嘛!代碼是寫給人看的好嘛!代碼是寫給人看的好嘛!
headImg是什麼鬼?我能以為是banner么,頭部的圖片,請原諒我蹩腳的中式英語!avatar這個呢、portrait這個呢?會不會更好些?英語不好就不能用好有道、google翻譯么?還有用中文拼音命名的,親,我們用的是英文做為腳本好么?你要用這樣的,用易語言可好?!
瘋了!
為什麼要用框架?一個很重要的原因是命名規范,目錄規范,結構規范,分層規范,有利於團隊協作,不要本末倒置!
2.架構和規劃能力很重要,模塊分層,解耦設計什麼的,文件目錄嵌幾層?
這其中又跟命名的能力能搭上點關系。命名都命不好,目錄結構怎麼建?
url不要做的漂亮些嗎?不考慮seo了?
你喜歡addGoods還是喜歡goodsAdd?
請你尊重點我的那些初高中英語語法好么?
3.協助能力、可持續能力。
最好的程序代碼是脫離其產生者的。
為自己程序處處救火的程序汪並不是一條好汪。
我記得一句話就是:別想著你的代碼以後還有機會重構!
每次說,額,這里我後面會改的,會改的,但是可惜,現實情況是根本不會給你這個時間的。
代碼寫出來,一是要爽了自己,二是也要爽了別人。
4.debug的能力、總結能力、學習能力真的很重要,代碼寫出來真的花的時間不長,但擦屁股的時間比寫代碼的時間多多了!
出了問題不記錄,寫個博文都好啊,我可沒那麼強大的記憶力,所以最討厭考記憶力。
5.不要一貫的使用各種演算法,秀演算法的你們夠了,要寫去寫底層,應用的場景比較多。
應用層面的程序,演算法的應用不是特別多,大部分都是業務代碼。以這個作為評價標準的,真心然並卵。
⑥ 要成為一名專業的程序員,從零開始需要怎麼一步步來比較好,要把最底層的先學精通嗎(個人認為)求學長
前言
你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序?走入職場後哪怕沒有什麼經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業項目都看不出有什麼實際作用,不如從工作中的需求出發)
建議:
不要亂買書,不要亂追新技術新名詞,基礎的東西經過很長時間積累而且還會在未來至少10年通用。
回顧一下歷史,看看歷史上時間線上技術的發展,你才能明白明天會是什麼樣。
一定要動手,例子不管多麼簡單,建議至少自己手敲一遍看看是否理解了里頭的細枝末節。
一定要學會思考,思考為什麼要這樣,而不是那樣。還要舉一反三地思考。
註:你也許會很奇怪為什麼下面的東西很偏Unix/Linux,這是因為我覺得Windows下的編程可能會在未來很沒有前途,原因如下:
現在的用戶界面幾乎被兩個東西主宰了,1)Web,2)移動設備iOS或Android。Windows的圖形界面不吃香了。
越來越多的企業在用成本低性能高的Linux和各種開源技術來構架其系統,Windows的成本太高了。
微軟的東西變得太快了,很不持久,他們完全是在玩弄程序員。詳情參見《Windows編程革命史》
所以,我個人認為以後的趨勢是前端是Web+移動,後端是Linux+開源。開發這邊基本上沒Windows什麼事。
啟蒙入門
1、 學習一門腳本語言,例如python/Ruby
可以讓你擺脫對底層語言的恐懼感,腳本語言可以讓你很快開發出能用得上的小程序。實踐項目:
處理文本文件,或者csv (關鍵詞 python csv, python open, python sys) 讀一個本地文件,逐行處理(例如 word count,或者處理log)
遍歷本地文件系統 (sys, os, path),例如寫一個程序統計一個目錄下所有文件大小並按各種條件排序並保存結果
跟資料庫打交道 (python sqlite),寫一個小腳本統計資料庫里條目數量
學會用各種print之類簡單粗暴的方式進行調試
學會用Google (phrase, domain, use reader to follow tech blogs)
為什麼要學腳本語言,因為他們實在是太方便了,很多時候我們需要寫點小工具或是腳本來幫我們解決問題,你就會發現正規的編程語言太難用了。
2、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,學會如何配置代碼補全,外觀,外部命令等。
Source Insight (或 ctag)
使用這些東西不是為了Cool,而是這些編輯器在查看、修改代碼/配置文章/日誌會更快更有效率。
3、 熟悉Unix/Linux Shell和常見的命令行
如果你用windows,至少學會用虛擬機里的linux, vmware player是免費的,裝個Ubuntu吧
一定要少用少用圖形界面。
學會使用man來查看幫助
文件系統結構和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
學會使用一些文本操作命令 sed/awk/grep/tail/less/more …
學會使用一些管理命令 ps/top/lsof/netstat/kill/tcpmp/iptables/dd…
了解/etc目錄下的各種配置文章,學會查看/var/log下的系統日誌,以及/proc下的系統運行信息
了解正則表達式,使用正則表達式來查找文件。
對於程序員來說Unix/Linux比Windows簡單多了。(參看我四年前CSDN的博文《其實Unix很簡單》)學會使用Unix/Linux你會發現圖形界面在某些時候實在是太難用了,相當地相當地降低工作效率。
4、 學習Web基礎(HTML/CSS/JS) + 伺服器端技術 (LAMP)
未來必然是Web的世界,學習WEB基礎的最佳網站是W3School。
學習HTML基本語法
學習CSS如何選中HTML元素並應用一些基本樣式(關鍵詞:box model)
學會用 Firefox + Firebug 或 chrome 查看你覺得很炫的網頁結構,並動態修改。
學習使用Javascript操縱HTML元件。理解DOM和動態網頁(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 網上有免費的章節,足夠用了。或參看 DOM 。
學會用 Firefox + Firebug 或 chrome 調試Javascript代碼(設置斷點,查看變數,性能,控制台等)
在一台機器上配置Apache 或 Nginx
學習php,讓後台PHP和前台HTML進行數據交互,對伺服器相應瀏覽器請求形成初步認識。實現一個表單提交和反顯的功能。
把PHP連接本地或者遠程資料庫 MySQL(MySQL 和 SQL現學現用夠了)
跟完一個名校的網路編程課程(例如:http://www.stanford.e/~ouster/cgi-bin/cs142-fall10/index.php ) 不要覺得需要多於一學期時間,大學生是全職一學期選3-5門課,你業余時間一定可以跟上
學習一個javascript庫(例如jQuery 或 ExtJS)+ Ajax (非同步讀入一個伺服器端圖片或者資料庫內容)+JSON數據格式。
HTTP: The Definitive Guide 讀完前4章你就明白你每天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)
做個小網站(例如:一個小的留言板,支持用戶登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)
買個域名,租個空間,做個自己的網站。
進階加深
1、 C語言和操作系統調用
重新學C語言,理解指針和內存模型,用C語言實現一下各種經典的演算法和數據結構。推薦《計算機程序設計藝術》、《演算法導論》和《編程珠璣》。
學習(麻省理工免費課程)計算機科學和編程導論
學習(麻省理工免費課程)C語言內存管理
學習Unix/Linux系統調用(Unix高級環境編程),,了解系統層面的東西。
用這些系統知識操作一下文件系統,用戶(實現一個可以拷貝目錄樹的小程序)
用fork/wait/waitpid寫一個多進程的程序,用pthread寫一個多線程帶同步或互斥的程序。多進程多進程購票的程序。
用signal/kill/raise/alarm/pause/sigprocmask實現一個多進程間的信號量通信的程序。
學會使用gcc和gdb來編程和調試程序(參看我的《用gdb調試程序》)
學會使用makefile來編譯程序。(參看我的《跟我一起寫makefile》)
IPC和Socket的東西可以放到高級中來實踐。
學習Windows SDK編程(Windows 程序設計 ,MFC程序設計)
寫一個窗口,了解WinMain/WinProcere,以及Windows的消息機制。
寫一些程序來操作Windows SDK中的資源文件或是各種圖形控制項,以及作圖的編程。
學習如何使用MSDN查看相關的SDK函數,各種WM_消息以及一些常式。
這本書中有很多常式,在實踐中請不要照抄,試著自己寫一個自己的常式。
不用太多於精通這些東西,因為GUI正在被Web取代,主要是了解一下Windows 圖形界面的編程。@virushuo 說:「 我覺得GUI確實不那麼熱門了,但充分理解GUI工作原理是很重要的。包括移動設備開發,如果沒有基礎知識仍然很吃力。或者說移動設備開發必須理解GUI工作,或者在win那邊學,或者在mac/iOS上學」。
2、學習Java
Java 的學習主要是看經典的Core Java 《Java 核心技術編程》和《Java編程思想》(有兩卷,我僅鏈了第一卷,足夠了,因為Java的圖形界面了解就可以了)
學習JDK,學會查閱Java API Doc Java Platform SE 6
了解一下Java這種虛擬機語言和C和Python語言在編譯和執行上的差別。從C、Java、Python思考一下「跨平台」這種技術。
學會使用IDE Eclipse,使用Eclipse 編譯,調試和開發Java程序。
建一個Tomcat的網站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開發。把前面所說的那個PHP的小項目試著用JSP和Servlet實現一下。
3、Web的安全與架構
學習HTML5,網上有很多很多教程,以前酷殼也介紹過很多,我在這里就不羅列了。
學習Web開發的安全問題(參考新浪微博被攻擊的這個事,以及Ruby的這篇文章)
學習HTTP Server的rewrite機制,Nginx的反向代理機制,fast-cgi(如:PHP-FPM)
學習Web的靜態頁面緩存技術。
學習Web的非同步工作流處理,數據Cache,數據分區,負載均衡,水平擴展的構架。
實踐任務:
使用HTML5的canvas 製作一些Web動畫。
嘗試在前面開發過的那個Web應用中進行SQL注入,JS注入,以及XSS攻擊。
把前面開發過的那個Web應用改成構造在Nginx + PHP-FPM + 靜態頁面緩存的網站
4、學習關系型資料庫
你可以安裝MSSQLServer或MySQL來學習資料庫。
學習教科書里資料庫設計的那幾個範式,1NF,2NF,3NF,……
學習資料庫的存過,觸發器,視圖,建索引,游標等。
學習SQL語句,明白表連接的各種概念(參看《SQL Join的圖示》)
學習如何優化資料庫查詢(參看《MySQL的優化》)
實踐任務:設計一個論壇的資料庫,至少滿足3NF,使用SQL語句查詢本周,本月的最新文章,評論最多的文章,最活躍用戶。
5、一些開發工具
學會使用SVN或Git來管理程序版本。
學會使用JUnit來對Java進行單元測試。
學習C語言和Java語言的coding standard 或 coding guideline。(我N年前寫過一篇關C語言非常簡單的文章——《編程修養》,這樣的東西你可以上網查一下,一大堆)。
推薦閱讀《代碼大全》《重構》《代碼整潔之道》
高級深入
1、C++ / Java 和面向對象
我個人以為學好C++,Java也就是舉手之勞。但是C++的學習曲線相當的陡。不過,我覺得C++是最需要學好的語言了。參看兩篇趣文「C++學習信心圖」 和「21天學好C++」
學習(麻省理工免費課程)C++面向對象編程
讀我的 「如何學好C++」中所推薦的那些書至少兩遍以上(如果你對C++的理解能夠深入到像我所寫的《C++虛函數表解析》或是《C++對象內存存局(上)(下)》,或是《C/C++返回內部靜態成員的陷阱》那就非常不錯了)
然後反思為什麼C++要干成這樣,Java則不是?你一定要學會對比C++和Java的不同。比如,Java中的初始化,垃圾回收,介面,異常,虛函數,等等。
實踐任務:
用C++實現一個BigInt,支持128位的整形的加減乘除的操作。
用C++封裝一個數據結構的容量,比如hash table。
用C++封裝並實現一個智能指針(一定要使用模板)。
《設計模式》必需一讀,兩遍以上,思考一下,這23個模式的應用場景。主要是兩點:1)鍾愛組合而不是繼承,2)鍾愛介面而不是實現。(也推薦《深入淺出設計模式》)
實踐任務:
使用工廠模式實現一個內存池。
使用策略模式製做一個類其可以把文本文件進行左對齊,右對齊和中對齊。
使用命令模式實現一個命令行計算器,並支持undo和redo。
使用修飾模式實現一個酒店的房間價格訂價策略——旺季,服務,VIP、旅行團、等影響價格的因素。
學習STL的用法和其設計概念 - 容器,演算法,迭代器,函數子。如果可能,請讀一下其源碼。
實踐任務:嘗試使用面向對象、STL,設計模式、和WindowsSDK圖形編程的各種技能
做一個貪吃蛇或是俄羅斯方塊的游戲。支持不同的級別和難度。
做一個文件瀏覽器,可以瀏覽目錄下的文件,並可以對不同的文件有不同的操作,文本文件可以打開編輯,執行文件則執行之,mp3或avi文件可以播放,圖片文件可以展示圖片。
學習C++的一些類庫的設計,如: MFC(看看候捷老師的《深入淺出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能會太難了,但是如果你能了解其中的設計模式和設計那就太好了,如果你能深入到我寫的《STL string類的寫時拷貝技術》那就非常不錯了,ACE需要很強在的系統知識,參見後面的「加強對系統的了解」)
Java是真正的面向對象的語言,Java的設計模式多得不能再多,也是用來學習面向對象的設計模式的最佳語言了(參看Java中的設計模式)。
推薦閱讀《Effective Java》 and 《Java解惑》
學習Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是學習Java的設計,如IoC等。
Java的技術也是爛多,重點學習J2EE架構以及JMS, RMI, 等消息傳遞和遠程調用的技術。
學習使用Java做Web Service (官方教程在這里)
實踐任務: 嘗試在Spring或Hibernate框架下構建一個有網路的Web Service的遠程調用程序,並可以在兩個Service中通過JMS傳遞消息。
C++和Java都不是能在短時間內能學好的,C++玩是的深,Java玩的是廣,我建議兩者選一個。我個人的學習經歷是:
深究C++(我深究C/C++了十來年了)
學習Java的各種設計模式。
2、加強系統了解
重要閱讀下面的幾本書:
《Unix編程藝術》了解Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。你一定會有一種醍醐灌頂的感覺。
《Unix網路編程卷1,套接字》這是一本看完你就明白網路編程的書。重要注意TCP、UDP,以及多路復用的系統調用select/poll/epoll的差別。
《TCP/IP詳解 卷1:協議》- 這是一本看完後你就可以當網路黑客的書。了解乙太網的的運作原理,了解TCP/IP的協議,運作原理以及如何TCP的調優。
實踐任務:
理解什麼是阻塞(同步IO),非阻塞(非同步IO),多路復用(select, poll, epoll)的IO技術。
寫一個網路聊天程序,有聊天伺服器和多個聊天客戶端(服務端用UDP對部分或所有的的聊天客戶端進Multicast或Broadcast)。
寫一個簡易的HTTP伺服器。
《Unix網路編程卷2,進程間通信》信號量,管道,共享內存,消息等各種IPC…… 這些技術好像有點老掉牙了,不過還是值得了解。
實踐任務:
主要實踐各種IPC進程序通信的方法。
嘗試寫一個管道程序,父子進程通過管道交換數據。
嘗試寫一個共享內存的程序,兩個進程通過共享內存交換一個C的結構體數組。
學習《Windows核心編程》一書。把CreateProcess,Windows線程、線程調度、線程同步(Event, 信號量,互斥量)、非同步I/O,內存管理,DLL,這幾大塊搞精通。
實踐任務:使用CreateProcess啟動一個記事本或IE,並監控該程序的運行。把前面寫過的那個簡易的HTTP服務用線程池實現一下。寫一個DLL的鉤子程序監控指定窗口的關閉事件,或是記錄某個窗口的按鍵。
有了多線程、多進程通信,TCP/IP,套接字,C++和設計模式的基本,你可以研究一下ACE了。使用ACE重寫上述的聊天程序和HTTP伺服器(帶線程池)
實踐任務:通過以上的所有知識,嘗試
寫一個服務端給客戶端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁碟I/O和網路I/O可能會很有問題,想一想怎麼解決,另外,請注意網路傳輸最大單元MTU)
了解BT下載的工作原理,用多進程的方式模擬BT下載的原理。
3、系統架構
負載均衡。HASH式的,純動態式的。(可以到Google學術里搜一些關於負載均衡的文章讀讀)
多層分布式系統 – 客戶端服務結點層、計算結點層、數據cache層,數據層。J2EE是經典的多層結構。
CDN系統 – 就近訪問,內容邊緣化。
P2P式系統,研究一下BT和電驢的演算法。比如:DHT演算法。
伺服器備份,雙機備份系統(Live-Standby和Live-Live系統),兩台機器如何通過心跳監測對方?集群主結點備份。
虛擬化技術,使用這個技術,可以把操作系統當應用程序一下切換或重新配置和部署。
學習Thrift,二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。
學習Hadoop。Hadoop框架中最核心的設計就是:MapRece和HDFS。MapRece的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapRece就是「任務的分解與結果的匯總」。HDFS是Hadoop分布式文件系統(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。
了解NoSQL資料庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高並發的純動態型網站日漸成為主流,而SNS類網站在數據存取過程中有著實時性等剛性需求,這使得目前NoSQL資料庫慢慢成了人們所關注的焦點,並大有成為取代關系型資料庫而成為未來主流數據存儲模式的趨勢。當前NoSQL資料庫很多,大部分都是開源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。
⑦ 要做程序員需要學會什麼
其實簡單來說,程序員的工作就是使用編程語言,根據需求寫出一個程序。
但是,在這個過程中,涉及如下幾個方面:
使用的編程語言 程序員需要選擇一門或者多門語言來編程,不同的語言適合編寫不同的程序,目前主流編程語言包括,Java、JavaScript、Python、C++、php以及其他小語種等等,每種編程語言適合開發的程序有所不同。目前從程序應用分來,主要可以分為三類a 企業應用,主要用於解決企業業務。各種企業管理後台系統,銀行系統,公安系統,圖書管理系統等等。
b 互聯網應用,面向互聯網用戶,為互聯網用戶提供各類服務。比如現在的京東淘寶各類電商系統等。
c 移動應用,各類在移動端使用的APP,有面向互聯網用戶的APP,也有面向企業內部的APP。
目前相對而言,在移動應用和互聯網應用方面,資本投入比較熱的風口,程序員的薪資較高。企業應用,發展了很多年,相對平穩。
2. 明白需求,實現需求
需求就是編寫程序的要求。一個程序要編寫成什麼樣子,具備哪些功能,都是由需求來具體說明。程序員要需要能看懂需求文檔,並且能准確地使用編程語言,根據需求中的要求來編寫成程序。企業開發的項目,往往會由該程序的架構師提供一個程序框架,程序員在該框架的規范下進行編程,實現需求的功能,以確保程序的規范、可讀,以及可維護性。
3. 日常工作寫程序
一個軟體開發一般流程是產品經理根據用戶需求做一個項目出來,然後UI設計師做一些圖片設計,前端開發編寫頁面,後台開發編寫核心編程,然後介入一些大數據和人工智慧,通過測試之類上線實施,後期還有運維進行相關維護。
程序員一般大多指的是前端和後台寫代碼程序的開發人員,除了編寫代碼,可能還需要通過介面和其它系統對接,實現系統間的數據交換。像單體測試,是程序員對自己寫好的程序單元進行測試,檢測這個程序單元數據輸入和數據輸出是否符合預期等等。測試出來的問題,需要修改正確,然後再測試,直至沒有問題。和同事共同開發的時候也需要聯合測試,以及用戶測試過後如果存在BUG繼續進行修改。
⑧ 我又不是靠你吃飯什麼意思
我又不是靠你吃飯,意思就是我又不吃你的,不喝你的,我自己養自己,所以我的事情你也沒必要說
⑨ 請教,推薦幾本java類書籍
1、《Effective Java(第三版)》(Effective Java 3rd Edition)
如果你還沒讀過這本書,那它絕對是 2019 年你必須讀的第一本書。第三版是一個長期版本,其實它早就該出版了。這版書也囊括了 JDK 7、8、9 的新特性。
我在 1 月份的第一個星期就拿到了這本書,它絕對是約書亞·布洛克(Joshua Bloch)給 Java 程序員非常好的新年禮物。
我花了大概一個星期就讀完了這本書。我發現讀的過程中,時常碰到新的知識點,特別是關於 Java 8 和 Java 9 的。
2、《寫給大忙人看的Java SE 9(第二版)》 (Core Java SE 9 for the Impatient (2nd Edition))
如果你急著學 Java 那我推薦這本書給你。我是凱 S·霍斯特曼 (Cay S. Horstmann)的一個忠實粉絲,他的文采之優美、涉獵之廣,都讓我很是佩服。
你讀了他寫的關於 Java 8、Scala 的書以及《Java 核心編程》之後,絕對也會成為他的粉絲。這本書已經針對 Java SE 9 全面更新。如果你想學習 Java 9,那2018年你應該先讀讀這本書。
3、《Spring 微服務實戰》(Spring Microservices in Action)
軟體開發世界正在加速轉向微服務架構,它在開發、維護、部署、擴容性及可靠性等方面有很多優勢。
感謝 Spring framework 提供這么多開發微服務的 Java 工具,比如 Spring Boot 和 Spring Cloud。
如果你對用 Spring framework 開發微服務有興趣,那麼這本書很適合你。
2019年Java學習,依舊正在進行時,身為一個踏入Java坑的老碼農,深感技術學習就是一個無底洞,需要不斷的去挖掘新的技術,為了跟上時代的發展,需要時時關注技術更新,進行學習,不過隨著技術的不斷深入學習,收獲還是不小的,正在向著資深技術官邁進!
⑩ 程序員學習一般去哪些網站
學習網站大體分兩類,一類國內網站,一類國外網站,國內的網站有w3c網,學習網頁前端知識,python,php,java官網,mysql數據官網,當然也有綜合類網站比如:菜鳥,最後就是論壇,官網都有友情鏈接過去。國外網站需要翻過去訪問。下面是部分知識點
1.確保堆棧上至少有 n 個額外空位。如果不能把堆棧擴展到相應的尺寸,函數返回假。失敗的原因包括將把棧擴展到比固定最大尺寸還大 (至少是幾千個元素)或分配內存失敗。 這個函數永遠不會縮小堆棧;
void lua_close (lu a_State *L);
2.銷毀指定 Lua 狀態機中的所有對象 (如果有垃圾收集相關的元方法的話,會調用它們),並且釋放狀態機中使用的所有動態內存。 在一些平台上,你可以不必調用這個函數, 因為當宿主程序結束的時候,所有的資源就自然被釋放掉了。 另一方面,長期運行的程序,比如一個後台程序或是一個網站伺服器, 會創建出多個 Lua 狀態機。那麼就應該在不需要時趕緊關閉它們。
int lu a_compare (lua_State *L, int index1, int index2, int op);
比較兩個 Lua 值。 當索引 index1 處的值通過 op 和索引 index2 處的值做比較後條件和叢滿足,函數返回 1 。 這個函數遵循 Lua 對應的操作規則(即有可能觸發元方法)。 反之,函數返回 0。 當任何一個索引無效時,函數也會返回 0 。
3.連接棧頂的 n 個值, 然後將這些值出棧,並把結果放在棧頂。如果 n 為 1 ,結果就是那個值放在棧上(即,函數什麼都不做); 如果 n 為 0 ,結果是一個空串。 連接依照 Lua 中通常語義完成()。
void lu a_ (lua_State *L, int fromidx, int toidx);
從索引 fromidx 處復制一個值到一個有效索引 toidx 處,覆蓋那裡的原有值。 不會影響其它位置的值。
void l ua_createtable (lua_State *L, int narr, int nrec);
4.創建一張新的空表壓棧。 參數 narr 建議了這張表作為序列使用時會指棚嫌有多少個元素;參數 nrec 建議了這張表可能擁有多少序列之外的元素。 Lua 會使用這些建議來預分配這張新表。 如果你知道這張表用途的更多信息,預分配可以提高性能。 否則,你可以使用函數
lua_mp
把函數導出成二進制代碼塊 。 函數接收棧頂的 Lu a 函數做參數, 然後生成它的二進制代碼塊。 若被導出的東西被再次載入, 載入的結果就相當於原來的函數。 當它在產生代碼塊的時候, lua_mp 通過調用函數 writer (r ) 來寫入數據,後面的 data 參數會被傳入 writer 。
5.如果唯手 strip 為真, 二進制代碼塊將不包含該函數的調試信息。
最後一次由 writer 的返回值將作為這個函數的返回值返回; 0 表示沒有錯誤。
該函數不會把 Lua 函數彈出堆棧。
希望能幫到你,謝謝!