程序员之间的技术一直是薛定谔的情况。
除开那几个凭借一己之力,即可颠覆世界的技术大神。我们普通程序员,无论是脑力,还是体力,绝对不比一般的“大神”差。尤其是年轻的程序员。
讲个很长的故事:两个朋友小明和小亮,他们都是普通院校毕业,可同为程序员的发展轨迹,却截然不同,究竟为何呢?
起初,小明和小亮在刚接触编程的时候,都是跟着书里和视频里的教程,下框架,搭服务,建据库。两人为了让第一个Demo程序能跑起来,皆被“天书”般的文档和“古墓梵文”般的配置文件虐得体无完肤。
在学习的过程中,小明和小亮同样会因某个粗心大意的错漏,被BUG卡个两三天,双手抱头,内心崩溃。尝试着玄学重启程序,虽然神奇地编译通过,但在运行的时,却再次飙红,那一刻,想死的心都有了。也会因为摸不这头脑的成功运行,而挥舞双手喜不自胜。
在入门编程这个阶段,小明和小亮的学习过程与水平,并无太大差别。无非就是输出渲染、增删查改、基本业务的掌握。
真正的分水岭,开始于熟悉编程后,即进阶编程的阶段。
在小明领悟了“Baidu + Googel + Ctrl+C + Ctrl+V”四骚高效大法的真谛时。小亮开始了对技术本源的好奇之旅:
● 编程框架是如何运转起来并输出“Hello World^-^”的?
于是他开始艰难的源码学习旅程。多方面网罗资料,慢慢明白了IOC容器、单例、工厂、策略、装饰、反射和适配等诸多模式,在实际场景的作用。脑海里对项目工程的全貌,有了初步的认识。也间接奠定了基础的系统开发思维,并开始意识到“组合-解耦”对项目的日后维护的重要性。
学框架期间,小亮无意间触碰到一篇名为《Mysql的20条优化方法》的文章。这让他惊奇的发现,哇哦~原来优秀的细节处理,对提高MySql的性能有着如此巨大的影响。这引发他做了一次延伸思考:
● 如何让自己更正规,更有章法地使用Mysql呢?
于是他在网上前辈的推荐下,开始生啃神书《高性能MySQL》,触碰到了业务表设计、InnoDB、事务特性ADIC、索引、EXPLAIN、资源竞争、主从服务、分布式、高可用、冷热备份。知道了《数据结构》和《算法》这两门学问跟数据库的原理有一定渊缘。更重要的是,小亮开始深刻地认识到,数据就是技术的命根。
在书中,小亮还知晓了Nosql,诸如Redis、MonngoDB这类内存数据库性能极佳,值得投资学习。就计划着偶尔抽些碎片时间,尝试学习Reids,在此期间他萌生了一个疑惑:
● Key、Hash、List、Set、ScoreSet各自应该用在哪些场景?
在网上阅读杂文,内容零碎,不成体系。小亮掏腰包入手《Redis IN Action》。深入阅读后,明白了如何将不同Redis数据结构组合起来,实现购物、热榜、搜索、登录等应用场景。像RDB和AOF的机制,原子锁,分布式锁,锁的粒度与时效这类技术,给了他一些启发:“要用好技术,需要根据场景,学会取舍,是一门非常细腻的活儿”。
这种对技术刨根问底的学习方式,在几年间,让小亮
● 从崇拜Unix设计深追到《计算机组成原理》
● 从Http请求深入到握手分包
● 从sort函数深入到不同算法的时间复杂度O(n)
...
他的技术体系,向左->向右->往上->往下,连贯且有序地生根发芽,最后小亮发现,其实不同的技术,有诸多相似的原理。例如:
● 主流的编程框架都和设计模式相关,特性虽繁杂,但有迹可循
● 在诸多新潮的软件和业务处理,都能看到Unix编程哲学的身影
● 由逻辑门组成的感知机,可以拟建基础的神经网络
...
再往后,小亮的技术根基越打越深,越拓越广。对于新知识的掌握速度,就像学会了《九阳神功》那般,慢慢能够做到“触类旁通”的地步。
这样坚如磐石的技术“底盘”。让小亮在职业道路上,选择权更多,也较为顺利的拿到大厂的橄榄枝。
而这时的小明,则步入了中小厂工作。90后的创业队伍,拉了几轮金主爸爸,倡导新职场,未曾盈利,就提倡全员高福利,这让小明在薪资上的狮子大开口成了真。
工作上,“四骚大法”依然犀利高效。小明有了充足的闲暇时间放放松。也不是没想过要深挖点技术,但没人教,又没现成的全面教程,也没有成规模的公司业务,来一波高压驱动,靠自己,真的是看10分钟,就脑壳晕。只能三天打鱼两天晒网,然后不了了之。
初到大厂新环境的小亮,被其丰厚的家底和优秀的人才队伍秀得喜不自禁。与此同时,他的新历练也即将开始。
一进编制,就是入伍1000万用户级别的项目。由于小亮以前有个小习惯,恰饭时间就看大厂的技术沙龙视频,所以实际工作悟性很高,表现的还算不错。反倒是真真正正的海量用户、海量请求、海量数据、海量日志,让他切实的感慨到“纸上学来终觉浅”。
自此,两人在技术世界的阶级开始慢慢分化。
小亮逐渐在工作中明白到:
● 商业大项目中,高并发,高可用,心跳,安全,冷热备,应急修复不是拿来技术互吹的,是团队工作的基本要求。因为出问题,就是亏大钱
● 持续集成(CI)被真正地落地执行,确实能大大提高项目的稳定性
● 一个每天被请求上亿次的API,其背后细腻的技术栈,含金量十足
● 项目棘手的环节,有经验的前辈们,是真的可以一手托天
● 名牌海龟大佬,盛名之下无虚士,也非常照顾和提点后辈。
...
就在这样,在这个海量用户+精英氛围的“超级经验房”里,小亮被各种高标准,高要求日复一日的锤炼。
一晃,两年过去了。小亮破茧成蝶,自身技术在团队里已然独当一面,成为新人口中的“亮神”。
其间,他突出的表现,勤奋的态度,良好的口碑,也让他被领导相中,委任为新项目的技术Leader。
在一线开发人员的圈子里,小亮的水准算基本毕业了。因为对自己手头的工作,既熟悉又高效。这让小亮开始有闲暇的时间,思考自己往后的职业发展:
● 努力奋斗,在大厂的体制内上升,拿更高的薪水福利
● 联系猎头,利用大厂的名声,寻找优秀的创业团队,凭技术入股
● 分享经验,帮助更多的新人少走弯路,积攒业界名望
● 投资未来,紧跟技术的新趋势,为以后铺路
...(省略无数选择)
此时,另一边的小明,辗转数家公司,不是闲得慌,就是遇上不死不活的项目,在边角业务上忙个不停,腻到没办法了就跳。
起初小明还是很信奉“跳槽香,越跳槽越香”的网传。但今年,在跳槽找工作的过程中,小明渐渐感受到了一个残酷的现象 - 程序员的人才市场竞争愈发激烈。大批应届生和培训人员蜂拥而入,这股新鲜的血液,让自己的竞争力有些大不如前了。
后来,小明还是找到了一份新工作,但似乎薪资并不如预期。而且有点糟心,公司项目不知经手多少人(有可能是野外包)。老旧的技术栈交错缠绕,过万行的文件比比皆是,老板性子又急躁。每天上班战战兢兢,一有需求改动,工作就像进入古墓探险,一个不小心,搬开某块砖头,整个人就被瞬间崩坏的古墓直接深埋,从晚上直至天亮才勉强钻出...
后记
学好技术的窍门,在于将日常工作会用到的,却不懂其原理的技术“小黑箱”,逐一拆开,认真剖析学习。每天一点点,每天一点点。1年后,你的技术水平必然大幅提升。
没有前辈咨询,可以多主动加入技术交流群。
没有职业路线,可以多关注大神的公号来借鉴其想法和经验。
没有学习资料,可以多买几本行业的经典读物少喝几杯饮料。
目标明确,思路清晰,资料齐全,技术仪式感营造得当,学起来会舒坦很多。
千万不要轻信程序员遇到好项目,是靠运气的。要知道,大多数好项目都是由优秀的人才做出来的,有幸进去的程序员,能力一般不会差到哪里去。
技术是一个努力与回报成正比的行业。它公平公正的对待着每一位从业者。那些被的尊称为“大神”的佼佼者,必然有着常人无法想象的刻苦学习和辛劳付出。
程序员就像一位剑客,他必须流下汗水,去磨利他的“技术”佩剑;消耗精力,去专研剑的招式;付出青春,去探索剑的真意。只有这样,他才能在这个危险与机遇并存的互联网江湖,谋得一席之地,抑或是勇攀巅峰。
希望能对程序你有所帮助。我们也可以继续聊,欢迎多多提意见,我们一起进步吧!(暗号999)