前景提要
- 很多初學者面臨的最多的問題就是程式語言的選擇問題,一旦你接觸程式設計,無論任何人都會給你提到一個問題,說你要選擇一門程式語言學習,才能在後續的計算機學習中取得成績,但是,每個推薦的人,又不會直接告訴你選哪門語言,就算說了,也會告訴你每門語言都有什麼好處,都適合做什麼,程式語言的火熱程度,程式語言的優缺點,程式語言的.....(一場大型的銷售現場),而其實初學者對於程式語言的選擇並不想要知道這些,他們一般會考慮的問題是哪個更簡單,哪個好學,哪個能讓我盜取別人的QQ號 .....
程式語言選擇面臨的問題
零基礎的理解可能不一樣?
- 在很多時候,你理解的零基礎和你老師的理解可能不一樣,你認為的零基礎是你對這個事物的認知還處於混亂,理解不深刻,無法憑藉已有的知識推匯出未知的答案,這樣描述比較抽象,那麼舉個例子,你覺得自己不會程式設計就是計算機零基礎了,你的老師認為你今天聽了一節計算機的課,無論是什麼,無論你學了多少,你會了多少,你能反饋出多少,你都不是零基礎,你不會寫程式碼,但是,你學了一節專業課,你就已經不是外行的人了,你不是零基礎,你是基礎差,大學老師往往認為大家聽了一次哪怕一分鐘,也是計算機專業的人了,不能說自己零基礎,但事實往往相反,很多人學了四年,也就掌握了一些計算題目的方法和一些專有名詞,其實對計算機的理解,計算機的應用,很多時候不一定比一些其他專業的人知道的更多,比如裝系統這件事情就有很多計算機專業的人依然不會,系統出了問題,學計算機的還要去花錢請售後師傅為他做個系統,這種情況也是常見狀態。
真的零基礎很多時候,是真的從小沒接觸,大學剛剛知道有這麼個事兒,然後,大學也沒有努力的自己加深理解,加深學習,只是靠老師在課堂上講講術語,講講計算,講講考試的,其實,寫不出程式碼,確實可以給自己貼上真零基礎,這是對於程式設計寫程式碼的零基礎而不是對於計算機操作的零基礎,畢竟你們打遊戲,看電影還是很熟練的!
真正初學者程式語言選擇面臨的問題
序號 | 問題 | 描述 |
---|---|---|
1 | 難易程度怎麼樣? | 這裡的難易程度,不是對已經有一門程式語言入門的人來講的難易程度,很多介紹的機構,個人,教授都是以自己已經會了程式設計的評價標準來衡量的,已經會了程式設計有了基礎的人看待問題的思維邏輯已經系統化了,跟真的零基礎的人理解事物的概念是不同的,雖然我是一個會程式設計的人,但是,作者進行了深入思考和回顧自身初學時遇到的痛點問題,進行了反向思維推導,來看待這個問題,作者的標準就是初學者是否具備計算機基礎知識,這個基礎知識就比較多了,並不是你會打個遊戲,你會看個電影,用個百度就是你有基礎知識了,基礎知識本身就很多,作者認為計算機專業最難的也是基礎知識,抽象的基礎知識很多資料結構,作業系統,在計算機領域都叫做基礎知識,但是,它們也是最難的,就算從事多年的計算機開發,依然需要反覆研讀和理解的基礎知識,所以,是否掌握基礎知識的評價標準確實是可以驗證你對程式設計入門的難易掌握程度。 |
2 | 環境配置是否複雜? | 這個問題真的是累哭了多少開始信心滿滿的初學者,本來懷著百分之二百的熱情來加入程式設計隊伍,結果一上來你不是教我怎麼寫出可以搞定一切qq賬戶的程式碼,而是來個一個莫名奇妙的環境變數配置,很多小夥伴滿臉黑人問號的問what,這就好比你本來去跟小哥哥/小姐姐去相親,結果去了不是相親,而是先講講財產怎麼分割,離婚後孩子歸誰一樣,讓人即莫名其妙又無可奈何,初學程式設計的小夥伴有多少人被環境變數搞得痛苦哀嚎呢?只有他們自己知道. 所以,一門語言是否有個複雜的(相對初學者)環境變數配置也是很多初學者痛苦的源泉,他們不想去做環境配置工作,因為經常出現一些他們無法搞定的問題,因此,這個問題也成為選擇學習程式語言的一個難度門檻. |
3 | 是否視覺化介面? | 這也是勸退更多初學者的一大難題,也是程式設計入門的一項基礎工作,一門語言一開始就用一個黑漆漆的執行介面,讓很多初學者都很畏懼,畢竟大家在多年的使用計算機的習慣中,已經被微軟的視覺化介面征服了,形成了使用視覺化介面的習慣,如果一門語言的開發是使用一個黑漆漆的執行介面,也會使得一些小夥伴迅速放棄,並自我催眠認為這門語言學起來好睏難啊! |
4 | 編譯器操作複雜度? | 很多初學者平時知識瀏覽瀏覽網頁,看看影片,對於一款專業的軟體的使用一般都很困難,畢竟很多人無法熟練的使用word排版,製作精良的ppt和生成優美的excel表格圖示,現在讓他們使用一款全英文的編譯器,對於那些英語不是很精通,不喜歡英語的初學者,一下就像一座大山一樣壓倒了他們對於程式語言的選擇,所以,編譯器是否操作複雜也是要作為選擇程式語言的一個重要引數指標. |
5 | 學習的時間成本? | 大家總是對很多事務存在著開始新鮮,久處厭煩的狀態,因此,能不能是一門短時間學會的程式語言,也是成為對於程式語言的選擇的一個指標,這個時間成本可以參考很多培訓機構的時間表,他們的官網或者諮詢會告訴你培訓多久能學會這門語言,一般的都是半年左右,壓縮了課程,每天要學習八個小時以上,這樣也會拖得很多初學者失去了昨日的熱忱,因此,能否快速的學會一門程式語言,也是成為了程式語言選擇的要素 |
6 | 相關性學習時間的長短? | 有些東西就會分散初學者學習主語言的注意力,這就跟你同時學多門課程分散注意力一樣,比如既學數學又學物理,對於理科思維好的人是錦上添花,但是,對於理科思維不那麼活躍的人來說就是痛苦,同樣的就是既學文言文又學英語,也是對於另一些人同樣的痛苦,這也會或多或少的拖慢一個初學者對於主要程式語言的學習,有時會起到促進作用,而其他的時候就是滯待作用。因此,選擇一門程式語言的時候,要去了解其要學習多少相關性的知識,這些相關性的知識可能跟當前學習的程式語言無關,比如學習Java的整套,除了Java還要學習MySQL,Linux,git,Redis,JSP .... 這些就跟學習Java本身是無關的,你不會因為不會寫MySQL而寫不出Java本身的程式碼,但是,你要學習建立一個網站,又必須學習MySQL,這就會分散你學習Java的注意力,因此,你要探究一個程式語言是不是存在眾多的分散你注意力的輔助語言,這也是一門語言選擇的條件之一. |
程式語言難易程度問題
形成程式設計思維的人和沒有思維的入門者的區別
- 對於已經入門的程式設計者來說,所有程式語言初識都是易於學習的,因為他的思維已經被程式設計改造成了適合程式設計的思維,他學習所有相關內容都會迅速的反應出相關的思維並進行相關的操作,這就像你要做9除以3,你能快速得到結果3,那麼,這件事你是怎麼做到的呢,是因為你背了99乘法口訣表,那為什麼你會99乘法口訣表,因為你學習了乘法,那麼你為什麼會乘法呢,因為你學習了加法,你知道3+3+3等於9,那麼再向前推倒,你在學習加法之前學了什麼,學習了數數,你能從1數到9,你知道數數,所以,你清楚加法,加法推導乘法,乘法有基礎口訣表,因此你能快速熟練的得到3,這個問題可能很多人沒有想過,或者沒有在意,人家問你,你就回答就是3啊,多簡單,而忽略了你的思維成長過程,而程式設計初學者就是那個可能剛剛用鉛筆練習寫1,寫了一篇的孩童,然後你問他,9除以3等於幾,你告訴他得三,但是,他無法做到再求出6除以2等於幾,因為他既沒有一步步的成長性思維,也沒有形成固化思維,他只能背會一個結果,因此,會程式設計的認為所有程式語言都很簡單,而入門者還沒掌握到規律,很多問題對於他們來說就是天方夜譚.
你無論跟他們講什麼簡單,他們也只是剛剛學會寫數字1,和數數,怎麼能強求他們給你高階計算的答案.所以,無論你覺得c語言是多好的入門語言,還是php是世界最好的語言他們也感受不到,就像一個人跟一個女生或男生處物件,他必然能說出這個人的優缺點,而對於沒跟這個人處物件的人來說,他完全感覺不到,他覺得這個人跟其他人沒什麼區別,都是普通的人而已.
語言難度問題劃分
-
這張圖應該很多選擇語言的初學者都看過,它的含義到底是什麼呢,含義就是越靠近底層的語言越困難,這個困難指的是對於人類的識別難度來說的,而越靠近上層的方向就會越簡單,這個簡單指的是人的理解和閱讀來說,比如最底層的機器語言就是一串0101,給你20個零一,你能迅速明白什麼意思,還是給你一個單詞Add,你更能理解其是什麼含義,這件事對於普通人來講就不言而寓了,因此,物件導向的語言,才成為更好學的程式語言,但是,很多語言在語法上也是互相借鑑(抄襲的),很多語法和格式也是類似或相近的,因此,一個人掌握了這個思維方式,他看其他語言長得像,那必然也是可以看明白的,就像有個人他們家族都有一個特色,左眼睛大,那麼,你遇到一個左眼睛大的人,在不考慮其他類似的家族的情況下,你首先會想這個人是不是跟左眼大家族有關係,因此,一門語言入門,就會很多門語言通用,比如最最經典的C語言,C++就是對C語言進行了借鑑,因此兩者在很多語法上是類似的,Java(另一個名字C++--)又是借鑑了C++,因此語法也是類似的,相近的還有Python/JavaScript/Php,因此,他們可以統稱為類C語言,這也是為什麼學校推薦學習C語言,你把他們借鑑的祖先都學會了,那你學那些兒子孫子,不也是手到擒來,因此,你會發現,那個C語言很好的同學,C++也會學的很好,Java也會很好,Python也會很好,而一個C語言學的不好的,其他語言一般也會很好,畢竟這些語言是一脈相承的,很多共同點,那麼你有一個點沒學會,那麼後期可能就在眾多類似的語言的相同地方栽跟頭.
-
程式語言的難易程度只是相對於人類來講的,比如你對這門語言的理解,跟你的生活是否相近,越跟你的生活相近,那麼你思考其他越不費勁,越遙遠,你理解越困難,但是,對於計算機而言,只有效率和空間的區別,而沒有理解的問題,所以,選擇程式語言的本身關鍵問題就是:
你個人能夠快速的理解的程式語言,就是最好入門語言
C語言並不適合所有初學者入門
- 這裡提出一個跟其他機構,學校和開發者相反的觀點,為什麼這麼講呢?因為很多初學者和入門者就是從C語言開始放棄的,一看C語言就放棄了,而且不是少數,是大多數,每年,每個班級,不通的專業,是入門C語言程式設計放棄的人數一定是大於C語言入門成功的人數,為什麼會發生這件事情呢,不是說這門語言很好嗎?很容易學習,很容易理解嗎?
究其原因筆者認為可能就像人的體質不同一樣,不是一門強大的語言,就一定能讓所有的人成為強大的程式設計者,初學者入門程式設計應該選擇的是適合自己的一門語言,而不是所有人都選擇一門語言.
C語言本身是一門強大經典的語言,這就像微積分是數學裡一個很好的概念和解題方法,但是,不是所有人都能學精通他吧,大多數人還是覺得它好難吧!同理C語言速度快,佔用記憶體小,語言靈活,語法簡潔,優點多多,但是,並不是所有初學者能夠一入門就領悟到這些,並且可以快速使用吧!
程式設計入門的前提條件是熱愛與興趣,並不是所有人都能對黑漆漆的介面產生百分之三百的興趣吧!
C語言適合基礎好的小夥伴學習,那麼,什麼是基礎好,這個標準是什麼呢?那大概就是在學習C語言之前要學習一些課程比如:資料結構,作業系統,計算機組成原理,演算法,程式設計,如果對上述知識或多或少掌握或知曉一些的小夥伴,確實看到C語言也沒什麼難度,但是,對於那些連操作word,excel都費勁的小夥伴,你讓他學習C語言真的是一種痛苦,因此,對於基礎課程掌握很好,概念通曉,原理熟知,計算快速的小夥伴C語言真的像它的優點一樣能夠閃閃發光惹人愛,而對於那些基礎不是很好的小夥伴可能要做一些其他的選擇.
程式=演算法+資料結構,如果資料結構理解的不透徹,對於c語言中的資料型別理解起來就很費勁,尤其是讓你對每個變數定義資料型別,那真的是讓初學入門者十分蒙圈的問題,因此,想學習好C語言,又基礎不好的小夥伴,在學習C語言的時候,其他是在學習四門功課:資料結構,演算法,程式設計和C語言,這樣入門的小夥伴多麼困惑啊!
c語言對於初學者難在哪裡?
難點 | 描述 | |
---|---|---|
專業術語 | 很多想要入門的初學者都會在這一步上徘徊很久,找到一門入門書籍,每個字都認識,放在一起就是不知道什麼意思,歸根到底就是專業術語的儲備不夠,就像你讀一篇英語文章,有你認識的單詞,有你不認識的單詞,何在一起必然你也很難連貫的理解整個句子的含義,熟悉專業術語就像理解眾多單詞一樣,只不過這次不是記住單詞,而是記住名詞解釋. | |
翻譯 | 很多初學者學了程式設計,但是,看到程式設計題目很難將漢字轉化為程式,究其原因就是難以將漢字的表達方式轉化為程式的程式碼形式,這個就像你讀數學題目,要找到已知量和未知量,而程式需要找到什麼是變數,什麼是值,在哪裡變化,而這種操作,本博主認為就是在翻譯自然語言到程式語言的過程. | |
資料結構 | 由於這門語言是一種強型別的語言,因此,你要想很好的使用必須能夠清楚的知道一個量到底是什麼資料型別,而這個型別就要學習一門課程叫做"資料結構",因此,學習前還要理解資料結構,才能很好的使用這門語言. | |
語法 | 語言號稱是語法簡介,但是,這門語言的語法靈活性很高,因此,變化的方式很多,很多初學入門者很難快速的找到語法規律,同樣一個題目,可能有多種編寫方式,而初學者對於這種變化是很難快速直觀的感受到的. | |
陣列 | 這個概念可以跟數學的集合概念相互映襯理解,同時還要有線性代數的基礎,畢竟陣列的很多操作都是在遵循線性代數的規律,線性代數學的好的小夥伴,在這裡還是能夠很好的駕馭 | |
演算法 | 這個概念在數學中叫做解題步驟,在計算機領域又進行了自己的定義和抽象化的描述,因為計算機的同一個題目很多時候,有多個解法,所以一般演算法是不固定的,這樣很多初學者就會產生困惑,到底應該怎麼做這個題目,一個題目可以用for迴圈,可以用while,可以用do while,那麼我該用哪個,也是初學者很困惑的問題 | |
記憶體溢位 | 這個問題也是經常遇到的,因為這門語言比較靠近底層,因此,需要研究記憶體的問題,就要學習作業系統這門核心課程,因此,很多初學者也是不甚理解 | |
指標 | 這可以說是C語言的靈魂也不為過,但是,指標的操作又涉及了很多記憶體,記憶體地址的問題,這些問題也是要理解一些計算機組成原理和作業系統才會更好的理解概念,因此,有這兩門的基礎,還是會更好的理解這個概念. | |
結構體 | 結構體本身就是在現有的資料型別不夠的情況下,自定義一個資料型別,這裡也需要有資料結構基礎傍身,你才能快速理解使用. |
- 以上就是筆者在入門C語言的時候發現的問題,當前抱著一本c語言入門的書籍,真的產生了上述的困惑,這裡分享一些,可能很多小夥伴還有其他的問題,歡迎討論,作為一個想要入門C語言的小夥伴,盡力解決上述問題,才能更好的入門C語言.
面嚮物件語言的推薦
-
如果你是上述入門C語言困難,又想學習程式語言的小夥伴,那麼,可能物件導向的語言也是一個不錯的選擇,C語言是一個程式導向的語言,看看剛剛的圖片可以知曉,它是比較接近底層的,因此,他比物件導向的語言更加難學,因此,入門語言的小夥伴,你可以選擇相對C語言更簡單的物件導向的語言,比較經典的是C++/Java/Python,難易程度也是可以這麼排列的
C++<Java<Python -
如果你對學習C語言入門比較有陰影,那麼,可以選擇在外型上比較差異大的Java,但是,Java需要配置環境變數,Python也需要配置環境變數,好在現在有很多網頁上直接執行程式碼的方案,可以解決初學者對於環境變數的配置困難,但是,網頁版的環境無法實現輸入功能,這也是一大困難,因此,最好還是能夠熟練掌握環境變數的配置.
-
Python是目前很多985高校推薦的入門程式語言,史丹佛大學也是用這門語言教學入門,可能一些高校發現了C語言對於初學者的困難程度和痛苦,Python相對於C語言需要經常強調資料型別來說,它是一門弱型別語言,你不用關注每個變數的資料型別是什麼,這對於資料結構基礎不好的小夥伴,簡直就是一個福音,因此,對於資料結構不好的小夥伴,選擇Python入門程式設計,無疑也是一種快樂.
前端開發語言和後端開發語言
-
前端和後端在很時候是相對的,這裡做個簡單的模糊比喻,比如你的計算機是一個桌上型電腦,你從顯示器看到的內容可以理解為是前端,你的機箱主機就是後端,因此,簡單的理解就是可以看到的內容就是前端的輸出結果,而你一般看不到的就是後端的內容.
-
所以如果喜歡視覺化介面,做什麼都可以直觀的,快速的看到的小夥伴,在程式語言入門的選擇的時候,就可以考慮從前端入門,這種方式的難度又比從後端入門更加簡單快速了.
-
這裡推薦的前段入門程式語言選擇就是HTML+CSS+JavaScript,這三個也被叫做網頁三劍客,如果能夠學會這三個也是屬於程式設計入門,JavaScript相對於後端多數開發語言都是更加簡單,便捷的,沒有資料型別的複雜概念,能夠快速在網頁上看到結果,對於很多習慣視覺化的入門者都是友好的,對於零基礎的小夥伴也是一個好的入門方案,而且,JavaScript也是類C語言,學過後,再看C語言,你就會發現你能看懂很多了.
程式語言選擇總體推薦
序號 | 重點 | 描述 |
---|---|---|
1 | 難易程度怎麼樣? | 前端難度<後端難度 面嚮物件語言<程式導向語言 高階開發語言<低階開發語言<機器語言 |
2 | 環境配置是否複雜? | 前端環境 < 後端環境 < 系統環境 |
3 | 是否視覺化介面? | 前端開發語言的視覺化程度大於後端開發語言的視覺化程度 |
4 | 編譯器操作複雜度? | 後端開發語言的編譯器操作複雜程度大於一些前端開發語言的編譯器(比如HTML是記事本難度就比其他整合編譯器簡單很多) |
5 | 學習的時間成本? | 前段開發語言的入門學習時間少於後端開發語言的入門時間 |
6 | 相關性學習時間的長短? | 網頁三劍客學習的相關性時間學習少於整套後端語言的學習時間 |
入門初學者對於語言初期到底要的是什麼
序號 | 重點 | 描述 |
---|---|---|
1 | 程式碼能夠執行起來 | 對於一個入門初學者,不需要深入全面的瞭解各種知識原理,最重要的第一步,是讓自己寫的程式碼都能夠跑起來,跑起來能夠帶來信心,跑起來能夠帶來力量,跑起來能夠支撐你繼續努力的學下去. |
2 | 能夠處理簡單的小問題 | 在程式碼跑起來的時候,一定會遇到這樣的,那樣的問題,比如少寫了個分號,少寫了個括號,單詞拼寫錯誤,這種常見的問題,自己能夠找到並且改正,也是進步的原動力,這就涉及到認真,眼神好和會讀報錯資訊 |
3 | 會使用百度工具 | 很多初學者入門之後,能夠發現問題,能夠找到問題,但是,解決問題能力還不夠,因此,要學會使用百度,很多初期的問題都是可以在百度上找到的,每次遇到問題,也要記錄總結,才能不斷進步 |
4 | 熟練安裝編譯器和配置環境 | 這個難倒無數初學者的問題,真的是做個開發者必備的技能,所以,要把它的屬性點點滿,首先找到一個圖文並茂,步驟清晰詳細的安裝文件,然後,比對安裝的編譯器版本,看看其視覺化的介面是否跟文章基本一致,然後,按照文章的步驟仔仔細細一步步執行,很多時候就是細節出了小問題,因此要單獨拿出一部分時間,就是反覆的做安裝這個工作,安裝和配置環境真的是一個孰能生巧的事情,就跟你組裝模型一樣,反覆多做幾次,十次每次都認真做,一定能夠將這個問題解決的 |
5 | 選擇一門語言入門後,一定要把它完整學完 | 很多初學者選擇一門語言後,今天看兩個覺得好簡單,然後,明天遇到困難了,就去學別的簡單的內容了,這樣是不對的,無論選什麼語言,都要認認真真從頭到尾完整的學完一整套,遇到不會的可以記錄下自己的問題,很多前期的問題,都會在整套學完得到解答,不要死扣一個概念原理不放,初期的時候,由於知識儲備不夠,生扣一個概念和原理,是不明智的,就像考試遇到不能馬上解答的題目,老師也是建議你先跳過,如果時間充裕在最後過來思考一樣,計算機的學習也是遵循這個原則,先整體後區域性,整體系統學過,再反過來思考曾經的問題,就會形成知識覆蓋,因為學習了更高階的知識,所以,初級的知識問題就會迎刃而解,你學會了二十以內的加減法,讓你做十以內的加減法,肯定是手到擒來. |
總結
-
條條大路通羅馬,有人出生在羅馬,所以,面對同一個問題,站在不同的角度,不同的資源,不同的邏輯思維,所得到的結論,會存在千絲萬縷的差異,因此,程式語言入門也是這樣的,要根據自己的實際情況出發,具體問題,具體分析,你記憶力不是超級好,學習新事物的能力不是一級棒,沒關係,你換個方式方法,依然是王者,沒有最好的解決方案,最適合自己的就是最好的,C語言是強大,是鼻祖,是權威,但是,也不是保證人人都可以學會的語言,如果你走C語言入門學不同,學不懂,學著費勁,那幹嘛不找一個更輕鬆,更便捷的解決方案,C語言就像武功中的獨孤九劍,可以解決計算機裡所有的問題,可是你是個連劈砍都沒學會的人,給你劍譜你也看不懂學不會,不如給你一份初級劍法入門,等你學會一套劍法,再去領悟高深的劍法,豈不事半功倍,權威的是好的,但不一定是適合你的,就像給你馬雲一樣的創業的資金,你也不一定成為第二個馬雲,成功只能借鑑,不能雷同,入門程式設計只能選擇自己合適的,不能靠人云亦云,同樣在一個教室上課,同樣一個老師,還有打滿分和不及格的,你就能說不及格的同學一定不如打滿分的同學嗎,那只是不及格的同學在這個方面不擅長,沒準不及格的同學打遊戲一個虐五個,打滿分的同學打遊戲一個打不過呢,所以要善於發現自己的長處,不斷找尋適合自己的,才是學習和理解一切的最好方案,選擇比努力更重要.
-
實屬個人觀點,覺得喜歡的可以關注,點贊加收藏,您的支援就是所有愛好者的前進動力.