閱讀本文大概須要 5 分鐘。程序員
做者:黃小斜面試
做爲一名典型的非科班程序員,我在學習和工做一段時間以後,發現了本身跟科班程序員仍是有不少的的區別,不論是思惟上仍是作事風格,以及對待問題的解決方式,都感受有些差強人意。算法
今天我就給你們梳梳理一下,科班成爲相對於非科班程序員,他們的優點到底在哪裏?編程
第一點那就是算法能力。爲何要強調這一條呢,大公司老是喜歡考算法,平時有些項目也有可能用到算法,總之算法就是衡量一個程序員的一把利器,做爲非科班程序員,大部分時間,學習算法都只能靠本身,做爲計算機領域的一門難題,沒有老師指導,沒有一些好的學習方式,那麼你在算法上面的成長,可能也會不多。後端
對於算法問題,即便是科班的程序員每每都很難以去克服,更別說咱們這些半路出家的程序員了,記得我當初連數據結構,都不知道是個啥,這種狀況下去學習算法,真的就是扯淡,學會了數據結構以後,發現也只是學了皮毛,等真正接觸一些面試算法題,才發現計算機的世界原來如此的博大精深。網絡
除了算法以外,更要命的東西來了,就是計算機基礎,傳說中的四門專業課,我相信這幾門課程也是橫亙在科班程序員和非科班程序員之間的一道巨大鴻溝,科班程序員基本上在大學期間都有機會接觸到這些基礎課程,而非科班程序員幾乎是沒法接觸到這些課程的。數據結構
通常來講,他們可以掌握一門語言,而且學會了如何作項目以後,就以爲本身已經學的不少了,不少非科班的程序員都不知道,對於程序員來講,這些做爲根基的東西也是他們必須須要學習的,好比計算機網絡,網絡編程的基礎,若是咱們搞不懂計算機網絡的話,你甚至連電腦上的ip配置都搞不清楚。併發
操做系統則是不少編程語言可以運行的基礎,無論你用的是Java,仍是C++,你都要對操做系統有必定程度的瞭解,操做系統是你理解各類高級編程語言的基礎,特別是後端編程,咱們須要考慮內存管理,考慮併發編程,考慮網絡編程,等等等等,這些東西都必須跟操做系統打交道。編程語言
數據結構就不用說了,剛纔咱們在算法裏已經提到了。還有一門很重要的課程就是計算機組成原理。你不知道計算機組成原理,你就不知道電腦究竟是怎麼啓動的,更不知道CPU究竟是如何運轉的,若是你連這些都不知道,等之後你真正遇到這些問題時,再讓你從頭學起,豈不是天方夜譚?學習
想到這裏,我不由兩行清淚,個人計算機基礎其實也是靠本身惡補補回來的,雖說如今也只是個半桶水,可是也已經算是非科班程序員中作的還算不錯的了,即使如此,我仍是常常在遇到實際問題時,由於對計算機基礎掌握得不夠好而走彎路。固然了,非科班程序員也有本身的優點。
好比說,理解事情的能力和解決問題的能力,我以爲科班程序員,他們可以成爲一個程序員,是一個很是正常的事情,他們按照本身的原有軌跡去作,畢竟這是他們比較熟悉的領域,而且可以把它們作好,非科班程序員就像是半路殺出個程咬金,可能你不知道他以前的積累是怎麼樣的,你只知道他如今能夠通面試。
這裏不得不提一點,就是非科班程序員的跨界能力,非科班程序員大可能是自學成才,其實要跨界成爲一個程序員,仍是比較有挑戰的,畢竟咱們能夠在他們身上看到更多的可能性,他們更加有變通的思惟,至少在自學這個方面,他們更加有話語權。
因此非科班程序員每每更有自學能力,他們有很好的技術視野,知道如何去擴展本身的技術邊界,畢竟他們知道如何很快的切換到另外一項技術,或者是另外一個領域。對於非科班程序員來講,這種跨界的嘗試會更加的輕鬆一些。總結了以上這幾點,我以爲科班程序員和非科班程序員並無什麼天壤之別,只不過你們開始的時候不同。
大學的時候因爲學校緣由,我沒有選擇計算機專業,可是我在讀研的時候,仍然選擇了我當時想要選擇的計算機專業,也有不少人是爲了高薪進入互聯網公司,也有不少人是由於本身的熱愛而開始自學。無論出於什麼目的,不論是如何開始的,非科班程序員和科班程序員在將來的道路上都會逐漸的越走越近,最終他們之間可能沒有太大的差距,我想他們各有各自的優點,也各有各自的缺陷,你說呢?