項目 | 內容 |
---|---|
課程:北航2020春軟件工程 | 博客園班級博客 |
做業:閱讀並撰寫博客回答問題 | 第一次做業-熱身! |
我在這個課程的目標是 | 體驗軟件開發的全流程 |
這個做業在哪一個具體方面幫助我實現目標 | 明確方向和學習重點 |
你爲何選擇計算機專業?你認爲你的條件如何?和這些博主比呢?html
計算機是你喜歡的領域嗎?是你擅長的領域嗎?前端
說來奇怪,直到高考填寫志願以前,我歷來都沒有想要去選擇計算機這樣一條路。我大概08年的時候,就接觸了計算機,當初是一臺奔騰某雙核型號配512MB內存的機子,其餘配置都不清楚了,用的是當時標配的Windows XP系統。由於當時家裏還沒通網絡,我天天也就只能打打系統自帶的蜘蛛紙牌消遣。計算機對我而言,不過是一個大玩具而已。很快我就變成了一個熟練的電腦使用者,儘管我不懂這你們夥的原理是什麼,可是對一個小學生來講,可以熟練地甩動滾輪鼠標,在遊戲中取得一個又一個的高分,已經足夠了。java
真正深刻的去了解計算機,是我上了初一開始。那時的我,瘋狂迷戀着裝機DIY。定了一個叫《電腦報》的報紙,每天拿出來在翻,看報紙中寫的CPU架構的介紹、多通道內存原理、顯卡交火的注意事項還有超頻的經驗,算是我對計算機組成的初步瞭解吧。在家的時候也會常常拆開家裏本身的電腦,扒出主板研究,看看哪一個芯片是南橋、哪一個接口是PCI-E、哪根電源線是多少伏的輸出,還有嘗試風冷超頻。那段時間還喜歡裝系統,本身動手DIY系統,,裝了各類各樣的系統嚐鮮,以致於一不當心把全部硬盤格式化了(刪庫?)。這段時間的經歷,讓我瞭解了計算機內各各部件之間的職責和他們的配合,小小芯片的功能着實吸引着個人好奇。程序員
可是在之後的很長一段時間內,我都再沒有學習更多相關的知識了。初中和高中的時候學校也組織過信息競賽,但我幾回擦肩而過,緣由是本身以爲這玩意太虛幻了,摸不到成型的實物,看起來太過抽象;相反,本身更加喜歡機械一點,沉迷與齒輪的咬合、蝸桿的旋轉,幻想着本身設計出規律的精美的靈巧的機械出來。高考考前思考志向的時候,我第一個排除的工科專業竟然就是計算機,最後定的第一目標是自動化或者是機械工程專業。面試
最後終於走上這條道路,仍是由於本身高考分數,剛好落在了北航士諤書院的臺階上,然後分專業時天然而然地選擇了士諤書院最好的計算機學院,僅此而已。因此說和從小喜好計算機的博主們比、和算法編程經歷豐富的同窗們比,我算是出道尚晚、誤打誤撞的一個特例吧。算法
但是大學這兩年半過來,我經常問本身一個問題:我真的喜歡計算機嗎?數據庫
我喜歡的是當個人程序終於能輸出正確結果時,那大大的綠色的Accepted編程
我喜歡的是當個人模型終於可以識別輸入的圖像時,那分明的清晰的結果小程序
我喜歡的是當個人網頁終於可以渲染出界面時,那溫馨和諧的用戶體驗bash
古希臘敘拉古赫農王時期,阿基米德坐進澡盆裏時,看到水往外溢,忽然想到能夠用測定固體排水量的辦法,來肯定金冠的體積。他興奮地跳出澡盆,連衣服都顧不得穿上就跑了出去,大聲喊着「尤里卡!尤里卡!」(ερηκα,意思是「找到了」)。一樣,我最喜歡的,是本身反覆的查閱、思索、編碼,殫精竭慮茶飯不思的努力以後,終於在某一次嘗試中,終於看到了正確預期的效果時,心中吶喊的那一聲Eureka。那着實令我興奮並且着迷,或許學習計算機並非惟一能體驗到成功的途徑,可是我隱約感受,這是一條方便的道路。
可是要說擅長,我必定會說「不」。計算機這門學科給我一個這樣的感受:無論你取得了多少成就,你老是會看到有別人作的更多更好。今天你自學了一個前端框架,卻看到身邊的高人早已運營一套WEB系統;今天你爽快地體驗了一把全棧開發的樂趣,卻看到身邊高人已經在研究集羣、負載均衡那些東西;今天你參加了一個實驗室,做爲一個不知名的本科生扮演着微不足道的角色,卻看到身邊高人早已參加企業實習,拿着很少很多的工資,爲開源項目或者企業產品做出着點滴貢獻……往往看到他人的優秀,我都自慚形穢,而且激勵着本身更加勤奮地學習。
大學這段時間,我對計算機的許多方面都有了涉獵和初探,越是學習,越以爲本身眇小。計算機的行業,學習彷佛永遠趕不上進步,層出不窮的新技術,突飛猛進的新「輪子」,讓你感受本身的力量是如此的有限,一門學科的生命力是如此的強大。或許我永遠都不敢說本身「擅長」於計算機領域;不斷的學習過程當中,我也許會在某個方面,會變得很是地熟練,對各類需求都可以信手拈來,可是我相信,在突飛猛進的計算機行業,我永遠只是孜孜以求的學生。
個人大學前兩年半,都是惟分數論的萌芽生長的歷史。大一的時候,剛剛進入大學,對不少東西都懷有興趣,也不重視GPA,看到什麼東西都感到有興趣,也就淺嘗輒止地瞭解了不少電子信息、軟件、甚至機械原理、自動控制這方面的知識,日子非常瀟灑。可是隨着本身上了大二,我開始重視起GPA那一個數字而且決心努力去把這個數字提得更高一點以後,我不像大一學習得那麼輕鬆了,沒有時間也沒有興趣再去了解那些亂七八糟的其餘科目的東西。我經常疲於應付課內的任務,尤爲是計算機組成、操做系統和麪向對象設計原理這幾門硬核的課程,額外花上幾十個小時就爲了把分數提升兩三分,只是以爲本身不該該比別人差。到了大三尤爲上學期編譯技術期末競速排序的時候,這個現象更加明顯。許多同窗的代碼效率相差極小,可能只有1%不到,可是因爲同窗們排名過於接近,這1%的排名卻差異巨大,也就致使了得分差異巨大。那麼這個分數或許也就不可以體現同窗們對於知識的掌握駕馭水平,兩個程序競速結果只差1%的同窗,最後獲得的成績差別可不止1%。最後的結果就是,你們爲了這1%,絞盡腦汁,惟恐被人超過,這也就喪失了不少學習的樂趣。
另一個體現,表如今我選課的時候。不管是專業課仍是通識課,同窗們選課時,廣泛的第一反應是否是說這門課我喜歡嗎?對我之後的發展方向有促進做用嗎?而是:這門課給分怎麼樣?學分多少?評價好很差?給分好的課,可能雖然本身不太喜歡,那每每也是僧多粥少、供不該求;相反許多能讓人受益不淺的課,卻由於給分不太「友好」,被迫淪爲第二選擇。
雖然我不知道國外的大學是個什麼樣子,可是我從國外同窗的朋友圈課件中管中窺豹,大概瞭解到他們某些專業的本科生早已被分配入實驗室進行學習,跟隨老師研究課題、發表文章,從興趣爲導向的實驗中學習知識。我理想的大學,應該是學生從網絡或者圖書館中汲取知識,以組隊學習新知識來做爲完成任務的一種主要手段的大學,因此我對國外計算機系的教育方式表示必定的承認。可是如今咱們學校,至少說咱們系,核心是以成績爲導向的競爭式學習,在實踐中的表現就是:部分教師過分關注重點、讀課件的傾向過於明顯。同窗們在這樣的環境下,已經造成了一種很是簡單的學習習慣:
學習過程對於課件過度的依賴,是我這幾年可以感覺到的明顯教學特色,或者說教學缺點。我認爲的大學的學習,應該以經典教材爲導向。理論課中,老師以講解經典教材、提供旁批註釋的方式,鼓勵咱們在學習重點知識的同時,瞭解附加的非重點知識;或者直接讓咱們去某個參考書中自行學習,加以小組討論的方式,鼓勵咱們從普遍的知識庫中汲取知識,而不是侷限於精煉的課件和單純的重點。
大學以前,個人代碼量基本爲零,也就是寫過一些bash腳本。大學期間,最重要的計算機組成、操做系統、面向對象程序設計、編譯技術和數據庫課程設計這幾門課的實驗課的大做業。
計算機組成課程設計 2000行
操做系統課程設計 500行
面向對象課程設計 4000行
編譯技術課程設計
數據庫課程設計 5000行
各類各樣花裏胡哨的小程序 1000行
可是我漸漸意識到,雖然本身寫了很多東西,可是大部分都是在搭積木。本身對於代碼的理解,一直停留在表面,而沒有耐心去體會代碼中底層的東西。用java寫了4000行代碼以後,我對java的使用已經很有心得,用起來也不會手足無措,可是這僅僅是使用別人的早好的輪子而已。《劉帥:在失望中尋找但願》中提到這樣一個面試問題:
以後問const的問題,問我是否是想過,Java是否是精通,我說是,又被問到,Java如何實現const,Java的const和C++同樣嗎?怎麼實現的?這個問題又讓我崩潰了。
用到了Junit,被問到Junit哪些地方很差等,全部關於測試的這些東西基本全掛。
一樣的問題,我根本就沒有思考過。雖然本身寫了很多java,甚至有時候吹牛的時候說本身java「有點東西」,可是我回答不出來這樣的問題。即便我在數據庫課程設計的大做業中,寫了5000行基於React的前端代碼,我卻根本沒看過源碼,不懂它的精髓,不知道其背後的運做原理。我喊出「噢,原來這個是這麼用啊」的次數遠遠超過了「噢,原來是這樣運行的」的次數。或者說,我是在背一個框架的使用方法,而且將它複製一遍又一遍,完成本身的項目。也許哪一天,目前這一套框架被淘汰了,我也許會陷入無所適從之中,由於我只是一個熟練的工人,熟練地、機械地操做着別人設計好的機器,來實現固定的生產效益,一旦遇到解決不了的問題,便只能望洋興嘆;而不是一個設計者,本身研究機器的設計、本身造適用的輪子。
後來,我在《進入2012 -- 回顧我走過的編程之路》這篇自傳中,看到了一個深諳底層源碼的計算機愛好者的樣子,而且自慚形穢。
大一的時候作的JoveScript是第一個我以爲還能見人的腳本引擎。第二個就是大二失敗了一全年吸收了不少教訓以後,於大三開發出的動態語言,名字叫FreeScript。最近正在打算將其更新到3.0來配合一個正在開發中的顯卡加速的GUI類庫GacUI。接下來就是在去微軟上海的WCF Tools組實習的那一段時間裏面,利用天天晚上的時間完成的一門純函數式語言叫KernelFP,這後來成爲了個人畢業設計。提交了畢業設計以後,我又在畢業前的幾個月時間裏面完成了CMinus。這不是編譯原理課程設計上的那個簡單到無法再簡單的CMinus,而是一個完整的C語言編譯器(其中函數指針的語法被我改掉了,可是仍然支持)。其編譯結果是保存到內存中的一段X86二進制代碼,能夠將函數的起始地址強制轉換成函數指針直接在C++程序中使用,這是由於我在生成指令的時候遵照了Visual C++中的一些在MSDN裏描述得很清楚的約定。畢業後我又雄心勃勃地作了NativeX,是一個帶泛型以及concept mapping的C語言。……圖形界面(GUI)類庫我也寫了很多。繼高中的時候爲RPG而開發的兩個控件類庫以後,在上大學的過程當中使用OpenGL開發的兩次GUI類庫均告失敗。後來還封裝了一次Windows的API(Vczh GUI),試圖讓其易用性接近VCL或WinForm。
調庫、用別人造好的輪子,永遠不是核心競爭力。
這也是我認爲的,速成的培訓班和打基礎的大學教育還有mooc之間最大的區別。帶着科班的驕傲,大學本科的計算機教育絕對不能夠侷限於會用別人造好的輪子,而應該學習怎麼閱讀源碼、查閱文檔、造本身的輪子。學習了計算機組成以後,我對CPU的原理不再陌生了;學習了操做系統後,我知道每次點擊鼠標背後,計算機大概都幹了什麼;學習了編譯器設計以後,我有信心挑戰JVM了……可是我知道本身不可以止步於此,我如今愈來愈相信這樣一個觀點:
閱讀源碼的能力,纔是程序員的核心競爭力
關於將來的工做,個人但願是在一個企業中工做,從事產品研發、測試或者運營那些和用戶應用層面相關的產品,而單純一味的研究理論我並不喜歡。可是同時,我更但願本身可以參與到公司的一個開源項目之中,在公司集體的合做下研究實用的模型和框架,去創造輪子。相比技術,我更加劇視組織管理和表達的能力(或許之後會成爲一個PM吧),重視甲乙兩方的溝通、重視頂層的設計。
《談談職業規劃——CSDN對個人採訪》這篇文章給了我不少的建議,讓我在學習課內知識的同時,提醒我要注意更多的東西:
我一直認爲程序員不只僅須要必定coding的水平,也須要更多的soft skill,注意人際交往、持續的學習能力、聽取他人意見的能力。將來我會在暑期實習中,繼續培養soft skills;會在考研中,培養本身的知識儲備,謀求更高的平臺;會在工做中,重視培養閱讀源碼和文檔的能力,以及人際溝通的能力。
這篇文章一方面是本身回憶了一下以往的故事,另外一方面是給本身立Flag。
時刻告訴本身別瞎學習,提醒本身別沉溺於搭積木的小知足中,而要深入地學習積木咋造出來的,把玩意兒學透;同時也要多瞭解需求缺口、技術前沿,注重非技術的積累。
接下來的日子,將是一條和過去徹底不一樣的道路,在這迷茫的學業中,又有了新但願。