为什么网上总有人说WEB开发没技术含量?
保留所有版权,请引用而不是转载本文(原文地址 https://yeecode.top/blog/38/ )。
确实,WEB开发毫无技术含量。
早在十几年前,我就会WEB开发了。
只不过,到现在,我还没学完……
目前总结下来一共经历了下面几个阶段:
第一阶段:能跑就行、全面开花
第二阶段:全栈开发、整站落地
第三阶段:并发挑战、容量挑战
第四阶段:理论探究、行知结合
第五阶段:阅读源码、探求本源
第六阶段:构建地基、制造轮子
第七阶段:架构规划、协调开发
同时本文也可以作为各位WEB开发者甚至软件开发者的进阶指南。
不过我的水平有限,更高的阶段还未开启,仅供参考。
第一阶段:能跑就行、全面开花
我最早开始WEB开发的切入点是……是WEB页面设计。
对的,你没有听错,页面设计!就是画WEB页面。当时加入了某校园网站。曾获教育部十佳网站,日访问在15万到30万之间。
所以我熟练掌握各种PhotoShop技能。
当时设计的很多网页的源文件也都还在。刚在自己找了下作品看了下,那些作品放在十年前倒也还凑活。但是,总让人觉着怪怪的。
是的,当年的我也很快发现了这一点:技术还行,审美太差!
我是我的业余职业生涯遇到了瓶颈。
我这还没入行,就遇到了瓶颈!你能感受那种无助么。。。
于是我,转行了!
自此之后,我也会偶尔带带页面设计的新人,但是守住底线,只传授技术,绝不出作品。
而后,我还是投入到新兴的前端开发工作中,并带起了一个前端团队。
这方面的工作做了两三年,熟读《CSS权威指南》,导致我现在看到鲑鱼都觉着熟悉。
各种嵌套、定位、JQuery、浮动……都不是问题。当时最大的挑战在于:浏览器兼容。
有些老派的人在用IE6,而有些已经IE8\IE9,更大的挑战在于许多人用那时十分火爆的360浏览器、搜狗浏览器……各种浏览器对规范的支持各不相同,一片混乱。我们则是页面写一周,兼容调半月,苦不堪言。
再后来,我学会了世界上最好的语言:PHP!
页面设计、前端开发、后端开发,我打通了!
于是,我自己开发了一些小的站点,幸福感爆棚。
这时的我,还会Flash呢,用ActionScript写点交互动画也不是问题。还做过小游戏,开心~
所以,那时的我自信地高呼:WEB开发没技术含量!
对于用到的工具是什么原理,管它呢!我的站点能跑!那么多人用!都说我是大神!
对了,在这一阶段,会CRUD+百度就足够了!多了没用!
第二阶段:全栈开发、整站落地
页面设计、前端开发、后端开发,全都会了,那还得了?
在学校么,闲着也是闲着!
拉了一帮人接活了!
不过,确切说是总有活找上来,有时候看着学期初没啥事,就接了。
各个方向都找一个人,我做协调,四个人就能接手个项目。甚至,或者就某个方向的人不用找,我顶上,三个人也能开工。反正我也会。
有些学院的网站开发之类的,直接接过来做掉!
这时遇到了服务器、域名、部署、升级、运维问题。
没事,兵来将挡,水来土掩。有百度呢!
曾经接过香港高校的单子,是个实验室的项目。赚的都是港币!不过当时真没经验,铆足了劲要价,要低了人家还给机会让我们再报一次,还是要低了……真是没见过世面,不会要太高。
几个项目搞下来,发现技术毫无长进,就是不断重复。倒是团队磨合了不少,简直都快流水线作业了。几个人不用见面,都能把活干了!
技术没长进,就说明WEB开发的技术已经到头了,一定是这样……哈哈
所以,WEB开发不过如此。
所以,那时的我会悄悄地说:WEB开发没技术含量!
注意,要悄悄地!自己赚钱的东西,大声说,这不绝了自己的财路。
不过在开发中,也遇到了一些算法问题。
管他的,网上都能搜到!修改下,就能跑!
又不是不能用!
第三阶段:并发挑战、容量挑战
之前做的项目都是能跑就行。简单来说,能跑就是成功,不能跑就再改!
但是,进入公司正式工作开始面临一些新的问题:并发问题、容量问题。
比如典型的,一个应用需要部署多个节点啊,多个应用的分布式节点之间互相依赖啊。依赖存在先后关系啊等等。
于是乎,分布式登场了,携带着一众相关知识:分布式一致性、分布式存储、分布式计算、分布式锁、分库、分表、分流、读写分离……还附带了一众相关框架:Kafka\Rabbit\Zookeeper\RabbitMQ\RocketMq\Etcd……
以上我就不列举了,大家耳熟能详。
那段时间,我就主要在学习。
当然学习不只是学会用,也要考虑其实现原理。可以动手自己实现下。
例如下面是个RPC的最小实现,用来学习RPC就很好。
用极少的类、方法演示了RPC的实现原理,是一个学习RPC工作原理的良好示例。
https://github.com/yeecode/EasyRPC
而且那段时间我在参与一些集群部署的项目。就是通过网站来完成应用的部署、升级、配置等工作,涉及到制品管理、质量管理等各个环节……表面呈现是一个网页,后面东西一大堆……
但是,我知道,那些都是纸老虎,没什么难的!
毕竟,WEB开发没技术含量,能有什么难的。
第四阶段:理论探究、行知结合
并发挑战、容量挑战遇到的多了,我也学的多了。
功夫不负有心人,脑袋里终于成了一锅浆糊……
于是,我开始走上另一条路:理论研究。
我开始直接研究分布式理论,还包括相关的论文啊,都掏出来读一读……
尤其是论文,这东西,就是一个引用链,越读越多。
对了,我研究生阶段也搞了些这个,但是理解没这么透彻,反而是这个阶段的阅读让我对研究生阶段的工作理解的更深了……神奇啊……
这个阶段,WEB开发技术没啥长进。但是理解透彻了。
这段时间在设计一些分布式的系统。然后发现我开始会用理论模型指导系统架构了!这技能,就是妙手偶得之啊!
赚了。
我就说么,WEB开发有啥难的,读读论文就能顺便提升了。
第五阶段:阅读源码、探求本源
WEB开发也回了,论文也读了。整体框架也清晰了。
什么各种中间件啊,在整个系统中的诞生原因,发展方向,在理论知识的指导下,也都能理得顺顺的。甚至我能够设计一套出来。
哎?
这时问题来了!
那我设计的,和开源成品有没有区别啊?我和人家的差距在哪?
这个问题,除了我,没人能给我答案:首先,周围极少有人熟悉中间件的原理细节;其次,别人也不知道我想怎么设计啊。
于是,没办法了,下水!
自己开始啃源码。
难!真难!
别人写的上万行、上十万行代码,你要看懂,能不难么?
当我啃了几个项目的源码之后,发现过程很难,但是收获真的很大。
渐渐地,我甚至觉着应该写一本书来帮助其他人阅读源码。
- 最开始,书中想向大家总结源码阅读的方法和技巧;
- 又怕大家觉着太虚,没有实际的示例,所以直接以MyBatis的源码作为示例;
- 又怕大家读不懂MyBatis内核的源码,所以每个章节前增加了阅读本节源码所需要的基础知识;
- 既然源码都读了,于是便一边读一遍将项目的架构思想总结出来,教大家一些架构思想。
于是,书成了包含基础知识+真实源码阅读示例+架构知识总结+源码阅读经验总结的书。
是的,后来这本书真的写成了,历时许久,整整有400页。光配套项目就写了俩。
书厚成本就高,于是想删减一些,结果出版社编辑老师觉着写的太棒了,不舍得。又不能卖的太贵,最终也只能定个相对于400页是个极低的价格。
于是就有了这本《通用源码阅读指导书》,最近刚刚上架:
书写的比较诚心,不是奔着赚钱去的。不过为了编辑老师,我还是要多说几句。
400页卖100,价格就比较低了,然后编辑老师觉着这本书写得好,还要出繁体字版。
而我就怕卖的不好连累她。然后,一句“经济效益好当然好”让我觉着更加对不住。毕竟,分享知识是我的业余爱好,知乎不给钱我不也写的开开心心。还时常丢出几个段子。
但出版书籍却是编辑老师的工作。工作可不能“经济效益好当然好,不好就当作为传播知识做贡献了。”
注:
写书的时候为了大家能读懂,所以把MyBatis用中文注释了一遍,于是有了MyBatis中文注释版。这个不用买书就能看,因为我把它开源放出来了,放在https://github.com/yeecode/MyBatisCN
然后为了大家读源码能读懂,又写了好多示例项目,也开源了。这个就不在这推荐了,因为没有书本内容,这些示例也就没有了前后文,很难对大家有帮助。
写书那段时间是最累的,上班写代码、下班写书写代码,基本是从早9点到晚上1点。体重一度重了20斤。所以劝大家还是不要学我,身体最重要。
曾经有一段时间我觉着不值得,现在到觉着还好,因为书写完后自制力约束我重新健身,现在身体恢复了。 当然,这本书也得到了外方出版社的肯定。所以,接下来会在台湾发行繁体版。
如果买了,别忘了先读读前言,感受下一个读源码的程序员的自白。
不过总的来说,编程不难,你看我,读读源码技能就提升了,还能写本书。顺便让身体体验下增重减重的感觉。有啥难的。
读源码一两年,我发现,我的设计方案和源码十分一致了。甚至我有很多地方有更好的方案。
所以么,看,WEB开发有什么难!看看源码就能提升!
第六阶段:构建地基、制造轮子
理论也积累了,人家源码咱也看了。
那写代码肯定就是统筹规划全面设计了啊,复制粘贴这种事情离我是越来越远了。
实现功能也开始考虑各种设计模式、范式、软件质量指标、架构规范、架构风格……于是写出来的模块也越来越通用了。
这就不是轮子么?!
当然,工作上的轮子都是保密的轮子,不能往外拿。
下班回家也写点小轮子玩,这个会开源出来。就例如下面的。
这些项目都不错,大家可以收藏。
上面都是我写的一些小轮子,大家看看题目,喜欢的就去随便取用,留着将来自己造车就好。
业余写轮子挺开心的,有时候半夜突然有个好的想法,可以开灯就写!自由度很高!兼职就是程序员自己的乐土!上班写的项目是不可能这样的,毕竟,得考虑业务影响。
就是么,轮子都能造了。WEB开发有啥难的!
当然,在这个阶段也规划开发了好过项目,涉及面很广……Linux、PowerShell的脚本、FTP、文件存储等等,还给一些工具开发了一些插件,设计开发了许多系统等等。
渐渐地就发现,WEB只是一种用户交互的展现形式。其内在实现,需要各方面的知识。
组里前端小伙伴也在造轮子,什么SVG实现Graph的自由组装和动态编排、自由拖动的树组件啊啥的,都是他的头发换来的。也是厉害的很。
第七阶段:架构规划、协调开发
能力越大,责任就越大。
上班造轮子、下班造轮子那可不行,得负责项目规划开发啊。
从项目需求开始、然后模型、然后论证、定方案、攻克核心难点、排期、控进度、推广……
业务要求、人手、项目质量、扩展性……这些内外部因素都是要考虑的。
其中架构规划项目是首要的,因此,要熟悉各方面的知识:前端、后端、服务器、文件存储、分布式、各种中间件等等……
项目协调也是需要的,因此,各个需求方的讨论、方案的讨论、反馈地接收、项目汇报的准备、项目方向的把控等等……
这方面我就不多说了,知道的也有限,慢慢学吧,我还年轻。
不过话说回来了,WEB开发有啥难的,把上面的都做好就行了。
一点貌似无关但是很重要的事情:
你要说真正的难点……从第一阶段到第七阶段,健身都不能落下,头发也尽量别落下。要不容易倒在半路上。
我从研究生就一直健身,每周夜跑两三次,每次8公里左右。高峰期可以夜跑25公里、卧推85kg。
最差的时候,就是写《通用源码阅读指导书》的时候,明显感觉肚子上的肉有褶。整个人也很虚弱。
没办法,无论是写程序还是写书,都是不到一个阶段不好停下来的,所以经常一坐就4、5个小时。
现在渐渐恢复了,体重、体脂都回到了标准值,腹肌也回来了。小米体重秤健康评分100,身体年龄20左右。我活过来了!
还是希望大家在编程的前进路上一定要记得保重身体,毕竟,编程只是兴趣和工作,而身体则是健康和生命。
继续说回到WEB开发。
其实,WEB只是一种用户交互的展现形式,同桌面客户端、移动客户端、命令行一样,只是一种展现的形式,是皮毛。
而软件系统最核心的应该是内在架构、算法、风格、组件,这些都是和展现形式无关的。
如果一个开发者还停留在用展现形式来衡量一个软件的难易程度的水平,段位不会太高。
同样的,如果一个开发者用编程语言来衡量软件项目的难易程度,段位也不会太高。
另外,评论中有一点我也比较赞同。是说如果没有强大的自驱、大神指引、业务驱动,一个人处在上面的每个阶段,都会有自己到达了天花板的错觉。一旦这样,便会让人长时间难以进步,这是要克服和避免的。
我不是什么大神,也在不断学习中。但以上是我十年摸索进阶的总结,希望能给大家带来进阶上的指引。如果大家读完能有收获,我也万分荣幸。
技术的道路上,多做、多学,原本会的也便不会了,原本不会的也便会了。
大家好,我现在是一个高级软件架构师。
所以,表面上这是一篇逗逼文,实际上这是一张目前我能勾画出的进阶图。逗逼的言语,只是为了能让你读完,然后多些收获。
软件开发也一样,坚持做下去,就会有收获。
前进道路上的你我,一起加油!
为自己、为社会、或伟大、或渺小!
来,最后再来一句:WEB开发有啥难的?
可以访问个人知乎阅读更多文章:易哥(https://www.zhihu.com/people/yeecode),欢迎关注。