谈“技术含量”的问题
最近又從離職同事那里聽到這樣的抱怨(原因),說做的事沒有技術含量。想一想,從事車載軟件開發這個行業快8年了,這個話題似乎從來沒有停過。我自己曾經也為自己做的事是否有技術含量而苦惱過,今天就專門花點時間聊一聊。
為什么會覺得沒有技術含量?
真正思考過這個問題的人很少。簡單粗暴地概括,大部分人(我所遇到的全部)都只是覺得,“這個事我會做了,所以沒有技術含量”。也就是說,他們只是不愿意用已經會的方法,做曾經做過的類似的事。這可以理解,人們都不喜歡做重復的事。但現實確實是,大部分的工程師的工作,都是用已經掌握的技術,去做相對熟悉的事。因為
我們是在做工程,而不是做研究
雖然我一直覺得“軟件工程”相比起其它的工程而言,是愧對“工程”兩個字的,但是畢竟我們是在做產品,而不是在做科研。做科研中失敗是常態,做產品如果也經常失敗,那公司就完蛋了。那么怎么算“成功”?就是在規定的工期內用可接受的成本完成了滿足質量要求的產品。要達到這個目標,就要求
一、盡量采用成熟的技術
工程師們(程序員們)要對軟件所涉及的技術比較熟悉(知道什么地方有些什么坑),并對要開發的產品相對比較熟悉(有行業經驗)。只有這樣,產品才相對有可能在要求的工期內完成。(說話,很多的加班其實是由于技能和經驗不足造成的)。如果一個產品涉及到的技術有20%是這個團隊的成員所沒有掌握的,那么會有80%的概率出問題(工期要超,或是成本要超)。
二、細劃分工,提高效率降低風險
5個人干半年的活,只要有可能,就會安排10個人做3個月。問題域被細分了。這樣每個人做的事相對比較窄,很多程序員只做一小部分,沒有對整個軟件的把握,不知道自己做的這一塊是做什么的。所以也往往覺得“沒有什么成長”。另外,細分的結果是使用工作簡單了。舉個例子,舉個例子,做SSL的通信協議是比較難的(粗暴地說,比較有“技術含量”),但在工程中往往不是安排一個人把SSL通信協議做一遍,而是安排多個人去做,某個人完成RAS算法,某個人完成ASN.1編碼,某個人做X.590的支持,某個人做DES等等等……問題細分下去之后,每一個小部分會比原來要容易很多,于是參與的人就覺得,沒有什么“技術含量”了。(是的,細分下去看,所有程序不都是if else for嘛?)
這就是“工程”的特質。不同的公司會因為各種原因情況稍有變化,本質上是類似的。
難道工作就沒有什么樂趣和挑戰性了嗎?
當然不是!
正如前文所說,軟件工程雖然號稱“工程”,與傳統工程相比卻還有很多差別。一是因為軟件的邊際成本很低,一旦完成,就可以無限地復制,所以不會有真正意義上的“重復”地生產,軟件開發本身是一個創造性和實驗性并存的過程,它本來就需要試錯(測不準的程序員)。也因為如此軟件工程師能力的“度量”是個很大的問題(創造性是很難度量的)。因為很難知道,某個功能,一個“合格的”工程師應該花多少時間寫完,寫出來的代碼量應該是多少,這樣的代碼在質量上,可維護性上,擴展性上表現如何。遵守流程以及使用熟悉的技術能只在一定程度上保證項目能做到及格。雖然如何精確定義優秀的工程師是很難的,但項目要想做到出色,優秀的開發工程師確實起決定性作用。這種工程師對新的技術和手法感興趣。他們盡量在能控制住風險的情況下,采取一些新的方法和工具來提高效率,嘗試新的設計來提高代碼的維護性和擴展性。這是讓軟件開發工作充滿樂趣和挑戰的部分。
軟件技術發展日新月異,而且學習的來源非常廣泛,所以,有上進心的程序員們可以用很多辦法學到很多新東西(開源項目,博客,書,等等),然后在工作中去嘗試自己學到的東西用來提高效率,掌握不同技能的程序員之間的效率差別可以成十上百倍(所以有高手和菜鳥)。在軟件開發的領域,高手幾乎都是靠自學、實踐最終領悟得道的。在這部分程序員看來,手頭上的事總是有新辦法可以做,新工具可以嘗試。并且在這個過程中,工作也越做越好。同樣的事,有非常多的方法做,他們從不覺得不會再有進步了,因為有無數的東西可以學,學會之后實踐到工作中去。
真正對技術感興趣的人,反而很少會為“沒有技術含量”這個問題而煩惱。因為他知道所有的問題都存在著更好的解決,只是看你有沒有興趣去找這樣的解法。覺得工作沒有技術含量的人往往是這樣的:期待別人來教自己,從不主動學習和思考。所以在我看來,在軟件開發中,“技術含量”的問題大多數時候只是個偽問題,只是一個借口而已(有的人意識到了,有的人沒有)。真正熱愛技術的人在離職時也很少用“沒有技術含量”這種籠統的方式來表達,更多的是已經非常清楚自己下一步想做的是什么,他覺得在哪里才能得到更好的環境去做他想做的事。
不是“技術含量”的問題,那是什么問題?
從上面我們知道,“是否有技術含量”的問題其實和他們是否真心想做技術沒有多大關系。深一層地追究,其實他們有意或無意中,真實想的是:“這個事我已經會做,我要掌握點其它的知識,用來提升自己的價值(也就是,讓自己在市場上保值或是升值)”。不信?試著想一下這個問題:“給你一份工作,月薪2萬,每年漲薪15%,保證終身雇傭,工作內容是每天把各大網站的IT新聞收集起來發給經理”,你是否愿意接受這份工作?如果愿意,那么你根本就不在意“技術含量”這個事兒。你是在乎“錢”。
這沒有什么不好意思承認的,追求好的生活天經地義。那么大家自然會關心
什么能力是值錢的?
市場上稀缺的才可能是值錢的。
這點大家都很清楚。十年前非常流行“程序員是吃青春飯”的這種說法,現在要少一些了。那時所謂程序員們所做的事都處在行業鏈下游,需要的技能大多數沒有多少門檻。新人也很容易就能掌握,談不上稀缺。隨著行業的發展,這個狀況逐漸在發生變化。也就越來越需要一些高端的人才了。這些人才大概會有下面這些特點:
1. 在某些領域有比較豐富的經驗(業務和技術方向)
新人一般學了一段時間之后都會覺得“這也不過如此”,但有經驗的人都知道,“其實水很深”。這種過來人的閱歷在項目中是非常重要的。有這種經驗的人比較不容易犯錯,也不會輕視可能出現的困難。另外,他們的抗壓能力也比較好,遇到之前沒出現過的問題不會慌了手腳或是束手無策。他們大概會知道還有什么辦法可以嘗試,有什么人可以求助。每個領域,都有一些很特殊的問題,至少要經歷好幾個項目才會有所把握的經驗。擁有這些經驗的人在對風險的控制能力要強得多(最直接的結果就是加班會少)。在設計的前期也能預見性地解決大部分可能出現的問題,而避免在項目后期疲于解決bug的情況。而且每個項目都會有幾個很難解決的bug,需要相當的技術和經驗才能搞定。
要做到這一點,需要長時間在某個領域的積累,不通過遇到和解決大量的問題,是很難得到提高的。
2. 有較強的學習能力
前面說過,程序員們幾乎不會做真正重復的東西。學習能力對于軟件開發來說無比重要。這一點大家都很清楚。學習能力來自哪里?一是獨立和積極地思考。這一點其實非常重要,這直接影響到學習的效果。二是基礎好。現在想來,大學學的那些課程,都是非常重要的。因為快速地學習能力絕對是基于這些基礎的。三是經驗,舊有的經驗往往能加快新領域的學習。會C#再學Java,就不再需要花同樣多的時間了。
3. 帶團隊的能力
這一點幾乎不需要展開說。但確又是不少人心里不太愿意承認的。特別是不善溝通的技術人,往往在心里看不起那些技術并不是最好,但溝通能力、計劃能力方面很平衡而當上Leader的同事。但現實就是,一個團隊除了極少一兩個人能在技術上給團隊帶來很大價值之外(他們能解決99%的程序員不能解決的問題),其它程序員的水平差別并不會顯著到不同的量級上。能帶一個團隊(幾個到幾十人)做好一件事,反而是比較稀有的能力。
所以,其實那些以所謂沒有技術含量而離職的人,很多人后續發展并不好,因為他們總是歸咎于環境,不主動實踐和思考,并且因為不夠穩定而在從事過的事方面都沒有深入的積累,反而使得自己沒有多少“特別的價值”可言。
很是可惜。
時間比較倉促,很多點沒有能展開寫。以后有機會再談。
---- 總會有一個人需要你的分享~! 唐風: www.cnblogs.com/muxue ------
?
轉載于:https://www.cnblogs.com/yyxt/p/4980577.html
總結
以上是生活随笔為你收集整理的谈“技术含量”的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第二百三十一天 how can I 坚
- 下一篇: Python带你轻松进行网页爬虫