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