若計算機基礎為零入學計算機專業會不會很痛苦很困難?
泡杯茶,我們慢慢聊。
編程難,首先入門就難。
「Hello,world」,其實並不像你想像的那麼簡單。
某雖不才,小學稀里糊塗的拿過縣裡奧數三等獎,95年就能用小霸王學習機(Basic)打出楊輝三角形,高中理科,98年能考進重點大學(專業悲催的國際貿易),大學期間還過了計算機二級(FoxBase),另外還參加自考拿到了法學學位和司法資格證書……說這些不是為了吹牛逼,而是為了讓你知道我真正正兒八經的學開發的時候有多慘啊有多慘!!!
/(ㄒoㄒ)/~~
然後,我關了公司,賣掉了汽車,背起了書包,和一大幫毛頭小子坐在一起,開始了我的編程之路。
真 心坑爹啊!說起來都是淚……我一個文科生,從中間開始學編程,這是一種神馬體驗?是「坐飛機」的體驗呀!我26年的人生中,第一次體會到什麼叫「上課坐飛 機」:老師講的每一個字我都聽得懂,但連在一起我就什麼都不懂,完全不懂他在說什麼。上機好一點,我TM至少知道開機。當然,除了開機我其他什麼都不會 了。你可能會奇怪,那我之前學過的 if...else 呢,我之前學過的select呢?
我TM的怎麼知道?!誰讓老師一來就給我講什麼「面向對象」——面向,面向是個什麼鬼;對象,你說娟兒,我們馬上就要結婚了……印象最深的就是開頭那幾課,講什麼貓啊狗啊四條腿之類的你以為挺過了這個階段,能做出一個什麼「圖書管理系統」之類的玩意就OK了么?
培訓班是從非常實用的角度出發的,有點像速成雞,個頭看起來好像不錯,其實生存能力還完全不行。
在實際的學習工作中也發現了自己的不足,……,所以我要想提高的話,最好能去參加一次軟考,過了軟考怎麼怎麼牛B之類的。
和司法考試一樣,軟考也是有指定教材的;和司法資格考試不一樣的是,這個教材是根本看不懂的!我又在網上下載了視頻,沒用,吧啦吧啦講的些什麼東西啊?本來熱情高漲的信心被嘩的潑了一瓢冷水,看著那些什麼樹啊、圖啊、狀態機之類的東西,一種無力感悄悄的從心裡升起,隨之而來的就是困頓彷徨。……我慢慢的明白,我之所以看不懂軟考教材,是因為這教材里的每一個章節,都是大學計算機專業里的一門課程。這個教材,更像是一個大綱一個提煉總結,是給那些已經學過了《計算機基礎和原理》、《編譯原理》、《數據結構和演算法》……的大學畢業生作為考前複習資料看的。所以,我要做的,就是先把這些所有的課程學一遍。
所以就有這個高潮部分了。
我來到圖書館,因為這裡的書夠多。比如數據結構,這本書我看不懂, 我就再找一本,還看不懂,我就再找一本……總有一本書,能用我懂的語言,告訴我這究竟是怎麼一回事!一本不行就兩本,兩本不行就三本……空蕩蕩的圖書館裡,我有一種進入了金庸武俠世界,博採眾長,修鍊高深武學的感覺。這種感覺不斷的刺激著我的腎上腺素分泌,那種日夜不止的亢奮,直到今日,我都再也沒有能體驗到過。
……在沒有任何基礎的情況下,我用4個月的時間,完成了大學四年的教程,一次性的通過了據說很多計算機專業畢業生都通不過的軟考!我像狼一樣的嚎叫,我淚流滿面咬牙切齒的叫囂,「就算我以後一輩子都是個笑話,我有這一次證明就夠了!就夠了!」有了實戰經驗,夯實了軟體基礎,從此就走上了人生巔峰?
NO, NO, NO! too young too simple,
接著花式虐狗:
注意:不是裝孫子。我就真是一個孫子!
正式上班的第一天,老大就甩給我一個100多頁的文檔,純英文的,讓我「先看看」。「先看看」是什麼意思?不懂啊,更不敢問……於是我就從第一頁開始看吧。真心看不懂,不是英文看不懂,是裡面的邏輯搞不懂……反正我就是不停的打瞌睡。睡又不敢睡,看又看不懂,問又不敢問,每天真的是如坐針氈如履薄冰。……老大的第二句話砸得我眼冒金星,「你先寫個設計文檔,給我看一下,然後我們就開工吧」!
如果可以自由表情的話,我的眼裡一定滿是淚水。設計文檔?傳說中的設計文檔?長什麼樣的?但現實是,我的眼神柔和而平靜,輕輕點頭,「好的」。但接下來寫代碼就慘了。因為多人合作,所以公司用的是源代碼控制工具TFS,這東西我根本就沒聽說過,更不知道怎麼用。小心翼翼的問了下同事,聽得迷迷糊糊似懂非懂就只好硬著頭皮上了。然後就闖禍了,一天下午,聽到同事叫了一聲,「咦?(代碼)怎麼跑不過了?編譯都不行啊?」我的心裡一緊。然後很快,就聽到諾大的辦公室此起彼伏的驚叫應和,一會兒就像一鍋粥一樣。「老葉,是你提交的代碼出了問題?」「啊?應該不會吧?」我後背開始冒汗。「怎麼不是?你看你看……」暈死!這MB的源代碼一條條記錄清清楚楚,捉賊捉贓,被抓現行了!「快點把它fix掉,別人(的代碼)都不能跑了」,見我還傻愣著,我們同事提醒我。「fix掉?怎麼fix掉?」我在心裡悲鳴。裝不下去了,只好硬著頭皮承認原來自己不會。「啊?」同事看了我一眼,還是過來幫忙吧。結果他也搞不定,「老葉,你究竟幹了些什麼呀?」「啊,嗯,那個……」我支支吾吾,我哪知道我幹了些什麼?我要知道,會是現在這個樣子么?
……日復一日,我悲慘的境遇沒有任何改變,不知道這種日子什麼時候是個頭。以上引用全部都在《折騰》三卷:孕育 (初稿)哪裡可以看到?有興趣的同學可以自己去看。很多人覺得很熱血很勵志,但只是因為這是「事後吹牛逼」。
其實每一步都是一個坎。很多人想學開發,買了一兩本書,聽了一兩節課,天書一樣,望而生畏,也就算了。這種人「連廟門都摸不到」,估計要佔到一半?剩下的下了狠心,死活硬撐著把培訓班之類讀完了(或者自學到一定階段吧),但沒有文憑沒有工作經驗,找不到對口的工作,只好先將就著找一份「相關的」工作,慢慢的漸行漸遠,也再也回不了頭了。就算好不容易找到了工作,開頭那段苦日子,也不是人過的。說句不好聽的話,現在大多數90後,從小嬌生慣養,受不得氣,前幾份工作換得走馬燈似的……換著換著很多人就放棄了。我上的培訓班,二十多個同學,畢業的時候只有十來個了,畢業後做開發的五六個,一直到現在還做開發的……我知道的就兩個。好了,講到這裡,其實我還是在說「很難」,「萬事開頭難」,本來如此。但具體到編程,到底哪裡難?還是不能迴避這個問題啊,我總結一下吧:
1、理解難。
不知道是不是因為計算機還剛剛發展的原因,軟體開發相關的書籍本身總量就很少,而且更麻煩的事,能稱之為「精品」的就更少。這裡所謂的「精品」,是指能深入淺出、通俗易懂的把道理說明白,說白了,面向初學者的書。
說都說到這裡來了,多說幾句吧。我發現很多人喜歡推崇「經典」(≈陳舊)的、「大部頭」(≈學究式)的書籍,感覺好像要「一般人都看不懂」的書才是好書。我始終覺得這很荒謬,當然,也可能是我境界還達不到。我對於這一類知識性的教科書,就一個要求,讓我以最快的時間獲取到正確的知識。不要和我繞彎子,又不是看《紅樓夢》;甚至不需要太精確,先給我一個大致的輪廓和印象都行。這樣的書屈指可數!所以,確實沒辦法,我只有硬啃啊。「這本書我看不懂, 我就再找一本,還看不懂,我就再找一本」,這其實是挺無奈的。而且計算機的很多底層的東西,非常複雜。什麼編譯原理,數據結構和演算法,我當時學這些東西的時候,就一個感覺:是不是世界上最聰明的人都來搞計算機了?他們的腦袋是怎麼把這些東西想出來的?以我涉獵的些許學科來說,其中的很多知識理解起來,需要的其實都是「常識」。比如法律,公平正義;比如經濟學,需求供給理智人;比如建築,構造力學……唯獨這個計算機底層相關的東西,究竟是些什麼鬼?!燒腦啊!就最簡單的排序為例。我能完全理解的就一個冒泡,勉強能理解的有一個好像叫「二分排序」,然後其他的各式各樣的排序演算法,完全是……算了,都是淚,壞名頭,不說了。2、實踐難。
有一些同學非常具有挑戰精神。難是吧?越難我越有勁!於是抱著書本就開始硬啃。結果大家當然能想得到了,然並卵。
計算機本質上是一個「實踐科學」。僅僅有理解,那是絕對不夠的。是騾子是馬,得牽出來遛遛。這就是很多計算機專業的同學畢業後找工作很難的原因。所謂「上不了手」啊。最簡單的,連一個開發環境都搭建不起來,代碼一報錯就傻眼,斷點調試全不會……實際開發中出現的問題是千奇百怪的,絕對不是你在學校機房,按照書本一點一點敲出來就OK的。同樣的,這方面的教材也非常非常的少。基本上只能靠大家自己摸索,或者運氣好的,單位上有老鳥帶一帶。所以才有這種說法:「上一個月的班,比你自己看一年的書都強」。這種實踐能力,確實是看書很難獲得的。+++++++++++++++++
呵呵,得順便安利一下這個東東:倡議:我們「一起幫」 - 自由飛 - 博客園。
希望能或多或少的解決一點這方面的問題。+++++++++++++++++
好的,說完了入門,我們接著說:編程難,提高更難。
其實想想這話像白說的一樣,因為任何一個行業做到一定程度再想要提高都很難。
一般來說,在這個行業待上兩年,再多也就三五年,就應該能入門了。(我個人覺得,入門的標準就是能獨立實現,自己崗位範圍內的,大部分的功能)
以我有限的閱歷來看(加這麼一句定語,不是謙虛,是心虛了),編程其實是一個很大的概念,但我喜歡把它分成兩種(簡單重申,以前回答/文章都反覆說過):
1、基礎類的計算機科學。大概就是編譯、演算法,數據結構之類的,個人覺得確實是拼智商的。我承認,我一直沒怎麼搞明白這些人是怎麼想出這些鬼主意的,我連弱爆了的排序都要掰著手指頭算,他們搞什麼樹啊圖啊之類的……沒辦法,只有膜拜!AlphaGo大戰李世石現場直播我一集沒拉下,心情一直不好了好幾天——總感覺自己就是或者很快就會是一個廢物一樣。
2、應用類的軟體工程。首先感謝主,讚美主,還是給了我這種傻子一條活路。在智商被碾壓之後還能看到一些不那麼需要智商的工作:IT民工——這不就是給我這個「包工頭」量身打造的么?你看,連名字都這麼像。我以前乾的是建築工程裝飾工程,現在叫軟體工程。
這一類型的開發工作,對於已經入門的開發人員而言,看上去非常簡單:後台「無非就是資料庫增刪改查」,前台就更簡單了,數據的顯示和傳遞而已……就算要點什麼新技術,「google+英語」就可以「卓越」,「百度+中文」就可以「應付」,一天到晚複製粘貼,修修補補,所以都說自己是個「搬磚的」。
怎麼突破這種日常的、平庸的、瑣碎的、繁雜的工作?
- 有的同學說,「往上爬,做管理吧」;
- 有的同學覺得管理玩不轉,「還是做技術吧,爭取做架構師」;
- 有的同學回頭啃以前懶得啃沒啃透的數據結構和演算法,「不要在做碼農了,我要做程序員」;
- 有的同學覺得樓下貼膜小哥的生意不錯,準備轉行了……
我個人覺得:1和4都轉行了,不在我們的討論範圍之類;3其實一開始就沒搞懂我之前說的「計算機科學」和「軟體工程」的區別;我們著重說一下2,「繼續做技術,做架構師」這條路。
其實寫代碼寫到一定的時候,你就會發覺:寫代碼就像寫文章。本質上,編程無非就是告訴計算機要怎麼怎麼的做,就像一個說明書或者命令集,給計算機下一道一道的命令,如果怎麼怎麼,就怎麼怎麼……
這裡有一道分水嶺:「會」和「好」的分水嶺。之前,是要「會」,比如語法正確、邏輯嚴密,要能和計算機正確溝通;但之後,是要「好」,這些命令要組織得「好」……
但首先怎麼個好法,這就很難講;接著,我要怎麼樣才能寫得這樣好,簡直沒法教。
最重要的是,選擇A還是選擇B,靠的是一種「權衡」。幾條路擺在面前,怎麼選?這就非常頭痛。
尤其是做著ABCD單選題長大的孩子來說,這簡直就是一場災難。因為是這樣也可以,那樣也可以,都可以,都對!你怎麼選?
你說既然都可以那我隨便選,天馬行空,想怎麼來就怎麼來!
但恰恰是你還不能這樣亂來,因為後面會出問題。不是電腦出問題,是人腦出問題。隨著項目代碼體量的加大,複雜度的加深,之前不是問題的問題都會一個接一個的冒出來,各個問題之間盤根錯節,牽一髮而動全身,讓你顧此失彼疲於奔命……
寫不下去了,呵呵。
因為這些東西,你經歷了才會懂,沒經歷我說了也是白說,你很難理解。
對於目前絕大多數的軟體工程而言,最難的其實就是「駕馭複雜度」,因為現在的軟體太複雜了!
+++++++++++++++++++
收錄於收藏夾:歡迎關注
野生程序員?www.zhihu.com
歡迎訪問關注,o(* ̄︶ ̄*)o可以加QQ群:729600626
+++++++++++++++++++
飛哥的另外一個新號:葉飛,有興趣的同學也可以關注一下喲!
其他回答說的挺明白了,我就直接推薦幾個實用的資源吧!
精選了 5 個非常不錯的計算機科學學習的 Github 倉庫!希望對大家有幫助!哭了哭了!如果我當時上大學的時候有人告訴我這些開源項目就好了!
視頻地址:https://www.bilibili.com/video/BV17E411G7fL
computer-science
- star :56.1k
- Github 地址:https://github.com/ossu/computer-science#intro-cs
- 介紹:通往計算機科學免費自學教育之路!計算機專業課程