泡杯茶,我們慢慢聊。

編程難,首先入門就難。

「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. 有的同學說,「往上爬,做管理吧」;
  2. 有的同學覺得管理玩不轉,「還是做技術吧,爭取做架構師」;
  3. 有的同學回頭啃以前懶得啃沒啃透的數據結構和演算法,「不要在做碼農了,我要做程序員」;
  4. 有的同學覺得樓下貼膜小哥的生意不錯,準備轉行了……

我個人覺得:1和4都轉行了,不在我們的討論範圍之類;3其實一開始就沒搞懂我之前說的「計算機科學」和「軟體工程」的區別;我們著重說一下2,「繼續做技術,做架構師」這條路。

其實寫代碼寫到一定的時候,你就會發覺:寫代碼就像寫文章。本質上,編程無非就是告訴計算機要怎麼怎麼的做,就像一個說明書或者命令集,給計算機下一道一道的命令,如果怎麼怎麼,就怎麼怎麼……

這裡有一道分水嶺:「會」和「好」的分水嶺。之前,是要「會」,比如語法正確、邏輯嚴密,要能和計算機正確溝通;但之後,是要「好」,這些命令要組織得「好」……

但首先怎麼個好法,這就很難講;接著,我要怎麼樣才能寫得這樣好,簡直沒法教。

最重要的是,選擇A還是選擇B,靠的是一種「權衡」。幾條路擺在面前,怎麼選?這就非常頭痛。

尤其是做著ABCD單選題長大的孩子來說,這簡直就是一場災難。因為是這樣也可以,那樣也可以,都可以,都對!你怎麼選?

你說既然都可以那我隨便選,天馬行空,想怎麼來就怎麼來!

但恰恰是你還不能這樣亂來,因為後面會出問題。不是電腦出問題,是人腦出問題。隨著項目代碼體量的加大,複雜度的加深,之前不是問題的問題都會一個接一個的冒出來,各個問題之間盤根錯節,牽一髮而動全身,讓你顧此失彼疲於奔命……

寫不下去了,呵呵。

因為這些東西,你經歷了才會懂,沒經歷我說了也是白說,你很難理解。

對於目前絕大多數的軟體工程而言,最難的其實就是「駕馭複雜度」,因為現在的軟體太複雜了!

+++++++++++++++++++

收錄於收藏夾:歡迎關注

野生程序員?

www.zhihu.com圖標

歡迎訪問關注,o(* ̄︶ ̄*)o可以加QQ群:729600626

+++++++++++++++++++

飛哥的另外一個新號:葉飛,有興趣的同學也可以關注一下喲!


其他回答說的挺明白了,我就直接推薦幾個實用的資源吧!

精選了 5 個非常不錯的計算機科學學習的 Github 倉庫!希望對大家有幫助!哭了哭了!如果我當時上大學的時候有人告訴我這些開源項目就好了!

視頻地址:https://www.bilibili.com/video/BV17E411G7fL

computer-science

  1. star :56.1k
  2. Github 地址:https://github.com/ossu/computer-science#intro-cs
  3. 介紹:通往計算機科學免費自學教育之路!計算機專業課程

這個項目是國外的一個組織開源的,所有的內容都是網路課程,基本上是免費的,內容主要包括 計算機科學核心知識與計算機科學進階知識。我們選擇計算機核心知識下的核心編程部分的課程來看看,可以看到第一門課程就是教我們如何編程的!因為我之前註冊過,所以我這裡直接就可以查看課程,第一次看的話需要先註冊一下。

TeachYourselfCS-CN (自學計算機科學)

  1. star :0.8k
  2. Github 地址:https://github.com/keithnull/TeachYourselfCS-CN
  3. 介紹:TeachYourselfCS 的中文翻譯。內容超級棒!如果你是一個自學成才的工程師,或者從編程培訓班畢業,那麼你很有必要學習計算機科學。幸運的是,不必為此花上數年光陰和不菲費用去攻讀一個學位:僅僅依靠自己,你就可以獲得世界一流水平的教育。在這份指引中會為你解答:你應當學習哪些科目,為什麼?對於這些科目,最好的書籍或者視頻課程是什麼?

CS-Xmind-Note(計算機基礎思維導圖學習筆記)

  1. star :0.6k
  2. Github 地址:https://github.com/SSHeRun/CS-Xmind-Note
  3. 介紹:計算機專業課(408)思維導圖和筆記:計算機組成原理(第五版 王愛英),數據結構(王道),計算機網路(第七版 謝希仁),操作系統(第四版 湯小丹)

zju-icicles(浙江大學課程攻略共享計劃)

  1. star :15.6k
  2. Github 地址:https://github.com/QSCTech/zju-icicles
  3. 介紹:各種選課攻略、電子版教材、平時作業答案等內容!希望前人走過的彎路,後人就不必再走。這是作者的信念,也是作者建立這個項目的原因。

REKCARC-TSC-UHT(清華大學計算機系課程攻略)

  1. star :12.2k
  2. Github 地址:https://github.com/PKUanonym/REKCARC-TSC-UHT
  3. 介紹:清華大學計算機系課程攻略。受浙江大學相關項目啟發,創立了本項目。吧!


不會的,誰一開始不都是計算機基礎為零啥都不會呢,我上大學的時候除了摸過小霸王學習機對計算機一無所知,不也學好了嘛,現在的孩子們好歹上大學之前會打字吧,條件要好太多。

不過,你要是已經工作多年,想要轉行搞計算機,我勸你死了這條心。


不會的。

我上大學,學計算機的時候,除了會用電腦打字,打遊戲,聊 QQ 之外,跟計算機專業相關的知識也什麼都不會。

大學的計算機課程也是從基礎開始教你的,說明大部分人都需要,都是從零開始的。大學計算機課程一開始又不是高級課程,為啥會痛苦呢?

想學,就努力學,喜歡計算機就報就行了,別糾結。


會的,你們學校類似「翻轉課堂」「研討」這類的必修課必修內容越多,越痛苦


推薦閱讀:
相关文章