大家好,這是我的第一篇博客,寫的不好請多見諒。
博主現(xiàn)在大二,川大軟件工程本科在讀,技術(shù)的內(nèi)容就不獻(xiàn)丑了,來談?wù)勎掖笠坏酱蠖膶W(xué)習(xí)軌跡。
軟件工程是我的第一志愿,然后是計算機,講道理這個學(xué)科在我的學(xué)校不是一門特別牛叉的專業(yè),跟隔壁電子科大差距還是有的,但是我的分?jǐn)?shù)貌似電子科大沒希望 :) 但是川大是所綜合高校,我個人比較看重全面發(fā)展,所以最終報了川大軟院。報了之后不用等就知道肯定穩(wěn)(但是后來我才知道那一年提檔線僅僅比我的分?jǐn)?shù)低了幾分,嚇我一身冷汗)。
由于我本來就對編程很感興趣,暑假我就開始自學(xué)C語言,從最基本的變量和結(jié)構(gòu)語句開始學(xué)起,看的是我姐姐的大一C語言教材,清華出版社的
對 就是這本,挺不好找的 但是暑假我還要做我們班的畢業(yè)視頻,大一開學(xué)之前我只看到了數(shù)組,還沒有看到最難的指針的知識。 當(dāng)年的七夕我閑著沒事干,想用C寫一個程序畫一顆心,當(dāng)時也不會啥,就會基礎(chǔ)的for語句,就強行畫出來,最后慢慢調(diào)也還是調(diào)出來了,還是挺開心的。
嗯 就是長這樣
我以為在暑假自學(xué)了C語言的我,在大一面對C語言程序設(shè)計的時候,能夠游刃有余,但是我錯了。
當(dāng)時教我們的老師很坑爹,拿十分鐘講完語法,然后當(dāng)即就要求我們寫一些程序,比如楊輝三角,萬年歷,等等,當(dāng)時我們還身處IDE各種奇奇怪怪的報錯中不可自拔中,別說寫出來程序,還能活著出教室都很開心了。助教各種忙不過來,老師也不停地給同學(xué)們答疑。每一節(jié)C語言課下課之后我都是因為想問題想到耳朵根發(fā)紅,像極了高三埋頭刷完理綜的時候的樣子。當(dāng)然還有課后作業(yè),當(dāng)時光寫一個猜數(shù)字游戲作業(yè)就可以折騰我一個星期。
當(dāng)時有一個學(xué)長跟我說:“你們現(xiàn)在覺得用C寫一個程序很難,覺得無從下手,那是因為你們只學(xué)了C語言的語法,根本不懂算法”。我覺得也挺有道理,這就好比你學(xué)習(xí)英語,學(xué)了26個字母就想造句一樣,當(dāng)你學(xué)習(xí)了字母,再學(xué)習(xí)單詞,然后再學(xué)習(xí)語法,然后你就會覺得造句是信手拈來的事。
在課余時間我也做了不少練習(xí)
做程序員沒有一定的代碼量是不行的,輔導(dǎo)員在開學(xué)的時候還跟我們說一個程序員四年應(yīng)該有多少多少萬行代碼才算合格,確實是有道理的。 但是這樣的程序只是用來解決奇奇怪怪的數(shù)學(xué)問題的,跟我想象中的應(yīng)用程序還差的很遠(yuǎn)。
做編程最終還是要做項目的,沒人會找一個程序員專門來寫#include
就在C語言期末考的時候,老師突然告訴我們這次的考試是三個項目隨機抽一個,商品管理系統(tǒng),學(xué)生管理系統(tǒng),航班管理系統(tǒng),我抽到了商品管理系統(tǒng),我懵了,以前老師都是讓我們一次寫一個函數(shù),這下一上來就是一個項目,完全不知道該怎么組織,框架不知道怎么看,那次考試可想而知,完全GG。(不是我上課不認(rèn)真,我前三次小測都95+,據(jù)說整個年級二百多號人沒一個能寫出來,后來下一屆就取消了這種題型)
大一下學(xué)期學(xué)習(xí)java,顯然使用面向?qū)ο蟮恼Z言來做項目才是最適合的,如果C的基礎(chǔ)打的牢,那么Java就主要學(xué)習(xí)對象的概念以及其衍生的繼承、多態(tài)還有設(shè)計模式就可以了,從C這種面向過程的語言過渡到Java這種面向?qū)ο蟮恼Z言,一開始是有點難度的。 我當(dāng)時的解決方法是多看網(wǎng)上的博客,一般博客會將一個或多個知識點單獨寫成+文章,而且會融入作者自身的理解和體會,相比課本或課件的內(nèi)容會更加容易理解,而且我推薦一定要看多幾篇,不要看了一篇博客覺得了解的差不多了就可以,看多幾篇既是加深印象,也是取其精華去其糟粕的過程。 Java的學(xué)習(xí),學(xué)校推薦的是Thinking in Java英文原版的,我嫌英文看的太麻煩,所以沒有用學(xué)校的教材,自己去舊書店買了一本,但是我覺得我看的那本也不是很好,所以在這里不推薦了,我舍友他自己也另外看了馬士兵的視頻教程,他說覺得不錯。 Java學(xué)的差不多后,老師開始讓我們做課程設(shè)計,做一個圖書館管理系統(tǒng),我們小組決定做移動端的,因為老師不講Android開發(fā),所以我們自學(xué),Android的學(xué)習(xí)資源有很多,我當(dāng)時是看慕課網(wǎng)的Android攻城獅的第一門課 入門的,基礎(chǔ)掌握之后,由于我們的時間不多,剩下的我是用到的時候再去學(xué)的,比如AutoCompleteTextView,啟動頁等等,在這期間也學(xué)會了看Eclipse的log日志信息,因為每次報錯都不一樣,也不想每次都去問助教,所以不得不自己去學(xué)。另外墻裂告誡大家安卓開發(fā)一定要掌握用Log調(diào)試以及會看日志信息,這真的非常重要!使用System.out.PRint()是很低端的技術(shù),下意識用Log.d(String TAG,String Msg)才是王道啊。
當(dāng)時我們做出來的第一個安卓項目,長這樣
做完第一個安卓項目之后,感覺對安卓項目算是入門了,從前感覺安卓應(yīng)用好復(fù)雜,自己親自做了以后才知道其實也不難入手。
當(dāng)掌握了面向?qū)ο缶幊讨?,能做的事情漸漸多了起來,大一下學(xué)期學(xué)校安排了小學(xué)期課程,所謂小學(xué)期,就是請企業(yè)的教師過來,把十幾個人安排在一個教室,分組做項目,整整十幾天就專心做項目,做完就回家。但是當(dāng)時說的是用C語言做,但是一聽要界面就懵了,這C哪怕是一個確認(rèn)窗口都要一百多行代碼,所以后來大家都做了C++的。。。。。(當(dāng)然,很多人都是網(wǎng)上找代碼)。其實小學(xué)期鍛煉的不是大家的編程能力,是體驗和熟悉軟件工程模式的,像我們的老師當(dāng)時給我們的是Scrum敏捷開發(fā),每天的十分鐘早會,scrum master、QA和Tester的角色分工,相當(dāng)?shù)湫?,這還是我在大二軟工導(dǎo)論中才知道的。
到了大二之后接觸了數(shù)據(jù)結(jié)構(gòu),軟工導(dǎo)論,我更加認(rèn)真去學(xué),上早課瞌睡來了就喝茶,數(shù)據(jù)結(jié)構(gòu)的每個課程設(shè)計都做的相當(dāng)仔細(xì),當(dāng)然課下也花了許多時間在上面。數(shù)據(jù)結(jié)構(gòu)我們主要學(xué)的三大數(shù)據(jù)結(jié)構(gòu):線性表、樹和圖,以及一些排序算法,索引什么的,我感覺課上主要學(xué)理論,課下的課設(shè)拿來長知識以及經(jīng)驗。 課程設(shè)計和小學(xué)期、考試都屬于被迫做的項目,因為是課程要求去做的,但是到了大二,隨著經(jīng)驗的豐富,漸漸地有人來找我做項目,或者找我做比賽,我自己也根據(jù)興趣自己做了個項目。
我們有大創(chuàng)項目,為期一年,我們組了個隊,做了一年,也還算好,雖然預(yù)期的目標(biāo)沒有實現(xiàn)出來,因為說是有一年時間,但是因為各種各樣的原因最后一個月了才開始各種趕工。。。說出來都是淚。 參加過一個比賽,拿了國家二等獎,還有一筆不小的獎金。講真,做比賽是最能增長經(jīng)驗的,但也是最辛苦的,持續(xù)的時間久,壓力也大,但是回報豐厚,不僅包括物質(zhì)榮譽的,也包括大量的經(jīng)驗。 寒假回來后自己琢磨著做一個小安卓游戲,然后就不假思索的開始干了,邊學(xué)邊做,學(xué)會了許多內(nèi)存優(yōu)化、游戲引擎、線程這種課上根本就沒講過的東西,大學(xué)所說的自學(xué)大概就是像這樣通過自己探索去學(xué)會教材和老師沒有告訴你的東西吧。
這就是我寒假做的安卓小游戲,只是優(yōu)化做的不太好,在一些手機會報OOM
附上GitHub:GhostLWB的GitHub
最后我想說,學(xué)軟件真是一件要求興趣的事情,特別是大學(xué)生,一周拿60個小時打代碼的人我見過,天天翹課打游戲的人我也見過,忙于社團和愛好而收到學(xué)業(yè)預(yù)警的人我也見過,成為大牛或者小白,都在你的一念之間。另外,很感謝我的學(xué)霸舍友,沒有你們上進(jìn)的學(xué)習(xí)氛圍我也不可能這么拼,這么多學(xué)霸同時安排到一個寢室,如果這真是系統(tǒng)隨機分配宿舍的話,那我只能說我真的運氣爆表了吧 233
新聞熱點
疑難解答