—— 你以為我每天上班就是為了幾個臭錢麼!?
—— 是的,你說對了……
IT是一個有些讓業外同行羨慕嫉妒恨的行業,統計資料來說平均薪資應當是僅次於金融行業的,遠高於其他傳統行業,有一倍甚至數倍的差距。一線城市的一箇中高階程式設計師,可能已經是某些傳統行業公司高管的薪資水平了。概率上來說從業IT,確實是一個讓寒門子弟鹹魚翻身,改變人生的靠譜途徑。
鍋叔的從業過程中,走過各種型別的企業,也遇到很多有志於投身IT行業的同學,諮詢入行問題。工作中也實際遇到過很多非科班入行乃至轉行加入的同事。於是決定水一篇,把一些經驗、見聞,以及軟體開發行業的內部崗位分工情況,給大家做下分享。
一、常見Q&A
1. 做軟體是不是要求高學歷?
進大家都想去的公司需要,如果只是想加入軟體行業,在一般公司謀份差事,實際是不需要的。一些高薪“大廠”,因為收到的簡歷太多,為了提高篩選效率,會設定硬性的本科985,211條件。而多數的公司是沒有如此挑剔的資本的。期望招聘的都是計算機相關專業,統招本科。而實際投來的簡歷都是各種培訓機構,民辦、成教,活兒也總是要有人幹,也只能面對現實,看經驗能力為主。
2.是否要計算機相關專業畢業?
也不必須,我遇到過的有高中畢業上了個達內,黑馬之類培訓班入行的,有做海員做到3副改行,每天中午吃飯一瓶啤酒的:-),有學英語專業自己考計算機四級的,有之前賣服裝,想改行當測試的……。條條大路通羅馬,只要信仰堅定。
3.英語和數學不好,能做程式設計師麼?
鍋叔小時候就常聽到這樣的說法,恰巧也不太擅長數學,英語,曾經深為憂慮。後來發現工作中,很難用到小學範圍外的數學知識-_-|| 。當然對數學和英語的要求也不是空穴來風。大概在之前的認識中,計算機更偏向科研領域,程式設計師都偏向科研人員,目前的狀況,實際上絕大多數開發人員開發的是應用,解決的是工程問題,而不是科研問題。
因此它們的權重取決於你工作的領域,如果要做演算法,機器學習,遊戲引擎這種,那數學是很必要,如果是做進銷存,圖書管理等資訊管理系統,基本就是小學應用題水平夠用。分工細緻的公司中,演算法工程師和開發工程師是不同的兩個崗位。
4.自覺不是很聰明,能做軟體麼?
對任何職業來說,天賦都很重要,有時決定了你能夠到達的最高高度。但勤能補拙在很大範圍內是適用的,還到不了拼天賦。不夠聰明問題不大,謙虛好學更加重要。
5.如何才能找到第一份軟體開發工作?
對於半路出家的同學,找第一份工作通常是最難的,只要有了2-3年的工作經驗,後續的問題往往是找多少錢的工作,而不是找不找得到。
常見的解決方法是報名培訓班,保證安排工作的那種, 學成之後(當然要好好學)可能會被輸出到合作單位,也可能有就業指導老師,幫你出謀劃策,虛構一份已經有2-3年工作經驗的簡歷-_-|| ,指導你如何面試。培訓機構也會有模擬專案,讓你瞭解實際工作中一個專案是如何開發的。靠譜的培訓班和好好學習很重要。
另外一個方法是,自己寫一些作品進行展示,web開發的可以自己做點網站之類,參與點兒開源專案,最好精緻一點,有點深度,以便展示自己的技術能力,也可以增強自己的自信心。鍋叔在面試初級人員時,如果對方有自發出於興趣,編寫過東西,會是很大的加分項。
6.是不是經常猝死,傷亡率很高
-_-|| ,去內卷是大勢所趨了,情況應該會越來越好。即便沒變化,選擇也還是很多的,不一定要進996的網際網路大廠。賺錢和生活要自己平衡。
7.除了程式設計師,還有哪些崗位,分別工作內容是什麼?
開發軟體的是一個團隊,並不是一個人,而且團隊的分工是日趨細化的,除開發外, 另外還有,需求,測試,運維,演算法等主要方向。後面會做一個簡要概括。
二、軟體行業崗位簡介
1. 需求分析&產品經理
負責輸出需求文件的人員。產品經理雖然帶著經理兩個字,但擁有較大自主權的大產品經理也是少數,多數只能決定功能的實現方式,無權決定功能去留。例如大老闆或者產品總監說,我需要開發一個聊天工具,要能加好友,能發文字,圖片,能語音,能視訊。之後就會由需求分析人員或者產品經理落地為具體的軟體介面,明確好友介面怎麼顯示,怎麼新增,發語音怎麼操作等。
個人覺得,初級的需求人員要求不高,主要要求是善於溝通,能理解產品需求(如加好友,發語音的意思),能夠使用原型繪製工具(畫軟體長什麼樣子的草圖),基本就可以勝任。到了高階階段沉澱的主要是對特定行業的瞭解,如醫療資訊化,消防資訊化的組成和流程,直播軟體,社交軟體都有哪些玩兒法,怎麼運營等。
2.UI設計
負責定義軟體的外觀,一個軟體好不好看通常體現這個人的水平。鍋叔一直覺得,這是一個對美術有一定要求的崗位,受過美術訓練的同學對顏色,構圖的感覺,遠強於普通人。而且必要的時候還具備手繪能力。主要的要求是能夠繪製效果圖,工具可能是PS?瞭解一般UI規範。
從事平面設計的同學是可以比較快上手的,只需要額外多考慮下程式的動態性(選單的多少,內容的數量長短,有別於一張靜態圖片)。也遇到過沒有美術基礎的UI,感覺強於互動邏輯,視覺效果上還是要差些。
3.開發
根據產品原型與UI效果,實際編寫交付軟體的人員,即狹義上的碼農。日常工作主要是用鍵盤碼程式碼,要具備程式設計能力,能夠開發完成leader分配的開發任務,並保證質量。程式設計可以自學,可以通過專業院校,甚至培訓班速成。不同的平臺屬於不同的工種,如常說的Java程式設計師,.Net程式設計師 ,Android程式設計師。初級開發通常只要求能夠完成一個平臺的一般功能開發。高階開發則會對廣度和深度有更高要求。
4.測試
負責驗證開發人員工作成果正確性的人員,檢查是否按照需求原型的要求實現了功能,是否按照UI效果圖,實現了外觀效果。需要編寫測試用例,可以理解為計劃測試的內容和期望結果。聽起來雖然比較簡單,其實測試工作是具有系統的測試理論的。因為輸入難以窮盡,bug難以窮盡,需要兼顧成本限制。按測試方式和範圍的不同分為功能測試,效能測試,自動化測試等。功能測試比較基本,通俗說就是試試好不好用,掌握一定的測試基礎理論即可勝任。效能及自動化測試,需要更多的學習,以及一定的程式設計能力。·
5.運維
職責為伺服器管理維護,生產系統執行監控,運維工具編寫等。初級的運維人員通常要求對伺服器作業系統的使用比較熟悉,能進行常規的配置賬號,防火牆操作,能完成常規服務的搭建如web服務,ftp服務以及伺服器管理等工作。監控運維要求通過運維工具監控生產環境軟體系統的執行狀態,檢測異常,並及時預警,通常需要有監控工具使用能力及指令碼編寫能力。開發運維則要求有開發能力,可以自行編寫較複雜的運維工具。
最後,心動不如行動,水到這裡,週末愉快~!