每年都有無數年輕程式設計師,加入軟體行業。他們在學校里學過編程,但是對這個行業的現實一無所知,我今天介紹這個行業的一些實際情況。這幾年自己在技術博客沉澱很多技術。其他方面也算成功,至少和同齡人和自己起點一樣本科生來說,作為過來人有幾點說一下:
前面四點主要針對三年經驗以內的。後面的幾點寫給3年到8年的同行,最後一段寫給所有的同行。
一、不要迷信「大牛」
看到你問題中有什麼踩坑的,技術人唯一的不好就是對非技術盲目崇拜,尤其對非技術網紅。就放前面說說:網上的「大牛」多半不靠譜。
其一是真正的大牛沒時間混跡在網上做人生導師,天天講道理,整天出現在你Timeline里的人要么半吊子水貨,要麼另有所圖(賺錢智商稅)(我黑起人來連自己也不放過)
其二相比較入門的你比就算是大牛,他的經驗對你未必有用。大牛說我學 Python 也就翻了下基本語法,當天就上項目開幹了。(大神說我覺得沒有順手的語言,就發明了 Python)大牛說我從不看基礎知識,因為大牛天天忙著公司架構 哪來機會看基礎。
二、少說廢話,多寫代碼
廢話有很多種,程式設計師屆最多的大概就是整理哪個語言/框架/平台/技術好,准程式設計師則喜歡問,我是不是應該學Java c php……學了是不是有用之類。我學習什麼技術好?技術討論並不完全無意義,但在你打好計算機基礎、數據結構,熟練掌握至少一門語言、開發過一個能看的項目之前,這些討論對你來說就是浪費時間的廢話,而不是今天跟風學這個,明天又聽人說那個好。不要等畢業的時候說出XX技術學校沒教過,所以我不會這種話。
有這時間多寫點代碼,刷刷算法題,找點項目做做,找不到就從自己日常身邊找點需求去用代碼實現。不要說你覺得沒有什麼可寫的,如果是這樣,那你要反思下自己適不適合編程這條路。
我能告訴你的是 接下來幾年不會算法是不行的。不要說我進去公司用不到這些話 如果你拒絕學 那沒必要做程式設計師了。
三、做一個程式設計師,不是碼農
碼農的工作和搬磚沒什麼區別,就是把一些模塊拼到一起,有問題了就東修西補,程序能跑通就不錯,只會用教過的一兩種技術。做個碼農很容易,天天改改Bug 水水群 ,編程5的分鐘 扯淡兩小時。就是說的是碼農。但程式設計師是個長期的職業,你在學校學習的是編程的思想、解決問題的邏輯、持續學習的能力。重視基礎課程,深入學習一兩門語言和技術,理解透徹了,以後學習別的新技術自然觸類旁通。沒事看看就行,別去跟風湊熱鬧。你上的是大學,不是技能速成培訓班。
總結一句, 碼農喜歡說顛覆 喜歡說取代 更喜歡扯布道者。天天喊著新技術。
程式設計師專注基礎能力,談業界影響,說貢獻。
四、短期不要高估自己,長期不要低估自己
絕大多數人都會犯的錯誤就是「短期高估自己,長期低估自己」。除非你天資聰慧,否則別想著大一就搗鼓出什麼牛逼程序來一鳴驚人。學編程的過程會經歷數個瓶頸期,中間你也許會數次感到萬分絕望,甚至開始懷疑人生。
但你要相信,只要堅持寫下去,瓶頸總會突破,成為一個超越平均水準的職業程式設計師是沒有什麼大問題的。
畢業三年拿到15到20k 的人不少,不代表你牛逼,因為行業曲線就這樣。但是你想6年拿60k 確實沒幾個人,畢竟50w年薪是大部人的天花板。所以也別灰心 。
五、最後相信自己,尊重自己的職業
不要自稱「 xx 狗」,尊重自己
不要為了談戀愛而談戀愛,不要相信「程式設計師找不到女朋友」
除了計算機知識,也要學好英語 + 數學
基礎學紮實,學算髮,不要追求熱門
不要迷戀語言,不要陷入語言的戰爭
多寫有質量的代碼 別瞎折騰實踐
六、90%的編程工作來自內部軟體
計算機專業的學生,可能有一種錯覺,覺得大部分程式設計師,都在編寫公開出售的軟體或者通用軟體。
這種看法是不對的。大部分程式設計師,實際上編寫的是不公開的企業內部軟體,這就是說所謂的外包。比如追蹤費用的軟體、優化裝運成本的軟體、幫助記帳的軟體、設計新部件的軟體、計算保單價格的軟體、識別惡意訂單的軟體等等。
各種各樣的商業公司,開發內部軟體,解決它們自己的問題。市場上對程式設計師的大部分需求來源於此,只有極少數程式設計師直接編寫面向外部顧客的軟體。
內部軟體的開發,通常非常乏味,令人厭倦。因為它們的技術複雜性低、技術決策非常保守、預算很少、缺乏長遠考慮。但是,世界上大部分編程工作都是這種。你如果想入行程式設計師,你就要有心理準備去接受這樣的工作。
七、別人雇你的目的,是讓你創造利潤,不是讓你編程
商業公司最關心的(或者說唯一在乎的)事情,就是增加收入、降低成本。因此,它們實際上需要的不是程式設計師,而是能夠幫助它們增加收入、降低成本的人。
開發優美的軟體,解決技術難題,編寫沒有 bug 的代碼,這些都不是商業公司的目的。它們僱傭你,是為了讓你幫它們完成某個可以增加收入、降低成本的項目,而不是為了讓你追求個人的軟體成就。
你對於公司的唯一價值,就在於能多大程度上為它們增加收入、降低成本。
這就是為什麼阿里p8拿不到業務就是滾蛋的情況 ,在沒有業務就沒有產出,沒產出就沒有利潤,那麼技術好壞 只成為你不容易被裁的幾率。
八、好的程式設計師專注於為公司帶來價值
很多公司的開發經理不懂技術,在他們心目中,程式設計師就是一群高成本的勞動力,只會在一台複雜的機器上干一些他們難懂的事情。
如果你自稱為」碼農」,只會寫代碼。當公司需要壓縮成本的時候,某些經理首先就會想到解僱你,因為你的工資高。
有一家公司叫 Salesforce,口號是」沒有軟體」,意思就是如果經理們購買了他們的服務,就不再需要別的軟體管理銷售業務了,也就是說,不再需要自己僱傭程式設計師了。
正確的做法是,你應該把自己描述成與增加收入、降低成本有關係的人,比如」xx產品的開發者」或」改進者」。有一個 Google Adsense 程式設計師的自我介紹,是這樣寫的:」Google 公司97%的收入,與我的代碼有關。
九、不要給自己設限
年輕學生經常會問,應該選擇哪種語言或平台?Java 是不是比 .NET 容易找工作?
過分強調某一種語言或平台,都是不必要的。如果你把自己限定為 Java 程式設計師或 .NET 程式設計師,你就已經輸了,因為首先你不應該自稱為碼農(理由見上一點),其次這種限定使得你自動被排除在世界上大多數編程工作之外。
現實生活中,學會一種新語言,只需要一兩個月,然後再過半年到一年,你就會變成老手。那時,根本沒人在乎你以前用什麼語言。
天才程式設計師是很少的,可是需要天才程式設計師的工作機會卻很多很多,大多數場合都是需求遠遠大於供給。
這意味著,即使你不是天才程式設計師,只要你是一個優秀工程師,那些招聘公司也會立刻錄用你,因為它們知道招聘到天才程式設計師的機會微乎其微。(重複一遍,所謂」優秀工程師」,就是你的履歷上有一連串可以為公司增加收入、降低成本的記錄。)
某些公司的人事部門,會根據某個關鍵詞(比如 Java 或 .NET)過濾簡歷。雖然這樣的公司根本不值得去,但是如果你真的想過這一關,也很容易:投入幾個晚上和周末,在你當前的項目中設法用到這個關鍵詞,然後再把它寫進簡歷就行了。
你要知道 語言只是工具,公司為了利潤,在任何時候都可能讓你轉語言。
十、如何提高求職時的談判能力?
(1)記住你不是在求職,不是在展示編程技巧,而是在推銷某種商業問題(增加收入或降低成本)的解決方案。
(2)面試時,要有自信,要平等的對話。你要的是一個互利的錄用合同,不要每次對方提出要求,你都說Yes。
(3)僱主可能會問」你的上一份工資是多少」,他們其實在說」給我一個理由,壓低你的報酬」。你要想好如何適當地回答這個問題。
(4)要還價。這裡不僅僅指錢,還指其它你關心的方面。如果你無法要求更高的薪水,那就試著要求更多的假期。
十一、創業公司是否適合應屆畢業生?
如果你一畢業就加入創業公司,最可能的結果是,接下來幾年你都工作得非常辛苦,然後公司悲慘地失敗了,你失業了,不得不又去另一家創業公司工作。
如果你真的想去創業公司,應該首先找一家大公司幹上幾年,攢一點錢,積累一些經驗,然後精心挑選一家創業公司,再去實現自己的夢想。
在創業公司工作,一般情況下,你遇到的都是創業者。他們大多數人沒有能力在兩年後帶你;而在大公司工作,你遇到的都是其他大公司的人,他們中很多人將來有能力帶你或者幫你介紹工作。
十二、溝通技能是最重要的職業技能
前面說過,工程師被僱傭,不是因為會編程,而是因為能夠創造商業價值。所以,你得讓人們相信你能創造價值,這是幫助你找到工作的最重要的能力。這種能力與你真的能創造多少價值,實際上聯繫不是很緊密。很多情況下,你向別人展示的是對你能力的一種期望,而不是你當前的能力。
所以不要時刻說技術,因為技術只是工作的一種手段,價值才是你的武器。
最後關注技術的同時 不要忘了關注自己自身能力的提高。這一行都應該有面對時刻失業的準備,因為大部分的的危機來自於體制外的工作當成了體制內。
最後小結:
1 普通人為了達成某個目標,需要捨棄一些東西,捨得捨得,有舍才有得。
2 職業生涯早期有機會去大公司大平台,還是要去大公司見見世面。很多事情不是一蹴而就的,如果能力不夠可以採取曲線救國,只要最終能達到目的就好。
3 技術是根本,沒有技術你就沒有錢。技術又不是全部,因為你很難搞一輩子技術。
4 眼光和機遇很重要,機遇可遇不可求,但是機遇來了,眼光不夠沒有做出相對準確的預測,做錯了選擇,那也是很傷。
5 學歷和起點不是問題,其實能力和眼界才是程式設計師核心競爭力,大廠不一定就是鐵飯碗。
6 人都需要學習,並能不斷敢於挑戰自己,才能離成功幾率越大。所以還是老老實實學點技術,別YY了!
最後,開發這麼多年我也總結了一套學習Java的資料,如果你在技術上面想提升自己的話,可以關注我,私信發送領取資料或者在評論區留下自己的聯繫方式,有時間記得幫我點下轉發讓跟多的人看到哦。