我是学计算机专业的, 在刚大学的时候,还不知道什么是全栈,反正什么都学。我大学关于编程学的课 程有c、汇编、linux、JavaSE、嵌入式等;
我一直对c++很憧憬,觉得学c++都大神,在大三的时候,要三选一:c++ 、c#,、Java。不过我报课的时 候网速不行,没报上c++,报上了java。那时候c++很抢手, 不过上课一段时间后有人就后悔了,转了 Java或者C#。我当时也是了解Java入门简单, 以后工作也好找,就安安心心的学Java了。当时是2012年 !
大学生活总是过得很快,很充实。除了要学的编程课程, 我还看一些培训的课程。对于新手的我,开始 是看一些基础的视频:如html,css3, js,jquery,Java,JavaWeb,mysql,tomcat。老师也会让我们
自由找几个同学组成一个小组,我一般都是小组长,负责基本全部的开发任务,现在想起来,当时确实 很难,虽然当时的一个bug对于现在的我来说可能不算什么, 分分钟就搞定,但在当时可能要弄两天。
第一个小项目:盆栽商场,就一个网页页面,没啥逻辑,加入购物车这样的功能都没有,更没有付款云 云了。
第二个小项目:聊天室,这个算是很好的了, 有服务端,有客户端,用swing组件写的桌面应用,后来 代码上传到了百度文档,毕业后几年了, 还有人找到我, 问聊天室代码的问题。服务端使用的socket 链接,一个服务端可以链接多个客户端, 能实现多人同时聊天,像一个群一样,做工很简单。
第三个小项目:上传下载,我当时的目标就是把上传下载做成一个jar包,供其它项目调用,做出来是功 能非常简陋, 啥设计模式,接口编程思想,都浮云。只能上传成功到服务器,下载文件到本地。
第四个小项目:手机通讯录,手机app端的,可以填写手机号码,生日什么的,以我当时代码编程的水平 , 我肯定不会写, 我是根据网上的项目视频教学,自己一行一行敲出来的。
大学的其他项目,可能都想不起来的,就这几个印象最深。亲历亲为,很好的锻炼了我的编程能力。在 此,想对还在学校的同学们说一句话: 代码真的是敲出来的!
大学毕业了,全栈这词好像从那时刚刚流行,我自我感觉良好, 至少比我同学他们的编程能力高,反正 我是这么认为的。不过最后我同学他们都找到工作了, 我还没有(好打脸)。
我的前两家公司都是小公司。第一家是在上海做了几个项目被外派到了安徽黄山。黄山有最著名的一棵 树:迎客松,我爬上去看了它两次。
在黄山,做了几个项目,当时用的项目框架:Struts,Spring,Hibernate;使用mysql 数据库, struts1和struts2 视频教学都看过, 自己搭过框架,都是很基础级别的,配置都是网上找。后来替换 到新一点的Java框架: Spring,SpringMVC,Hibernate;前端也使用了easyUI,bootstrap,layui。自己也看过less和sass的视频。(好像现在还有stylus,技术真是层出不穷,学无止境啊。) 关于nodejs 我也看过简单的文档教程,自己能搞简单的服务请求什么的。
那些项目对于现在的我来说,只能说是巩固了看视频学习到的知识。没啥技术含量,基础倒是打的很牢 ,不过底层的源码,设计模式,思想编程等也都是浮云。
后来又辞职来到上海,那时是在17年,公司是创业型公司。用nodejs开发的后端,IOS、Android前端, Spring、SpringMVC、Mybatis框架的后端管理平台。我负责后端管理平台。
创业型公司需要的是全才,不会的要立马学。在此我以下技术得到了很好的提升:
linux基本命令和各种软件的安装(菜鸟级别的):和很多菜鸟一样, 我开始弄服务器系统的时候,都 是windows服务器的tomcat.用的是阿里云买的服务器(现在想想是真的菜)。后来弄linux系统,先是使 用各种连接工具(目前我用的是winSCP+Putty),学习各种基本命令,找各种日志,排查各种出错。最 难的就是安装,因为版本问题导致的出错概率太大了。
nginx(域名的配置):以前也用过tomcat直接配置过域名,后来知道nginx也可以用就学这个,技能总 是不断迭代更新。nginx的conf配置基本都是copy来的,各种参数基本都是默认。https证书除了买, 还 可以用Let's Encrypt免费申请(安装Let's Encrypt可以让你遇到各种坑:python版本,nginx ssl连接 ,文件权限等)
nodejs(js后端服务):npm install是最难的命令,各种版本问题、模块报错(java的maven就很好, 能自动下载模块,定制各种版本,如springboot相关的jar能控制默认相关jar的版本)。
mysql(备份,主从配置):以前觉得能写sql,访问数据库,CRUD,万事大吉。不过真正要自己考虑项目 的高可用、高并发、高性能、分布式、负载均衡的时候, CRUD显得不值一提。mysql的存储文件, InnoDB索引,B+Tree算法,执行计划优化。哎,太复杂了。
redis(数据缓存):redis 安装简单,但是运行起来后,不懂配置的话, 会遇到各种坑。最简单的一个 :要不要序列化。我们有个20G的应用服务器因为序列化问题,导致磁盘爆满,程序都GG了。集群也是一 个挑战。
jetty(java部署,和tomcat类似):四个字:简单实用。
svn(版本控制,还有git等):svn的安装,分配账户,这些还算比较简单,git也是自学的,如何注册申请 也都是按照博客教程来的
vue(前端框架):说起vue,我最先知道的是angularJS,那时还不叫angular。现在还有react,真正的三 足鼎立啊。不过其他两个我没学。学vue还是一个UI的哥们启蒙的。这个UI哥们是搞PS,设计师。他说想转前端,一直在学习这方面的东西。公司正好要做一个单页应用,他就弄了一个,发给我,我帮部署,?迭代什么的,看了两天就学会里面的语法了, 真是比js,jquery 写起来舒服多了,页面渲染更轻松。后 来又弄elementUI、iview,感觉都超容易!
到此时,也就是18年10月份。我的技术体系相信大家已经有所了解。再有几天就2020年了,这段时间我 又学会了什么技术,提高了什么能力,请大家继续往下看!
下面我们来谈一谈全栈:
全栈英文的词叫做:Full Stack Developer。
当我说我会前端框架vue、会前端elementUI、会后端java框架、会后端linux部署,大家都说你是 “全栈” 吧!(我心想, 我要是全栈, 我工资咋正低!)
对于这一年多来我的编程能力带给的体会,我更喜欢这句话: 全栈不是说把自己的能力堆上去,而是你 要把自己强势的东西给它赋能出去,让别人具有全栈的能力。
一个政府项目:全国个个省,市,县都用,还有一些特殊机构。这样的项目全国很多,比如报税系统, 全国人员系统。想想都头大,全国各个地方的警察每天查人员要访问多少次?怎么保证系统不蹦?如果项目交你来做,你能接下吗?
我为啥要举这个示例呢, 就是想说,自己的能力可以在我们要做的项目里面最高可以担任什么角色。
比如我这种前端后端框架都会,部署上线也可以。但是如果老板把项目交给,我可能会拒绝,因为我还 没学会团队管理(虽然现在正在在方面努力)。如果你编程的时候需求改了10次8次的,不光开发编程头疼,项目经理会更头疼。谁不想自己的项目更稳定,交付安全可靠的产品。团队管理在项目开发中占了 很大的比重。
那么此时全栈能起到什么作用呢? 那就是前后端业务需求沟通0成本。不光是写代码,解决bug也是。有时候出了个bug, 前端可能推给后端访问500,后端说前端传参有问题,最后花费很多时间才能解决。
这时有人可能说,全栈前后端都会, 但是他没我学的精,没我专研的深。我觉得会的广,真和会的深没有太大关系。举个简单的例子:高中分文科理科,难道文科理科一起学,学霸们还会偏科不成? 国家现在的高中教育也是在慢慢推行文科理科合并吧!
所以,全栈只是比普通的前端或者后端多了一些技能而已,仅此而已。(测试人员可能心里不舒服了,为啥没说测试?在我理解,没bug要啥测试!)
虽然如此, 但我还是提倡大家都来搞全栈。全栈的好处:
显得更像大佬:懂得多, 解决问题快,能搞各种技术,能独立写各种应用,教会各种新人。
学习东西快:理解能力强,各种编程语言都大同小异,触类旁通。能快速学习各种插件,障碍非常小。
项目全局: 理解业务能力更强,实现业务代码更快,知道技术边界,参与项目深度更深,技术规范统一 。
bug解决快: 能迅速找到bug原因,判断bug类别(后台服务,前端,服务器等),并且bug出现概率低。
为此, 我这一年多一值在提高技术技能的深度:
java : 集合源码,多线程,JVM虚拟机
spring:看控制反转的实现原理,AOP;代理的实现,作用等等
springboot : 注解驱动,组件内置配置
springCloud :不仅仅是大框架,运行原理,服务概念都要学
docker:镜像,K8s
微服务注册:Zookeeper
SQL性能调优:执行计划,
算法 : 排序,查询,各种树等等吧,反转很多要学的!
全栈目前来看就是技术会的多,因此以后的发展方向: 高级技术经理,项目需求经理;(等等经理都能做,有技术咱就是牛!)两个方向发展基
本都没障碍(键盘突然蹦出:葬爱,难道注定没女朋友?)
创业也是首选:学习能力强。技术开发更轻松。可以自己接私活,自己兼职创业搞项目。
最后附上论语的开篇:
子曰:“
学而时习之,不亦说乎?
有朋自远方来,不亦乐乎?
人不知而不愠,不亦君子乎?“
(相信大家是不是很多人都不认识 “愠” 是啥了:yun4 怨恨)