如何成為一名真正的程序員?

已搜索過沒有合適的答案。

前兩年當了學徒工,做網頁製作學會了div+css基礎比較紮實。後來慢慢接觸了ASP和Access讀取數據和一般功能的實現也基本能解決,各種建站的知識和工具都基本能使用自如;現在廣東某二線城市,拿3千多的工資。公司就我一個技術員;(昨天剛發工資,當初老闆承諾有4千左右,上個月加班加點累死累活,本以為能到4千了,結果不增反減,這也是我決心轉程序的原因之一。)

自學C#發覺很難靜心看的下書,以前在看《C#入門經典》真心看不下,現在在看《圖解C#》,但是還是很難有真正的進步,在網上看視頻教程又太慢了。。。

英語水平處於初中級別,也就基本告別英語文檔了,還是跟學C#一樣,沒耐心靜不下心學習。根據@惡魔奶爸 的指導,買了賴世雄的入門教程,他的廣播教材真心拖沓呀。。。45分鐘講了2個對話。。。

我想在明年去廣州投靠師傅,但是前提是我必須成為一個真正的C#程序員,求方法;

感謝各位大牛、小牛的答案,感謝知乎這個平台,就連我這麼笨的人也從各位的回答中讀出了一點門道,還有陌生人的關心。

有人問什麼是「真正的程序員」,我只能說可能是我描述不當,我心中的哈姆雷特是一個可以通過軟體公司面試,在北上廣深以一個程序員的身份存活下來,並且活得越來越好的人。

再次感謝


十幾歲開始寫程序,近十幾年來都在教人寫程序,還經營著一個可能隨時倒閉的軟體公司,主要的開發語言是C#,看上去有資格回答此問題。

-------------------------------------------------------------------------------------------------------------------

題主的問題是——如何成為真正的程序員。排名第一的答案是至少把《演算法導論》的結論和偽代碼部分,蛋定地看完,客氣一點說,你們是在回答「真正的程序員必備的知識有哪些」的一部分,不客氣的說,這是在誤人子弟,比我還毀人不倦。

首先,我不認為《演算法導論》是所有程序員必須一開始就掌握和精通的內容。

我無意否認某些核心課程的重要性,但是我們必須看到——很多程序員並不懂程序員的三大浪漫——編譯原理,圖形學,操作系統,但這並不妨礙他們在日常工作中創造出各種有價值的軟體。

之所以這麼講,原因是:

行業的門檻因技術的不斷進步而降低 不是所有的程序員都需要系統而全面地學習才能勝任工作

這些年來,編程語言、開發工具的迅速發展,我們可以用C#、Java、Objective C這樣的語言完成大多數開發任務(而不是在紙上打孔或者用彙編),用著Visual Studio這樣爽的開發工具, 這並不是因為廠商大發慈悲要拯救程序員於水火之中,而是微軟這樣的廠商在取悅我們的老闆和客戶——技術發展的目的是降低軟體開發的用人標準,進而降低軟體行業的人力資源成本,更快、更好、更便宜地滿足用戶的需求

從公司的角度來看,如果要求所有開發人員都是基礎紮實、技能全面的,那麼用人成本一定很高,我完全相信經過一定訓練和挑選的***鳥畢業生在經理的正確管理下可以很好的開展工作,儘管他可能不懂演算法和數據結構,C和C++基本不會,這並不妨礙他為公司創造價值,隨著他開發經驗的增長,在時間允許的情況下再去補充一些基礎知識也是完全可以的。

其次,題主的情況,未必能承擔系統而全面學習所帶來的成本

幾年以前有個「學生」,打引號是因為我並沒有真正教過他,中專畢業,專業是鉗工,曾經給我展示過胳膊上的長長的疤痕,說是被車床傷到的。

他要求跟我學的時候屬於入門階段,最開始學習的並不是什麼三大浪漫,而是C#. 在掌握了一門編程語言後,很快自學了其他語言(甚至Delphi), 在一年後找到了一個小公司做些基本的開發工作,然後涉足安全領域,開發了各種工具,現在在一家安全公司上班,提升很快,收入不菲。前不久跟我聊他配合網監做一些取證和提審的工作經歷。

2006年,我在武漢某個夜市的大排檔上,凌晨2點多,看到一個服務員在忙裡偷閒看一本計算機書籍(掃一眼就知道),仔細一看是一本Java入門書,聊起來才知道這妹子是護校畢業,但是對計算機有興趣,就想在大排檔當服務員攢學費去***鳥。她還拿出一沓油跡斑斑的信簽紙,上面全是她寫的程序,她說每次去網吧都要裝開發環境,太麻煩了,所以乾脆在紙上寫。哥看不下去了,給一開軟體公司的朋友打電話強烈推薦這妹子去實習,朋友一聽情況表示拒絕,我說你只要給他管工作餐就好,不用發工資。1個月後這妹子進入試用期,2個月後轉正,後來在朋友公司做了近兩年,據朋友說開發能力很強,再後來,我就不知道了。

作為教師,感動我的總是這這樣的「學生」,而不是那些坐在教室里花著父母的錢虛度光陰的學生。

可能有人會覺得這樣的程序員是「野路子」,不登大雅之堂,但這一點都不妨礙他們兢兢業業的工作,為公司創造價值並且改變了自己的生活。

如果這些人要系統而全面的學習計算機專業的基礎課程,得需要多少時間和金錢成本?他們所處的環境是否允許他們這樣做? 他們不這樣做,是不是就成不了「真正的程序員」?

好了,我們來談談什麼是真正的程序員。

在我的意識里——能夠根據客戶的需求(或者上級的要求),選擇恰當的技術方案(或者按照上級的指示)開展開發工作,在合理的時間內完成開發任務並達到質量要求的人,就是真正的程序員。

要成為這樣的程序員,其實沒那麼難。

在這個答案里,我想把程序員分為兩個層次:

L1- 能根據上級的指示,按照公司的要求和規範開展開發工作的,稱為程序員

L2- 能根據客戶的需求,選擇恰當的技術方案,制定合理的工作計劃,獨自或帶領團隊完成開發工作並達到質量要求,稱為軟體工程師

我想題主可能想成為的是後者,而不是普通的編碼人員,在我接觸到的程序員中,其實很少有單純從事簡單編碼工作的,他們大多數都是乾的軟體工程師的活。

軟體工程師應該具備哪些能力呢?我們以前歸納過:

1. 分析問題的能力 2. 設計解決方案的能力 3. 編碼實施的能力 4. 排除故障的能力

這四種能力如果要展開來講,要寫好長的,暫時就不寫了。

開始回答——」如何成為「的問題。

科學家追求的是知識,工程師追求的是能力。而能力是很難從書本上的來的,只能從實踐當中來。

我注意到題主的問題中,提到看書靜不下心,看視頻又覺得太慢,可能從一個具體的項目開始更能激發學習興趣並且獲得成就感。

先給第一種路徑建議吧——從C語言開始,@余穎 的問題,也一併回答了。

之所以建議C語言,是因為C語言里沒有那麼多現成的、強大的類庫,在不熟悉基本的語法、面向對象這些概念時C#其實比C語言難以理解,很難深入。學習C語言不僅限於對C語言語法的掌握,而是通過C語言的學習,建立程序設計的思維,比較深入地了解一些計算機系統的工作原理。

在我的教學班級中,我的教學內容是這樣組織的,題主似乎也可以按照這種方式來學習:

  • 第一階段 高級程序語言的基本概念(編譯、庫、鏈接等),開發工具的使用(Visual Studio 2010), C語言的基本結構以及在VC中的一些差異,動手能力上達到能按照書本輸入一個程序,能編譯,能運行的結果即可。

  • 第二階段 變數、指針、表達式、函數、分支、循環、簡單的輸入與輸出。

第一階段和第二階段的時間往往很短。

  • 第三階段 開始做第一個小程序(比如最簡單的超市收銀系統),這個時候學生開始頭大,因為很多要用到的東西根本就沒給他們講過,即使網上查得到資料也未必都能用在項目里。學生被我帶進一個接一個的坑裡,我從不在第一時間告訴他們答案,總要他們冥思苦想抓耳撓腮一個星期了,下周上課的時候才開始講解決的思路和方法。

經過1個月左右的折磨,他們基本可以完成一個單機版的的超市收銀系統,完成比如輸入(從鍵盤,掃描槍就免了)信息、修改輸入、價格查詢、匯總結賬這樣的功能。從知識層面上,結構體、指針、文件訪問這些基本都解決了,順帶著把簡單的查找、排序演算法也學了。

可以說這是學生最痛苦的階段,但是正是這個階段開始培養他們的自學能力,這個太重要了。但是效果也很明顯,到後期的時候,少數學生開始先於我提出解決方案了。

然後接著折騰,先帶學生回顧做過的這個程序,看如何能做的更好,運行的更快,Review和重構。

由於是純C完成的,程序總是看上去很混亂,修改、擴充也不是很方便,於是我們開始探索另一種編程思想——面向對象,C++上場,又是1-2個月,用C++重新寫這個程序,在這個過程中,要求他們自己實現String類,封裝數據結構和業務邏輯、數據訪問......

到這裡,一個學期結束了,第二學期要求學生把這個控制台的黑窗口改成圖形用戶界面。MFC不準用,只准用一個叫做Easy-x的圖形庫,而且只准用其中的putpixel函數來繪製點,一輪新的折磨開始,從畫點、劃線、逐點寫漢字開始,繪製按鈕、繪製文本框、響應滑鼠和鍵盤,並且要求他們開始設計和實現TextBox, Button,Image這些類.....,,順便把消息循環之類的機制也做了初步的了解和簡單的實現。

到這時候,有的同學已經開始做出」高仿Windows"了,要不要太驚喜!

到這裡,我基本可以相信我的學生不會為C#和Java發憷了,更重要的是——他們具備了真正的程序員所必須具備的核心能力——自學能力、獨立解決問題的能力。

就到這裡吧。

--------------------------------------------------------------------

歡迎不同觀點,評論里@胡銳 說道:

「作為計算機專業出身的,混跡過幾家大點公司的表示很不贊同。這樣出來的僅僅只會是最低端的會寫代碼的員工。和真正的程序員或者軟體工程師還有很大差距。整個學習過程都沒有一點工程的思想和合作的思想,這在軟體開發中是很致命的。這也是本科教育和培訓機構的差距。可能這樣學出來的很多外包公司都不願意要,別說大的互聯網公司和軟體公司。

我的看法是:

1.不是公司里的所有程序員都需要是大牛 2.不是所有程序員在一開始都需要是大牛 2.不是所有人都要進BAT或者MS,IBM這樣的大公司

第一,就像蓋房子,有人設計結構,有人設計外觀,有人砌牆,有人裝修,軟體行業分工必然是越來越細(全棧工程師則是另一個極端),越是在大的軟體公司里越應該這樣,最低端的會寫代碼的員工存在的價值還是很大的。

第二,人是會成長的。從學習路徑的選擇上,我一貫提倡」先博大、再精深」,在初學階段用較快的速度(儘管看上去不紮實)涵蓋較大的知識面,然後再根據需要或興趣選擇在某一個領域深入學習,沒有什麼不可以的。我反對的是一開始就投入過於理論、過於抽象的學科里去,這很難取得成就感(相比較於做實際的項目),會降低學生的學習積極性甚至打擊學生的自信心,產生「我不是干這行的料」的想法,只有少數較有天賦的學生能取得較好的學習效果;作為教師,我們必須對大多數學生負責。在知乎的另一個回答里,我曾經表達過「脫離生源質量和培養目標談學習方案是不切實際的理想主義」的看法,我們不可能要求軟體行業的從業者都是211、985院校的畢業生,IT行業不可能是精英才能進入的行業。

從另一個角度,在學生獲得了較寬廣的知識面後,完全可以在第二、三學年深入地學習其他課程,而且學的較為輕鬆,進步速度也很快。

第三,並不是人人都需要進入大公司。作為名校畢業生,進入大公司當然是理想的選擇。但是對於高職(專科學歷)的學生,或者對於那些本來就不是計算機專業的人群來說,畢業時能在一個軟體公司拿到3-6K(武漢薪資水準)就已經很高興了,這能使他們脫離父母的供養,從經濟上獲得獨立。在工作中再進一步提升專業知識和技能,還是可以成長為大牛的,到時候再通過漂亮的工作經歷進入較大的公司或取得較高的職位是完全可以的,十幾年來我已看到過不少這樣的例子。

想起一件事來,有一年我公司做了一個CAD項目,驗收的時候甲方通知我說從某大公司請了個「技術很強的技術總監」的人來參與驗收,到現場的時候那小子客客氣氣地站起來說「*老師好」,接下來就哈哈哈了。

至於「工程的思想和合作的思想」,@胡銳說的很對,在教學設計和實踐中,「實用型、工程化」是我們一直堅持的原則,其實我們的學生在大一上學期就開始分組做課程設計、按模板編寫各種項目文檔(儘管真心寫的很爛),每天提交工作日誌(包括周末和節假日)...... 在這一點上,可能我們比多數本科院校做的好。

---------------------------------------------------------------------------------

@王政 在評論里提到編碼規範和其他工程能力,反思了一下這學期的教學(大一),確實是做的不足,有時候僅僅滿足於學生把功能實現了就完事的標準,這樣容易養成學生不良的習慣,必須要加以改進。

謝謝指教!


2017.10.2, 做個廣告 歡迎關注我的專欄 換個姿勢學編程,就是更新有點慢。


我覺得過兩天就好了。真的。C#好像真的很難一樣。。俄羅斯什麼十幾歲的小屁孩沒上過學都能隨便碼出神一樣的代碼。慢慢學就是了。都是入門難,當你突破了一個點的時候,你就頓悟了,這需要時間。你1歲學走路的時候也是不知道該如何入門,一樣的,就那麼會了。我們是人。


這很容易,又很困難。

演算法、語言等當然很重要,但更重要的是這個:Write Code Every Day(翻譯:每天寫代碼)

「每天」在我看來之所以重要,有兩個原因:

1. 堅持訓練自己

2. 承諾這是每天必做之事,真正認為這對你是至關重要的

請老實地告訴我,除了吃飯拉屎等生理上的必須,和上班打卡對老闆微笑等社會上的必須之外,你每天在堅持自己的什麼?

真正的程序員並不比其他任何人,比如真正的作家、畫家,或者搬磚工人更特別,這只是一件事情,關鍵在於,你是否由衷地熱愛,並用行動在堅持。

這張圖表示迄今為止,John Resig 堅持了 204 天(半年多),每天寫代碼。寫代碼也許太困難太專業,但你能堅持半年每天早上起來疊被子么?我坦白我試過,滿地打滾地做不到好男人。雖然我認為不疊被子有太多好處。

這是成為真正的任何人的必經之路。包括 —— who wants to be a real programmer.

----

* 不知道 John Resig 是誰,自己去搜索


這個問題對我來說是很少見的:沒有任何一個答案我點了贊。

這些答案中我最滿意的是V大的答案,但是答案還沒有好到點贊:v大的答案描述的程序猿是優秀的獨行俠。但是我並不認為獨行俠是真正的程序員中的大多數。

但是一個問題是,我覺得我還不算優秀的程序員,這樣回答「如何成為一名真正的程序員」是不是有點底氣不足?所以這個答案只是我的臆想,各位輕拍。

我的一個略微哲學一點的觀點是:社會是在進步的,這種進步的一個方面就是社會的組織能力的上升。而組織能力的上升的內涵就是人與人之間合作的全方面深化。

以這種觀點出發,一個真正的程序員,應當是具有相適應的合作能力——這種合作能力,表現到工作當中其實就是工程能力。

工程能力有幾種:溝通協調、工作計劃、人員組織、流程式控制制、總結自省、技術實施。

===============寫到這裡突然發現可能寫成個大長篇……==================

1、溝通協調,對於真正的程序員來說,至少要能和同事順利的交流——你可以把同級、下級、上級都簡單的歸類為同事。不要求你像項目經理一樣見人說人話見鬼說鬼話,但是至少溝通不要留下什麼芥蒂。當然,這個是很難培養的,各位看官只需了解即可。

2、工作計劃,真正的程序員不單要能安排自己的工作計劃,也要能以此為中心了解你和其他人的工作計劃有沒有衝突。這就要求你在做工作計劃的時候和同事溝通良好。事實上,我發現如果能做好這點,很多情況下沒有必要熬夜什麼的。

3、人員組織,作為真正的程序員當他使用別人寫的介面出現問題的時候,他至少能夠知道去找誰,如果對方拒絕修改,他知道如何利用組織強迫對方修改。恩,反過來,阻止對方強迫自己修改。(這點我有切身體會)

4、流程式控制制,還是調用別人寫的介面的時候……你是不是應當偶爾介入下看看人家寫了一半的介面有什麼問題沒有?我覺得真正的程序員應當做到這點的。

5、總結自省。吾日三省吾身。其實絕大多數從事編碼工作的人這點都做的很好……但是問題是,要是都能做到這點,上述的幾個能力早就該具有了啊……

6、這個時候出現技術實施是不是有點晚啊?真正的程序員應當在技術方面做到什麼?版本控制SVN、CVS、git您得會一樣吧?編碼規範……你就算直接用eclipse裡面的那個自動代碼排版我也沒有問題啊……?文檔編寫能力……這個說實話,到現在為止我都寫不出自己滿意的文檔……

========================小總結===================================

能做到上述能力的人實在是少之又少的……我就覺得Linus大神能做到上述的所有要求……

==================留在這裡,等待補充================================


個人看來,真正的軟體工程師要達到以下四點:

1. 至少熟練一門語言,和一個組件。

2. 熟練各種職業技能,比如調試、單元測試、寫文檔,和presentation。

3. 熟悉你所在領域的業務,比如互聯網、醫療、汽車、金融等等。

4. 熟悉一個高大上的領域,比如os、編譯、圖形、ml。


那些說要把《演算法導論》當成入門書籍的人,你們真的有把這本書看完嗎?

卧槽,你們知道這本書有多難看嗎。


一個人是否可以成為真正的程序員,他的分水嶺就在於,能不能至少把《演算法導論》的結論和偽代碼部分,蛋定地看完。

語言啊,API什麼的,都是皮。當然我並不是說語言都是一樣的。語言之間是很不一樣的,但是對於你解決問題來講,仍然只是皮。基礎知識打好了,至少你拿到了一個別人的solution,你也知道是牛逼還是傻逼,進而挑選使用。

千萬別聽那些人說什麼【會用開源庫就好了我為什麼非得去弄明白】,對於他們來說,冒泡排序還是快速排序,只要是別人寫的,都一樣。


程序人生的寂靜歡喜

標題起得太大咯,是在故作老成么?

「程序人生的寂靜歡喜」——怎麼看都感覺像是某位已故計算機大師的墓志銘,可卻偏偏被一個菜得摳腳的毛頭小子拿來當做人生寄語——也是日了狗了!

人都沒生過,談什麼人生!?

莫怪我,我偏要「奢談」一下!

一.記敘

一開始我是拒絕的!因為我根本就不喜歡寫程序。

打高中數理化就不好,什麼排列組合、圓錐曲線、電磁場中一帶電粒子、水溶液中的水解電離,困擾我有如夢魘。

高考時,祖墳上冒出一縷青煙,數學創歷史新高考了88,理綜破有史記錄考了200,數據不僅太美太感人,而且大吉大利、元亨利貞!終於,我以總分522分考上了一所夢寐以求的2本就讀於計算機科學與技術1202班——命中犯2!

可是對於編程其實我是拒絕的——大一花了一年的時間來研究心理學,大二花了一年的時間來研究哲學,大三花了一年的時間來研究中醫——結果,《離散數學》掛了,《數字邏輯》掛了,《數據結構》掛了,《編譯原理》掛了——恨不得自掛東南枝!

人在做天在看,出來混總是要還的!曾堅信「天生我才必有用」,「我輩豈是蓬蒿人」;曾篤定「心所願力畢至」,「有志者事竟成」;曾夙願「天授其賦必賜其福」,「好風憑藉力,送我上青雲」。可是,一個冷峻若紫電青霜的問題劈面而來:不寫程序又能幹嘛呢?

然而我根本就不會寫程序!試想,一個打字只能用到右手食指、左手食指和左手無名指的人,敲代碼時是多麼捉急!試想,一個高數補考考了19分,滿腦子宏大敘事的理科弱智,寫程序時是多麼腦洞大開!

後來去公司實習,遇到的第一個項目就是要使用ESFramework通信框架,當我第一眼看到了開發手冊上的如下句子時,我就知道,春天不會再來了!

客戶端通過調用ESPlus.Application.Basic.Passive.IBasicOutter介面對應的方法以及預定其相關的事件,就可以完成基礎功能或得到相關狀態改變通知。我們可以從 ESPlus.Rapid.IRapidPassiveEngine暴露的BasicOutter屬性來獲取IBasicOutter引用。

介面、預定、事件、暴露、屬性、引用,你們一個一個來,我還大概能明白,你們群起而攻之,我便委地如泥了!

重載的Query方法(帶有CallbackHandler參數的)在發送請求信息後,不會阻塞而繼續向下執行,而框架在收到對應的回複信息時,會回調CallbackHandler委託指向的方法。由於調用線程與回復回調的線程不是同一個線程,所以稱這種機製為回復非同步調用。

再當我看到「重載」、看到「阻塞」時,我徹底憤怒了!而緊接著映入眼帘的「委託」、「回調」更使我出離憤怒!最後「線程」、「非同步」更令我萬念俱滅,心如死灰!

從此,我便以一種菜得摳腳的姿態狼狽不堪地行走在險象環生的程序世界裡。莫非是寒更雨歇,葬花天氣,獵獵北風襲單衣;荒原寂寂,遠聽猿啼,近看寒鴉起;鬼影幢幢,步步驚心,不知今夕何夕。

好多次我都想,別瞎費勁了,你不是寫程序的料!真正適合寫程序的人根本就不可能是這個樣子!

於是乎放棄。可是不寫程序又能幹嘛呢?好歹讀了四年大學,何況拉弓沒有回頭箭。還是要頂風逆水雄心在,不負人民養育情!

終於,苦水的浸泡痛徹了肌膚,磨練了身心,同時也澆灌出了涅槃之花!

某天我突然發現,那些原本看來佶屈聱牙的技術文檔如今看來卻直白如話,那些原本晦澀難懂的語法如今卻能夠熟練運用,那些原本看都看不懂的源碼如今也能夠在自己指下流淌,實習之前我連循環語句都寫不對,如今卻也能用ESFrameworkOMCS等框架開發出像樣的網路通信應用。

二.議論

更重要的是,從當初的不喜歡、不擅長、不自信,到而今能夠懷揣著一顆歡喜之心來寫程序,能夠以樂在其中的心緒來開啟自己的程序人生,這不僅是我收穫到的莫大財富,更是我把握住的莫大幸福!

胡適先生的名言:「怕什麼真理無窮,進一寸有一寸的歡喜。」真理無窮並不可怕,因為我們在每一寸的前進中始終獲得歡喜。編程之路並非坦途,我們也並非天賦異稟,然而那個最幸福的人,並非是玩轉代碼的編程高手,也並非是億萬家資的IT精英,而是那個在流年中始終以歡喜之心書寫代碼,又通過書寫代碼恆久再獲歡喜之人!

常言道:「男怕入錯行,女怕嫁錯郎」。嫁郎要嫁有情郎——有情飲水飽,無情龍肉都無味!入行也是一樣。入了所愛之行,舉手投足皆得歡喜;入了所憎之行,坐卧立行儘是苦悲!嫁郎的幸福不在於嫁郎所獲得的富貴榮華,其根本在於郎本身。那些通過嫁郎以獲取外在利益的女子,她們充其量只是獲得了生意上的成功,而根本沒有獲得婚姻本身的幸福,而這何嘗不是一種買櫝還珠?同樣,那些以工作作為純粹手段的人,他們也從來沒有獲得過工作本身的幸福快樂。

由此看來,我想恐怕對於絕大多數的程序員而言——你不是真正的快樂!

所有程序員恐怕可以粗略的劃分為這五種狀態:

1.不愛,但是迫於生計

2.無感,反正亦步亦趨

3.熱愛,但卻身心俱疲

4.狂熱,打了雞血一般

5.歡喜,畢竟樂在其中

你是屬於哪一種呢?

如果要我來選,我一定會選5,因為唯其如此才能獲得程序人生的個中真昧,才能擁有彼此交融的內在完滿。而其他的幾種狀態在不同程度上都是殘缺的。

也許我們寫程序總是不可避免的為了各種外在的目的,但是寫程序時的那份小確幸的歡喜,卻始終是我們精神飛鳥的棲息地。 正如孔子贊顏回——子曰∶「賢哉回也,一簞食,一瓢飲,在陋巷,人不堪其憂,回也不改其樂 。賢哉回也!」

罷筆時風煙俱凈,但願自己剛剛開啟的程序人生能夠無關風月,寂靜歡喜。


多搜索,少提問,特別是社區提問。很低效的。

API絕對是基礎。 演算法會提高你的逼格和局部優化能力,但程序是用來解決問題的。

很多演算法牛X的人根本不知道他應該優化哪裡,真正的問題往往出現在編程語言不夠清晰導致的bug中,即使要優化,也要先找准問題點,而且未必用得到演算法。

要學會優雅的解決問題,減少錯誤和返工。

一次返工代表三次思考,包含了兩次編碼和一次刪除;而一次錯誤可能導致返工,更糟糕的是你找不到,錯誤還會擴散。

這是很痛苦的,所以一定要把代碼做得清晰優雅。

所以要學會如何降低耦合,如何重構,如何應對需求變化。


熱愛寫程序,熱愛演算法,熱愛數學,熱愛思考,熱愛生活,熱愛身體。


首先我不同意vczh的說法!!!

可能是他站的太高,層面的問題,但是對於很多人而言,你可能不是科班出身,並沒有系統的學習研究過軟體工程、演算法、數據結構。甚至你都沒有專科的學歷。這時候你最先要做的是快速融入這個環境,搞出一個hello world,而不是從底層演算法,設計思想入手。我個人的建議是最快的是去培訓學校,因為大多數人的自制力是達不到自學的層次,這時候你需要指引,需要共同學習的環境和氛圍。次之看視頻,再次之看書。在我看來你沒有達到一個層面之前你必須去模仿,去借鑒。因為你自己的理解可能更加的片面。最理想的做法是進入一家不錯的公司進行實習,有好的leader去帶你,他為了減輕自己的工作壓力,自然想方設法去讓你勝任工作,當然這需要機遇。我想說的是,不同的方法適用於不同的人,但是千萬不要以一種高高在上的姿態去教育別人,你也許很成功。但是你的方法完全不適用於目前看起來永遠不如你的人,我追求的是一種普世的價值,其實每個人都在路上,只要願意一直走下去,每個人都可以說:我在這,你在哪?


無意間逛逛,發現此貼。回想當初,也是歷歷在目。

老夫閉門造車五年,Java PHP Python C

C++ 都熟讀與心。後端語言,無不精通,從框架到原生,從變數到內存,從創建到銷毀,每一步都精確掌握,連名字創建都是優雅如詩。代碼風格,各大檢測器無不通過錯誤檢查,測試流程全面覆蓋,錯誤發現精確定位。

和需求經理辯論,可三小時滔滔不絕,期間不喝水。和同事PK代碼,連續五小時不上廁所,健碼如飛,從不用市場流行編輯器,一直鍾愛vi。

部署代碼上線,一旦發現bug,秒速飛奔電腦旁登上VPN,千里之外修改。

學校不準玩電腦,已準備退學;女朋友不準編程,已準備分手;室友不準談bug,已準備友盡。

微信 QQ 只關注程序員群,演算法群,後端開發群等。距今為止,代碼長度可繞地球3個圈。


程序的目的是解決問題,從能解決簡單問題到解決複雜問題是需要一個經驗積累的過程,在這個過程中,你會不自覺地會去學習軟體思想,編碼規範,演算法,計算機原理。除非你一直想做一個永遠只會解決簡單問題的低層次程序員。


我覺得....你現在不需要問真正的程序員這個問題。

你的需求很明顯:做DIV+CSS+ASP+ACCESS 工資太低。希望從C#入手能掌握點一般人一下學子不會的東西,賺更多工資。

你需要的是參加一個培訓機構,找專門的老師帶你一下,可能會很快。

不過你說了,看視頻,看書都太慢了,即便是培訓之後也還是要自學很久,

程序本來就是積累出來的。程序員也是。總要花時間的。


我看了下評論區,其實大家都在教你如何入行,也就是如何成為一名程序員,大家都談的不錯,仔細看的話可以很清晰的理出一套適合自己的學習思路。我這裡從非技術層面談一下如何成為一名成功的程序員,希望對你和路過的其他朋友有所幫助!

編程是一個僅靠興趣仍不足以抵達成功彼岸的領域。你必須充滿激情,並且持之以恆地不斷汲取更多有關編程的知識。只是對編程感興趣還不足以功成名就——眾所周知,程序員工作起來像瘋子。

編程是一個沒有極限的職業,所以要成為一個成功的程序員,你必須超越現有已存在的極限。在程序員職業生涯的開始階段,他們將面臨許多挑戰,面對困境,他們之中有一些人將會放棄,而只有少數人會堅持到底,並成為這個領域的領頭羊。成為一名優秀的程序員需要具備如下幾點:

1.願意學習新技術

隨著技術的不斷進步,我們學到和實施的技術會很快地過時。所以,作為一個程序員,你就需要更新你的技能,保持與時俱進。市場上出現的所謂新技術通常由一些進程和語法變化而構成,但邏輯是相通的,所以你可以很快地掌握它。

2.調試技巧

程序員不但需要創建代碼,而且當軟體不按預期方式工作時,程序員還必須能夠快速而有效地解決問題。

因此,與其更改所有代碼,還不如在創建程序時製作適當的流程文檔,以便你可以快速檢查代碼並儘快找到問題。製作正確的文檔可以方便你快速調試程序,而不浪費時間。

3.解決問題的技巧

當一名普通的程序員獲得項目/模塊時,他們會直接寫代碼。但一名成功的程序員會試圖找出代碼出現問題的根源,並通知團隊領導或項目負責人。因為有時在文檔化項目需求並啟動項目後,或者甚至在完成項目後,我們才會在項目中遇到一些問題。所以最好在出現問題之前先找到問題。

此外,快速地找到解決問題的方法。

4.對工作的熱情

我們的工作時間大多為朝九晚五,但是當你對工作迸發激情時,那麼不要到了休息日就將工作束之高閣。一直工作直到完成它。當然,我的意思不是說如果你沒有解決方案,還得成天垂頭喪氣對著電腦,我的意思是如果你已經接近於完成的時候,那麼索性一鼓作氣搞定吧。

你的經理或高層將會欣賞你的工作,並且當你有一個良好的環境時,你的激情將會越發高昂。

另外,在沒有工作的時候也不要無所事事。不妨嘗試構建一些新的應用程序,如遊戲,拼圖,聊天應用程序等,這將有助於使你更加熱愛你的工作。

5.不氣餒

因為截止日期的緊促,所以編程也是一個高壓的職業。更有的時候看上去我們似乎一事無成。那些蹩腳的程序員可能會因此而氣餒而停止工作。但偉大的程序員會冷靜地處理緊張局勢,然後繼續奮鬥。

6.高效

當有很多任務並且快沒有時間來完成項目的時候,這時只有高效的程序員才能找到更好和最快的解決方案,因為他非常了解如何才能事半功倍。

如果你想找到做事的最好方式,那麼就去問高效的人;很多時候這些高效的人會找到最好、最快和最有效的方法,因為他們總在試圖尋找更高效的路徑方法。

7.處理失敗的能力

作為一名程序員,我們很少能夠在第一次嘗試時就成功,所以失敗幾乎是確定的。請將失敗視作是一個挑戰,而不要因此一蹶不振潰不成軍。耐心和堅持對於想要在編程方面取得成功是非常重要的。

8.主動投入研究

編程語言只是宏偉藍圖中的一部分。一名優秀又成功的程序員總是試圖為僱主編寫可有效工作的代碼,並幫助解決業務問題。有時,這是需要你做一番挖掘和探究的。

9.團隊心態

作為開發人員,你始終是團隊中的一員,因為你只有在設計師、業務人員、分析師和銷售人員等團隊成員的幫助下,才能非常高效地實現你所期望的成果。

如果你不能和團隊實現合作,那麼你將永遠無法達成目標。

10.業務視角

在IT公司任職程序員很容易,但完美型程序員總是會專註於業務目標。這樣你才能從高處超越而不僅僅只是工作於應用程序。只有以業務為重點的程序員才能為提高新項目的效率和運營提出可能的建議。只有不停下學習的步伐,才能更好的前進。

註:希望繼續在IT行業突破提升自己的各位朋友,歡迎加群384053806,不管你自我感覺牛不牛B。


我認為80%的人只要學會使用API就可以了,除非你是搞基礎庫的,否則不管是asp還是什麼c,不管是搞驅動的還是搞網頁html的,都一樣,都是用別人寫好的庫。

真正的程序員就是搞出一個用戶用著爽的軟體。而不是去做科學家或者數學家做的事情。


問題確認:

對你的問題,我的理解是「如何成為一個能賺到足夠的錢的應用軟體程序員」。因為你要在北上廣立足,就要賺錢。既然學了C#,想必是準備從事應用軟體開發,雖然我認為Java可能是更能幫你達到你目標的選擇。

為什麼斗膽回答這個問題:

十年以上軟體開發經驗,帶領的團隊成員平均年薪250K+,有90後也有70後,最重要的是,我希望我的回答能夠對你有所幫助,也希望能夠有更多的優秀人才加入到這個行業。因為牽涉到薪水,所以我選擇匿名,見諒。

這個回答適合誰:

  • 對應用軟體開發有強烈的興趣

  • 能讀懂IT英語,智商平均+,本科學歷,耐操

我理解的程序員:

程序員乾的事情就是:和團隊一起把業務模型映射到技術模型上,詳細說就是:

  1. 理解業務模型,包括用例,用戶界面,數據量,安全性要求,性能要求。

  2. 理解技術模型,包括資料庫表,業務處理邏輯,數據轉化,顯示和一些現在的你可能還沒有完全理解也不需要理解的東西比如SCRUM,DevOps,CAP...
  3. 把業務模型映射到技術模型上

怎麼判斷你是否準備好入行了:

一個可能的最簡單易懂的標準是,能夠用你最熟悉的技術寫一個簡單的論壇,包括用戶註冊,登錄,樹狀列帖子並翻頁,看貼發帖回帖的就夠了,用戶界面可以仿照知乎。並且能夠用版本控制軟體保存源代碼,用腳本編譯並部署你的應用。當然,如果能寫出一個山寨簡版知乎就更好了

怎麼去面試一個入門的初級職位:

  1. 非應屆的話,做一些你應聘職位需要技術的面試題,我覺得對你來說應該是C#基礎,CSS,HTML,JS和SQL,至少要及格。如果是應屆的話就去做基礎概念題,其實還好,應屆的話IQ,EQ和學校可能更重要。

  2. 盡量事先了解你要面試的公司,去google查一下公司的背景和風格,用linkedin查一下你將來可能同事的經歷,如果能查到的話。

  3. 一見面就要表現出對面試職位的強烈興趣,對面試公司和面試官的尊重。並保持到面試結束。

  4. 不要表現出負面情感,不要吐槽任何人或任何事,即便面試官給你很大的壓力,有些面試官會故意表現的富有攻擊性來測試你的應對。

  5. 對不懂的問題要直接承認不懂,不要吹牛,絕大多數情況下你無法瞞過面試官。但是要講出你認為的難點和你會採取的行動。

剛入行的時候,如果有選擇的話,盡量選擇這樣的公司:

  1. 開發人員多的(大多數情況下即便工資低很多也值,而且大公司薪水一般就是平均線)

  2. 做產品而不是做項目的

  3. 軟體是主業的公司,入門時盡量別選大的甲方公司的IT部門

最後,錢是怎麼賺的:

  • 軟體開發有這些環節:需求,分析,設計,實現,調試,部署,測試,發布和維護。實際做過的環節越多,每個環節上的經驗越豐富,你就能貢獻更多,也就能賺的越多。

  • 這個行業一般說來,junior (100k~200k), senior(200k~300k), expert/staff(300k+), architect/principle (400k+) 是技術路線的薪水分布。從senior開始其實有三個選擇,分別是業務,技術和管理。現在的行情是走哪條線都能拿到很高的薪水,所以入門時做好基礎就行,之後等自己明白了再做選擇不遲,一般情況下5年經驗時做出選擇比較科學。

  • 另外,推薦幾個學習的網站:thoughtworks的technology radar,還有http://infoq.com英文版上的presentation

#include&

using namespace std;

int main()

{

cout &<&< " I"m a coder now! " &<&< endl;

return 0;

}

把這段代碼打出來然後在Linux下用g++編譯下然後運行,恭喜你,你已經成為c++程序員啦!

不是在抖機靈,只是覺得程序員不過是能用代碼解決問題的人而已,真的沒有必要拿演算法來嚇新人,對初學者來說,多敲代碼,在項目中鍛煉自己是最有效的辦法了。


我說一個例子,供參考。

從前有一個小白,本科學的機械啥的,後來畢業了出於對遊戲的熱愛想去遊戲公司寫程序,就自學語言去面試,

結果當然處處碰壁。

後來小白復讀了一年,重新考了個計算機科學與技術專業,四年之後,牛逼了。。。


我是題主,2年時間過去了。 我已經成為了一個中級前端 PHPer,在上海某個創業公司負責微信開發。

謝謝大家的支持和鼓勵,希望這個問題可以幫助新入行的萌新們。 共勉

2016年6月22日10:31:58

後來成為高級前端,再後來想換換環境辭職回家創業賣水果。

2017.7.7


推薦閱讀:

如何提高英語口語表達能力 ?
自學程序員要多久,如何找工作?
如何從零開始學習義大利語?
自學托福/GRE,難度相對於報班學習怎樣?
如何自學軟體開發?

TAG:如何成為X | 程序員 | 編程 | 自學 | 個人發展 |