技術知識決定一個人能做的技術的層次忘衍。基礎的知識有
- 計算機組成原理
- 計算機操作系統(tǒng)
- 網(wǎng)絡原理
- 數(shù)據(jù)庫原理
- 計算機圖形學
- 編譯原理
- 數(shù)據(jù)結(jié)構
- 離散數(shù)學赎离、人工智能等等很高深的理論知識涣澡。
在這些基礎知識之上,就是軟件開發(fā)語言添吗、類庫、框架份名,面向過程碟联、面向?qū)ο蟆⒚嫦蚍盏染幊趟枷虢┫伲軜嬎枷氲鹊取?/p>
這些知識不一定會影響你現(xiàn)在的工作鲤孵,但一定會影響到你的格局,那格局肯定也會影響到你自身的發(fā)展辰如。我碰到過有些理論很差的人裤纹,但技術在公司內(nèi)也是有些影響力的,因此丧没,他們對技術原理就很不屑鹰椒,甚至為自己不懂太多理論而擅長實戰(zhàn)而沾沾自喜。這些人會對那些懂理論呕童,但動手能力一般的人顯示出由內(nèi)而外的鄙夷漆际,但是他們卻不知道那些既有基礎知識,也有動手能力的高手做出的東西是怎樣的夺饲。就像我本人奸汇,實在是想不通施符,那些技術天才是如何開發(fā)出一個數(shù)據(jù)庫、操作系統(tǒng)這樣的軟件擂找。因此戳吝,如果你已經(jīng)發(fā)覺自己基礎不夠扎實,那么還是有空就修煉修煉自己的內(nèi)功吧贯涎!
作為在最前線 coding 的碼農(nóng), 在別人講解了二分算法的條件下, 能寫出這個二分算法難道不是一線碼農(nóng)應該具備的基本素質(zhì)?
一線碼農(nóng)難道不應該對一些基本的算法有所了解? 對常見的算法復雜度有所了解? 比如二分搜索復雜度為什么是 log2N.
很多人對算法復雜度的概念了解甚微, 面試前死記硬背, 但二分搜索的復雜度應該還是能推導出來吧, 沒讓推導快排啊(啊, 我自己貌似也忘記了快排復雜度的推導).
Reference:
討論:程序員高手和菜鳥的區(qū)別是什么听哭?
之前有一個候選人, Java 開發(fā)七八年經(jīng)驗了, 問 ArrayList, HashMap 怎么實現(xiàn)的都不知道.
還有一個印象比較深, 在 XX 做搜索, 面試職位也是開發(fā)啊, 結(jié)果落實到代碼就根本下不了筆.
還有候選人寫精通 Java, 結(jié)果連 GC 原理都不清楚, 還有什么熟練掌握 Vim, 結(jié)果連基本文本替換都不會, 有的會說精通 MySQL, 然而索引的原理也不清楚.
本文題目貌似取的范圍有點大, 本篇強調(diào)的主要還是 coding 能力, 不過對于一線開發(fā)者來講, coding 能力難道不是最基本中的基本嗎?
可能感覺大部分程序員都被大量的需求壓迫著, 被產(chǎn)品經(jīng)理催促著, 倉促地碼著繁瑣的業(yè)務代碼, 不斷的改著 Bug, 又引入新的 Bug. 業(yè)務代碼重要么, 當然重要, 但同時也還是希望我們不要拋棄一些基礎的東西, 多培養(yǎng)一下我們的編程素養(yǎng).
從一道面試題談談一線碼農(nóng)應該具備的基本素質(zhì)