有人覺(jué)得IT行業(yè)門(mén)檻低嗎?
我想題主所說(shuō)的IT行業(yè),指的是其中的開(kāi)發(fā)工程師吧?我是一名經(jīng)過(guò)培訓(xùn)入行的軟件工程師,到目前已經(jīng)工作了將近8個(gè)年頭了,我認(rèn)為IT行業(yè)門(mén)檻低是相對(duì)于過(guò)去來(lái)說(shuō)的,通過(guò)培訓(xùn)確實(shí)可以實(shí)現(xiàn)行業(yè)入門(mén),但是想要百尺竿頭更進(jìn)一步,還是要下苦功的。下面我就談?wù)勎业目捶ò桑绻斜硎霾粶?zhǔn)確的地方,歡迎各位童鞋指正,如有遺漏,歡迎補(bǔ)充。
門(mén)檻變低先來(lái)談一談門(mén)檻吧。任何行業(yè)都有一定的門(mén)檻,軟件開(kāi)發(fā)也不例外。隨著編程語(yǔ)言越來(lái)越簡(jiǎn)單,各種中間件和開(kāi)源庫(kù)的成熟程度和性能的不斷提升,開(kāi)發(fā)人員可以不用過(guò)多的關(guān)注很多與業(yè)務(wù)無(wú)關(guān)的技術(shù)細(xì)節(jié)。基于這種技術(shù)紅利,從業(yè)的門(mén)檻而確實(shí)比多年前要低了很多,但僅僅是相對(duì)過(guò)去而言。
一、編程語(yǔ)言門(mén)檻在降低
從時(shí)間維度來(lái)看,編程語(yǔ)言共分為三個(gè)階段。
(一) 第一代語(yǔ)言:機(jī)器語(yǔ)言。我們都知道計(jì)算機(jī)其實(shí)很“傻”,只認(rèn)識(shí)0和1,因此第一代的編程語(yǔ)言就是由0和1構(gòu)成的機(jī)器語(yǔ)言。用0/1編程的問(wèn)題非常明顯,難理解、效率低、易出錯(cuò)、維護(hù)困難等等。面對(duì)一堆亂七八糟的紙帶,很難將其和IT掛起鉤,可想而知機(jī)器語(yǔ)言的入門(mén)難度有多高!
(二)第二代語(yǔ)言:匯編語(yǔ)言。因?yàn)闄C(jī)器語(yǔ)言編程的困難,偉大的工程師們創(chuàng)造了匯編語(yǔ)言,匯編語(yǔ)言通過(guò)易于人們理解和記憶的特定字母代替指令,這樣理解和閱讀的難度就大大降低了。這樣就需要有專(zhuān)門(mén)的“翻譯”將特定的字母翻譯成計(jì)算機(jī)可識(shí)別的0/1,編譯器就是在這個(gè)階段誕生的。雖說(shuō)匯編語(yǔ)言使用了人類(lèi)相對(duì)好識(shí)別的方式來(lái)表示0/1,但是依舊存在易出錯(cuò)、難維護(hù)、效率低的問(wèn)題。在大學(xué)期間學(xué)習(xí)微機(jī)原理時(shí)曾經(jīng)學(xué)習(xí)過(guò)匯編語(yǔ)言,確實(shí)非常的晦澀難懂。不是還流行那么一句順口溜么:微機(jī)原理鬧危機(jī),隨機(jī)過(guò)程隨機(jī)過(guò),實(shí)變函數(shù)學(xué)十遍,匯編語(yǔ)言不會(huì)編。(三)第三代語(yǔ)言:高級(jí)語(yǔ)言。高級(jí)語(yǔ)言又分面向過(guò)程語(yǔ)言和面向?qū)ο笳Z(yǔ)言。C語(yǔ)言是面向過(guò)程變成語(yǔ)言中的佼佼者,同期的其他語(yǔ)言基本已經(jīng)被拋棄了,但是C語(yǔ)言一直沿用了下來(lái),至今仍然在占據(jù)著TIOBE編程語(yǔ)言榜單的重要位置(難道在給C語(yǔ)言起名字的時(shí)候就有C位一說(shuō)么?);而面向過(guò)程語(yǔ)言中的佼佼者就是C++和Java,尤其是Java語(yǔ)言,憑借其開(kāi)源及優(yōu)秀的可移植性,占據(jù)著很大的市場(chǎng)。在高級(jí)語(yǔ)言時(shí)期,編程語(yǔ)言的語(yǔ)法更加的友好,可讀性和可維護(hù)性更強(qiáng),使得語(yǔ)言的學(xué)習(xí)難度進(jìn)一步的降低。而Java作為面向?qū)ο笳Z(yǔ)言中的佼佼者,還接管了讓人頭疼的指針和內(nèi)存管理工作(其實(shí)是JVM的能力),使得其學(xué)習(xí)難度進(jìn)一步的降低。
此外,腳本語(yǔ)言也逐漸流行起來(lái)。火爆的Python和Go都出現(xiàn)在了TIOBE的TOP20榜單中。
編程語(yǔ)言的不斷“革命”,其實(shí)就是編程語(yǔ)言學(xué)習(xí)門(mén)檻在不斷降低的有力證明,因?yàn)榇蠹铱偸歉矚g簡(jiǎn)單且高效的事物。
二、強(qiáng)大的公共組件支持
現(xiàn)在的軟件開(kāi)發(fā)離不開(kāi)各種組件(中間件、應(yīng)用級(jí)框架等),組件為我們的開(kāi)發(fā)提供了很多的便利條件,讓我們的程序員能夠?qū)⒏嗟木ν度氲綐I(yè)務(wù)邏輯上。我們不妨設(shè)想一下,如果沒(méi)有了框架和中間件,即使有Java這種高級(jí)語(yǔ)言的存在,想快速構(gòu)建一個(gè)系統(tǒng)也是非常困難的。為了能夠更加直觀的體會(huì)到組件的發(fā)展,我將結(jié)合我從業(yè)以來(lái)應(yīng)用級(jí)框架的發(fā)展情況進(jìn)行介紹。
(一)J2EE。這是一個(gè)Java官方牽頭制定,并得到廣泛認(rèn)可的企業(yè)級(jí)規(guī)范。在這套規(guī)范中,我們可以通過(guò)servlet組件來(lái)很便捷的處理WEB請(qǐng)求,使用jsp組件對(duì)頁(yè)面進(jìn)行動(dòng)態(tài)的渲染,使用JDBC與數(shù)據(jù)庫(kù)建立良好的交互。J2EE不需要開(kāi)發(fā)者關(guān)注傳輸層協(xié)議(這部分工作由WEB中間實(shí)現(xiàn)),僅需要關(guān)注應(yīng)用層實(shí)現(xiàn)即可,但是基于Servlet/jsp進(jìn)行開(kāi)發(fā)還是比較繁瑣的。我來(lái)簡(jiǎn)單介紹下使用Servlet/jsp進(jìn)行開(kāi)發(fā)的一些基本流程,童鞋們可以感受一下。
創(chuàng)建web項(xiàng)目;
編寫(xiě)
web.xml
文件(web.xml
是J2EE的核心配置文件,也是應(yīng)用和中間件連接的橋梁);編寫(xiě)Filter、Servlet;
編寫(xiě)Jsp動(dòng)態(tài)頁(yè)面;
打成war包,并提交到web中間件上。
主要的工作在第3步,在開(kāi)發(fā)過(guò)程中需要考慮字符集、線程安全問(wèn)題,還需要手動(dòng)獲取請(qǐng)求參數(shù)、手動(dòng)寫(xiě)出應(yīng)答數(shù)據(jù),程序最終需要發(fā)布到web中間件上來(lái)運(yùn)行。
(二)SSH,這是Spring+Struts2+Hibernate的簡(jiǎn)寫(xiě)。SSH很好的落地了MVC模式,由Struts2負(fù)責(zé)業(yè)務(wù)控制層處理,HIbernate封裝對(duì)數(shù)據(jù)庫(kù)的操作,Spring負(fù)責(zé)解耦以及整個(gè)項(xiàng)目的整合。相對(duì)于Servlet/jsp來(lái)說(shuō),SSH確實(shí)要在編碼方面簡(jiǎn)化了不少,不再需要人工的獲取參數(shù),也不需要“寫(xiě)死”依賴到代碼中,繁瑣的數(shù)據(jù)庫(kù)事務(wù)也被AOP接管。雖然相對(duì)Servlet來(lái)說(shuō)少了不少開(kāi)發(fā)工作量,但是超多的配置文件和jar包的依賴成了開(kāi)發(fā)人員的負(fù)擔(dān),曾經(jīng)有些開(kāi)發(fā)人員戲稱(chēng)自己為配置工程師~。
(三)SSM,Spring+SpringMVC+MyBatis的簡(jiǎn)寫(xiě)。簡(jiǎn)單而安全的SpringMVC代替了Struts2(繁瑣且頻繁有漏洞),輕量高效的MyBatis代替了Hibernate(框架比較重,問(wèn)題也比較多)。注解的出現(xiàn),使得項(xiàng)目的配置內(nèi)容大幅度減少。于此同時(shí),Maven也流行了起來(lái),可以比較方便的管理項(xiàng)目的第三方依賴。
(四)SpringBoot,SpringBoot的優(yōu)秀可以通過(guò)其流行程度來(lái)證明。在SpringBoot中內(nèi)嵌了web容器,并且提供了豐富的plugin,可以讓項(xiàng)目以jar包的方式運(yùn)行。此外,對(duì)依賴jar包的管理也更加簡(jiǎn)單,在其他方面也提供了一站式服務(wù)的能力。
綜合java主流的應(yīng)用級(jí)框架的發(fā)展情況來(lái)看,雖然都是基于J2EE標(biāo)準(zhǔn),但是從開(kāi)發(fā)、配置、管理、運(yùn)維等方面都在不斷的進(jìn)行提升,應(yīng)用框架將很多與業(yè)務(wù)無(wú)關(guān)的技術(shù)細(xì)節(jié)進(jìn)行了處理,開(kāi)發(fā)人員只需要關(guān)注相應(yīng)的業(yè)務(wù)實(shí)現(xiàn)即可。
可見(jiàn),隨著語(yǔ)言門(mén)檻的不斷降低,應(yīng)用框架及相關(guān)組件日益成熟,IT從業(yè)的門(mén)檻是相對(duì)(過(guò)去)較低的。
培訓(xùn)速成我們需要對(duì)入門(mén)有一個(gè)相對(duì)客觀的定義,我認(rèn)為入門(mén)的標(biāo)準(zhǔn)為:具備獨(dú)立承擔(dān)開(kāi)發(fā)任務(wù)的能力(有師父帶的那種不算)。現(xiàn)階段對(duì)開(kāi)發(fā)人員的最低(入門(mén)級(jí),外包公司能賣(mài)人頭的那種。大廠、獨(dú)角獸、互聯(lián)網(wǎng)等等尖端的先不計(jì)算在內(nèi))要求主要包括四個(gè)方面(行業(yè)/公司還會(huì)有其他要求):
語(yǔ)言,需要熟練掌握語(yǔ)言的語(yǔ)法(編譯都過(guò)不去的不能要)
API,需要熟悉常見(jiàn)的API(String、Date、IO、BIO等)
框架,SSM、SpringBoot(應(yīng)用層面必須掌握)
數(shù)據(jù)庫(kù),基本增刪改查、關(guān)聯(lián)查詢要掌握
單從以上四點(diǎn)來(lái)看,幾乎所有java培訓(xùn)班提供的課程安排都是能覆蓋到的,但是,從我參加培訓(xùn)的情況以及后續(xù)從培訓(xùn)機(jī)構(gòu)招聘的情況來(lái)看,學(xué)員之間的差距還是非常大的,差不多滿足2/8原則吧(畢竟培訓(xùn)班是商業(yè)化機(jī)構(gòu))。
因此,“靠培訓(xùn)就可以入門(mén)”有點(diǎn)絕對(duì)了,培訓(xùn)就是學(xué)習(xí)的過(guò)程,一定會(huì)有差異,除了自身的努力之外,還要看老天爺賞不賞飯。所以,報(bào)班還是要理性一些。另外,選擇培訓(xùn)機(jī)構(gòu)也要謹(jǐn)慎(有些培訓(xùn)機(jī)構(gòu)會(huì)存在學(xué)員畢業(yè)直接成講師的情況),一定要試聽(tīng)!
培訓(xùn)速成是適用于老天爺賞飯并且自身還非常努力的同學(xué)的!
程序員是一個(gè)需要持續(xù)學(xué)習(xí)的職業(yè),IT也是一個(gè)需要持續(xù)學(xué)習(xí)的行業(yè),入門(mén)不是目的,走下去才是目的,只有持續(xù)學(xué)習(xí)才能在這條路上走的更遠(yuǎn)!與君共勉!
我是一名程序員,更多精彩請(qǐng)關(guān)注:空心小窩頭