1. 程式人生 > >從軟體公司的異同點講起,聊聊未來的程式設計師該如何選公司和謀規劃

從軟體公司的異同點講起,聊聊未來的程式設計師該如何選公司和謀規劃

    過了年以後,新的一輪春招又要開始,於是一個迫切的問題就擺在廣大計算機相關專業的畢業生面前,那就是,找工作時該如何挑選公司?該如何避坑?

    在本文裡,作者就將以一個有多年校招經驗的IT技術面試官的身份,和大家聊聊這方面的話題,同時還會在此基礎上再分享些職業規劃方面的經驗。

1 剛畢業的大學生一般做什麼活?

    不少的未來程式設計師對即將到來的工作有著無限的憧憬,但可能會有更多的畢業生會擔心,是否能勝任未來的工作?他們的擔心其實不無道理。

    1 不少大學課程可能更偏重於理論,在軟體開發方面的課程寥寥無幾,而對一些自動化等相關專業的畢業生而言,可能相關的課程就更少了。

    2 對於很多畢業生而言,不瞭解公司的組織形式,軟體專案組的構成,以及軟體開發的日常工作,由於不瞭解,所以就不知道未來能否勝任。

    3 對很多大學生而言,接觸到的軟體開發專案都是學習專案,比如畢業設計或課程設計,可能未必能親身經歷過一個軟體開發流程。

    但這種擔心其實可以不要有,因為很多公司對新招來的程式設計師畢業生期望並不高,具體而言,對於零工作經驗的軟體方面畢業生,平時需要乾點什麼活呢?

    主要是跟著當前專案學,做些基本的增刪改查工作。每個專案組用到的技術不同,有spring系列框架,有hadoop大資料框架,或者是python,但如果有剛畢業的員工入職,在基本的培訓之後,會給些範例程式碼,讓照著寫。比如會讓模仿訂單模組的增刪改查程式碼寫個風控模組的。具體再拆分下,還可以分為如下的任務點。

    1 配置環境,比如在自己電腦上搭建pycharm,idea等開發環境,再搭建mysql或oracle客戶端,再配置些jenkins,jira等環境,只要人勤快些,肯請教,肯學習,這些工作一般也沒問題,大不了就嘴甜些請些前輩幫忙即可。

    2 環境搭建好以後,就從svn或git上拉下程式碼,然後結合各種環境變數讓程式跑通,這塊問題也不大,大不了也是請教人的事情。

    3 後面就是仿照著寫程式碼裡,在這個過程中,可能會遇到各種新的技術,比如呼叫的API不熟悉,各種引數不熟悉,各種框架不熟悉。但可以這樣說,哪怕是一個有5年經驗的老手入職到一個新的公司,也會遇到類似問題,因為軟體方面的技術太多了。所以在剛開始的工作中,軟體相關的畢業生一定得多學,其實就是多百度多問多照著人家的程式碼寫,而且這種新技術絕對不是高不可攀的,每個程式設計師都是這樣過來的。

    4 對剛畢業的大學生而言,寫程式碼絕對不是唯一的事,還包括測試,參加各種(需求評審框架設計和程式碼評審)等會議,排查問題,以及專案上線。 

    畏懼來自未知,在這裡針對即將畢業的軟體方面的大學生,描述了未來可能的日常工作。這裡不敢說,你一定能適應,一定能勝任,但對於大多數畢業生而言,只要付出必要的努力,多學習,多請教人,甚至多加班,一定能在短時間裡勝任這種工作。

2 相似的日常工作,相同的專案組構成形式,和相同的專案開發模式,

    軟體公司有不同種,但對於這些不同的公司而言,專案開發模式,專案組的組織形式和在其中的日常工作大致相同。日常工作已經在前文裡描述過,這裡就說說剩下兩點。

    先說專案組的構成,專案的規模一般不同,但大家別把部門規模等同於專案組的規模。比如一個部門有50人,甚至更多,但一般在部門裡還會分成若干個專案組。

    比如作者工作過的一個部門叫“線下服務部”,有60人左右,在其中分為線下收單,搜尋服務,前端專案,app專案等若干的專案組。在大多數公司裡,每個專案的規模一般不會太大,一般也就10個人組成,一般有一位專案經理,若干位程式設計師,若干位測試構成,對於一些專案組,可能還會引入前端設計,資料庫管理和運維等崗。

    專案經理的作用是對外接需求,然後根據需求制定開發週期和釋出週期,然後再用需求設計,詳細設計等工作,把業務方面的任務拆分成一個個開發任務,再分配給程式設計師。然後再確保或督促程式設計師在規定的時間內完成開發,然後再測試通過後,把程式碼部署到產線上。在有的專案組裡,專案經理往往還擔任著技術負責人的角色,不過也有在一個專案裡再配置一位負責技術的架構師。

   在專案組裡最常見的角色就是程式設計師,也就是各位即將要從事的,程式設計師除了要開發以外,一般還要和測試人員溝通問題,和其它組的程式設計師溝通介面設計和除錯等事項,如果再高階點的話,最好還要等排查和除錯各種線上問題。

    而在專案組裡,一般會配置測試人員,大多數情況下,會有資深的程式設計師兼任,比如某位熟悉業務和熟悉技術的程式設計師在開發之餘還兼做測試。

    大多數的專案組就是由專案經理和程式設計師構成,在部門裡有專門的資料庫管理團隊和運維開發團隊,以及前端開發團隊,這些團隊為這個部門裡的所有專案開發團隊服務,當然如果有需求,專案組還會額外配置前端或資料庫開發等職位。

    而對大多數公司而言,專案開發和釋出的流程大致相同,而且當前一般都採用的是敏捷開發模式。

    1 每個專案開發和釋出週期為1個月,當然也可以是1個半月或2個月,往往在年初,會定好當年的釋出日。

    2 在每個釋出日的開始階段,各專案組從業務方等渠道接各種開發需求,這往往有個截止日,比如開發週期開始後的一週後,就不能再接新需求了,如果再有,如果緊急,可以適當調整任務,如果不緊急,可以移到下個開發週期。

    3 接到任務後就各種會議各種開發,比如通過架構設計會議,定好開發架構,通過詳細設計會議定好模組,通過介面會議,定好和其它組的介面,什麼都定好以後,就開發,開發時遇到任何問題,就自行或討論解決,當然開發也有個截止日期。

    4 開發好的程式碼會提交測試,測試一般分為模組測試和同其它組的聯調,一般測試以及對應的修改工作會在釋出前的一週前做好。

    5 最後就是釋出,往往在釋出日是最緊張的,各團隊依次把程式碼部署上線,如果有問題,先排查原因,然後對應方得趕緊解決。

    在一個開發週期的末尾,把當前週期的程式碼釋出上線後,就開始下個週期的工作,如此迴圈。

3 不同的公司型別和不同的專案型別

    雖然對軟體公司而言,專案的開發模式和專案組構成可能差不多,但對於不同型別的公司和不同型別的專案,程式設計師在裡面的體驗大相庭徑。在本人的藉著談轉正感想的時機,再聊聊外企和網際網路公司的工作體驗這篇文章裡,就給出了外企和網際網路公司的不同工作體驗,在這裡就將更加詳細地說說相關的差別。

    1 對廣大畢業生朋友而言,比較適合的是大的網際網路公司,比如阿里系的,騰訊,百度等,或者拼多多等。在這類公司裡,節奏一般比較快,比如外企裡幹一個月的任務,在這種公司裡往往一週(甚至更短)就要幹完。在這種公司裡,在一個專案開發週期裡,隨時可能插入新的任務,比如遇到問題了,就得趕緊修復,而且面臨的技術挑戰也比較高,比如需要應對高併發和高資料壓力的挑戰,而且所用到的技術也會比較新,比如會用到大資料,機器學習或分散式元件。當然可能加班也工作壓力也比較大。

    在這類公司裡,可能個人提升比較快,錢也比較多,但對應的,人可能就會比較辛苦。

    2 第二類是國企或比較傳統的公司,在這類公司裡,可能任務開發週期比較長,用的也是比較穩妥的技術,其它特點大家可以自行想象。

    3 還有就是外企,目前外企的吸引力可能沒之前那樣大,但外企由於一般規模比較大,而且文化多元,依然是個比較好的平臺。在外企裡,可能人比較輕鬆,但可能技術提升的速度就沒有網際網路公司來的快了。

    4 或者是一些創業公司,在其中,由於成本等的關係,可能需要一個人同時掌握多種技能,對畢業生而言,可能在其中也能接觸到各種方面的技能。

    而對於專案型別,對廣大畢業生朋友而言,尤其需要注意外派和外包公司型別的專案。

    外包公司就是一個公司沒有自己的產品,然後從其它公司接各種外包的活,或者從日本等地接各種活。在其中主要是定製化開發,比如對方給某產品裡某個功能模組讓開發,在這種專案裡,可能用到的技術比較單一。

    相對於外包公司而言,還有一種就是人力派遣公司。比如某公司和畢業生簽好協議,然後把他派遣到其它公司裡。在這類專案組裡,人員一般分為正式員工和外派員工兩種,可能這兩類員工乾的活差不多,但地位和薪酬未必相同。

4 不能妄自菲薄,去哪些公司得慎重

     在介紹完公司和專案情況後,這裡針對軟體相關方面的畢業生而言,給出具體的建議。

     對各位來說,好歹也是大學生,所以也是有一定的挑選餘地的,對於如下的公司,大家需要慎重些。

     1 有些公司可能以招工為名,然後巧立名目,讓你掏錢培訓。這其實是變相的培訓班,哪怕大家即使要再通過培訓班提升下自己,也可以找些比較正規的和比較有名氣的。

     2 人力外派公司,就把你外派到甲方公司做專案。這時你要看外派協議,如果外派到大型公司,或者給錢比較正規,那麼這對畢業生朋友也不失為一種選項,但如果外派協議比較苛刻,或者多層轉包,或者甲方公司不正規,那麼就要慎重的。

    3 或者去幹其它專業的活。比如計算機專業的畢業生做開發是正常的,做測試也行,做產品設計或軟體方面培訓老師也能說得過去,但如果去做銷售或者業務員之類的活,那麼可以說,你之前讀的書對你未來的工作幫助不大,而且如果這樣,後面再要回轉到軟體行業,那可能就比較吃力了。

    4 可能會暴雷的公司,比如有些p2p公司。這種公司可能存在跑路風險,這可能對剛走上職業生涯的畢業生同學而言,會存在不小的汙點。

    5 創業公司或規模比較小的公司,這種需也需要慎重。倒不是所有的此類公司都會存在風險,但公司規模小,或者初創,後期可能會存在資金和運營等方面的風險,一旦出現公司倒閉現象,對各位而言,可能就會在簡歷上落下“工作幹不長”等不良記錄。  

5 短時間之內如何提升自己的能力,從而能進到心儀的公司

    所以相對而言,對廣大軟體方面的畢業生而言,應該可以關注如下的公司。

    1 網際網路大廠  2 外企  3  規模比較大的公司 4 或者一些是獨角獸企業 5 或者可以考慮以外派身份進大公司 6 或者可以考慮一些中小型的軟體公司。

    畢業生一般是從大四開始找工作,找工作的時間範圍一般是從大四剛開始的9月到來年的5月。哪怕之前你沒接觸過任何軟體開發的專案,如果你在這段時間裡比較上心,依然有機會進大公司,或者是好點的公司。具體該怎麼做?

   1 一般大四都有實習,就趁著實習的機會,真實地幹一個軟體專案,別的不說,好歹體驗下真實的軟體開發流程,以及針對具體的業務需求,做些真實的增刪改查的事情。

   2 然後就把這段經歷,以商業專案的形式寫入簡歷,注意別寫成學習專案。當然如果大二大三幹過軟體方面的活,比如幫老師幹過,或者自己在外面幹過兼職,也可以寫入簡歷,總之簡歷中,商業專案經驗越多越好。

   3  儘量經營一個能展示你技能的平臺,比如利用這段時間做個公眾號,或者到技術網站發表若干成系列的文章。這些文章未必要描述過於深刻的技術,甚至點選量都不需要搞,但在面試時,你能以此。

   4 在此基礎上,到網上搜各種面試題,筆試題和演算法題,總之第一要有專案經驗,第二面試時能說出相關專案經驗。

   做到上述四點,畢業生給公司的印象是,第一至少有半年相關專案經驗,第二熟悉基本的開發,外帶些責任心強和學習能力強等的熟悉,這足以幫助到畢業生找到公司了,而且能找到的公司應該可以有500人以上的規模,且業務穩定,足以能幫助畢業生開始良好的職業生涯。如果再加上名校因素,或者拿過程式設計的獎,或者能通過公眾號等證明自己的能力,甚至更有可能在校招裡直接一步到位進到大公司。

6 莫欺少年窮,進大廠也就2,3年的事

    各大廠每年校招的名額畢竟有限,而且也不是所有的軟體相關畢業生都能一下子進大廠,但只要上心,對廣大畢業生朋友而言,工作2,3年進大廠不是什麼難事。本人在進大廠也就這回事,工作後2到3年進大廠操作指南這篇博文裡就給出具體的建議。

    1 哪怕你進的是小公司,或者是外包外派公司,首先你得通過半年時間裡,做熟基本的開發工作,並瞭解軟體開發的基本流程。

    2 不能光侷限於本職工作,更不能得過且過,在做好本職工作後,還得關注測試和專案釋出等事項。

    3 多解決線上問題,因為通過排查問題最能提升自己的技術和分析解決問題的能力。

    4 多關注些值錢技能,比如分散式元件開發技術,或者機器學習深度學習相關技術。

    5 工作後,更得通過寫部落格等方式來證明自己的實力,最好再在某個方面出版本書。

    其實能做到上述幾點,哪怕你剛畢業時能力一般,且畢業後公司一般薪資一般,在2,3年後至少能做到工資大漲。

7 總結和預告:本系列更關注於簡歷,面試和招聘問題

    本文面向廣大軟體方面的畢業生,介紹了專案開發的日常工作和在不同種公司裡幹專案的體驗以及發展前景,並在此基礎上給出了在短時間內快速提升自己的建議。總之一句話,只要努力,不管在什麼階段,總能有收穫。

     本人有長時間的技術面試官經驗,所以將在後繼博文裡,成系列地面向程式設計師,講述簡歷,面試和招聘相關的事項,敬請大家關注。    &n