程序员提升技术,最头疼的是什么?
做了一次问卷调查,票数最多的选项是:
公司技术不强、项目老、没人带。
投完票,还有人现身说法:
“技术强的公司进不去,就找了一家工资过得去的公司,2周时间,就把业务弄熟了,然后就是天天重复,在这种公司,怎么提高自己?”
“我在一家小公司,给学校做网站,每天就是用各种轮子赶进度,根本涉及不到原理层面,研发流程都变成可配置的,按照之前留下来的模板去拼就行,自己挤时间学了点技术,又用不上,怎么办?不能一直干体力活吧……”
问题是,能进大厂、碰到好团队的,是少数人,最多占整个程序员群体的20%,那剩下的80%,该怎么提高自己?
1、提升技术的根本原则:主动性
跟国外比,跟国内一线大厂比,普通程序员所在的公司,有各种短板。
但客观条件就这样,有很多大牛,也是从这种环境练出来的,他们怎么做的?
主动。
听起来,有点鸡汤。
项目马上要上线了,赶紧加班加点交付,大部分人都能做到,但是,更多的时候,没人催你,时间有富余,你还会不会主动地研究技术?
人的主观能动性有多强,不好量化,但从长期看,是人和人拉开差距的必要因素。
2、在技术不强、项目老旧的公司,具体怎么提高?
我们天天都想着,要增加自己的技术深度,目标有了,用什么方法呢?
深度总结。
不管是在线学习,还是项目实操,自己的代码,还是大牛的代码,深入分析、总结,每天在别人想不到、不愿意想、想不明白的地方,多想一点,就多沉淀一点竞争力。
多想点什么呢?
- 工作中的代码,能不能优化一下?
- 同样的功能,高手怎么写的?我和他差在什么地方?
- 解决同一个问题,我有几种办法?哪种最适合?为什么?
- 这个思路,还能应用到什么其他的场景?
有人说,我们公司项目类型太少,我平时做的都是增删改查的事情,想尝试新技术,公司根本没这个环境,也没这个要求,限制我发展,我能怎么办?
A.打好基础,摆脱“不知道自己不知道”状态
有些工作了1、2年左右的程序员,也会讲自己陷入了瓶颈:前端,不就那么点东西么?
基础知识,制约了大多数初级程序员的提升,那些只掌握皮毛的新手,不是故意显得自己很牛,他们是真不知道,皮毛下边还有那么多东西。
B.通过网络,保持跟外边的接触
互联网时代,信息越来越透明,公司项目虽然老,但是网上有太多开源项目,去热门的网站看看,就不用担心被趋势抛弃:你一直在用jQuery,大家都在谈vue,你一直用VS2015,别人都VS2017了。
看到一些复杂的SQL语句,你就会知道数据库使用,不仅仅是SELECT 、 UPDATE 、 DELETE 、 INSERT,看到高手做的更复杂的页面,你才知道,JS不只是写写特效,ES6不仅仅只有Let和箭头函数,组件化指的远远不止import。
保持眼界开阔,能让你知道接下来该学点什么。
C.再简单的事情,也有优化的空间
再简单的项目,也有优化的空间,做过的项目,千万别能过测试就放到一边,多想想有没有优化的空间,有时候确实赶进度,先提交再说,很正常;
但总这么干,下次你还是插件的搬运工,用这种方式干十年,水平也没法长进,在哪家公司都一样,经常把过去的代码拿出来看看,水平不一样了,同一个问题,你会有新的想法。
D.动手,还是多动手
敲代码还是讲究动手的行当,不动手,就不会发现有问题,技术水平原地打转,就会成为最致命的问题。
如果没有明确目标,不知道该动手干什么,就从网上搜一些需求文档、设计文档,找一些高手的开源项目,比如做一个博客系统,看看大牛的代码是怎么写的,关掉它,试试自己能不能仿制出一个类似的,卡壳了,就对比下差距,看看差在什么地方,知识体系还是思路。
这种方式更走心,要是单纯地啃书本,看的时候感觉自己会了好多,合上书,什么都记不住,而且很容易陷入一个个知识点里,远不如实操一个项目,水平提高得快。
动手的时候,建议要按照自己的实际情况来,有些程序员一上来,就想模仿一个大系统,工程量大,而且对技术深度有要求,很容易长时间看不到效果,就直接放弃了,选比较容易部署的语言,由浅入深,从模块到整体,这样成功的概率也会大很多。
总结
大部分程序员,进不了理想的公司、团队,没必要泄气,80%的人都这样,区别就在于,很多人都在抱怨运气不好,环境差劲的时候,在同样条件下,有那么一小撮人,选择了另外一条的路:
不抱怨,主动投入时间和精力,保持敏锐的技术嗅觉,夯实基础,多动手,多总结。
愿你坚定对技术的极致追求,经过时间的沉淀,成为代码界有核心竞争力的人。