程序猿(Programmer Monkey)是一種非常特殊的、可以從事程序開(kāi)發(fā)、維護(hù)的動(dòng)物。在行為和物種歸類上我們也可稱為碼字猴。一般分為程序設(shè)計(jì)猿和程序編碼猿,但兩者的界限并不非常清楚,都可以進(jìn)行開(kāi)發(fā)、維護(hù)工作,特別是在中國(guó),而且最重要的一點(diǎn),二者都是一種非常悲劇的存在。
相信作為一個(gè)有追求的程序員,你一定有自己的一套學(xué)習(xí)方法,看書(shū)就是其中一種。
比如書(shū)不離身,坐公交,坐長(zhǎng)途車,睡前床邊,甚至是有遇到紅燈堵車都會(huì)拿起身邊的書(shū)讀上一兩句的。
而今天我想談?wù),我關(guān)于學(xué)習(xí)的看法。
有的觀眾看完導(dǎo)讀部分就會(huì)問(wèn)了,樓主是什么級(jí)別的猿,也敢來(lái)分享學(xué)習(xí)方法?
在進(jìn)入正題之前,我想我有必要回答一下這個(gè)問(wèn)題。
1、很久沒(méi)有更新博客了,本來(lái)我也沒(méi)有信心更新,因?yàn)樵诩夹g(shù)的海洋里,我總是覺(jué)得越努力,學(xué)習(xí),越覺(jué)得自己的渺小。
但是身邊有個(gè)人一直鼓勵(lì)我,給我信心,告訴我其實(shí)已經(jīng)做的很不錯(cuò)了,我十分感動(dòng)。
于是我覺(jué)得不該吝嗇自己的方法,因?yàn)榉椒ú粚氋F,寶貴的是行動(dòng),和堅(jiān)持行動(dòng)。
2、最近園子里有好多無(wú)聊而沒(méi)營(yíng)養(yǎng)的話題,我覺(jué)得對(duì)許多童鞋是一種無(wú)形的傷害。
一會(huì)在說(shuō)某某技術(shù)不如某某技術(shù),意思就是說(shuō)干這個(gè)學(xué)這個(gè)沒(méi)前途,不如勸大家轉(zhuǎn)行。
一會(huì)在談職場(chǎng)那跳與不跳之間,或者是說(shuō)做技術(shù)沒(méi)有做某某有前途。
這些信息在無(wú)形之中打擊我們的前進(jìn)動(dòng)力,而我希望有一股力量能與這股怨念抗衡。
我想說(shuō)的是,我們是男人,不是怨婦,我們需要發(fā)揮力量,而不是抱怨聲。
3、我本覺(jué)得發(fā)出來(lái)意思不大,反正總有人誤解,或者保持反對(duì)意見(jiàn),也肯定會(huì)被噴。
但是有個(gè)人鼓勵(lì)我,他說(shuō)或許你發(fā)表的文章有人看了會(huì)有幫助呢。
也有人告訴我說(shuō),你已經(jīng)蠻優(yōu)秀了,就算是再優(yōu)秀的人,也有人說(shuō)不好,走自己的路讓別人去說(shuō)吧。
選擇方向
選擇一個(gè)方向,選擇適合自己的職業(yè),并做好職業(yè)規(guī)劃。我把它放在了第一條,因?yàn)樗苤匾腔A(chǔ),是方向標(biāo)。
也是我開(kāi)始學(xué)習(xí)的第一步,在我充滿動(dòng)力開(kāi)始買最好的書(shū),看最好的老師的視頻,選最好的教材之前做的一件事情。
那是我畢業(yè)的那陣子,正思考著大學(xué)到底學(xué)了什么?我到底該干什么?抱著這種迷茫,我在各行各業(yè)投遞了簡(jiǎn)歷。
在等待面試通知的一段時(shí)間里,我尋找著答案,我什么都在了解,
了解企業(yè)管理,了解企業(yè)文化,了解如何做人,了解如何做事,了解如何賣一件產(chǎn)品,了解經(jīng)濟(jì)是個(gè)什么東西,如何去追女孩子。
我曾想過(guò)我能否當(dāng)一名大師級(jí)的攝影師,也想過(guò)我能否做一個(gè)成功的生意人,也有想過(guò)我能否當(dāng)一名歌手進(jìn)入娛樂(lè)圈。
最后只因?yàn)橐郧安欢碌臅r(shí)候說(shuō)過(guò)的一句話,選擇了現(xiàn)在的職業(yè)!拔乙(dāng)高級(jí)程序員”
說(shuō)話要算話么,所以我做到了。就在我成為一名普通程序員的時(shí)候,我的一個(gè)好友在我的QQ上貼上了架構(gòu)師的標(biāo)簽。
我覺(jué)得這個(gè)標(biāo)簽很合適,所以一直就放著,目的也很明顯了。
有些事冥冥之中自有安排,你如果是這種人,就會(huì)走到這一步,不管是有意,還是無(wú)意,不管走了多少?gòu)澛罚罱K還是會(huì)走到這一步。
所以,有人說(shuō)搞技術(shù)沒(méi)前途,不如做管理,不如做銷售,這種P話我壓根就沒(méi)相信過(guò)。
或者我會(huì)說(shuō),“你Y不早說(shuō),等我選好職業(yè)選好英雄了你才說(shuō)有P用啊”。
所以,當(dāng)你選擇好一個(gè)方向時(shí),你的抗干擾能力會(huì)提高n的倍數(shù),心也不會(huì)在這個(gè)花花世界里到處游蕩。
選擇行業(yè)
又是選擇,選擇是一個(gè)很重要的環(huán)節(jié),解決了這個(gè)問(wèn)題,后面學(xué)習(xí)道路就舒坦多了。
程序員這個(gè)職業(yè)很特殊,因?yàn)檐浖?yīng)用領(lǐng)域很廣泛。
所以軟件行業(yè)按職稱分又分為可以分為嵌入式工程師,軟件設(shè)計(jì)師(高級(jí)程序員),系統(tǒng)架構(gòu)師,系統(tǒng)分析師,項(xiàng)目管理規(guī)劃師,網(wǎng)絡(luò)規(guī)劃師,數(shù)據(jù)庫(kù)管理員。。。
按領(lǐng)域劃分,搞教育事業(yè)的,搞科學(xué)研究的,搞企業(yè)應(yīng)用的,搞互聯(lián)網(wǎng)的,搞電子電路的,搞工業(yè)數(shù)控的。
這些領(lǐng)域所需要的知識(shí)結(jié)構(gòu)和技術(shù)都有點(diǎn)差距的,選好了就不要輕易的換了,選好了就不要糾結(jié)了。
這樣你會(huì)少了很多煩惱,選好了做個(gè)決定。
所謂選擇比努力重要,意思不是說(shuō)選了教育事業(yè)卻發(fā)現(xiàn)人家搞互聯(lián)網(wǎng)風(fēng)生水起,就覺(jué)得選錯(cuò)了要重新選。
而是說(shuō)選擇了,再去努力,重新選擇努力白費(fèi)。
打個(gè)比方,我們搞ERP開(kāi)發(fā),搞了幾年發(fā)現(xiàn)不就是CRUD,沒(méi)搞頭,不然搞網(wǎng)游去吧,然后有些那邊的directx不懂,3D圖形不精,會(huì)設(shè)計(jì)ERP流程但不會(huì)設(shè)計(jì)RPG劇情,PHP/JSP/ASP等WEB開(kāi)發(fā)技術(shù)多少要荒廢些,之前有很多努力白費(fèi)。
就好像有的銷售是賣藥的,他的客戶不是藥店,就是經(jīng)銷商。忽然去賣車了,銷售技巧和理念是相通的沒(méi)錯(cuò),但是之前辛苦建立的人脈就有損失了。
所以以前有人跟我說(shuō)程序語(yǔ)言是相通的,會(huì)一種其他都會(huì)了,我問(wèn)誰(shuí)告訴你的,他說(shuō)老師說(shuō)的,我不爭(zhēng)論我笑了。
系統(tǒng)學(xué)習(xí)
如果你已經(jīng)做好了選擇,那么恭喜你,你一定能夠分辨出什么對(duì)你是重要的,你的注意力會(huì)集中在一點(diǎn),然后爆發(fā)。
在爆發(fā)之前還需要強(qiáng)化一些綜合的知識(shí)結(jié)構(gòu),不要什么資料都在網(wǎng)上搜索,那樣太不系統(tǒng),久而久之會(huì)產(chǎn)生一種恐懼。
那新事物的恐懼,因?yàn)槟阃耆恢浪菑哪睦锩俺鰜?lái)的,等它冒出來(lái)了以后你會(huì)覺(jué)得怎么又一個(gè)新的名詞沒(méi)接觸過(guò)。
我先講個(gè)故事,以前群,群里有個(gè)大神,大神被許多小菜膜拜,直到有一天,大神有所領(lǐng)悟,對(duì)一群小菜說(shuō),“我現(xiàn)在才知道算法是多么的重要,程序到底不外乎就是些算法!保缓髵伋龈鞣N算法名詞,于是一群人就跟著學(xué)算法。
各位觀眾,能看出一些問(wèn)題嗎?
程序(面向過(guò)程)=數(shù)據(jù)結(jié)構(gòu)+算法;程序(面向?qū)ο?=對(duì)象+消息;
我表達(dá)的是,在這個(gè)園子里,有的人會(huì)說(shuō)算法很重要,有的人會(huì)反駁.Net里面算法不太重要,到底重不重要?這個(gè)問(wèn)題將搞得許多小鳥(niǎo)很糾結(jié)。
或許每天都有人拿出一個(gè)技術(shù)的名詞是你沒(méi)見(jiàn)過(guò)的,如果你沒(méi)有對(duì)計(jì)算機(jī)軟件有個(gè)大范圍的系統(tǒng)性地了解,是很容易在技術(shù)的海洋里迷失方向的。
而跟讀大學(xué)課程,能夠讓你對(duì)計(jì)算機(jī)有個(gè)系統(tǒng)性的了解。
注意一下,有的人說(shuō)大學(xué)里學(xué)不到東西,有幾種可能性的:
1、自身問(wèn)題,沒(méi)學(xué),當(dāng)然學(xué)不到東西。(每天就知道敗家和泡妞,沒(méi)有人生目標(biāo))
2、學(xué)校問(wèn)題,師資差,教材差,氛圍差。(老師混口飯吃,教材接不上,C++語(yǔ)法都沒(méi)教,直接MFC來(lái)了誰(shuí)學(xué)得會(huì),或者干脆北大青鳥(niǎo)教材當(dāng)大學(xué)教材)
3、是學(xué)不到,學(xué)不到太多對(duì)工作直接有幫助的。(名牌大學(xué),其實(shí)此人技術(shù)高超,由于大學(xué)基礎(chǔ)扎實(shí),懂得原理,后面學(xué)Java比一般人輕松,比一般人快,但學(xué)校真沒(méi)教Java)
總結(jié),搜集好一點(diǎn)的學(xué)校的課程,有條件看國(guó)外的也行。懂得原理,將不再對(duì)新技術(shù)產(chǎn)生恐懼。
這里推薦一些大綱:C/C++語(yǔ)法(以后有許多著名的書(shū)籍是用這個(gè)語(yǔ)言描述的,比如網(wǎng)絡(luò)編程、設(shè)計(jì)模式),C#/java(二選一,以后將會(huì)遇到許多著名的書(shū)籍用這個(gè)語(yǔ)言描述,學(xué)一種,另一種語(yǔ)法保證你看得懂),WEB開(kāi)發(fā)(js,html,asp/php/jsp選一種了解一下Web開(kāi)發(fā)原理和CGI的那點(diǎn)事),數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)原理(或許你有一天會(huì)接觸到分布式事務(wù),集群,鎖的概念在其他領(lǐng)域也經(jīng)常遇到,不太推薦用oracle來(lái)學(xué)習(xí)原理),嵌入式系統(tǒng)開(kāi)發(fā)(被編入系統(tǒng)架構(gòu)師大綱,了解一點(diǎn)沒(méi)什么不好),軟件工程(涉及到一些設(shè)計(jì)方法學(xué)、敏捷開(kāi)發(fā),極限編程,項(xiàng)目管理),計(jì)算機(jī)網(wǎng)絡(luò)(5層協(xié)議,了解一下,以后WCF、socket等都用的是這些原理)
細(xì)化深化
經(jīng)歷以上三步,堅(jiān)持下來(lái)的一般都是人才了,有目標(biāo),有想法,有規(guī)劃,又受過(guò)高等教育。
在懂得原理的情況下,深入學(xué)習(xí)任何一方面應(yīng)該都不難,但深入學(xué)習(xí)還是有方法的。
綜合提升等級(jí),比如說(shuō)你要深入研究數(shù)據(jù)庫(kù),不要想一下子把數(shù)據(jù)庫(kù)研究到底,除非你的工作就只是研究數(shù)據(jù)庫(kù)。
因?yàn)橛辛饲懊鎺撞阶鲣亯|,再根據(jù)吸引力法則,你自然而然會(huì)學(xué)得很深入。比如遇到一個(gè)問(wèn)題,一個(gè)報(bào)表SQL語(yǔ)句查詢有3分鐘,那肯定需要調(diào)優(yōu)了,你會(huì)從各種原理入手開(kāi)始優(yōu)化,表設(shè)計(jì)、索引類型、外鍵,約束,返回結(jié)果集、關(guān)系模型和非關(guān)系模型、條件、函數(shù)索引、分區(qū)、執(zhí)行計(jì)劃、跟蹤,經(jīng)過(guò)努力,報(bào)表終于查詢的速度終于可以接受了,但是在這個(gè)過(guò)程當(dāng)中,你不止是用到數(shù)據(jù)庫(kù)。
還考慮到網(wǎng)絡(luò)傳輸,有的人說(shuō)寫(xiě)存儲(chǔ)過(guò)程減少網(wǎng)絡(luò)傳輸開(kāi)銷,那又有什么所謂,根據(jù)實(shí)際情況網(wǎng)絡(luò)環(huán)境,根據(jù)帶寬計(jì)算一下網(wǎng)絡(luò)傳輸?shù)拇鷥r(jià),內(nèi)部局域網(wǎng),還是英特網(wǎng),局域網(wǎng)的話會(huì)產(chǎn)生多少?gòu)V播風(fēng)暴,考慮并發(fā)性。如果情況允許的話可以多次操作數(shù)據(jù)庫(kù)。有些人還喜歡在存儲(chǔ)過(guò)程里面寫(xiě)業(yè)務(wù)邏輯,把業(yè)務(wù)邏輯層該做的事情都做了,結(jié)果程序中沒(méi)有業(yè)務(wù)邏輯,沒(méi)有業(yè)務(wù)對(duì)象,重用性很低。然后數(shù)據(jù)庫(kù)里面存儲(chǔ)過(guò)程套存儲(chǔ)過(guò)程再套函數(shù),想法是很好,只可惜用的是關(guān)系型數(shù)據(jù)庫(kù),不是面向?qū)ο髷?shù)據(jù)庫(kù),這么來(lái)有點(diǎn)過(guò)了。
為了減少數(shù)據(jù)庫(kù)I/O的開(kāi)銷,還用了服務(wù)器緩存,緩存、數(shù)據(jù)庫(kù)內(nèi)存深入下去又是內(nèi)存,到最后又是操作系統(tǒng)層面的東西了。
學(xué)了要用,書(shū)看了要做,做完要分享出來(lái)?戳藭(shū)后,寫(xiě)點(diǎn)Demo,想想應(yīng)用場(chǎng)景,再應(yīng)用到實(shí)踐當(dāng)中,最后和朋友交流或者分享到博客。這樣才是真的學(xué)到了,分享出來(lái)既鍛煉語(yǔ)言組織能力和溝通能力,又可以保持一種狀態(tài)。
結(jié)束
關(guān)于學(xué)習(xí),就討論到這里。
等忙過(guò)一陣子后,我打算再寫(xiě)點(diǎn)東西,一些用的到的東西。