給編程初學者的幾點建議
感謝一些編程初學者朋友因為看了我幾篇不著調回答後給我點的贊和關注,本文是一些隨想性質的小建議,水平一般能力有限內容也比較零碎,但願能解答一些疑惑,也希望能幫助到一些人。
1. 學編程有前途嗎?編程在當今世界只是一個很普通的職業,其他職業有的一些特性它多少都有一些。比如各位最關注的收入,和其他職業一樣,高薪只屬於小部分人,絕大多數人拿的工資和其他行業的區別並不是很大。所以幻想這隻要入了這行就能輕鬆登上人生巔峰迎娶白富美的,那你還是死了這條心吧。所以說,學編程有前途,但不一定比學銷售、學設計...來得更有前途。
2. 關於編程這個職業,正如前一點所說的,很普通的職業。比如與建築行業做類比,都一樣,數量最龐大的還是底層的「小工」,在我眼裡,如果只有一膀子力氣只會別人讓你幹嘛就幹嘛,那用手敲鍵盤和用手搬磚其實區別並不大,不要覺得在辦公室里吹空調通宵跟在工地曬太陽相比會輕鬆高貴一些,近些來聽到的活活累死在辦公室的例子可也有不少呢。同樣的,在編程這個職業里,從小工要進化成「架構師」、「專家」、技術總監等等高端崗位的難度,一點不比搬磚工進化成建築設計師啥的崗位難度來得小,甚至更大。
3. 「你看現在很多統計報告都說IT行業平均工資很高……」,列位,這年頭最不靠譜的詞就是平均,有多少人是「被平均」的。
4. 寫前面幾點的目的不是勸退初學者。很多初學者之所以願意進入到這個行業,我想大部分都是因為宣傳的引導。有些是合理引導,比如國家學校,因為作為比較朝陽並且能帶來大量稅收的行業,國家當然希望越來越多的人從事這個領域推動發展;另一些是為了達到一些個人目的而進行的誇大性引導,比如部分無良培訓班的一些就業保證、收入保證。在這種背景下,我希望在一些過度發熱的大腦上適當地澆一點涼水,說明一下一些現實情況,冷靜下來以後我們再來說後面的事情。
5. 如果你冷靜下來了以後還是願意繼續從事這個行業這個領域,那麼我們就能理性地介紹一下這個職業了(這裡就不灌雞湯說為了興趣為了夢想什麼的了)。現階段,這個職業相較於其他來說,是一個變化速度最快的職業。變化速度快會讓從事這個職業的每個人都過得很累,沒辦法,因為變化得快你就得不停地學,停止學習就意味著淘汰,這在IT領域體現得尤為明顯和殘酷;反過來,變化速度快也就意味著機會大,如果說你跟上了變化速度而其他人沒有跟上,那麼好了,你就踩著他的屍體上去了。競爭這件事哪裡都有,有些職業上的競爭點主要是經驗、關係沉澱等,那麼反超難度自然很大了;而編程這個職業里,經驗和關係雖然也會對競爭結果產生影響,但是技術實力所佔據的比重更大,因此可以說,這個職業相對機會更多。另外一方面,雖然同級人之間存在競爭,而且這種競爭更加顯而易見,但實際上真正影響到你生活品質的對手是那些高高在上的前輩。之前,由於這個行業還處於一種「野蠻生長」的階段,各種崗位的需求量都在不斷擴大,這種「與前輩爭利」的現象還不明顯,但是在現階段乃至未來,這類競爭會越來越凸顯,直到和其他行業相同。在這個領域裡,技術實力的累積雖說與經驗也有關係,但當你真正入了門以後,技術實力的增長與你的專註度、精力、能用於學習的時間是非常相關的。(這裡假設前提是你已經懂得如何學習、提高技術水平和能力)假如你剛畢業,渾身打滿雞血,身體倍兒棒,恰巧又是個單身狗(嘿嘿...),那麼與一個40多歲,上有老下有小,身體開始走下坡路的中年工程師相比,一起去學習某個新的技術,你的優勢顯而易見。因此可以說,這個職業抓住機會更加容易。
所以,如果你對未來充滿渴望,並且有信心堅持付出努力,那麼選這行沒錯。沒有別的,這行里付出以後獲得回報的概率比較高,僅此而已。
6. 瞎分析完行業,我們來說學編程。學編程難嗎?幼兒園和小學都開始教編程啦;學編程不難嗎?一些好大學相關專業的學霸也不見得是合格的程序員。然而無論難不難,先得正視這個技能。在我眼裡,現在學編程跟電腦剛出現時學打字其實區別並不大。當年,一個每分鐘能打一百多漢字的打字員那也是響噹噹的高端技術人才,如今呢,打字已經淪為和拼音一樣的基本技能啦。編程也是如此,可以預見,如果只是學會了xx語言的xx語法,那麼幾年後的你和現在的打字員沒什麼區別:誰都會的東西還要你幹嘛?但是換個角度想,你會打字就一定能寫出好文章來么?那種閱讀量幾十萬幾百萬的好文章難的是構思內容還是打字?同樣的,對於編程,真正難的是如何寫出能解決實際問題的代碼,而不在於xx語言語法或者xx框架使用方法本身。因此,學編程,學會xx語言預發或者xx框架使用方法簡單,但是必須要學(要寫好文章你總得會打字吧),難學的是,如何寫出能解決實際問題的代碼。
7. 程序員這個職業的學習和一些傳統職業的學習存在很大的不同。如果把大學和培訓機構比作一個工廠,對於一些傳統行業來說,他輸出的合格產品是一些能夠勝任工作的員工;而對於IT行業來說,他輸出的合格產品是一些能夠快速學習新技能勝任工作的員工。再厲害的大學和培訓機構,也不可能僅靠他們所提供的教學內容培養出完美勝任軟體崗位需要的人才,這個過程中必須要求學習者自身能夠自己探索,緊跟技術發展。IT行業變化很快,新技術層出不窮,也許一年前正確的理論在一年後就被人噴得一文不值。而技術是先出現於實驗室研究所,然後在行業內應用,最後才會被人總結成教材出現在學校和培訓機構里,這個過程需要一個很長的時間,所以對於編程來說,學校教學內容的落後是必然。因此,你不用到處說學校教材如何如何落後不靠譜,培訓機構如何如何不貼合行業實際,真正落後的是你自己的思想。如果你還在學校或培訓機構學習,那麼你一定要分析一下a)你要什麼;b)它能給你什麼。我這裡給你的答案是:a)你要的是這個行業的基本知識(學會打字),並且如何學習新東西的技巧;b)它能給你的是教會你基本知識。你看,有一條東西看起來學校和培訓機構給不了你,那就是學習新東西的技巧,而這一點又至關重要,影響到你的職業發展。其實任何學校和培訓機構在教你基本知識的過程中就在一遍遍給你演示如何學習新東西,比如讓你做作業,讓你看書,讓你練習寫代碼(有些好老師會直接總結成方法單獨拎出來讓你學)。不是他們不給,是給你了你沒接住。
8. 培訓班好不好?很難評價,但是它既然能存在就必定有其存在的價值。很多時候培訓班學員找工作成功率低於科班出身或者自學出身的程序員,不能全怪人家培訓班。首先,學歷這東西在中國多少還是有用的,如果說你沒有一個好學歷,只有培訓班培訓經歷,那你得先承認你的起點比其他人略微低了一點(這裡插一句,無論學什麼東西,承認自己的弱點只有好處沒有壞處);再者,我相信有很多人選擇培訓班是因為不知道怎麼自學,那麼按照第7點的分析來看,「如何學習新東西」這項關鍵技能對於這部分同學來說,從開始時就要弱一些。而這部分同學在經歷了培訓班之後如果只掌握了基礎知識,而在最缺乏的「學習新東西的能力」上沒有所斬獲的話,我說直接點,培訓班上了跟沒上區別不大。
9. 如果選擇上培訓班,那麼需要注意哪些事情呢?首先上了培訓班的一個最大好處在於你會比自學更加專註,更加能保障時間和精力的投入,並且不會輕易放棄。你交錢了,還不便宜,半途退縮人家也不給你退錢,所以處於心疼錢你也會好好聽,也會堅持到課程結束(土豪忽略)。另一方面,封閉式的環境讓你難得沒有心思和時間干別的,說真的,在如今這個時候,想找這樣的環境真挺不容易的。上了培訓班就得努力,畢竟人家也只是輔助,最終能學多少還是在你自己,你要是上課睡覺作業不做誰都救不了你。認真聽講努力學習是必要條件但不是充分條件。另一個,你得自己找資料再以基礎知識為起點再學點別的,這一點最為關鍵。學一點別的不是為了讓你有資本在同學面前吹牛逼,而是要通過方式一點點學會,在沒有老師教的情況下,你自己還是能學會一些東西的。在培訓班上課期間,你要不斷練習這件事情,否則就如我前面說的,培訓班上了跟沒上區別不大。
10. 所以我來總結一下培訓班這件事:
- 上了培訓班就能有高薪工作。假的,趁早死心,高薪跟培訓班無關,跟你這個人本身有關,人家否定的就是你這個人,而不是你上培訓班的經歷。
- 培訓班都是騙子。不對。騙子是存在的,也聽說過以培訓為名實際上是傳銷的,也聽過搞什麼學費貸款其實是詐騙的,這種是真的騙子,培訓班只是他們騙人的手段。而對於正經上課的培訓班來說,一方面上培訓班是投資,投資有風險(老師水平有高低);另一方面你自己如果沒搞清楚你需要從培訓班得到哪些東西,出來找不到工作,我認為這個責任在於你自己。
- 培訓班作用很大。對於自制力差,周圍干擾因素多的人來說,這句話對。對於自制力強,學習能力強的人來說,作用確實不大。
- 業界歧視培訓班,簡歷上有培訓經歷找不到好工作。假,我說句實在話,自己菜就是菜,別找客觀原因甩鍋,你要是怕過不了簡歷海選你可以走內推渠道啊,這年頭對於高手哪個人不是如饑似渴的。如果你覺得能力強技術好但是沒找到工作,請把簡歷私信發我,我可以無償對你做評估,如果確實有實力,我包推薦(熱烈歡迎,我們這如饑似渴期待高手的加盟),到時候進來後就算我給你打下手我也心甘情願,抱著你的大腿求你帶我飛。
11. 你的工資與什麼相關?在一個公平的環境里,你的工資與你能為公司創造的價值相關,這是一定的。那麼如何產生價值?那就是替公司解決問題。能解決問題的事就是有價值的事,無法替公司解決問題的事就是沒價值的事,就是這麼簡單。這樣一來可以看到,你的技術和你的工資實際上並沒有直接關係。我舉個例子,如果一個公司他只有PC端產品,公司的收入全部來自於PC端產品,那麼你手機開發能力的高低對於公司來說是沒有意義的。這種情況下能給公司產生價值的有這樣幾種渠道:1. 公司以後可能會發展手機端業務,那麼留著你當儲備人才,那麼你就是能替公司解決「當需要發展手機端業務時如何快速開始」的問題,產生了價值;2. 你經驗豐富觸類旁通,你多年的工作經驗對現有PC端業務也有指導意義,那麼發揮作用的不是你手機端開發技術的高低,而是伴隨他的其他能解決問題的技術。由此得到了幾點建議:1. 如果你不打算換工作,那麼想要提高工資(公平的環境),就要分析公司的核心問題是什麼,然後一層層細化分解,選擇問題去嘗試學習新的工具方法去解決,你能解決的問題層次越高,越接近根本問題(公司的根本問題就是持續快速賺錢),你的價值就越大;2. 根據自己掌握的技術選擇一個能讓你發揮最大價值的公司。
12. 產生價值的只有技術?如前面所說,技術是間接產生價值的,直接產生價值的是解決問題。解決問題的第一步是發現問題,或者說是理解問題。不知公司需要你解決的問題是什麼,不理解問題內容的程序員技術再牛逼,也產生不了價值(至少在這家公司)。而一些非技術的專業知識,對發現問題理解問題的作用是很關鍵的。比如說如果要開發一款炒股軟體,那麼本科學金融學然後轉行做技術的程序員能產生的價值,會高於本科就是學軟體而技術水平又沒有顯著優勢的程序員(因此啊,科班程序員注意了,如果你的技術水平和非科班的程序員差不多,那你們的價值實際上已經差很多了,只不過對方不一定把價值完全發揮出來了而已)。解決問題的方法有很多,解決問題過程中涉及到的事情也有很多,技術只是一小部分罷了。可能你技術不強,但是擅長統合資源,擅長項目或人員的管理,那麼依然價值巨大。反而由於技術具備可替代性,技術對於問題的解決倒是沒有想像中那麼巨大的作用(例如對於那些業務強勢的小公司,大不了技術的活外包出去咯)。對於做技術來說,不要妄自菲薄把自己比作苦力,但也不要自視過高覺得公司少了自己就不轉了。做技術,不僅要關注技術本身,更要關注你所在的業務領域。而那些從別的行業轉行過來的程序員,如果你轉行成功了,那麼你的實際價值其實非常巨大,千萬不要得自己不如別人,反而要冷靜分析一下自身的優勢,選擇適當的領域悉心鑽研,把自身發質發揮到最大。
打字挺累的,先寫這麼多。
打個廣告,如果有想換換環境的高級Java工程師,請把簡歷狠狠地砸過來吧~
推薦閱讀:
※用 Python 將歌單里的歌詞保存成圖片
※【新手向】從零開始配置Windows下Rust開發環境圖解
※學編程入門看什麼書好?
※零基礎學習OpenCL,有哪些好的建議?
※蕭井陌(蕭大)的編程入門指南,你在實踐指南過程中遇到了哪些困難與瓶頸?