為什么網(wǎng)上總有人說WEB開發(fā)沒技術(shù)含量?
2020-11-10 05:06:33
確實(shí),WEB開發(fā)毫無技術(shù)含量。
早在十幾年前,我就會(huì)WEB開發(fā)了。
只不過,到現(xiàn)在,我還沒學(xué)完……
目前總結(jié)下來一共經(jīng)歷了下面幾個(gè)階段:
第一階段:能跑就行、全面開花
第二階段:全棧開發(fā)、整站落地
第三階段:并發(fā)挑戰(zhàn)、容量挑戰(zhàn)
第四階段:理論探究、行知結(jié)合
第五階段:閱讀源碼、探求本源
第六階段:構(gòu)建地基、制造輪子
第七階段:架構(gòu)規(guī)劃、協(xié)調(diào)開發(fā)
同時(shí)本文也可以作為各位WEB開發(fā)者甚至軟件開發(fā)者的進(jìn)階指南。
不過我的水平有限,更高的階段還未開啟。僅供參考。
第一階段:能跑就行、全面開花
我最早開始WEB開發(fā)的切入點(diǎn)是……是WEB頁面設(shè)計(jì)。
對(duì)的,你沒有聽錯(cuò),頁面設(shè)計(jì)!就是畫WEB頁面。當(dāng)時(shí)加入了某校園網(wǎng)站。曾獲教育部十佳網(wǎng)站,日訪問在15萬到30萬之間。
所以我熟練掌握各種PhotoShop技能。
當(dāng)時(shí)設(shè)計(jì)的很多網(wǎng)頁的源文件也都還在。剛在自己找了下作品看了下,那些作品放在十年前倒也還湊活。但是,總讓人覺著怪怪的。
是的,當(dāng)年的我也很快發(fā)現(xiàn)了這一點(diǎn):技術(shù)還行,審美太差!
我是我的業(yè)余職業(yè)生涯遇到了瓶頸。
我這還沒入行,就遇到了瓶頸!你能感受那種無助么。。。
于是我,轉(zhuǎn)行了!
自此之后,我也會(huì)偶爾帶帶頁面設(shè)計(jì)的新人,但是守住底線,只傳授技術(shù),絕不出作品。
而后,我還是投入到新興的前端開發(fā)工作中,并帶起了一個(gè)前端團(tuán)隊(duì)。
這方面的工作做了兩三年,熟讀《CSS權(quán)威指南》,導(dǎo)致我現(xiàn)在看到鮭魚都覺著熟悉。
各種嵌套、定位、JQuery、浮動(dòng)……都不是問題。當(dāng)時(shí)最大的挑戰(zhàn)在于:瀏覽器兼容。
有些老派的人在用IE6,而有些已經(jīng)IE8IE9,更大的挑戰(zhàn)在于許多人用那時(shí)十分火爆的360瀏覽器、搜狗瀏覽器……各種瀏覽器對(duì)規(guī)范的支持各不相同,一片混亂。我們則是頁面寫一周,兼容調(diào)半月,苦不堪言。
再后來,我學(xué)會(huì)了世界上最好的語言:PHP!
頁面設(shè)計(jì)、前端開發(fā)、后端開發(fā),我打通了!
于是,我自己開發(fā)了一些小的站點(diǎn),幸福感爆棚。
這時(shí)的我,還會(huì)Flash呢,用ActionScript寫點(diǎn)交互動(dòng)畫也不是問題。還做過小游戲,開心~
所以,那時(shí)的我自信地高呼:WEB開發(fā)沒技術(shù)含量!
對(duì)于用到的工具是什么原理,管它呢!我的站點(diǎn)能跑!那么多人用!都說我是大神!
對(duì)了,在這一階段,會(huì)CRUD+百度就足夠了!多了沒用!
第二階段:全棧開發(fā)、整站落地
頁面設(shè)計(jì)、前端開發(fā)、后端開發(fā),全都會(huì)了,那還得了?
在學(xué)校么,閑著也是閑著!
拉了一幫人接活了!
不過,確切說是總有活找上來,有時(shí)候看著學(xué)期初沒啥事,就接了。
各個(gè)方向都找一個(gè)人,我做協(xié)調(diào),四個(gè)人就能接手個(gè)項(xiàng)目。甚至,或者就某個(gè)方向的人不用找,我頂上,三個(gè)人也能開工。反正我也會(huì)。
有些學(xué)院的網(wǎng)站開發(fā)之類的,直接接過來做掉!
這時(shí)遇到了服務(wù)器、域名、部署、升級(jí)、運(yùn)維問題。
沒事,兵來將擋,水來土掩。有百度呢!
曾經(jīng)接過香港高校的單子,是個(gè)實(shí)驗(yàn)室的項(xiàng)目。賺的都是港幣!不過當(dāng)時(shí)真沒經(jīng)驗(yàn),鉚足了勁要價(jià),要低了人家還給機(jī)會(huì)讓我們?cè)賵?bào)一次,還是要低了……真是沒見過世面,不會(huì)要太高。
幾個(gè)項(xiàng)目搞下來,發(fā)現(xiàn)技術(shù)毫無長進(jìn),就是不斷重復(fù)。倒是團(tuán)隊(duì)磨合了不少,簡直都快流水線作業(yè)了。幾個(gè)人不用見面,都能把活干了!
技術(shù)沒長進(jìn),就說明WEB開發(fā)的技術(shù)已經(jīng)到頭了,一定是這樣……哈哈
所以,WEB開發(fā)不過如此。
所以,那時(shí)的我會(huì)悄悄地說:WEB開發(fā)沒技術(shù)含量!
注意,要悄悄地!自己賺錢的東西,大聲說,這不絕了自己的財(cái)路。
不過在開發(fā)中,也遇到了一些算法問題。
管他的,網(wǎng)上都能搜到!修改下,就能跑!
又不是不能用!
第三階段:并發(fā)挑戰(zhàn)、容量挑戰(zhàn)
之前做的項(xiàng)目都是能跑就行。簡單來說,能跑就是成功,不能跑就再改!
但是,進(jìn)入公司正式工作開始面臨一些新的問題:并發(fā)問題、容量問題。
比如典型的,一個(gè)應(yīng)用需要部署多個(gè)節(jié)點(diǎn)啊,多個(gè)應(yīng)用的分布式節(jié)點(diǎn)之間互相依賴啊。依賴存在先后關(guān)系啊等等。
于是乎,分布式登場了,攜帶著一眾相關(guān)知識(shí):分布式一致性、分布式存儲(chǔ)、分布式計(jì)算、分布式鎖、分庫、分表、分流、讀寫分離……還附帶了一眾相關(guān)框架:KafkaRabbitookeeperRabbitMQRocketMqEtcd……
以上我就不列舉了,大家耳熟能詳。
那段時(shí)間,我就主要在學(xué)習(xí)。
當(dāng)然學(xué)習(xí)不只是學(xué)會(huì)用,也要考慮其實(shí)現(xiàn)原理。可以動(dòng)手自己實(shí)現(xiàn)下。
例如下面是個(gè)RPC的最小實(shí)現(xiàn),用來學(xué)習(xí)RPC就很好。
而且那段時(shí)間我在參與一些集群部署的項(xiàng)目。就是通過網(wǎng)站來完成應(yīng)用的部署、升級(jí)、配置等工作,涉及到制品管理、質(zhì)量管理等各個(gè)環(huán)節(jié)……表面呈現(xiàn)是一個(gè)網(wǎng)頁,后面東西一大堆……
但是,我知道,那些都是紙老虎,沒什么難的!
畢竟,WEB開發(fā)沒技術(shù)含量,能有什么難的。
第四階段:理論探究、行知結(jié)合
并發(fā)挑戰(zhàn)、容量挑戰(zhàn)遇到的多了,我也學(xué)的多了。
功夫不負(fù)有心人,腦袋里終于成了一鍋漿糊……
于是,我開始走上另一條路:理論研究。
我開始直接研究分布式理論,還包括相關(guān)的論文啊,都掏出來讀一讀……
尤其是論文,這東西,就是一個(gè)引用鏈,越讀越多。
對(duì)了,我研究生階段也搞了些這個(gè),但是理解沒這么透徹,反而是這個(gè)階段的閱讀讓我對(duì)研究生階段的工作理解的更深了……神奇啊……
這個(gè)階段,WEB開發(fā)技術(shù)沒啥長進(jìn)。但是理解透徹了。
這段時(shí)間在設(shè)計(jì)一些分布式的系統(tǒng)。然后發(fā)現(xiàn)我開始會(huì)用理論模型指導(dǎo)系統(tǒng)架構(gòu)了!這技能,就是妙手偶得之啊!
賺了。
我就說么,WEB開發(fā)有啥難的,讀讀論文就能順便提升了。
第五階段:閱讀源碼、探求本源
WEB開發(fā)也回了,論文也讀了。整體框架也清晰了。
什么各種中間件啊,在整個(gè)系統(tǒng)中的誕生原因,發(fā)展方向,在理論知識(shí)的指導(dǎo)下,也都能理得順順的。甚至我能夠設(shè)計(jì)一套出來。
哎?
這時(shí)問題來了!
那我設(shè)計(jì)的,和開源成品有沒有區(qū)別啊?我和人家的差距在哪?
這個(gè)問題,除了我,沒人能給我答案:首先,周圍極少有人熟悉中間件的原理細(xì)節(jié);其次,別人也不知道我想怎么設(shè)計(jì)啊。
于是,沒辦法了,下水!
自己開始啃源碼。
難!真難!
別人寫的上萬行、上十萬行代碼,你要看懂,能不難么?
當(dāng)我啃了幾個(gè)項(xiàng)目的源碼之后,發(fā)現(xiàn)過程很難,但是收獲真的很大。
漸漸地,我甚至覺著應(yīng)該寫一本書來幫助其他人閱讀源碼。
- 最開始,書中想向大家總結(jié)源碼閱讀的方法和技巧;
- 又怕大家覺著太虛,沒有實(shí)際的示例,所以直接以MyBatis的源碼作為示例;
- 又怕大家讀不懂MyBatis內(nèi)核的源碼,所以每個(gè)章節(jié)前增加了閱讀本節(jié)源碼所需要的基礎(chǔ)知識(shí);
- 既然源碼都讀了,于是便一邊讀一遍將項(xiàng)目的架構(gòu)思想總結(jié)出來,教大家一些架構(gòu)思想。
于是,書成了包含基礎(chǔ)知識(shí)+真實(shí)源碼閱讀示例+架構(gòu)知識(shí)總結(jié)+源碼閱讀經(jīng)驗(yàn)總結(jié)的書。
是的,后來這本書真的寫成了,歷時(shí)許久,整整有400頁。光配套項(xiàng)目就寫了倆。
書厚成本就高,于是想刪減一些,結(jié)果出版社編輯老師覺著寫的太棒了,不舍得。又不能賣的太貴,最終也只能定個(gè)相對(duì)于400頁是個(gè)極低的價(jià)格。
于是就有了這本《通用源碼閱讀指導(dǎo)書》,最近剛剛上架(可能很多店鋪還沒貨,只是預(yù)售)。
淘寶價(jià)格便宜不少,這個(gè)有貨了:
官方正版 通用源碼閱讀指導(dǎo)書--MyBatis源碼詳解 易哥 架構(gòu)師程序員提升源碼閱讀系統(tǒng)架構(gòu)軟件開發(fā)能力書籍 電子工業(yè)出版社書寫的比較誠心,不是奔著賺錢去的。不過為了編輯老師,我還是要多說幾句。
400頁賣100,價(jià)格就比較低了,然后編輯老師覺著這本書寫得好,還要出繁體字版。
而我就怕賣的不好連累她。然后,一句“經(jīng)濟(jì)效益好當(dāng)然好”讓我覺著更加對(duì)不住。畢竟,分享知識(shí)是我的業(yè)余愛好,知乎不給錢我不也寫的開開心心。還時(shí)常丟出幾個(gè)段子。
但出版書籍卻是編輯老師的工作。工作可不能“經(jīng)濟(jì)效益好當(dāng)然好,不好就當(dāng)作為傳播知識(shí)做貢獻(xiàn)了。”
注:
寫書的時(shí)候?yàn)榱舜蠹夷茏x懂,所以把MyBatis用中文注釋了一遍,于是有了MyBatis中文注釋版。這個(gè)不用買書就能看,因?yàn)槲野阉_源放出來了,放在https://github.com/yeecode/MyBatisCN
然后為了大家讀源碼能讀懂,又寫了好多示例項(xiàng)目,也開源了。這個(gè)就不在這推薦了,因?yàn)闆]有書本內(nèi)容,這些示例也就沒有了前后文,很難對(duì)大家有幫助。
寫書那段時(shí)間是最累的,上班寫代碼、下班寫書寫代碼,基本是從早9點(diǎn)到晚上1點(diǎn)。體重一度重了20斤。所以勸大家還是不要學(xué)我,身體最重要。
曾經(jīng)有一段時(shí)間我覺著不值得,現(xiàn)在到覺著還好,因?yàn)闀鴮懲旰笞灾屏s束我重新健身,現(xiàn)在身體恢復(fù)了。
當(dāng)然,這本書也得到了外方出版社的肯定。所以,接下來會(huì)在臺(tái)灣發(fā)行繁體版。
如果買了,別忘了先讀讀前言,感受下一個(gè)讀源碼的程序員的自白。
不過總的來說,編程不難,你看我,讀讀源碼技能就提升了,還能寫本書。順便讓身體體驗(yàn)下增重減重的感覺。有啥難的。
讀源碼一兩年,我發(fā)現(xiàn),我的設(shè)計(jì)方案和源碼十分一致了。甚至我有很多地方有更好的方案。
所以么,看,WEB開發(fā)有什么難!看看源碼就能提升!
第六階段:構(gòu)建地基、制造輪子
理論也積累了,人家源碼咱也看了。
那寫代碼肯定就是統(tǒng)籌規(guī)劃全面設(shè)計(jì)了啊,復(fù)制粘貼這種事情離我是越來越遠(yuǎn)了。
實(shí)現(xiàn)功能也開始考慮各種設(shè)計(jì)模式、范式、軟件質(zhì)量指標(biāo)、架構(gòu)規(guī)范、架構(gòu)風(fēng)格……于是寫出來的模塊也越來越通用了。
這就不是輪子么?!
當(dāng)然,工作上的輪子都是保密的輪子,不能往外拿。
下班回家也寫點(diǎn)小輪子玩,這個(gè)會(huì)開源出來。就例如下面的。
這些項(xiàng)目都不錯(cuò),大家可以收藏。
高性能輕量級(jí)分布式權(quán)限系統(tǒng)強(qiáng)大且易用的操作日志記錄系統(tǒng),支持對(duì)象屬性的變化分析在程序運(yùn)行過程中動(dòng)態(tài)增刪和切換數(shù)據(jù)源的工具
上面都是我寫的一些小輪子,大家看看題目,喜歡的就去隨便取用,留著將來自己造車就好。
業(yè)余寫輪子挺開心的,有時(shí)候半夜突然有個(gè)好的想法,可以開燈就寫!自由度很高!兼職就是程序員自己的樂土!上班寫的項(xiàng)目是不可能這樣的,畢竟,得考慮業(yè)務(wù)影響。
這燈不錯(cuò),用了幸福感強(qiáng),與我的超寬屏也很相稱。
對(duì)的,要想開源寫得好,家中設(shè)施不能少。怎么選配工作電腦之類的,可以看我的這篇文章。
怎樣配置一臺(tái)實(shí)用且性價(jià)比較高的辦公類電腦?總之,搭建一個(gè)不錯(cuò)的工作環(huán)境,能讓你在家坐下就不想起來,碼字如有神!對(duì)著筆記本寫幾個(gè)開源項(xiàng)目,指尖疼的厲害。我之前用K380,寫了幾十萬字的書之后,手指都要廢了。
還有,開源輪子寫到后期,也得保證穩(wěn)定和兼容。現(xiàn)在上面的ObjectLogger項(xiàng)目我就動(dòng)的很謹(jǐn)慎了,因?yàn)閺穆?lián)系我的人來看,應(yīng)該不少人用了它。
就是么,輪子都能造了。WEB開發(fā)有啥難的!
當(dāng)然,在這個(gè)階段也規(guī)劃開發(fā)了好過項(xiàng)目,涉及面很廣……Linux、PowerShell的腳本、FTP、文件存儲(chǔ)等等,還給一些工具開發(fā)了一些插件,設(shè)計(jì)開發(fā)了許多系統(tǒng)等等。
漸漸地就發(fā)現(xiàn),WEB只是一種用戶交互的展現(xiàn)形式。其內(nèi)在實(shí)現(xiàn),需要各方面的知識(shí)。
組里前端小伙伴也在造輪子,什么SVG實(shí)現(xiàn)Graph的自由組裝和動(dòng)態(tài)編排、自由拖動(dòng)的樹組件啊啥的,都是他的頭發(fā)換來的。也是厲害的很。
第七階段:架構(gòu)規(guī)劃、協(xié)調(diào)開發(fā)
能力越大,責(zé)任就越大。
上班造輪子、下班造輪子那可不行,得負(fù)責(zé)項(xiàng)目規(guī)劃開發(fā)啊。
從項(xiàng)目需求開始、然后模型、然后論證、定方案、攻克核心難點(diǎn)、排期、控進(jìn)度、推廣……
業(yè)務(wù)要求、人手、項(xiàng)目質(zhì)量、擴(kuò)展性……這些內(nèi)外部因素都是要考慮的。
其中架構(gòu)規(guī)劃項(xiàng)目是首要的,因此,要熟悉各方面的知識(shí):前端、后端、服務(wù)器、文件存儲(chǔ)、分布式、各種中間件等等……
項(xiàng)目協(xié)調(diào)也是需要的,因此,各個(gè)需求方的討論、方案的討論、反饋地接收、項(xiàng)目匯報(bào)的準(zhǔn)備、項(xiàng)目方向的把控等等……
這方面我就不多說了,知道的也有限,慢慢學(xué)吧,我還年輕。
不過話說回來了,WEB開發(fā)有啥難的,把上面的都做好就行了。
一點(diǎn)貌似無關(guān)但是很重要的事情:
你要說真正的難點(diǎn)……從第一階段到第七階段,健身都不能落下,頭發(fā)也盡量別落下。要不容易倒在半路上。
我從研究生就一直健身,每周夜跑兩三次,每次8公里左右。高峰期可以夜跑25公里、臥推85kg。
最差的時(shí)候,就是寫《通用源碼閱讀指導(dǎo)書》的時(shí)候,明顯感覺肚子上的肉有褶。整個(gè)人也很虛弱。
沒辦法,無論是寫程序還是寫書,都是不到一個(gè)階段不好停下來的,所以經(jīng)常一坐就4、5個(gè)小時(shí)。
現(xiàn)在漸漸恢復(fù)了,體重、體脂都回到了標(biāo)準(zhǔn)值,腹肌也回來了。小米體重秤健康評(píng)分100,身體年齡20左右。我活過來了!
還是希望大家在編程的前進(jìn)路上一定要記得保重身體,畢竟,編程只是興趣和工作,而身體則是健康和生命。
繼續(xù)說回到WEB開發(fā)。
其實(shí),WEB只是一種用戶交互的展現(xiàn)形式,同桌面客戶端、移動(dòng)客戶端、命令行一樣,只是一種展現(xiàn)的形式,是皮毛。
而軟件系統(tǒng)最核心的應(yīng)該是內(nèi)在架構(gòu)、算法、風(fēng)格、組件,這些都是和展現(xiàn)形式無關(guān)的。
如果一個(gè)開發(fā)者還停留在用展現(xiàn)形式來衡量一個(gè)軟件的難易程度的水平,段位不會(huì)太高。
同樣的,如果一個(gè)開發(fā)者用編程語言來衡量軟件項(xiàng)目的難易程度,段位也不會(huì)太高。
另外,評(píng)論中有一點(diǎn)我也比較贊同。是說如果沒有強(qiáng)大的自驅(qū)、大神指引、業(yè)務(wù)驅(qū)動(dòng),一個(gè)人處在上面的每個(gè)階段,都會(huì)有自己到達(dá)了天花板的錯(cuò)覺。一旦這樣,便會(huì)讓人長時(shí)間難以進(jìn)步,這是要克服和避免的。
我不是什么大神,也在不斷學(xué)習(xí)中。但以上是我十年摸索進(jìn)階的總結(jié),希望能給大家?guī)磉M(jìn)階上的指引。如果大家讀完能有收獲,我也萬分榮幸。
技術(shù)的道路上,多做、多學(xué),原本會(huì)的也便不會(huì)了,原本不會(huì)的也便會(huì)了。
大家好,我現(xiàn)在是一個(gè)高級(jí)軟件架構(gòu)師。
所以,表面上這是一篇逗逼文,實(shí)際上這是一張目前我能勾畫出的進(jìn)階圖。逗逼的言語,只是為了能讓你讀完,然后多些收獲。
軟件開發(fā)也一樣,堅(jiān)持做下去,就會(huì)有收獲。
前進(jìn)道路上的你我,一起加油!
為自己、為社會(huì)、或偉大、或渺小!
來,最后再來一句:WEB開發(fā)有啥難的?
我是架構(gòu)師易哥,我會(huì)偶爾分享軟件架構(gòu)和開發(fā)相關(guān)的知識(shí)。關(guān)注我,讓W(xué)EB開發(fā)不再難。