程序員的核心競爭力是什麼?
是否應該專註於一門技術?還是應該對多門技術都有涉獵?
IT技術種類太多,太過於繁雜了,選擇技術方向是否是一個值得考慮的問題呢?
Know who care what.
這裡我們暫且將程序員定義為真正的會輸出代碼方案的人,而非SA或者架構師。 那麼談到它,得先了解「程序員」是個啥職業。通常在大部分團隊中,程序員會作為技能型的人才加入,基於特定的需求提供技術解決方案。而在一些Geek團隊中,程序員也會作為創造型的人才,為產品提供更「潮」的功能和創意。這主要是由團隊氛圍和自身的主觀能動性所決定。
所謂術業有專攻,作為技能型人才,當涉及到具體技術方案的時候,大家第一個想到的就是你,因此良好的溝通,豐富的經驗都會是非常寶貴的特質,但從技能型角度來看,我認為最為重要的是經驗。
這也同時涉及到了另一個問題:是否應該專註於一門技術?還是應該對多門技術都有涉獵?
這對自身知識技能的深度和廣度有關聯。針對一門語言來說,通常其知識構成如下:0)數據結構 + 演算法
1)語法 + 基礎庫2)常用框架的掌握3)模式和最佳實踐4)性能調優、Debugging、Troubleshooting等5)可以對語言深入吐槽,比如Python為毛搞GIL,.net 4的GC線程咋就不一樣
我加了第0條,是因為不論是在哪門語言下,其理論基礎是一致的。
而縱觀1、2、3:* 語法和基礎庫很容易通過短期培訓或者項目歷練掌握。* 框架的學習成本通常也不高,但是它的學習通常可以帶來很多益處,最直觀的就是:學習框架源碼可以讓你規範自己的代碼、提高代碼質量。
學習多個框架可以開闊自己的視野,了解方案的差異化,以其找到適合自己項目的方法。* 而模式和最佳實踐,則需要靠自身多學多練多積累,被最終被歸納到自己的思維體系中。在現有的語言體系,除非你從C家族跳到LISP去,否則跨語言的遷移成本很低,主流語言都已經是OO系,縱使你真的做了C ~ LISP的轉型,當熟悉了函數編程的「妙處」,一樣可以遷移過去。要不為啥有句老話說,計算機界的大牛,最終都去玩LISP了咧。但最要命的是第4、5點。疑難雜症的解決,靠的是1%的靈感和99%的經驗。而這類經驗很多和平台特性有非常大的關係,因此只有在一個平台下沉浸相當多的時間,才可能成為專家。同樣,除非對一門語言有深入了解(如看源碼,反編譯),才能做到剝開現象看本質。而像前幾年JAVA和.net天天互相吐槽的日子(我承認),只不過是外行看熱鬧罷了。最後,從流行趨勢上看。除非是偏門語言,否則在TIOBE TOP10上的,你學哪一門,深入下去都有好收成。最重要的是:學一門語言,盡量多寫多練,讓自己的能力和技能可以達到至2、3的水平。而非僅僅會用。技能型崗位,只有你形成了系統化思想,並在某一領域有自己讀到的見解,才能在團隊中有一席之地,否則永遠只是一個團隊中可替代的編碼機器。
Ps:個人建議可以學習一門工程語言(如JAVA,.NET,C++),再學習一門輕量級的動態語言(Python,Ruby等),不同的語言反應了其設計哲學,可以幫助自己理清思想的脈絡。1、多年的研發工作所鍛煉的那種邏輯思維能力、探索能力、解決問題分析問題的能力。這一點將不僅僅使你受益於面臨新技術、新問題之時,甚至也能使你受益於非技術工作。
2、對某一項技術的積累。其實程序員最有價值的不是學了多少項技術,多少並不重要,重要的是你對已經學了的技術掌握得有多深。學十樣技術,各個都不精,還不如學一樣技術,但是十年如一日地鑽研,練就對這項技術深厚的功底。我對這一點的理解,其實跟程序員不程序員沒有太大關係
任何技術職業都一樣,那就是別人不會的,我會別人會的,我精比大多數人高一個檔次,就顯出你自己的競爭力了核心競爭力?技術、方案靈活使用,熟悉所在行業及相關行業的行業流程、公用的業務需求。到了最後應該是多門都有所涉獵而主要精通一二三四門,只是看你所走的線路是先深度再廣度還是先廣度再深度。精力有限,技術方向當然是要有所選擇的。不過在同一個領域裡,有好多基礎的技術都是相通的,倒是一些新的概念、理念各不相同,需要關注。
應該多涉及一點 然後精通某一門或兩門
一門技術肯定是不夠的 而且如果你如果想坐到一個公司總監的位置,那必須是前端和後端都要懂 因為很多時候必須你來確定技術方案
行業經驗;表達技巧。
推薦閱讀:
※为什么至今还没有没有一个图形化的系统,只需要我们写写画画或者点几下鼠标就能实现编程?
※考上計算機二級什麼水平,能開發操作系統和桌面應用不?
※如何評價王垠這個人?
※遊戲中非人形boss碰撞到底是怎麼處理的?
※用vim打開後中文亂碼怎麼辦?