自學編程真的很難嗎?有多難?難在哪裡?

自學編程真的很難嗎?有多難?難在哪裡?

“編程難嗎?”這是很多人想轉編程,或者是想學編程的都會問到,都會考慮到的問題。那這篇文章就來說說編程難,有多難?難在哪裡?

編程難,首先入門就難。

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

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

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

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

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

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

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

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

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

寫不下去了,呵呵。

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

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

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

收藏於:

編程那些事:菜鳥入門·一起幫​

17bang.ren

歡迎訪問關注,o(* ̄︶ ̄*)o

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

自學編程真的很難嗎?有多難?難在哪裡?

最後很煞風景的加個推廣,為了混口飯吃呀O(∩_∩)O哈哈~

飛哥辦了一個IT培訓班,http://ASP.NET全棧開發,線上全程直播,可以免費收看;線下拎包入住,按周收費。如果你是碼農或者是有興趣瞭解編程的可以加QQ群:729600626(一起幫·源棧·有意向)大家相互學習交流O(∩_∩)O哈哈~


分享到:


相關文章: