本人做爲一名軟件工程師和培訓師,曾經被不少人問到過「編程到底難不難學?」「我做爲一名非計算機專業的學生,能不能學會編程?」「我能不能經過自學編程找到一份程序員的工做?」這樣的問題。絕不誇張的說,這樣的問題在個人職業生涯當中被問過不下100次。我深深的感受到,不少學員對這個問題確實是很關心的。在網上搜索,能夠看到相似問題的答案五花八門,我以爲有必要針對這個問題寫一篇文章專門來闡述一下個人我的觀點。
我這篇文章重點闡述4個問題:
1、非計算機專業的學生能不能學會編程
2、學編程須要什麼基礎
3、報班學仍是自學
4、學習要避免哪些錯誤想法html
個人觀點很是明確:只要你想學,確定能學會!我在培訓學員的過程當中,遇到過不少非計算機專業的學生經過學習轉型爲軟件工程師拿到高薪的例子。可能有人會說,那都是別人成功的例子,放到我身上未必能夠。而我認爲:只要你的智商可以達到正常人水平,你確定也能學會!爲了說服你,那麼咱們來作個小實驗。
咱們找一段英文文章,不用太長,300個單詞左右就能夠,而後隨意用一款翻譯軟件,或者是從網上找一個在線翻譯的服務,把英文文章粘貼進去進行翻譯操做。你會發現,經過計算機翻譯出來的文章能夠說是「亂七八糟,詞不達意」!這說明什麼?其實說明至少目前來看,計算機對咱們人類的語言理解程度極低!那麼咱們再來思考一個問題:計算機能不能理解編程語言呢?答案是確定的:能!那麼,計算機可以準確的理解編程語言,但不能理解咱們人類的語言,說明了什麼?說明咱們人類的語言遠比編程語言要難!而咱們能夠反問本身:咱們既然可以掌握很難的人類語言,爲何不能掌握相對簡單的編程語言呢?因此個人結論很是確定:只要智商達到正常人的水平,誰均可以學會編程!區別只是有的人學的快一點,有的人學的慢一點,但通過必定時間的訓練,最終都能掌握這項技能。
有人表示不服,會說:我曾經學習過編程,我認爲編程語言比人類語言更難!你憑一個小小的實驗就能證實人類語言比編程語言更難,豈不是很荒唐?咱們能夠來對比一下兩種語言的難易程度。人類語言所表達的不只僅是「咱們想幹什麼」,還包括咱們的思想和感情,好比喜怒哀樂這些情緒,而且,一樣的一句話,放在不一樣的背景下,所表達的意思也不盡相同。好比說,你考試得了滿分,有人對你說:「你太棒啦!」這顯然是在誇獎你。可是,若是你把一件很是簡單的事情辦砸了,有人對你說:「你太棒啦!」這顯然是在諷刺挖苦你。一樣的一句話放在不一樣的環境中,其意義也大不相同。
咱們再來對比一下編程語言:編程語言根本沒有感情因素在裏面,也不涉及到什麼「一語雙關」這樣的語言技巧。編程語言的功能只是用來描述「咱們想讓計算機幹什麼」。說的更直白一點,編程語言其實就是各類指令的集合。咱們只須要把這些指令正確的組合在一塊兒,計算機就會乖乖的按照咱們的指令給咱們辦事,你也徹底沒必要要擔憂計算機會把咱們的意思理解錯了。固然,想要準確的掌握編程語言,是須要通過必定時間的訓練的。
從專業角度來說,目前很是火的「人工智能」技術領域,有一個很是熱門的探索方向就是計算機對人類語言的識別,稱之爲「天然語言處理」,簡稱NLP。這是在最近十多年纔開始被各國專家大力研究的一個高難度課題,而且研究纔剛剛取得初步成果。而讓計算機識別編程語言,早在四五十年前就已經實現了,而且已經作的很是完美,這足能夠證實人類語言遠遠比編程語言更難。
說到這裏,可能有人會問:「爲何我總以爲學編程比學人類語言更難?」問題出在哪裏呢?是你的心態發生了變化!想一想你當初學說話是什麼樣的心態?用一句俗語歸納就是「無知者無畏!」你當初學說話的時候,是在1-2歲左右,你根本不擔憂能不能學會,你只管大膽的表達,你不怕別人笑話你吐字不清,你不怕別人笑話你詞不達意...總之,你當時不懂得害怕,你只是努力的表達你內心想說的話。而如今呢?你懼怕學不會,懼怕投入了大量時間和精力卻無所收穫。你顧慮太多,瞻前顧後,失去了那種「無所畏懼」的精神,從而致使你遇到點困難就退縮了!所以我建議你,想學就大膽的嘗試,遇到困難一往無前,一遍學不會再來一遍!通過一段時間的努力,你確定能掌握一門編程語言。程序員
弄清楚爲「什麼非計算機專業的學生也可以學會編程」這個問題以後,不少人都要問:若是我如今開始學習編程,須要哪些基礎知識?網上有不少人在回答這個問題的時候,提到要學習計算機基本原理、計算機網絡基礎知識、二進制計數法等相關知識。我我的認爲,只要有高中學歷做爲基礎,就能夠開始學習編程,至於網上提到的那些基礎知識,能夠在學習過程當中慢慢補足。
爲何要強調高中學歷做爲基礎呢?我我的認爲:學習編程須要必定的邏輯思惟能力,還須要必定的數學和英語的底子,而高中學歷者所具有的思惟能力和掌握的知識,就已經具有了學習編程的基本條件。只要具有了這個基本條件,就徹底能夠開始學習編程了。至於網上有人提到的「計算機基本原理、計算機網絡基礎知識、二進制計數法」這些基礎知識,其實也能夠看做編程技能的一部分,等須要用到這些知識的時候,有針對性的補習一下這部份內容也爲時不晚。面試
關於怎樣學習編程,其實無外乎有兩種選擇:一、報培訓班二、自學。我我的建議在有時間又有錢的基礎上儘可能選擇報培訓班學習。爲了不作廣告的嫌疑,我在這裏不提任何一個培訓班的名稱,只是簡單的說說爲何報培訓學習效果更好。
首先,培訓班通常都有成熟、明確學習路線,這樣你不用在學哪些課程上花太多的時間進行篩選。其次,培訓班有專門的任課老師教學,有問題能及時問老師,這樣也能減小你搜索問題答案的時間。第三,捨得花錢報培訓班的學生每每都是真心實意的想學編程,因此同窗們相聚在一個班級裏一般都有一種比較好的學習氣氛,你們在一塊兒有問題也能互相討論,你會感受到「不是一我的在戰鬥」,這樣的學習氛圍會讓你在遇到困難的狀況下堅持下去,同時,同一羣人一塊兒學習也能擴大你視野,你經過與同窗的交流能學習到一些你所不知道的技能和知識點。第四,在培訓班多認識一些人,積累一些人脈關係也有利於未來在職場互相幫助,萬一當年你所在培訓班的某個同入職了一家不錯的企業,可能還會把你也推薦給這家公司,要知道:公司內部員工的推薦比本身從網上投簡歷能得到更大的面試機會。
固然了,培訓班也不是白上的,畢竟須要金錢和大塊的學習時間。若是實在沒有條件報班學習,也能夠選擇自學。那麼應該如何自學呢?個人建議是:前期以看視頻爲主看書爲輔,後期正相反,以看書爲主看視頻爲輔。爲何是這樣的思路呢?前期建議你們以看視頻爲主,是由於通常視頻課程講解的比較淺顯易懂,咱們很快就能入門和上手,容易產生成就感,從而能讓咱們更好的堅持下來。反過來,而一開始就買一本厚厚的專業書開始啃,一則是容易讓咱們感受到學習壓力很大,二則是有些專業性的術語會讓初學者難以理解,致使學一段時間就想放棄。
當學到自我感受已經入門的水平,能夠選擇以看書爲主,以看視頻做爲輔助。這是由於已經入門的狀況下,咱們應該提升學習效率,而書本上對理論知識的講述每每更加精煉,不會參雜題外話,單純的講述知識點,因此看書學習效率更高。
另外,若是學到了必定程度,就要動手作一個階段性項目。好比說:學了Java的JDBC之後,就能夠作小的信息管理系統,實現對錶格數據的增刪改查。這種練手用的階段性小項目,仍是建議你們跟着視頻去作,成功率更高。不管是報班學習仍是自學,堅持是最主要的。不少人每每是開頭幾天興致高漲,甚至晚上也加班加點,但堅持不了幾天,就鬆懈了,這樣確定不能學有所成。
另外,對於初學者而言,那些「上課認真聽講、作好筆記,下課勤練習,及時複習」之類的話就很少說了,那是你學習態度的體現。在這裏分享一條可操做性極強的學習技巧,那就是「加註釋」!具體作法是:在照着例子敲完一段程序,而且能正確運行的狀況下,給代碼添加註釋。註釋加的越詳細越好,這麼作看起來彷佛是有點畫蛇添足,但其實這種作法會在不知不覺中提升你閱讀程序的能力。由於你所添加的註釋表明着你對程序的理解,因此加註釋會迫使你更認真的閱讀和思考程序,堅持這麼作一段時間以後,你會發現,你閱讀程序的能力會有顯著提升!算法
在學習編程的過程當中,任何人都不免走入一些誤區。下面就來講說學習過程當中的一些典型誤區,以及如何避免走入到這些誤區當中。
首先,我認爲最典型的一個錯誤想法就是「項目結束就算完成任務」誤區。咱們在學習過程當中,爲了加強實戰能力,確定會作一些軟件項目。當項目完成以後,誰都會有一些成就感,這是很正常的。可是,不少人錯誤的覺得:項目可以成功運行了,本身的任務就算完成了。其實否則,多數人在作項目的過程當中,爲了實現某個功能,上網查詢了大量資料,而後按照網上所說的方法一步步實現了這個功能。可是,爲何要按這樣的步驟去實現?其中的原理是什麼?有沒有更優化的解決方案?對於這些更深層次的問題沒有本身的思考,只是知道項目能夠運行了。所以,若是真的想實實在在的提升本身的水平,就應該在完成項目以後,對項目中所涉及到的知識點進行一番仔細的研究和梳理,儘可能作到對整個項目的每一個細節都瞭如指掌。卻不知,不少成功的企業,在作完一個項目以後(不只僅限於軟件項目)都會專門對這個項目進行「覆盤」,回顧項目中的每個環節,總結成敗得失。那麼做爲一個學習編程的學員,更應該如此。
第二個典型錯誤想法就是「不注重底層知識」。不少人在學習過程當中,都追求使用最早進的工具,包括一些第三方框架,而忽略了對底層知識的研究。追求好的工具和框架這自己並無錯,畢竟這些工具和框架可以大幅度提升開發效率。可是,永遠都不能忽略對底層知識、基本算法的研究。若是隻是單純的追求使用好的工具和框架,不注重底層知識和算法,無異於一個足球運動員只追求好的運動裝備而忽略了對球技的練習。長此以往,你會感受到很疲憊也很茫然,由於新的工具和框架層出不窮,其更新速度也堪稱突飛猛進。但若是你的基本功很是紮實,對軟件底層原理理解很是透徹,你對那些層出不窮的框架和工具就不會有那種「學不完」的壓力,甚至有一種拿來就能用的感受。
第三個典型的錯誤想法就是「但願一勞永逸」。不少人把學習看做是一種壓力和負擔,這也不難理解,畢竟學習總比看電影、聽音樂、吃美食要累。若是你開始學習編程以前抱的想法就是「學習到必定程度,有能力拿到本身指望的薪水以後就不再用學習了」,那我建議你乾脆不要學編程,由於如今不管是哪一個行業,技術、思惟方式的更新都很是快。一旦停滯不前,確定會被時代和行業所淘汰,軟件行業在這一點上體現的尤其突出。千萬不要以爲從培訓班畢業,找到了一份不錯的工做就是你奮鬥的終點,其實,這只是你一個新的開始!編程
以上僅是我我的的一點淺見,但願本文對想學習編程的同窗有所幫助。網絡
如想系統學習Java編程,能夠點擊連接https://edu.51cto.com/lecturer/2256836.html觀看我在本站的視頻課程,有問題也能夠加入個人QQ羣291839907一塊兒討論!框架