程序猿的修炼之道

Author Avatar
Damon Lee 8月 07, 2018
  • 在其它设备中阅读本文章

最近公司的事很忙,再加上家里也有不少事,所以这些日子没有什么产出。最近总想写一些关于程序员的事,所以说写就写。

所谓成长,应该就是那句”如果你觉得以前的自己很傻X,那你就成长了”,其实生活不就是让你一次又一次觉得自己以前很傻的过程吗,很多人觉得傻是很可笑的事,但是你敢说成长是很可笑的事吗?

曾经我也是一名北漂,记得刚到北京的时候,我跟同学租着一个月几百的群租公寓,上班路程要两个小时的公交和地铁,公交的拥挤程度让你真正见识到什么是真正的”北京欢迎你”,图的就是省点房租,但是一周过去后我就发现自己的想法很可笑,虽然两个小时的公交我起码可以看一小时的技术文章,但是如果我找一个离公司近的房子,我就可以省出一个小时的时间来进行高效的学习,这时我不免开始嘲笑一周前因为省了一点房租而沾沾自喜的我。第二周我就开始找离公司近的新房子,然后为了退押金走在没有路灯伸手不见五指的街上,那天晚上我就发誓:”我以后绝对不会再回这了!”

渐渐的我适应了北京的环境,每天在地铁上读技术文章丰富自己的技术认知,当然还有更幸运的是我遇到了一个好的技术老大,一个好的师傅以及一票好同事,我深刻的知道那段日子我最苦,但是也是我进步最快和最开心的日子,我们每周有技术分享,有CodeReview,有需求做不完同事间的互帮互助。

后来我离开了北京。回到家后感触最深的就是工作机会跟北京比少太多了,毕竟三四线城市的互联网环境跟北上广比就是天壤之别,大部分公司都是做外包或者接一些ZF工程。但不是在小公司你就不能没有一番作为,回家的这段时间,我一直利用自己业余的时间丰富自己的职业技能和非职业技能,坚持一年下来,你同样会发现自己有很大的进步,所以与其抱怨家里的就业环境,不如丰富自己技能,毕竟是石头永远不会发光(但是金子一定会发光)。

关于程序员,很多人说是青春饭,这一点我也是深信不疑的,毕竟年轻人比你学东西快,比你身体好,比你能加班,当然最重要的一点他们要的工资比你低,即便你开公司你也会选择这样的人,但这并不是你止步不前的理由,如果同样的工作年限,你的能力比同事强,说明你的学习能力强,正常情况下老板肯定会优先考虑你来转管理的,转型管理是避开青春饭的最佳出路。不过我我问过身边的同事,如果一个技术不如你的人当你的领导你会怎样,大多数人的回答都是肯定不服,当然也有人回答既然人家当上领导就算技术不强肯定也是管理能力特别强,不过紧接着他又说:”这样的人少之又少,毕竟技术不精通却还要管理技术人员确实很难服众”。所以如果你想转管理的话,趁现在好好磨练你的技术吧。

关于技术的磨练,我觉得最主要的就是效率,效率不仅仅是做得快,还要保证质量,我确实见到过一些人很快的完成需求,然后花费大量时间去改bug,这些人往往还能得到团队和领导的认可,就是因为他们做得快,让大家忽略了质量的问题,而往往就是因为代码的质量无法保证,导致后面入职的新同事天天对离职的老同事问候爹娘😂,后来的人给前面的人”擦屁股”,然后往复循环,这样的结果就是技术债越积越多,当然很多外包项目负责人经常说:”没事,我们这就是一锤子买卖,交付的时候合格了就行,后面的事就不管了”。但是我想说的是这样往往受伤的不光是做项目的人,还有公司,写项目的人做东西没质量得不到提高,接项目的公司因为项目后期出现问题无法给客户完美解决而失去了客户。当然还有与之相反的一类人,干活儿慢到不行,分配任务的时候总说自己负责的东西又麻烦又难,本来正常一天的工作任务,今天没做完,明天又没做完,抱着反正老板和经理不懂技术的心里或者沉浸在认为自己负责的是”最难”的模块晚一两天很正常,全然一副小白兔的既视感。

当你做到写出的代码又快质量又好的时候,你就应该满足了吗,当然不是,做完了项目,我们要分发,要部署,这些事同样浪费时间,而且是重复的工作,重复的工作一定要脚本化,CI/CD是很成熟的解决办法,配合上SonarQube静态代码审查,我相信你的水平肯定会更上一层楼的。

我有个学弟曾问过我:”师兄,我觉得搞技术太枯燥了,我爸妈当时就是觉得这一行工资高,非让我报这个”。我相信这样的人不在少数,因为我是从小就对编程有兴趣,所以我在这上面投入了大量的时间,因为每次做完东西的成就感让我感觉特别舒服,除了工作的项目,业余时间利用技术我也做了很多事,幸运的是有那么一票技术特别棒的面试官就喜欢把技术用在生活上的人,毕竟技术源于生活,一个人如果业余的事都做得很精致,工作上的事还会有什么问题吗,如果你是这样的人,你在面试的时候会大大加分的。所以如果你觉得技术枯燥,不妨试试把你学的东西用在生活上,比如用树莓派做个魔镜,手动编译个路由器固件给家里的网络去个广告,或者买一些智能家居组件组一个物联网中心。

我印象比较深刻的就是我在北京遇到我老大的时候,他就是因为我知道的东西多(虽然都不精通)而对我印象不错的。我本身是个Android开发,业余时间我学习了Linux,编译过AOSP源码,编译过FFMpeg,编译过路由器固件,学习了Shell,搭建了持续集成,学习了Docker,还用自己的服务器玩了虚拟化,组过HomeLab,玩树莓派,然后面试的时候我跟面试官说起这些的时候给我加了很多印象分,当然如果凑巧这个公司可能正好用了你业余时间学过和用过的技术,不要你要谁?同样的经验同样的水平,不要你要谁?

认识我的人可能都知道我的目标就是全栈。我知道很多人不认可全栈,认为全栈就是全菜,说全栈工程师是哪个都会但是哪个都不深,但我觉得这并不是问题,因为在我的认知里是当你在某个方向很熟练的情况下你就应该往广度发展了,当你会做前端时,你做后端就会知道接口怎么设计才是对前端友好;当你懂devops的时候,你就知道怎么设计配置文件能让项目方便部署和迁移;当你用过多个数据库的时候(肯定不仅仅是CRUD),你就知道什么时候该用哪个和有什么好处以及有什么坑。只有当你在各个方面都有涉猎的时候,你才能做到最合适的架构就在我心中,因为我心中有架构。如果这时候老板慧眼识珠要选一个人总览全局,不找你找谁?如果没找你的话,不妨打开招聘软件,搜一下”技术总监”、”技术经理”、”架构师”、”CTO”等关键字,相信薪资和需求会满足你的预期。

最重要的就是你知道自己想要什么,明确了就为之而努力,这样才不会后悔,然后干掉这碗毒鸡汤。