畢業(yè)了就失業(yè),靠自學(xué)吃上編程這碗飯
今天給大家說(shuō)說(shuō)小崔的事兒,說(shuō)說(shuō)小崔做軟件開發(fā)這一行的事兒。
小崔現(xiàn)在的本職工作是在軟件公司做管理,核心開發(fā)語(yǔ)言是Java。
2000年入行,先用ASP語(yǔ)言開發(fā)網(wǎng)站、Delphi開發(fā)PC軟件、后用C#做Web開發(fā),07年開始接觸Java,到現(xiàn)在10年了。今天把這些舊事翻出來(lái),其實(shí)也沒(méi)有什么經(jīng)驗(yàn)可言,只是由來(lái)已久的想把這些經(jīng)歷記下來(lái),卻一直沒(méi)有認(rèn)真整理,今天算是一個(gè)靈光一現(xiàn),既然動(dòng)筆了,便寫成了一篇文章。
車床
大學(xué)期間,我的專業(yè)是機(jī)械,畫過(guò)圖紙、打過(guò)鐵、鑄造過(guò)模型飛機(jī)、造過(guò)小榔頭。就是沒(méi)有正經(jīng)八百的學(xué)過(guò)編程,我這人其實(shí)很喜歡研究一些神奇的知識(shí),對(duì)于死板的東西就沒(méi)有什么興趣。因此我對(duì)機(jī)械這些東西完全沒(méi)有興趣,卻一門心思喜歡軟件開發(fā)。
大學(xué)期間就總泡在圖書館看計(jì)算機(jī)方面的書,那時(shí)候身邊沒(méi)有做軟件開發(fā)的朋友,老師們都是專業(yè)做機(jī)械的,對(duì)計(jì)算機(jī)編程也是不懂的。因此學(xué)習(xí)起來(lái)是完全沒(méi)有頭緒,根本不知道應(yīng)該如何入門,每次去圖書館都是隨便找一本書就看,看了半天也不知道到底說(shuō)了點(diǎn)兒什么,也不知道那里面的知識(shí)怎么用于實(shí)踐。
其實(shí)現(xiàn)在想想,我們大學(xué)圖書館的藏書量還是很大的,書的質(zhì)量也是非常高的,但作為一個(gè)IT菜鳥,沒(méi)有一點(diǎn)兒的基礎(chǔ),這么看書完全摸不到門徑的??梢韵胂筮@樣的學(xué)習(xí)效率也是非常的低的,基本就是保持了讀書的興趣,但對(duì)知識(shí)的攝入其實(shí)是少的可憐。
在這個(gè)過(guò)程中,靠著小車不倒只管推的精神,我軟件硬件的書都看了些。讓我最感興趣的還是編程語(yǔ)言類的圖書,當(dāng)時(shí)自己還是挺明確自己以后想做軟件開發(fā)的。但是具體用何種語(yǔ)言就不知道了,也不知道外面公司都用什么開發(fā)語(yǔ)言。當(dāng)時(shí)已經(jīng)知道的語(yǔ)言有Basic、C/C++、Dephi,還有Java,由于Basic是最簡(jiǎn)單的,其實(shí)那會(huì)兒自己練習(xí)的時(shí)候更多的是學(xué)習(xí)Basic。當(dāng)時(shí)記得自己寫過(guò)簡(jiǎn)單的計(jì)算器,還練習(xí)做過(guò)簡(jiǎn)單的畫布類的程序。
語(yǔ)言無(wú)所謂
現(xiàn)在想想,學(xué)習(xí)這種事兒都是在猶豫中讓時(shí)間錯(cuò)過(guò)了,當(dāng)時(shí)每本書拿到手里都只看前兩章,后面就難了,或者需要上機(jī)練習(xí)了,就懶得繼續(xù)學(xué)習(xí)。給自己的借口是到底哪種語(yǔ)言好呢?當(dāng)時(shí)看不起B(yǎng)asic語(yǔ)言,覺得這個(gè)太low了。就總想學(xué)C,但C又太難了,根本學(xué)不進(jìn)去。其實(shí)真正培養(yǎng)自己編程的感覺語(yǔ)言,還就是Basic那幾個(gè)特別簡(jiǎn)單的小練習(xí),讓自己知道了邏輯數(shù)學(xué)的核心就是判斷,編程只有順序、分叉和循環(huán)三種流程。
所以,如果有新人看到這篇文的話,奉勸一句,別猶豫應(yīng)該學(xué)習(xí)哪個(gè)語(yǔ)言,無(wú)論是入門還是精通,語(yǔ)言都無(wú)所謂,所謂觸類旁通,學(xué)會(huì)一種再學(xué)別的是很容易的。
入行
大學(xué)畢業(yè)后,我沒(méi)有做機(jī)械這行,直接去找的軟件開發(fā)的工作。
但是這時(shí)候才發(fā)現(xiàn),自己真是對(duì)軟件開發(fā)一竅不通,面試都通過(guò)不了。
這時(shí)候才痛下決心得認(rèn)真學(xué)門語(yǔ)言了。這時(shí)候也不挑了,就找簡(jiǎn)單容易上手的語(yǔ)言。
當(dāng)時(shí)選的是Delphi,覺得這個(gè)語(yǔ)法簡(jiǎn)單,Delphi的IDE也好用,做windows應(yīng)用開發(fā)很方便。
這時(shí)候還學(xué)習(xí)了SQL語(yǔ)言,其實(shí)自己根本不知道主動(dòng)學(xué)習(xí)數(shù)據(jù)庫(kù),在面試的時(shí)候被問(wèn)到會(huì)SQL嗎?答曰不會(huì)。被拒。然后才開始學(xué)習(xí)SQL的。
當(dāng)時(shí)學(xué)習(xí)條件很艱苦,我舍不得買書,就每天騎自行車跑圖書大廈,白看書,一看就是一天,中午樓下買個(gè)燒餅吃。晚上回家后在電腦上試驗(yàn),寫點(diǎn)兒小練習(xí)。做練習(xí)也很困難,2000年初的網(wǎng)絡(luò)環(huán)境很差,撥號(hào)上網(wǎng),網(wǎng)速也就是3K/秒,相當(dāng)于2G時(shí)代的手機(jī)上網(wǎng)速度,并且網(wǎng)上資源很少。
就這么學(xué)了1個(gè)多月吧,面試到一家公司,是本地一家電腦城的網(wǎng)站部,做網(wǎng)站。
總結(jié)這段時(shí)間自學(xué),基本來(lái)說(shuō)大學(xué)時(shí)期看了好多的書還是有用的,對(duì)計(jì)算機(jī)編程多少有點(diǎn)兒感覺,所以一個(gè)月的自學(xué)就入門了。
只是入門后也很尷尬,學(xué)的是Delphi,盡管靠這個(gè)找到了工作,但工作了十幾年了,幾乎沒(méi)怎么用Delphi寫過(guò)軟件。
ASP做網(wǎng)站
在***家公司做網(wǎng)站,發(fā)現(xiàn)與自己想想的差別很大,以為有個(gè)網(wǎng)站部,10來(lái)個(gè)開發(fā)人員,咱可以跟前輩們學(xué)習(xí)學(xué)習(xí)。
實(shí)際這家公司網(wǎng)站部就空有其名,以前的技術(shù)人員辭職走了,我去了就是唯一的程序員。
然后一看人家的網(wǎng)站,發(fā)現(xiàn)是我從來(lái)沒(méi)見過(guò)的語(yǔ)言-- ASP。這是微軟早期為了簡(jiǎn)單的小網(wǎng)站開發(fā)的一種Basic語(yǔ)法的腳本語(yǔ)言,可以非??焖俚慕ㄕ???梢岳斫鉃镻HP的簡(jiǎn)化版,也不準(zhǔn)確,應(yīng)該是PHP的超級(jí)簡(jiǎn)化版,簡(jiǎn)化到最簡(jiǎn)單。
這真是一個(gè)非常簡(jiǎn)陋的網(wǎng)站,用一種非常簡(jiǎn)陋的語(yǔ)言。我當(dāng)時(shí)卻不懂,因?yàn)閺膩?lái)學(xué)軟件開發(fā)都是打算做windows應(yīng)用程序,這是***次接觸web應(yīng)用程序。
之前我僅僅接觸過(guò)web相關(guān)的HTML,那時(shí)候看了一本介紹HTML的書,也就讀了1個(gè)小時(shí),感覺這種標(biāo)簽式的語(yǔ)言很簡(jiǎn)單。
這時(shí)候算是從頭學(xué)習(xí)ASP,當(dāng)時(shí)感覺壓力山大啊。
當(dāng)時(shí)辦公室有一本介紹ASP的書,我就看那邊書,然后讀網(wǎng)站的源代碼。硬著頭皮搞了3天左右,居然感覺通透了,可以修改網(wǎng)站的bug了,網(wǎng)站有新功能要增加,我也可以自己開發(fā)了。
就這樣,開始了我ASP開發(fā)的兩年生涯。
憑借ASP開發(fā)的技能,兩年內(nèi)又換了兩家公司,做了好幾個(gè)網(wǎng)站。
在第三家公司的時(shí)候,對(duì)于編程語(yǔ)言已經(jīng)很嫻熟了,盡管還是主要用ASP,但偶爾也用Delphi和Asp.net做開發(fā)。那個(gè)時(shí)候,開始接觸.net開發(fā)框架了。
.NET階段
第三年,我跳到了所在城市***的科技公司,這家公司是移動(dòng)公司的全資子公司。
說(shuō)真的,現(xiàn)在看看這家公司真是臥虎藏龍,我能進(jìn)去純粹憑著我這人嘴皮子還算不錯(cuò),面試做的還不錯(cuò)。
當(dāng)時(shí)在這家公司我還是負(fù)責(zé)做網(wǎng)站,不過(guò)那個(gè)網(wǎng)站的體量就不同了,是全省范圍使用的營(yíng)業(yè)廳網(wǎng)站。而開發(fā)語(yǔ)言也采用C#了,那是微軟的.NET開發(fā)框架里的一種開發(fā)語(yǔ)言。
現(xiàn)在想想,我也不知道怎么就學(xué)會(huì)這門語(yǔ)言了,在我的印象中,我后來(lái)再學(xué)各種語(yǔ)言似乎都挺簡(jiǎn)單的,公司需要或者個(gè)人興趣要用到新的語(yǔ)言,拿過(guò)來(lái)手冊(cè)看看,然后把開發(fā)工具裝好寫幾個(gè)練習(xí),這門語(yǔ)言就入門了?;疽簿蛢扇斓墓Ψ颉?/p>
其實(shí)真不用覺得快,我后來(lái)跟同行們聊天,基本對(duì)于新語(yǔ)言的理解都是這樣,學(xué)習(xí)一門語(yǔ)言很容易。
這個(gè)階段我成長(zhǎng)比較快,負(fù)責(zé)過(guò)省里的項(xiàng)目、參與過(guò)集團(tuán)的的項(xiàng)目,跟IBM、惠普,還有國(guó)內(nèi)的各大廠家都有過(guò)合作,逐漸開始負(fù)責(zé)項(xiàng)目,擔(dān)任項(xiàng)目經(jīng)理了。
Java生涯
07年的時(shí)候,公司要求技術(shù)轉(zhuǎn)型,全體員工一條線,全部改用JAVA。當(dāng)時(shí)正好有一個(gè)新項(xiàng)目要開始,與IBM合作開發(fā),IBM的牛人幫我們搭建了Struts+Spring+Hibernate的框架。大家學(xué)了1星期,就開始了JAVA開發(fā)之路了。
當(dāng)時(shí)都是使用Struts2+Spring3+Hibernate3這樣的架構(gòu)。用了1年后,逐漸發(fā)現(xiàn)Struts這個(gè)架構(gòu)實(shí)在有問(wèn)題,性能、安全性都不好,開發(fā)還不友好。
當(dāng)時(shí)不太懂得軟件行的思想 -- 不重復(fù)造輪子,結(jié)果自己摸索著基于Servlet做了一個(gè)封裝,自己寫了一個(gè)簡(jiǎn)單的MVC框架?,F(xiàn)在想想有點(diǎn)兒無(wú)知者無(wú)畏,不過(guò)也確實(shí)把Java的東西摸熟悉了。
后來(lái)發(fā)現(xiàn)SpringMVC框架是如此優(yōu)秀,再看自己寫的框架,太Low了,就改行用SpringMVC+Spring+HIbernate。
后來(lái)帶項(xiàng)目的時(shí)候,發(fā)現(xiàn)手下的新人用Hibernate的時(shí)候,經(jīng)常會(huì)寫出性能很低下的代碼,感覺這是Hibernate天生決定的,適合有經(jīng)驗(yàn)的人使用,新人使用開發(fā)效率是高了,但執(zhí)行效率太低了。
因此開發(fā)框架又改為SpringMVC+Spring+MyBatis,最早用的時(shí)候還是iBatis,后來(lái)才是MyBatis。
現(xiàn)在看看,Hibernate的那些問(wèn)題完全可以通過(guò)加緩存來(lái)解決的。
***推薦的架構(gòu)
這兩年,在Java的開發(fā)框架上,采用的SpringBoot提供底層微服務(wù),向上暴露出RestFul接口。表現(xiàn)層采用Nodejs。結(jié)構(gòu)巨優(yōu)雅。
結(jié)束語(yǔ)
今年41歲了,在30歲的時(shí)候就經(jīng)常聽到有人說(shuō)快干不動(dòng)了,以后不寫程序了,要做管理、要做市場(chǎng)。
我覺得也沒(méi)錯(cuò),現(xiàn)在主要是做管理,市場(chǎng)方面也離不開我,不過(guò)編程這么好玩兒的事兒,為什么要丟棄呢?這是我這樣一個(gè)老程序員的最喜歡的游戲,愛好是一輩子的事兒,怎能放棄。
寫下來(lái),也不是說(shuō)介紹經(jīng)驗(yàn),我始終覺得自己不是個(gè)成功人士,但是在技術(shù)方面還是挺自豪的。只是希望有興趣做軟件這行的新人,看了我的經(jīng)歷,得到一些鼓勵(lì),只要堅(jiān)持就一定能學(xué)好軟件開發(fā)的,入了門其實(shí)這行很簡(jiǎn)單。