写给程序员和准程序员们
写给程序员和准程序员们
转眼毕业快六年了,在工作中逐渐从缠着别人问变成被人缠着问,大大小小的项目主导了一些,日常工作也从敲模块代码变成架构设计、技术攻关与项目管理,感觉是时候给萌新程序员们写点东西。
这是一篇“浅度好文”,不摆技术,不堆名词,只讲糙话。
要不要做程序员?
我记得看过一段话,当前能改变普通人命运的出路大体有几条:
1.敲代码
2.搞金融
3.在金融界敲代码
4.在代码界搞金融
我认为虽然有些片面但也部分当前社会的现状,绝大部分高薪职位来自金融和IT领域,在我个人狭隘的观念中认为“家里没两把刷子干不了金融”,因而无数有志之士前赴后继的投身IT行业,有本科学计算机的科班生,也有半路出家的跨界选手,目前程序员人才市场可以说是鱼龙混杂,参差不齐,我想说的是,入行之前,还是要多多考虑一个问题,那就是“兴趣”,IT行业是一个技术爆炸的领域,技术迭代非常快,如果没有兴趣驱动坚持学习,落伍和被淘汰只是时间问题,我大学同班30人,目前还在敲代码的大概也就四成左右。再说说我的程序员前同事们,现在有开网店的、做美甲的、卖电子烟的、开早餐店的、做销售的。。。终归这行的高压和高淘汰率还有“35岁魔咒”是真实存在的,鄙人认为能打破魔咒多打几年工的秘诀只有兴趣。
如何快速进步?深度or广度?
许多萌新在刚入行面对深不见底的技术栈时,都会有种不知从何学起又怕顾此失彼的感觉,这实际上是一个深度优先还是广度优先的问题,也是一个如何高效学习的问题,我在这里给出的建议是,刚入行时,大可以选择广度优先,先把知识面铺开,各种技术蜻蜓点水一遍,用最小的成本让自己在脑海中构建起对软件开发的大局观和整体认识。
看到这里可能有人会说,这样学出来的是一瓶子不满半瓶子晃悠,什么都干不好,其实不是这样的,类比我们上学的时候,初高中乃至大学,我们都还是五花八门均有涉猎,但是讲得都不深,只有到研究生和博士阶段,才会选准一个课题方向深度钻研,敲代码也是一样的,刚入行时,先扩展视野,构建整体感,知道都有什么技术,每种技术大体是做什么的,这很重要,随着工作经历的提升,在找准一到两种感兴趣的技术深度钻研。
就着这个话题继续说就是IT技术正确的学习法,结合上文中所说的,IT技术如今发展速度实在过于迅猛,新技术层出不穷,老技术迭代不断,在这种情况下新手ALL IN一种技术死磕的风险是非常大的,且不说在知识面过于狭窄的时候学习效率不高,就算等你把宝剑打磨到吹毛利刃打算称霸武林的时候,才发现江湖上已经没人用刀剑了,全TM是意大利炮。
因此,我推荐的学习方法是,面对一门新技术(特指主修语言之外的技术栈,如你是JAVA开发,则此时指的是redis、MQ等),直接找目录,快速了解此项技术是做什么的,能解决什么问题,优劣势在哪,就够了,把目录印在脑海中,工作中遇到问题能第一时间想到哪种技术可以派上用场,至于具体怎么写怎么用,现学现卖现百度即可。此时对于这种回头客,再认真学习学习,因为已经是经过工作筛选出来的真正用得上的技术了。
哪些是必知必会的?
当然了,也并非上文所说,万物蜻蜓点水即可,确实有些知识点是必知必会的
先卖个关子,我个人曾经非常狭隘的把程序员分为两派,一派是本专业毕业从数据结构开始入门学习开发技术的“科班生”,另一派是直接上项目从“hello world!”开始入门的培训学校“速成生”,并不是说后者就能力差或者水平低,毕竟我的入门恩师就是学英语的,但是对于后者来说,真心建议在入职成功后找机会把必知必会的知识点补起来,这与你用的是JAVA、C 还是Golang无关。
它们是:
1.常用数据结构的实现原理、优劣势以及查找、查看、插入、删除等操作的时间复杂度
2.常用算法
3.从解耦的思路把常用设计模式看懂
4.代码规范、注释占比
说起来这四点看起来都不影响一个模块能否开发出来,我曾亲眼拜读过一位“速成派”前同事的代码,他居然只用ArrayList就从新手村一路打通关,万事万物装入ArrayList,循环在手,天下我有,有什么需求是循环搞不定的,那就循环套循环,我问他查重这种事情为什么不试试HashSet?一层层一遍遍的循环判断多影响效率啊,答曰:“电脑循环,我又不累”
实际上数据结构的选用使代码运行效率差个几万倍真的是家常便饭。对于第四点,新手村里在循环中访问数据库的也是常见,其他几点必学必会不多赘述
怎么看待大环境与内卷?
内卷可以说是这一年的年度热词了,IT行业更是走在内卷的前沿,你996?老子007!看谁熬得过谁,水涨船高的原理下,打工人的生存环境越来越恶劣,就拿JAVA这门语言来说,长盛不衰N多年,会的人越来越多,供大于求的时候,面试官在100个人里挑一个的情况下,只能是不断地提高要求,设置更苛刻的条件,最终找一个内卷王者,很多面试时问到的知识点怕是正常情况下三百年不会有人看一眼八百年不会用得上,但是水涨船高没办法都变成了所谓必知必会的知识点。
我曾遇到面试官要求我从import开始在纸上手写水仙花数的可运行代码,对于这种返祖现象对方美其名曰考验基础是否扎实。我当时心里其实十分不爽,所以撂下一句“贵司办公不用电脑吗?”扭头走人了。当然我相信一定会有其他卷王求职者能够行云流水地在纸上写下代码成功入职的,所以对于JAVA语言目前这种过于庞大的体系,实操用10分,却要求一百分的现象,我也是比较无力,对大家没有非常好的建议,建议赶紧成长为面试官吧!
最后的最后
如果屏幕前的你已经上了程序员这条船或者确认要上的话,希望你能保持学习,至少至少每周为单位要挤出学习时间,不要安逸的躺在业务模块开发的大床上昏睡,那样你的性价比会越来越低,也好,那样也好,你35岁就可以退休了。
最后的最后的最后
你我都不是科学家,一门心思自闭钻技术并不可取,实际上在我看来,80%的程序员工作中技术并不是最重要的,甚至都不排在前三,因为在一家公司中需要用到的技术是有限的,在全面掌握后,大家在敲代码的方面差别不大,个人认为真正拉开大家差距的前三点是:沟通能力、统筹能力、厚脸皮