最快入门程序员
前面的話:
這么久以來,我一直思考一個問題,就是怎么從一個其他的專業入門進入程序員行業,從業余變成專業。從什么也不會,到可以完成基本的代碼編寫,到可以完成簡單的程序任務,并且在后期完全進入這個行業,有自己往下專研的能力。
隔行如隔山:
隔行如隔山,其實不止是隔行如隔山。
想象這樣一幅場景,同樣是做軟件開發的人,如果我從未接觸過python,我是一名C程序猿,有一天另外一個專門的python程序員跟我說一堆python的概念,說python如何簡潔高效優美,能夠完成多少不可思議的任務,他說的越詳細,越感覺深入,越感覺到表達的很清楚,我也只是感覺到他的情緒而已,而對于python我卻一無所知。在我真正進入python這門技術之前,我依然會覺得那很難讓人理解,因為對不確定性的恐懼將是第一扇難以打開的門。
出于工作需要,時間很少,所在的領域學到的工具和技術是有限的,所以在工作中沒有涉及到的領域,往往以后也不太可能談得上說精通,即使是出于興趣研究過一段時間,也只能稍微熟悉,至于一門技術的精髓,那只能在大量的項目實際應用中才能體現。
我卻嘗試引領你快速入門:
入門一個新行業那么難,有時間不夠的壓力,有興趣不足的阻礙(其實沒進入無從談興趣)、有天生的專業缺陷、有那么多沒法理解的概念,那么多那么多的困難,這就是實實在在的難點,沒有辦法嗎?不,如果我現在告訴你沒有辦法,那我這篇文章就是在扯淡,就是毫無意義。我會告訴你,這是有辦法的,我真正做的一件事情,就是在這么多困難面前,引領你快速入門。
你無法要求你自己從一開始就理解什么是程序的本質:
你無法要求你自己從一開始就理解什么是程序的本質,就算是我,可以在這里大言不慚寫文章的我,也談不上真正明白程序的本質。只不過,通過實踐和學習,我有了自己的一些理解而已,僅此而已,真理是什么其實我們并不關心。如果你想入門就成為所謂的大牛的水平,那是做夢,技術從來都是從頭開始,一點一點積累的,就像你看過一分鐘打兩百字的打字員,你就應該明白他曾經敲壞過多少鍵盤,任何事情都無法一蹴而就。但是,打住。編程這件事情,其實是可以速成的。
程序的本質:
編程的本質是什么,在我看來,編程是用代碼的方法告訴計算機,讓他去完成我不愿意親自去做的或者我根本就做不到事情。比如,做一個乘法,25534x32324,這是我能做到但我不愿意去做的事情,因為在紙上做我覺得很累很麻煩。又比如計算92.3782的開根號結果,那是我能力做不到的事情。但是計算機可以,如下:
為什么計算機可以,因為計算機計算能力強,我們知道它有CPU、GPU.....但,這不是重點。重點是,我們知道它能辦到,對于編程入門來說,這就夠了。
我們入門到底需要掌握什么:
說了這么多,可能都不是所謂的干貨,但是相信我,看下去你整個思路就會很清晰,當然了,覺得自己了不起的大神,請繞道。那么,我們入門需要掌握什么,各類語言都要掌握嗎,其實語言真的不重要,為什么不重要,其實對于入門者來說,這個不好解釋,解釋的結果跟八股文一樣難以理解,因為你還沒有入門,所以我索性不解釋了,你只要接受這句話(語言對于編程不重要)就行。這里我選C/C++語言做例子,我總結我們初學者需要的技能有什么,大概是變量、程序流程結構、函數、簡單的數據結構(簡單的程序甚至不考慮這個),基本就夠你寫程序了,事實上我最近的幾個項目的程序都是只有簡單的數據結構+程序結構+函數+變量定義組成。
具體來說,一個一個說,先說變量,什么是變量,我假設你沒學過數學,沒關系,其實變量就是用來指代一個數的東西,比如上面程序中的a、b、c,是給要保存的數字起的一個名字而已,和張三李四的區別是它是字母,有三個人分別叫做a、b、c,當計算機(這個boss)叫到a的時候a就把自己肚子里的東西(那個數字25534)給他。計算機說a+b的時候,其實和說張三加李四沒什么區別,這就是變量名字。至于為什么說是"變量",是因為計算機可以把其他數字叫做a,那a的內容就變了,所以稱變量。
再說程序流程結構,計算機去完成一件事情,也是一步一步來的,那就有三種做事的結構:順序結構,選擇結構 , 循環結構。
順序結構就是一件一件來,我想要計算機去給我做飯,那它首先去洗米,蒸飯,切菜,然后炒菜,然后端上來....一步一步,按順序來,這就是順序結構。更加貼近程序的描述是,我要計算a+b的結果,那我首先要輸入a的值,輸入b的值,然后計算,然后輸出,這就是順序結構。
再說選擇結構,假設我要出去運動,首先我會關注今天的天氣,如果下雨,我就去學校室內打網球,如果出太陽,那我就去小區公園里打籃球,這就是選擇結構。更加貼切程序的例子是,我要給小明的分數評等級,首先輸入他的分數,如果分數在60以下,則結果是不及格,如果在60以上就是及格。(當然可以設定各種等級:優秀、良好等)
最后說循環結構,可以理解為今天工人在流水線上做事,一直做的就是一件事(比如打包裝),直到今天下午6點下班,循環的工作就結束了。更加貼切程序的列子是,我要用程序做1+1+1+.......+1的100個1相加的計算(當然這只是個簡單的例子,只方便理解循環的意思),我就定義一個變量為a=1,然后定義一個sum初始=0用來存結果,我讓sum循環加a一百次,輸出的sum就是結果。
重點說函數:
函數是很重要的,但是函數的存在,也是為什么能夠快速入門,因為你只要懂了變量的定義,然后知道函數的概念就可以開始編程了。
為什么這么說,因為函數,可以讓別人來寫,驚訝嗎?所以這就是為什么編程如此簡單。用別人的函數來開發,那就可以很快做出自己的東西。可能有很多所謂的大神并不建議初學者這樣來學習編程,但是,我想了很久,覺得這可能是最快成為一個程序員的方法了。這樣進入這個行業之后,才會慢慢開始自己寫函數。放心,有一天你把你的代碼開源給別人,也會有人用你的函數。
函數有輸入和輸出,綜上可知,你只要知道你的輸入是什么,并且想得到的結果是什么,那就夠了,其他的工作,借助第三方吧,無論是百度別人分享的代碼,還是一個開源的API(不用懂這是什么,簡單認為這是別人寫好的函數),或者是系統以及集成的函數。
證明一下我的結論_(用C++借助opencv的函數(別人寫的)做圖像處理_把彩色圖變成黑白):
你可以通過我的思路快速入門,現在我就證明。假設你想要把任何一張彩色的圖像變成黑白的圖像,你考慮一下你的程序該怎么寫,你考慮你的圖片怎么輸進程序里嗎?考慮怎么把顏色去掉嗎?相信初學的你不會有思路怎么做到。
如果我給你加一個前提,這個前提是,opencv是一個開源的庫,里面提供了Mat的變量類型,一個Mat可以代表一張圖片,你又會怎么考慮來實現彩色圖轉成黑白圖?
正常人會這樣考慮,我的輸入是一張彩色圖片,那我定義一個Mat 變量來存我的彩色圖片,我的輸出是我想顯示出黑白的圖,但是中間那步轉換過程我不知道怎么辦。這時候,我提示一下你,你可以用函數,你會不會想到去查一下opencv里面有沒有現成的彩色轉黑白的函數呢?現在事情就變得簡單了,重新整理一下:
定義一個Mat 來代表我的彩色圖,(當然你得在某個路徑下有一張彩色圖,然后用一個opencv里面的函數到那個路徑去讀出來,沒錯,這個也有函數:imread)
用opencv自帶的函數cvtcolor來實現彩色轉黑白
定義一個Mat 來存黑白圖像
將得到的黑白圖像顯示出來
下面是代碼和效果:(你根本不用關心怎么去搭建環境、創建項目和開始寫代碼,因為這都很簡單,理解上面的,你就開始了)
希望這篇文章的結束,是你程序入門的開始。
總結
                            
                        - 上一篇: [蓝桥杯][算法提高VIP]质数的后代-
 - 下一篇: XSKY星辰天合发布星海架构和星飞产品