從大一接觸C語言開始,世界就以一種全新的方式向我展開了。
說起來,大一剛開始接觸C語言的時候,完全處於懵逼狀態,根本不知道這玩意是啥,畢竟我們河南的孩子在高考之前基本上就只有一個目標:考上大學,整天都是語數外、物化生……根本不知道編程是什么意思,由於從來沒有接觸過,上課聽講就像聽天書一樣,直到第一次的C語言上機實踐……
“拔劍四顧心茫然”,第一次上機可以用這句詩來表達我當時的內心,簡直就是煎熬,完全不知道要干嘛,第一次老師轉到我這時,我的電腦一片空白……於是我硬着頭皮寫了幾個語句,老師又走到我這,看了看我的程序,滿懷嘲諷地對着全班同學說“哇,咱們班竟然還有同學以為把算式全部敲打上去,計算機就能自動算出來的!”頓時全班哄堂大笑,我當時真的是羞得滿臉通紅,不過這次經歷也激發了我學習編程的動力,還算的是因禍得福吧!
“勇往直前”,從那次經歷后,我便開始認真學習編程,剛開始的時候,覺得“哇,好神奇,自己寫出來的程序竟然可以實現這么多的功能”,越學越覺得“無所不能”,越學越有興趣。C語言課程結束后,有個C語言課程設計,需要做一個小型的系統,我做的是“通訊錄管理系統”,對於當時的我來說,這種程序可謂是相當的難了,基本上指針都不怎么會用,更不用說對文件的操作了,我就先上網上找了一個類似的程序,先看看人家是怎么實現的,大概心中有了一個方向,就邊模仿邊編寫,先從簡單的功能實現,再一步一步地添加功能,那時候還只會使用VC,只會寫控制台程序,連界面都是在控制台上一個一個printf()打印出來的,耗時兩個星期,終於將這個系統成功實現了,老師也給了我90多的高分,當時特別有成就感!
大一下接觸了嵌入式的開發,剛開始用的是最簡單的51單片機,記得寫的第一個嵌入式程序就是“流水燈”,雖然很簡單,但更進一步的讓我學會了用編程的思想去解釋這個世界,雖是一個簡單的流水燈,但在我們的生活中卻隨處可見,超市門前的電子公告屏,演唱會上粉絲們手持的LED板等等等等,嵌入式的開發給了我一種全新的成就,將我的程序嵌入到一個硬件上,仿佛是賦予了這個硬件一個生命,我仿佛在創造世界,這種成就感和自豪感恐怕每一位程序員初期都會有的。
而后便是C語言的進階學習,之前的只能算是剛剛入門,當然這也是我后來才知道的,當時的我可不是這樣覺得的,當時的我覺得自己無所不能,什么都能用程序實現。根據課程安排,我們開始了“數據結構與算法分析-C語言描述”這門課,然后……我就又開始懵逼了,“這都是些啥啊???”,黑人問號臉……然后就想當然的認為它不重要,結果就是,我到現在還在為當時年輕所挖下的坑做填補,這是我當年做的最蠢的一件事,“數據結構構建了程序的軀干,而算法賦予了程序靈魂”,當年的我如果懂得這句話,那現在的編程水平至少還能再上一個台階;然后又學習了C++,也算是對面向對象的編程有了一些了解,當然有了C語言的基礎,學習這些語言都沒有太大的問題。
大二的暑假,我全身心的投入在全國大學生電子設計競賽上,我們小組是做測量方向的,我主要負責FPGA和單片機的嵌入式編程方面,我還記得我們當時訓練的時候,我寫了一個程序,當時程序編譯沒有出錯,但功能卻不能實現,我怎么都找不到問題(因為當時還不知道Debug,純靠自己看),找老師來幫忙,老師說“編譯沒有問題,難道就真的代表你這個程序能用嗎?這種情況肯定要使用Debug功能來找算法上的錯誤啊!”,這一句話真的是醍醐灌頂,一巴掌將我打醒了,原來我之前寫的程序只是湊巧編譯成功了而且也實現了功能,原來我連最基本的檢錯方法Debug都不會用,這一下子將我打回原形,我乖乖地收起我的小尾巴,認真系統地開始學習編程,不看不知道,一看嚇一跳,原來自己之前寫的程序都是最基本的程序,原來自己還差得很遠,原來還有這么多東西我都不知道……
很快,國賽正日已經到了,我們的任務是在四天三夜內要做出來一個高精度的”數字頻率計“,現在想想當時還真的是挺瘋狂的,四天三夜就睡了一個晚上,我清楚地記得,最后一天焊系統板的時候,我的眼睛都已經不能正常對焦了,飯都顧不上吃,臨近結束才測試完功能,趕緊包裝,交給老師,但這次比賽的結果卻差強人意,包裝之前,我們的系統已經能夠很好的實現要求上的功能和指標,但到比賽測試那天,所有的東西都亂掉了,好像是因為程序被靜電擦除了,打那以后的兩年,我再也沒有碰過嵌入式編程。
大三我接觸到了網頁編程,首先接觸到的是HTML/CSS,但覺得這種文本標記語言完全沒有意思,就像寫word文檔一樣,完全沒有靈魂,然后就開始學習后端語言PHP,在后面去公司的實習中,我還接觸了使用JAVA web作為后端語言的網頁開發,本科的畢業設計做的是基於PHP的網頁版雲盤,也用PHP做過微信公眾號開發。
大學畢業后,我沒有選擇讀研,而是選擇了工作,我堅定一個方向”只做軟件研發“,但真的不得不說,本科生真的很受歧視,也可能是自己的水平還達不到公司研發的要求吧,找了很久很久,offer拿了不少,但真正想去的卻沒有一個,最后我選擇了中船重工第七一六研究所作為我的第一份工作,職位:軟件工程師,主要職責:嵌入式編程和PC客戶端軟件編程。
入職半年來,我基本上就是一個人在學習,因為公司里可以教自己的人太少了,因為公司主要做電子的,軟件人員很少,我主導的項目就是針對公司一個產品的自動檢測系統,用的是C#語言,還有一個項目是寫驅動程序,這些都是我之前從來沒有接觸過的領域,也算是一種挑戰吧,不管怎么說,我有信心能夠做出來,這可能就是變編程這么多年帶給我的最大的改變。
談一談我自己的學編程的方法吧!
第一是模仿,剛開始學編程的時候,憑空創造一個程序是很難的,尤其是自己從未接觸過的領域,你需要一個模板或者例程來將你帶進去。
第二是思想,從學C語言開始,我希望你能夠正確的看待編程語言和編程的關系,編程語言只是外在表示,只要你熟悉了C語言,其他語言的開發你也應該能夠很快上手,不要想着自己沒學過,不會做,相信我,你能做到的!
第三是多看書,這里的多看書指的是要多看不同國家的不同作者寫的著作,接受不同的思想,最后將這些思想融合成你自己的思想,這樣你才能對一些關鍵性概念有比較深厚的了解。
第四是多動手,不能只看書,要多寫程序,多寫算法和數據結構,對於自己編程能力的提高很有幫助。
第五是了解計算機的相關知識。對於計算機組成原理,計算機操作系統,計算機網絡等這些底層知識,要好好了解,這樣你才能對編程的過程有更加深入的理解。
哦,忘了說,我不是計算機專業的,我本科學的是通信工程。