伯樂線上注:3月27日,我們在微博釋出了@老碼農的自留地 的《有關“非計算機專業如何轉行做程式設計師”的一點思考》後,也看到了@lvjian700 轉發時說他以前是學包裝工程的,也是非科班出身的程式設計師。故而私信問@lvjian700 是否有興趣來分享他的入行經歷。以下是@lvjian700 今天凌晨寫完的博文(原文連結)。
前兩天在微博上看到關於“非計算機專業如何轉行做程式設計師” 的討論:
討論中一篇學生的來信,勾起我寫一篇博文的衝動:
XXXX:員員好,我是12屆的大學生,讀了一所還可以的大學,但所學專業我很不喜歡,我因為性格較內向同時又感嘆程式設計的神奇,所以很想進入這一行,但 我去面試幾家後發現就算是實習崗位也需要一些基礎,雖說大學學過C語言但感覺也基本不會用,那些面試單位是建議我去學習這方面知識再去找他,但我又對這些 培訓機構不太放心,怕花費了一大筆學費結果卻不好,現在我有些迷茫不知道該去找找其它工作(人才市場很多都是些銷售和工廠的一些崗位)還是去學習,希望廣 大的員員們給我些指導,非常感謝。
希望我的經驗能影響他,影響徘徊在計算機行業外想進來的人。
先做個自我介紹,讓這篇博文比較有參考價值:
大學: 2004 ~ 2008 西安工業大學 包裝工程
現在公司: 中科大洋 -上海研發部
職位: Java軟體工程
工作年限:4年
工作內容: B/S 架構的企業軟體開發, 技術涉及Java、Javscript、 iOS
已掌握的語言: Java、Javascript、SQL、 C、 Objective C、Ruby
1. 程式設計師這個職業並不是為計算機專業學生專設的
我現在所在的公司,上海這邊就有3個大學非計算機專業的同事。除了我之外,一個是09年畢業學建築的,一個是11年畢業學法律的。如果你想,這條路可行。
2. 興趣是最大的老師
2002年高一暑假,暴雪推出了war3(魔獸爭霸3)。我想學程式設計的想法就從這個遊戲開始。
由於暴雪的關係,當時讓我覺得做遊戲是一件非常酷的事情。03年的一期大眾軟體,介紹瞭如何使用war3中的地圖編輯器做RPG遊戲,從此便迷上了地圖編輯器,開始泡各種地圖編輯器的論壇。
在當時我只知道照著論壇的帖子改地形,寫觸發器,寫判斷語句,後來才知道地圖編輯器中使用的語言Jass(war3中的指令碼語言)。
從那時起就立下一個目標,“學程式設計,做遊戲。酷!”。
後來高考我並沒有考上計算機專業,志願被調劑西安工業大學的包裝工程。不過依然堅定自己的目標:“上了大學自學程式設計, C語言->C++-> VC -> 做遊戲”。
現在想想當時的想法非常天真,就是這個天真的想法讓我一頭扎進了計算機的世界。
如果你對程式設計世界充滿好奇,恭喜你,他將會是你最好的老師。在整個過程中請牢記:“一切為了興趣”。在學習過程中碰到不感興趣的東西,可以先放放,讓興趣指引你去學你想學的東西,那些讓你感覺很頭疼的東西(比如編譯原理,演算法等),以後你會因為興趣將他們拾起來。
3. 學習是一個迴圈的過程
發現 -> 感興趣 -> 學習 -> 實踐 -> 成就感 -> 發現 -> … 請時刻記住這個迴圈過程。當然你可以總結出自己的一套迴圈理論。
4. 如何開始?
如果你現在很幸運的只知道一門程式語言,恭喜你,直接上手學吧。現在就開始是最好的開始。程式 語言的邏輯都很像,只要學會一個其他的都很容易。我在學程式設計的時候只知道C語言->C++->VC這條路,進入大學後整天泡在圖書館,在沒有 電腦的情況下手寫程式碼。這段學習經歷讓我意識到,即刻開始是最好的開始。
如果你不幸知道了很多程式語言,並且不知道如何選擇,這裡我可以給你一些建議:
- C語言永遠是值得學習的一門語言。在猶豫不決的時候不妨先學C語言。如果你能很輕鬆寫出氣泡排序,寫出函式的遞迴呼叫。恭喜你,程式邏輯方面你已經很優秀了。
- 如果你對做網站感興趣,PHP是一個不錯的開始。當然還有Ruby、 Python。
- 如果你希望按照傳統套路來,Java是個不錯的選擇,之後可以選擇企業開發,Android開發等。
- 如果你對移動感興趣並且資金充足,Objective C 覺得很好的選擇。iOS開發難點在Mac, iPhone等裝置購買上(貴,你懂得)。
- 最後不要忘了身邊的有當程式設計師的人,他們的意見很值得參考,如果按照他們的路子入門,你將得到一個很好的導師。這將會是一件非常棒的事情。
如何選擇書:
- 選書之前現在豆瓣讀書看看書評。
- 首選圖靈出版社的書。
- 書越薄越好,快速入門是目的。那種跟磚一樣厚的書,請忽略掉,除非你有自虐傾向。
一些值得推薦的網站:
- 程式設計中國: www.bccn.cn 很適合初學者的網站。我剛開是學程式設計的是時候,在這裡得到很多幫助。
- CSDN: www.csdn.net 大而全。
- ITEye: www.iteye.net 前身JavaEye,我常年混跡的網站。建議工作後來這裡混。
- 工作後發現的在學習網站,強力推薦: http://www.codecademy.com/
5. 是否上培訓?
我們3個都有上過培訓。我是先自學了C、C++、MFC,之後感覺不知道再學什麼,機緣巧合選擇了培訓學校這條路。
在培訓學校,我遇見不少優秀的老師,也結識了一幫朋友,這段經歷是我最終走上程式設計師這個職業。
能不能不選培訓培訓?
除非你能找到一個很好的學習環境,比如開源社群,程式設計論壇。一個好的環境能讓你進步很快,在學習過程中結識朋友也會讓你很有成就感。
如果你還沒有一個環境,或者對自己適應這些社群的能力沒有自信,建議選擇培訓學校。具體能學到什麼那就看你的個人主動性。
強烈建議有一定基礎後在選擇培訓
培訓能帶來的東西:
- 一個適應當前潮流的學習計劃,比如我06年上培訓,當時Java SSH框架很火。培訓的流程就是Java -> Java Web -> SSH 框架,中間伴隨專案實戰。
- 有人指導,在學習中碰到障礙,很快能得到解決。這樣不會使學習過程有很強的挫敗感。
- 結識朋友,相互交流,這種學習環境會讓人感到很快樂。
- 就業指導,現在培訓基本都以工作為目的,就業指導會給你找工作帶來不小的幫助。(培訓學校目的讓你找到工作,好壞看個人想法和能力)
培訓中的不足:
- 培訓學校本質是盈利,並不像普通學校有一定義務性,這會導致有些做事方法可能會讓人不爽。在去之前自己需要做心態上的調整,一個賣服務,一個買服務,各取所需。
- 培訓比較急功近利,課程設定方面以實戰為主,僅僅按培訓學校的課程學出來,基礎一般都很薄弱。基礎方面需要自己補,例如資料結構,演算法,OOP原理等等。
上培訓需要注意的事情:
- 課程時間,如果求職壓力較大建議選較短時間的,先工作,之後在充電。如果時間充裕建議選擇時間較長的,你可以有很長的時間學習。
- 課程設定,注重專案實戰。一般每一階段學習都會有一個實戰專案,專案實戰越多越好。
- 學習期間做專案,儘量不要選擇培訓教材中的專案,這樣不會因為思維惰性去copy書本上或者老師提供的程式碼。
- 如果分學習小組,請力爭做小組組長。組長做實踐專案時會充當Team Leader的角色,這方面的鍛鍊對成長很有幫助。
6. 如何找工作?
- 用心做一份簡歷,樸實,不要弄虛作假。弄虛作假是應聘大忌,一旦發現絕對忽略掉。(至少我在看別人簡歷的時候會這麼做。)
- 請忽略招聘中“計算機或者相關專業”條件,那些都是很死板的,模板式的招聘要求,大膽的把簡歷發過去,是否邀請你面試是他們的事情。
- 保持耐心,由於是非計算機專業的緣故,你需要比計算機專業的學生付出更多的努力。
- 用專案說話,面試時請帶上你的專案。我當時找工作的時候就是這麼幹的,結果就是:我輕鬆找到了工作。
- 如果實在找不到工作,可以先找實習職位。找實習職位需要多泡論壇,招聘網站上的個人感覺不靠譜。(有很多人都再搶,你懂得。)
7. 工作後該如何繼續學習。
- 保持對行業的關注非常重要。推薦幾個部落格:
- 酷殼: http://coolshell.cn/
- 月光部落格: http://www.williamlong.info/
- 阮一峰的部落格: http://www.ruanyifeng.com/blog/
- 不要將Google作為IDE的一部分。如果沒有Google你不知道如何解決問題,你的水平可能只停留在初級的水平。多思考,多總結,開一個部落格很有必要。
- 申請一個Evernote賬號。時刻記筆記,知識積累很重要。
- Github, stackoverflow 如果你還不知道這兩個地方,趕緊去看。
- 我以前寫過一個《構建網路工具箱》的PPT,希望能對你有所啟發。
- 優酷上有很多視訊教程,如果你只拿它來看電影,那實在太非專業了。