① 程序員的困境
近日筆者采訪了幾十位求職內核程序員這個崗位的候選人。這些候選人均來自大的優秀公司——公司多以晶元或嵌入式OS
/系統而聞名。他們中的許多人都聲稱自己擁有至少10年的內核在職經驗。他們的簡歷非常耀眼——各種相關的項目,流行語和獎項
但大多數人卻無法回答一個很基本的問題:當我們調用標准malloc函數時,內核會發生什麼?
不要驚訝。當我要求其中一位候選人基於glib哈希函數編寫一個簡單的LRU緩存框架時,他一開始表示他從未使用過glib——這也在我意料之中——我給他展示了glib的哈希API頁面,並詳細解釋了API,然後在將近一個小時之後,他只寫出了幾行亂七八糟的程式碼。
我不知道其他國家的情況是否類似,但在中國,或者更具體地說,是在北京,這是現實。那些曾為大型著名外企工作多年的「高級」程序員往往在簡單、基本的問題上束手無策。
為什麼會出現這種情況?
我越是思考這個問題,就越是覺得問題的原因不僅僅在於他們本身,也在於他們工作的公司。這些公司通常會提供穩定的代碼堆棧,而且多年以來一直沒有產生顯著的變化。圍繞代碼的技術封閉了程序員的技能,使得他們只需要遵循現有路徑,而不必積極創新。如果你在這種代碼上工作了很長一段時間,同時沒有很好地與時俱進,那麼總有一天你會發現自己進退兩難——在團隊或公司內部,他們叫你「專家」,但卻無法在市場上找到同樣棒的工作。
這就是所謂的「專家陷阱」。日復一日,程序員夢想著成為團隊/公司內部的專家——然而,當這一天真正來臨的時候,卻是我們困住自己的時候。我們對現有代碼挖掘得越深,我們陷入的泥潭就越深。我們漸漸失去了從頭開始編寫完整項目的能力,因為現有的代碼是如此之穩定(如此之大,如此之有利可圖)。更糟糕的是,如果我們的主要工作就是維護現有代碼,那麼一段時間之後,無論我們閱讀和學習了多少代碼,都會發現,自己不會寫代碼了——即使問題簡單到如研究生院的作業。這就是程序員的困境:我們靠編碼為生,但培養了我們的大公司往往會破壞我們謀生的能力。
如何擺脫這種困境?
對於個人——
首先,要做自己的個人項目。你需要不斷地「提升自己」。如果工作本身不能幫助你提升自我,那麼找一些你想在個人時間解決的問題。這樣做有助於你學到新的東西。如果你發布個人項目,比如說在github上,那麼你就有機會認識那些能在你換工作時拉你一把的人。
不要停留在同一個團隊超過兩年。強迫自己換崗位,即使是在同一組織,同一公司中,這樣你就可以面對新的挑戰和新的技術。每隔18個月去參加工作面試。這不是為了跳槽,而是為了讓自己知道現在市場需求什麼,以及你該如何適應。
對於團隊/公司——
給予員工壓力和挑戰。輪換崗位,讓所謂的「專家」有機會擴充他們的技能。開啟新項目,用實戰來磨練大家。
定期舉辦黑客馬拉松。這將有助於建立一種擁抱創新和創造的文化。大家會因彼此而受到激勵——
「哎呀,那個傢伙能用24小時寫出這樣一個美麗的框架,我得加油了」。
② 如何才能修煉成一名不可替代的程序員,避免裁員危機
程序員,就是從事程序開發、程序設計、程序維護的專業人士。
作為一種專業性極強的技術性專業,程序員的工作難度非常高,只有專業技能水平高超的人才能在這個領域獲得良好的發展前景。……那些實力不足的人,只能被最終淘汰。
因此,要想在程序員這一行里成為不可替代的人,避免自己被淘汰出局的情況,就必須具備以下幾方面能力:
1,高人一籌的專業技能。
在職場上,要想確保自身生存,就必須具備一項專業技能。……要想確保自己不被淘汰,就必須具備高人一籌的專業技能水平。
因此,要想讓自己成為不可替代的程序員,要想讓自己避免被淘汰的情況,就必須確保自己的專業技能水平高人一籌。
2,強大的羅輯思維能力。
程序,是一個邏輯性極強的系統。
一個程序的各個部分之間、各項功能之間,都存在著極強的關聯,也擁有著非常強的邏輯關系。
因此,要想編寫出性能優異的程序,就必須擁有極強的邏輯思維能力。……這是確保自己擁有更強實力、確保自己不被淘汰的重要能力。
3,高超的數學水平。
程序的表象,是一段代碼。而其核心,則是數學模型,是具體的演算法。……只有具備高超的數學水平,才有能力編寫出演算法精妙、邏輯嚴謹的程序來。……這是自己具備更高水準的關鍵因素。也是自己高人一籌,不可替代的關鍵因素。
4,精通至少一門編程語言。
編程語言是程序員在編程時所用的工具。……只有熟練掌握手中的工具,才能讓自己編寫出優秀的軟體。……編程語言有很多種,一個程序員不可能面面俱到。……但是一個合格的程序員必須掌握至少一門編程語言,這就是自己工作時最得力的工具。……運用這個工具,自己就可以編寫出優秀的軟體,就可以獲得更好的業績,最終成為不可替代的優秀人才了。……自己也就不可能被淘汰了……
③ 程序員是做什麼的
程序員一般的工作是從事程序開發、程序維護。
程序員是從事程序開發、程序維護的專業人員。一般將程序員分為程序設計人員和程序編碼人員,軟體從業人員分為初級程序員、中級程序員、高級程序員(現為軟體設計師)、系統分析員,系統架構師,測試工程師六大類。具體工作職責如下:
1、負責軟體項目的詳細設計、編碼和內部測試的組織實施,對小型軟體項目兼任系統分析工作,完成分配項目的實施和技術支持工作。
2、協助項目經理和相關人員同客戶進行溝通,保持良好的客戶關系。
3、參與需求調研、項目可行性分析、技術可行性分析和需求分析。
4、熟悉並熟練掌握交付軟體部開發的軟體項目的相關軟體技術。
5、負責向項目經理及時反饋軟體開發中的情況,並根據實際情況提出改進建議。
6、參與軟體開發和維護過程中重大技術問題的解決,參與軟體首次安裝調試、數據割接、用戶培訓和項目推廣。
7、負責相關技術文檔的擬訂。
8、負責對業務領域內的技術發展動態。
(3)程序員維護戰擴展閱讀:
職業要求
一般的程序員都有四年的在專業領域的學習,需要一個在程序領域的學士學位獲得者,不論是數學方面的還是工程方面的都是可以的。
大約有20%的人在這一領域的計算機科學和工程學擁有更高的學位。還有很小一部分程序員是自學的,盡管一些專業性的學校或者綜合大學可以提供,但是也需要一些別的途徑來提供相關的人才。
盡管學歷是比較重要的,但是公司經常把重點放在應聘者的工作經驗上,很多剛從大學畢業的大學生雖然有引人注目的學位證書,但是他們找不到工作是因為他們缺乏經驗。
一個程序員雖然沒有正規的學歷,但是如果一個人擁有程序設計的深厚知識背景或者豐富的工作經驗的話,那麼他的機會要比有學歷的應屆畢業生大得多。
對於職業程序員,另外一個重要的方面就是,程序員需要不斷提升自己的業務技術,他的技術必須一直保持在一個較高的水平,並且要不斷發展,程序員也要尋找貿易的機會,要參加研討會,在周刊上發表文章和接受職業教育,這些使程序員在自己的領域中分級或者不斷並排前進。
④ 程序員這個工作,真的很吃香嗎為什麼呢
程序員這個工作真的很吃香,因為程序員的工資很高,就業崗位也很多,但是程序員這份工作很累。因為程序員的工資以及就業機會多,有很多人都會選擇做程序員,甚至有的人轉行做程序員這份工作。關於程序員這個工作,真的很吃香嗎?為什麼呢?以下是我的看法:
三、程序員這份工作很累
對於很多的工作來說,員工是不需要加班的,如果做完一天的工作就可以選擇下班,不需要留下來去做其他多餘的工作。但是,對於程序員來說,加班是非常常見的事情,因為不知道什麼時候程序就會出現bug,需要程序員去維護以及修改。程序員這份工作是很非常勞累的,所以如果選擇了做程序員這份工作就要做好加班的准備。
關於程序員這個工作,真的很吃香嗎?為什麼呢?以上是我的看法,你有什麼看法?歡迎留言。
⑤ 一個程序員要具備的基本素質是什麼
團隊精神和協作能力 :
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。
文檔習慣:
作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。
規范化,標准化的代碼編寫習慣:
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和糾錯,也有助於不同技術人員之間的協作。
需求理解能力:
作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。
復用性,模塊化思維能力:
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作。
測試習慣:
軟體研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
學習和總結的能力:
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就更加高了。但是學習也要找對目標,一些小coding fans們,他們也津津樂道於他們的學習能力,一會學會了asp,一會兒學會了php,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。
⑥ 什麼是程序員什麼是代碼
程序員所寫的代碼,是為某一特定程序或某一個應用程序所制定的編碼和內部測試的組織實施,使此應用或程序應能夠在程序員編寫的代碼中,實現各種功能。程序員(英文Programmer)是從事程序開發、程序維護的專業人員。一般將程序員分為程序設計人員和程序編碼人員,但兩者的界限並不非常清楚,特別是在中國。軟體從業人員分為初級程序員、中級程序員、高級程序員(現為軟體設計師)、系統分析員,系統架構師,測試工程師六大類。代碼又臭又長
我見過最長的方法是5000多行,那段代碼沒人敢動,只敢往下加 if else,每次需要改這段代碼的開發都戰戰兢兢,生怕出現什麼莫名其妙的bug。java 可是一門面向對象的語言,一個方法裡面有5000多行可以說是很可惡的事情了。我想一開始代碼長度可能沒這么誇張,是什麼導致這種結果的?一個是當初寫這段代碼的人本身寫的是直來直去的方法,一堆if else ;後面迭代的開發,面對這么長的代碼瞬間失去了從頭讀到尾的耐心,直接繼續在後面加 if else 迭代,最後這個方法就變成了一個縫合怪一樣的玩意。
好的 sql 可以很大程度上簡化代碼的復雜程度,但是太過復雜sql 本身就會給後來的開發人員造成閱讀困難,結果又是變成一條無人敢動的祖傳代碼,我想這應該是不少公司極度抵制存儲過程的原因之一。當然不少銀行應用開發還是大量使用存儲過程,存儲過程有用武之地的,但是一個又臭又長的存儲過程就等著變成祖傳代碼吧。當年我見到一個60多個join的sql,看到第一眼就驚為天人從此難以忘懷,當然那段sql也成了沒人敢去動的代碼了。
代碼邏輯不明
代碼邏輯不明所以是我們開發很容易去犯的毛病,是一個不致命卻煩人的毛病。在代碼上的體現是,邏輯判斷寫的比較反人類各種雙重否定是肯定,不把你繞暈不罷休。或者是寫起代碼來東一榔頭西一棒槌,讓人不知道你想幹嘛。導致這個的原因有可能是開發人員在需求理解上出現偏差,做到後面發現不對勁,再回去改又不大可能了,只能硬著頭皮往下寫,結果就是代碼彎彎繞繞;還有很重要的鍋是在產品經理,任意變更需求,想一出是一出,開發人員無奈只能跟著想一出寫一出。還用可能是開發人員方法或者類命名太藝術了,什麼四川方言拼音這種沒有十年腦血栓想不出的命名咱就不說了。就說那種國產凌凌漆式的無厘頭命名——這看上去是個刮鬍刀實際上是個吹風機,就這種不知道讓人說什麼好。
規劃代碼的核心思想
吐槽了一堆代碼規范問題,接下來我們說說如何去規范我們的代碼以及如何做到就算開發人員更換了,或者項目轉手給他人了,仍然可以讓後面的開發可以無礙的去閱讀代碼修改代碼。當然各個公司/團隊都有自己的一套代碼規范,比如項目的結構、代碼命名風格、代碼格式等等。不同團隊有不同的風格,但核心思想是大同小異的。接下來我就我個人的開發經驗來分享一下一些代碼規范的思想。
⑦ 程序員如何解決溝通沖突,避免互撕大戰
在一般情況下,程序猿可以和產品維護好日常關系,一起吃午飯,一起參加團建之類的,日常溝通順暢了,溝通產品的時候相對也好溝通一些,和不懂技術的產品講技術,對方可能也能聽的進去一二,也就能避免互撕大戰,大家撈的清閑了。
像那場驚天動地的程序猿暴打產品經理那場戰事中,據說就是產品經理提出了要求,去實現客戶端顏色適配用戶手機殼,面對這樣的需求,應下來就是給自己挖坑,因為這樣的功能肯定沒辦法實現的呀。如果這位程序猿和產品經理平時關系相處的好一些,大家能坐下來好好溝通
「兄弟,你這個功能不好搞啊」
「咋不好搞?」
「我跟你講啊,技術上,這樣那樣這樣那樣」
「噢,原來是這樣,還是你專業,聽你的,那就這個功能不要了」
溝通能解決的事情,這樣的結果,皆大歡喜。
⑧ 中國的程序員數量是否已經飽和或者過剩
程序員的數量是否已經飽和或者過剩?
任何一個行業,基本都是呈現金字塔結構。處於低端的人很多,越往上人才越少,很多大廠還不是喊著招不到人。
1、未來IT行業會持續發展,C端近幾年內用人需求會縮減,B端和高級產品端會加強,對人才技術會有更高的要求,高端技術人才的春天來了。
2、初級人員的確會更內卷。
3、35歲現象短期內不會得到改變或者緩解,會變成各行業普遍現象。35歲會變成一個分割線,變成貧富分化線。
4、油條崗位會變少,低端業務碼農,未來堪憂。