新手程序員必備十項技能
拉勾導讀:初出茅廬的你帶著仍殘留墨香的畢業證書踏上工作崗位,馬上就被書上沒寫的規則和各種繁雜的日常事務來了個下馬 威。這樣的故事實在是司空見慣,編程工作也不例外。沒有幾個學生能 100% 為自己的第一份真正的工作做好準備(開發人員求職神器:URL)。如果你不想成為其中之一,請學學以下這 10 項無需手把手指導就能學會的基本技能:
1、版本控制系統(VCS)
VCS 也許是計算機課程最大的疏漏。這些課程光記得教如何寫代碼,但卻往往忘記教學生如何去管理代碼。每一個程序員都應該懂得利用 Git 或 Subversion 有效地創建 repository(倉庫),編輯與提交代碼,進行分支與合并,了解項目工作流。
2、學會寫作
身為程序員要寫的不只有代碼。你還要寫項目的發布說明,給版本控制寫提交消息,在系統里面寫漏洞報告。這些和許多地方都需要清晰有效的文字交流—但這個技能計算機科學卻很少強調。
3、正則表達式
正則表達式本身就是一門語言,每一個現代程序員都要擅長。每一門現代語言都支持正則表達式或者有相關標準庫。如果代碼需要校驗某字符串是否含有 5 個字符、1 個破折號和 1 個數字,你應該馬上就能寫出 /^[A-Z]{5}-\d$/。
4、庫的使用
現在已經是 2014 年,所以沒人需要用正則表達式從 URL 析取主機名了。因為每一門現代編程語言都有執行常用功能的標準庫。
程序員需要明白,那些經過開發、測試和調試的代碼通常要比自己重新寫的代碼更好。更重要的是,無需編寫的代碼實現起來要快得多。
5、SQL
很多人的 SQL 都是在工作中學會的。數據庫怎么會是選修課呢?有不用數據庫的嗎?
把 數據存進平面文件的時代已經結束了。一切東西都要進出數據庫,而 SQL 則是存取數據的語言。這是一門說明性語言,不是程序語言,所以用它來解決問題時需要新的思考方式。每一個程序員都應該了解數據庫標準化基礎,能夠執行 SELECT(及 INNER、OUTER JOIN)、INSERT、UPDATE 和 DELETE。
6、會用IDE、編輯器及CLI工具
只懂用鋸子的木匠永遠也無法出師,所以計算機專業畢業的人只懂 Notepad 或 pico 令人驚詫。編程工具幫助操縱代碼及其他數據,令程序員生活變得容易。所以每一個程序員都應該知道命令行、shell 腳本、find、grep 及 sed 的使用。
7、調試
每一個程序員都應該知道利用交互式調試器或在代碼中點綴一些輸出語句來調試程序。通過逐步求精來跟蹤問題的能力實在是太重要了。
8、防錯性編程
錯誤總是難免的,哪怕是明星程序員也不例外。失控是世界的常態,出錯毫不奇怪。防錯性編程正是理解了這個事實。如果東西不會不出錯,我們就不會檢查文件打開成功與否,不會檢查客戶 ID 是否合法數字,不用測試代碼是否允許正確。
程序員需要知道,編譯器告警是有用的工具,可讓我們生活得更舒適,而不是要避而遠之的麻煩事。每一個程序員都應該知道為什么每一個 PHP 程序都要這樣開頭:
1set_error_reporting(E_ALL)
每一個 Perl 程序都要寫上這些語句:
1use strict; use warnings;
9、團隊協作
很少編程工作會讓你自己一個人完成,如果你經常這么做,智力會受損,表現會變弱。你的代碼必須與別人的交互或者混合。再有才的程序員,如果無法與別人協作,都會給項目造成負面影響,并迅速成為組織的負擔。
10、利用現有代碼
在學校的時候,每一次作業都是一個新項目。但現實世界不是這樣的。對于剛工作的人來說,所接到的第一項任務往往是修改代碼漏洞。然后,再在現有代碼庫的基礎上為現有系統增加一個小功能。設計新代碼那是幾個月后的事情,如果幸運的話。
做程序員,僅僅成為碼農是遠遠不夠的。下面是云和數據整理出的CTO、高層執行人員和HR共同認為程序員必備的13項技能和軟技能。
1****、Java**
2016年,開發人員掌握Java絕對不會錯。Java能力是目前為止被高層執行人員和HR譽為最頻繁的追捧技能。Java已被證明是當今市場中高度可移植和寶貴的技能。
2****、大數據**
大數據相較于去年繼續擴大,而且在這幾年里也沒有任何放緩的跡象。開發人員必須有全面的商業智能和分析產品,機器學習工具和其他可以轉移、存儲和匯總大量數據解決方案的知識。只有這樣,他們才能幫助公司存儲,交互和分析大數據,以便于做出更好的業務決策。
3****、掌握全棧**
現在許多頂級公司都在尋求可輕松應對各種技術和平臺的全棧開發人員。
4****、涉及開發運營**
熾熱的就業前景并不是考慮在簡歷中添加開發運營經驗的唯一原因:開發運營實踐會讓你成為一個更優秀的開發人員和一個更有價值的合作者。
開發運營實踐還可以提高團隊凝聚力和業務敏捷性,這是一種能讓企業加速領先一步的邊緣技能。
5****、多樣化**
相比前幾年,現在的企業希望尋找更豐富的技能。Java和C#仍然占據市場部分份額,但是當你去看那些在上次經濟衰退之后成立的公司,那么你將看到各種類型的語言需求:Ruby on Rails,Python / Django,Node.js,以及在出現的函數式編程語言中,Scala是最普遍的。
6****、使用源**
特別是自由職業者,指向GitHub上的代碼,能夠表明你的工作完成得很好,并通過了同行審查。
如果公司本身正在探索GitHub以便于添加技術到他們的堆棧,那么你不上誰上?
7****、敏捷**
敏捷開發應該成為2016年程序員的必備技能。熟悉敏捷和精益方法——將大項目分解成小故事,確定優先排序,適應變化,并提供最大價值。
8****、安全性**
根據研究報告,去年深受安全漏洞之害的公司知道2016年什么技術對他們而言是最有用的。
隨著云計算使用的增長,安全性和合規性越來越為組織所擔憂,這導致了對安全,合規,治理和數據管理專家的需求熱潮。
9****、移動開發**
移動開發者備受追捧,尤其是那些可以廣泛發布自己作品的開發人員。要成為一個成功的移動開發者不是通過特定的技術技能來實現的,而是通過商務頭腦實現的。
編寫代碼僅僅是項目的第一階段。知道如何推廣移動app,如何吸引和留住客戶,才是成功的推動力。
10****、云計算**
當涉及到云計算中的職業機會時,它并不全部意味著工具。TEKsystems說,企業希望招聘到有業務能力,包括項目管理和與供應商談判能力的開發人員,并且這將成為一種持久的趨勢之一。
此外,我們需要更多“推動業務”類型的技能,但不太需要戰術工作,因為云供應商現在越來越對此負責。
11****、物聯網**
現在的物聯網不但作為了一種雇傭需求,也是一種天才工程師想探索的技巧。
而且這不再只針對嵌入式系統工程師,你即使是一個Java開發人員,也可以做這個。協議如Wi-Fi Halo,以及可穿戴和IoT設備開放輕量級SDK的出現,為開發人員不再局限于顯示器和構建針對周圍事物和環境的東西打開了很多機會。我們還可以看到由于這些工具的問世,很多硬件/軟件開始協同設計。
12****、有說服力**
客戶管理技能是很重要的,特別是巧妙但令人信服的推延能力,這在發布的替代品更有價值的時候很有用。也需要能夠教育客戶關于軟件性質的口才,引導他們選擇可更好滿足他們長遠目標的做法。
13****、變通**
如果你是團隊中有著10x生產力又全棧的開發人員,那么對你的服務要求比供給更多。但是,如果你還是新手或正在轉行,那么正確的態度可以讓你的面試—留用—錄用過程大不相同。
作為一個優秀的團隊成員,應該成為解決方案的一部分,而不是問題的一部分,愿意伸手幫助團隊成員,有一種志愿服務理念,并努力提高對團隊有價值的產品或文化。