如果你是个半路出家的程序员,请一字一句的看完

作者并不是行业顶尖技术达人,核心思想是希望通过自己的经验能让有缘分看到文章的非科班出身的程序员对自己的事业有些思考,少走弯路,没有批判任何人的意思。

前言不啰嗦太多,信息时代的迅猛发展造就了信息产业,为了支撑信息产业的稳定运行市场上出现了大规模it从业者的工作需求。

也就是说早年如果你想做软件开发,必须是科班出身并且本身有一定的造诣之后才能顺利的踏入这个行业,而如今呢,我们的市场膨胀速度越来越快需求的it技术从业者也就越来越多,进而产生的结果就是从学校以及专业场所产生的技术人员不足以满足市场的工作数量需求,加上技术迭代给予很多技术栈实现了低入口,这样大量的非科班出身it从业者涌入了这个行业。

这篇文章主要想阐述的观点就是,对于专业的it从业者来说,如果你自身遇到了下文描述的问题,希望可以有所思考,对自己的职业以及未来做一个仔细的规划,不要把更多的时间用在走弯路上。

首先:

第一个要阐述的内容就是对于非科班出身的程序员普遍存在一个硬性的问题:知识断层严重,就拿最大众java开发行业,举个栗子。可能你之前是做建筑的,做医疗的,做餐饮的,做保险或销售等行业的,虽然偏差大,但是对于这些人群来说,它们原有的行业经验也并不是对软件开发没有作用,原有公司行业的业务流程工作流程也是一种给软件开发保留的经验,因为做软件离不开生活,离不开各行各业,做的程序都是为千百种行业提供支撑的,所以这些经验对于过去有其他行业经验的人来说也是很宝贵的,下面进入正题。关于知识断层,看到的时候不要先想办法反驳,比如,我在专业的培训机构或补习班以及自我学习中我都学习过基础知识,实际上我要说的知识断层不是对于你理不理解变量理不理解代码关键字,函数,修饰符等,大多数人的断层是对计算机软件执行过程,编译过程,以及软件生命周期,操作系统等知识的匮乏,我敢说绝大多数专业的it从业者学习的大都是web行业的开发,比如php,java等技术,受到的教育过程实际上是一种速成的方法,也就是短时间内你学会了怎么开发服务端应用,开发网站等,但是你所写的大多数是基于框架之上,基于插件之上,大多数人做的实际上是填空一样的工作,比如把两种框架结合到一起,按照规则把空填好,这样程序就可以跑起来了。这种工作相当于电脑代工厂,就是各个硬件厂商把硬件发过来,工厂按照插槽的要求把各种硬件插在主板上并且装上外壳,这样电脑就可以正常的运作起来了,但是如果你问这个工厂能生产电脑吗,它们一定不能。

所以,在这种情况下很多程序员是可以开发固定模式的应用的,但是如果静下来思考一下,假如做一个java项目不使用框架的情况下基于服务器做原生开发,你还能不能区分mvc,还能不能把代码结构梳理出来,假如前端的界面不可以使用JQuery这种开源库,你还能不能修改一些常用的界面功能了。这是最简单的一个想法,接下来还关系到,为什么现在会衍生出大量的前后端技术栈,它们的出现到底有没有意义。

再举个例子,有java和php程序员问过我,使用jsp的模版语法或者php的smarty语法就可以实现数据的遍历判断等功能去渲染界面,为什么现在会出现mvvm形式靠js去渲染界面,这是矛盾的,为什么好好的项目明明只需要跳转一个jsp或者php界面就搞定的事儿,一定要把项目拆分成前后分离的项目,对于传统的很多java程序员来说它们觉得这种新的架构是一种痛苦。

在这里可以解释一下,有句话叫存在即合理,世界上存在的东西都是有存在意义的,每个出现的新事物代表有需要这个事物的东西,所以为什么要用js做一套模版语法来代替jsp php等动态网页的模版语法,然后又把项目拆分成前后端完全分离,这也是适应时代发展的一个表现,如今的项目界面复杂度越来越高,需要渲染的特效以及动态效果越来越密集,前端界面的数量以及涉及到的业务也越来越复杂,那么如果有人觉得动态网页比这种架构好的话说明这个人可能对服务器和客户端的理解还不到位,对于jsp的编译过程也不理解,如果用动态网页的表达式去渲染网页的话他的执行过程是请求这个界面时服务器通过找到请求的jsp目标文件,通过jsp引擎把它解释成java文件解释的过程中还要将表达式进行java的转化,再通过编译这个生成的java文件来把请求的数据渲染成静态页面的代码通过浏览器的解析来呈现的。也就是说这个工作是全部又服务器完成的,而使用js模版界面他的工作流程是用户请求到静态网页直接由浏览器编译网页数据,这个过程中去服务端把界面需要的远程数据拿回来并且通过js模版渲染到浏览器对应的标签中。也就是说如果食用jsp的模版渲染界面,整个过程的90%以上是需要服务器来完成的,而使用静态界面的工作90%以上是在浏览器中完成的。

这两种情况就有了本质的区别

1.两端分工,客户端有无数个,服务端只有一个(简单架构),那么如果把渲染界面数据的工作全部由服务器来处理的话那么有一个访客时服务器需要处理的是一遍,如果有10000+访客时服务器要处理的是10000+遍,如果把这个工作交给浏览器来处理,那么每个人只需要在每个人的浏览器上处理一遍,这个带来的结果就是给服务器卸掉了一个非常有重量级的任务释放了更多的能力去接受更多的访问。

2.界面渲染速度,虽然java这种编译型语言可以将编译好的文件重复执行看起来效率会高一些,但是如果这些界面是由服务端去渲染带来的结果是我们每次要看到这个界面必须由服务器把这个界面的所有代码编译之后送到我们的浏览器上,这个带来的结果就是在数据传输的路上每一次要带着界面的所有内容去传输,两个缺点,耗时,浪费流量。现在的应用更多的出现在移动设备上,而用户是需要自己负担流量产生的费用的,所以在这种情况服务端渲染的界面带来的结果也是不好的,而浏览器端呢,在加载过界面文件之后需要与服务器沟通产生流量的数据体积就仅仅是这个界面中需要显示的文字类或媒体类的信息,在用户访问界面的时候不需要服务器每次把界面的所有代码传输回来,只需要把对应的数据对象传输回来,这样传输数据的体积变小了,自然速度也会有提升

这是一个很简单的例子,这个例子主要想表达的是,看待不同的技术栈时要客观的去看待,要有研究后再表达,最重要的一点就是,如果知识有断层,是没法真正的理解你做的到底是什么事情,我在这里不是鼓励初学者造轮子,而是如果你在使用轮子的时候连轮子是什么都不懂的时候你是没法真正的明白为什么要用这个轮子。因为有很多的程序员实际上是坐在别人的车上行驶,而自己却以为自己已经可以跑的如此之快了

如果知识有明显的断层,是无法在技术行业有实质性的提升的。

下面要说的就是如果想在技术上走的更久远

关于做学问

这里就要出现两个单词,软件工程师 和 码农 不难听的说这两者的区别都是天与地。为什么呢,很多人可能觉得码农是程序员的自嘲,实际上也是如此的,但是有相当一部分人曲解了这个意思并且成为了真正的码农。

在上面的内容中提到了使用框架,造轮子等内容,这里还是举电脑工厂的例子

软硬件技术无一不是在迅速进步的比如电脑的cpu的工艺从um级别做到nm级别精度越来越高,内存条从mb级别做到了10gb以上的级别,其他的不多说了,但是如果你还是一家电脑装配工厂,你在装配电脑的时候会发现这些硬件在外观上以及插槽是没有多少改变的,它们虽然变化巨大但是你的装配流程一如既往的没有变化

这说明的问题是什么?

如果你把自己看做电脑工厂,那么那些硬件就是你在使用的框架以及插件,你会发现,开发一个应用的时候,你和十年前一样,操作步骤和流程都是如此,代码结构也没有特别大的变化,但是呢,在这个阶段里每个插件和框架的变化是巨大的,是你毫无察觉的,这就是进步与不进步。

这里不针对群众,在占比来说,科班出身的程序员大都会有这种技术危机感,而大多数的非科班出身的程序员由于之前说的知识断层,会有一个自我满足的假象,有一些稍微有点经验的程序员表露出得状态就是,常见的需求没有解决不了的,任何的软件都能想到解决方案,进而有一种这些都是自己完成的假象成就感,但是归根结底还是上个例子的问题:组装电脑的工厂能生产电脑吗?

这种情况对每个人的现状是没有多大影响的,但是这是及其限制个人进步的,如果十年之后你能做的还是把硬件拼成电脑,那你的前途在哪里?

所以如果你仔细的思考一下,如果仅仅使用一些开源库就可以拼成应用,那这个应用也必定会不值钱,那么公司也不需要前端架构师,系统架构师,运维总监等等职位。如果你真的想在技术上走出一条大路,不要满足现状,虽然大多数人都觉得轮子有了,我就用就行了没必要知道怎么做的,不过要想明白一点,好的架构,好的应用,是不会使用那么多通用的开源库和现成插件的,就算使用一部分,依然会在源码上做出相应的改动,为什么呢?

你如果用过jquery,你会知道他封装了大量的功能,比如动画,比如ajax,还有他衍生的一系列jquery插件,这些单单看起来都是非常好的,应用于普通的项目也没有不好的地方,但是如果你仔细考虑一下你写过的代码,你在使用这个库的时候,是把所有的组件都用过了吗?比如echarts这个图表插件,他能描绘的图标可能已经涵盖全世界的所有图表了,但是你的项目里是不是仅仅的使用了柱状图,折线图,饼图,或者k线图,这就是通用库的第一个问题,通用库的作者考虑的是宏观的,多类目的,不是针对某个人的某个项目去设计功能,所以他会把有的,可能会有的,未来可能会有的,都写到库中,这样就带来了,你在使用时,其实可能仅仅用了他不到百分之十的资源,我见过一个后台管理的界面引用了30多个不同的js插件的,这不是开玩笑,大多数程序员是没有制作轮子能力的,而且大多数的前端功能都是困扰程序员的一个长期病,所以如果你看一个java程序员写后台管理界面时通常都会看到这么多的插件,每个插件都会用来实现项目中的部分功能。

按照刚才我们分析jquery,得到的估算结果,也就是说,应用这么多插件的代码利用率可能不到百分之十,那么三十多个插件就无端端给项目带来了大量的无效代码看个很长的图片:


这还只是一部分而已,可能很多人会觉得这正常,但实际上这是一个极其可怕的事情,如果你细心查看过国内外科技前沿公司的网站,你会发现,它们引用的第三方js等插件,还有它们的开源库中提供的其他代码框架和组件,都不是平时大家熟悉而常用的开源库,这里面你还会发现,它们多数都是以公司自己命名的,所以实际上,如果说针对你自己的项目而言,真正好的是使用一个为这个项目量身定做的插件,这个带来的好处是什么呢,是你的插件每一个英文字母都不会浪费,他一定是你们项目必要的,而且是使用中的。

所以,我们还是举个例子,这个例子可能很多开发者都感同身受的,尤其是后端开发者

有很多刚开始开发web后台管理系统的人曾经问过我,除了写java代码以外它们还需要解决一些前端的常用功能,比如树形菜单,比如一些选项卡功能,一些按钮功能,但是这些功能对他们来说是一个噩梦,有些人可以用jquery勉强实现,有些人使用jquery也没有实现思路,所以在网上搜索一些插件,这个解决思路是正确的,满足时下工作状态的情况,但是很多人还遇到了一个问题就是插件使用进来之后风格和效果与自己的项目格格不入,这个原因就是因为封装通用库的人不会针对某个人的项目去为其专门设计,那么这样一来想改动这个效果又大费周章,还产生了很多不必要的代码,实际上总结一下,这个现象说明了个人的技术栈储备量不够,思路不够,带来开发上的门槛,也就是技术断层。那么很多从这里摸爬滚打出来的程序员可能已经攒了几个自己顺手的插件来解决大部分问题,并且当你提出一些需求的时候它们可以快速的提出解决方案,如同拼装电脑一样把应该用的插件列出来。以上的情况都是正确的,没什么不对的,但是仅限于时下你的工作情况而言这么做毫无问题,但是不知道大家有没有坐下来自己反思一下,自己对未来技术道路的规划,还是要一如既往的拼电脑插板子吗?

为什么你工作了10年还进不去技术领域的尖端公司,不是你的项目经验不够,而是你只会插板子

为什么工作10年,业务哪都通,需求全实现,但是bat不要我,因为你做的工作一直停留在“组装电脑的阶段”,难道bat不需要组装电脑的人吗?它们也是需要的并且是大量的,但是它们需要的插板子的人不是一个有着10年插板子经验的人,而是一个年轻,素质高,懂得插板子,并且在这个过程中进而学习生产板子的人

所以如果上文中提到的故事有你的影子在,如果你到现在为止还没有想过,我是谁,我在哪里,我应该往哪走,那么是时候想想未来的路应该怎么规划了,这对每个人都有好处。

尾声

学习就像在爬树

当我们在树根往树干爬的时候,每一天都觉得有成就感,有目标,有收获,每一天,我们的高度都在提升

而当我们跨越了树干后

会突然发现眼前的路不再是一条而是多条

并且每一条路都在无限延伸无限的发散,岔路越来越多

这个时候每个人都会迷茫起来,该怎么选,该怎么走,因为就算拿出全部人生,也不可能每条路都走一遍,

那么在选择之前,请对每条路都做一个简单的考察,看看自己适合走什么样的路

不要停在一个地方重复一样的事,人一生的时间是固定的,不要在停止思考的活下去

希望这篇文章能让看到的人得到帮助

希望每个程序员都能对自己的技术生涯做好规划,成为一名改变世界的软件工程师,不要放任自己,甘心当一个代码的搬运工



  • 19
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值