读《朋友去网易面试,挂了》,有感

本文作者从自身经历出发,分享了在技术道路上的一些教训,包括不重视底层技术、不能从错误中学习、习惯写烂代码以及盲目追逐新技术。强调了底层技术的重要性,错误反馈的价值,代码质量的追求以及务实学习新技术的必要性,提醒程序员们避免这些陷阱,以促进个人成长。

目录

逼逼叨叨

1.不重视底层技术

2.不能在错误中汲取教训

应该怎么做:

3.习惯写烂代码

应该怎么做:

4. 盲目追逐新技术

应该怎么做:

https://mp.weixin.qq.com/s/XndTbHxro23pFb9B6nJRuA

逼逼叨叨

这样的文章自己其实并不是第一次看,为什么就偏偏这次自己看到了后觉得非常有感觉,甚至忍不住再来写个读后感呢?自己剖析了下自己,以前没感觉可能跟自己认知水平有关系,所以就觉得这些人在吹水而已,也不想去 try 一下。结合自己这些年兜兜转转,在弯路上崎岖前行,深刻理解了下,大佬们其实说得是非常有道理的。

先说下自己的入行的经历吧,自己完全就是个野路子不正规军,自己连个培训班都没有去(后期知道2万多培训班没教什么的时候,自己甚至还暗自庆幸过自己多么机智)。主要当时自己工资到手才3000多(那时候在一个工厂,甚至还幻想自己兢兢业业做事,就能出任ceo迎娶白富美的白日梦。现在回头看自己也挺可笑的),听别人说做技术工资每个月8000,然后就心动了。入行的时候就是跟几个水军看了本安卓基础知识的书,然后就上手写代码了,改改应用界面还用ps切图(工作内容是真心的简单),然后就拿着编出来的简历和这点菜鸡知识开始去市场上找工作,然后就觉得自己能够登上人生巅峰了(那时候深圳还有2w左右的房),虽然自己也曾经忽悠拿到了8k的工资沾沾自喜(当自己知道别人一个月28k的是,这感觉跟吃屎一样,PS虽然自己没吃过,唉。)。说正事,计算机体系基础知识大学学了,但不深入,也就学过c语言,写过几行代码。

当时跟着的人水平也不怎么滴,遇到很多难搞的问题,只能百度csdn找到答案然后做出来,然后大家还互相吹水“真牛逼,强啊”。

大多数时候的我们都是,知其然而不知其所以然。(现在想想这是件多么恐怖的事情)

所以自己真的和高手无缘。

“我们以为我们是工作了10年,其实却只有一年的经验,只不过又重复用了九年”。——这句话看得我真的非常有感触,非常真实,不知道你们感觉怎么样?我感觉自己就是重复了这些年。

不重视底层技术,不知其所以然,不知根不知底,对于遇到的问题,永远都只能百度一下得到结果,甚至连英文都看不进去。(当然自己是过了英语4级的)老板吩咐一个功能下来,你也只能通过GitHub或者百度看看有没有可以复用的功能。然后ctrl c、ctrl v,真的就是那种开玩笑说的复制粘贴工程师。那时候觉得自己意气风发,还美滋滋的臆想:想不到这么简单就能拿到高工资(是的,8k就觉得已经很高了,那会自己的认知真的很低)

【别笑,至今现在身边还是有这样的程序员。】

当然自己曾经也追求过新技术,就像大佬说的,你不用真的永远就无法内化成你自己的东西。这就好像学武功,你没有内功心法,只会动作,你只是学会了外形而已,那有什么用呢?

以上是自己的经历,大佬们看看笑笑就好,萌新们,希望你们引以为戒千万别想我这样,除非你真的只是想混生活,反正迟早你也会被生活混的。如果你们是自学,也还想走得更远,想要生活更好,真的需要很强的自学能力和坚持能力(我觉得,7天每天学1个小时,真的比1天学7个小时强多了。这个是我从自己减肥经历领悟出来的)

当然自己也开始慢慢意识到了,慢慢的学英语读英文原版,反正坚持吧。

 


最近推荐一个朋友来网易面试,这哥们在小厂工作6年,研发经验非常丰富,但他却挂在了技术终面。

 

事后和他约了个饭,深聊了一次发现他的技术成长路径还是有点问题。

 

软件开发行业需要经验,需要时间来沉淀,但从我个人发展情况以及带过的下属来看,这种成长绝非线性成长,而是突变式成长。

 

所谓突变式成长就好比豹变和顿悟,仿佛一下子打开了任督二脉成为高手。而硬币的另一面是:不少工作10年的人,从经验和能力上考量和他刚毕业1、2年差距不大。

 

“我们以为我们是工作了10年,其实却只有一年的经验,只不过又重复用了九年”。

 

不少朋友虽然工作了很多年,但他们很少学习计算机体系基础知识、很少在debug能力上突飞猛进、很少去研究计算机底层知识和原理。除了最初几年能成长,之后一直停滞不前,而且他们不明白为什么。

 

这样的朋友在工作3、5年后,想进大厂很难,即便是在中小厂也很难成为架构师或者高级工程师。

 

而有些同学,才工作1,2年就能在工作中展现出优秀的能力、承担重要模块的研发和攻坚,甚至能独立做一个大的产品。

 

今天结合和这个读者朋友的深聊以及过去12年带团队的经验,讲讲作为程序员我们需要避开的4种表现:

 

1.不重视底层技术

 

应用层的技术,程序员们为了完成工作一定会大量学习,但其实底层技术同样重要,甚至更重要。

 

那么哪些是底层技术呢?拿windows C++技术栈举例:

 

  • C++语言高级特性:运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载)、多继承及其二义性、虚继承、多态、函数模板、类模板,模板的继承、程序编译链接机制、内存布局(memory layout)、对象模型、各种容器的实现(vector、map、hashmap)等等;

  • 算法和数据结构:尤其是和C++结合的算法能力及数据结构的应用能力,hash map、B+/B-树、算法在C++容器中的效率应用、DP(动态规划)等;

  • 网络底层:HTTP、HTTPS、DNS、ARP、TCP、IP、ICMP、UDP、FTP、SMTP、的实现底层;

  • 多进程/多线程编程:进程通信的方式(共享内存、pipe、Socket编程等)、同步、死锁及解决方案、线程池的实现、进程/线程的操作系统实现原理、进程的状态及切换和调度等;

  • UI库的实现机制:WTL的实现机制、QT的实现机制、Windows C++底层绘制原理(这块简直博大精深)、窗口消息机制、DUI的实现机制等;

 

很多程序员朋友,完成业务开发没什么问题,但一遇到系统性疑难杂症,立马就失去了方向。原因很多,但最重要的无疑是缺乏底层技术。

 

再举个应用场景的例子:一提到分布式锁问题,大多数同学想到的方案是基于Redis的Master-Slave模式来实现。这个实现方案行不行?分布式锁本质是一个CP需求,基于Redis的实现是一个AP需求,乍一看基于Redis的实现是无法满足的。

 

脱离业务场景来谈架构都是耍流氓。从技术战略的需求层面来看,如果分布式锁在极端情况下获取锁的不一致,社交业务场景能够接受,那么基于Redis的实现是完全可行的。

 

如果业务是交易场景,分布式锁在极端情况下获取锁的不一致性无法接受,那么基于Redis的实现方案是不可行的。在锁强一致性的场景下,需要采取基于CP模型的etcd等方案来实现。

 

做出以上判断,需要深度理解底层系统原理。缺乏了这种理解,无法做出正确的架构抉择,也自然会对工作造成不利影响。

 

夯实的底层技术还会让你具备一通百通的能力,旧文说过:我们要进入高手模式,能举一反三。对于程序员来说,不清楚底层技术基本与高手无缘。

 

底层技术具备可迁移性,更上层的应用技术却被特化。

 

拿我自己举例,早期积累了深厚的C++底层技术基础,2011年在cocs2d还没成熟之际,自己用C++写了一个小的游戏引擎,这套代码应用了大量windows C++的思想,这就是底层技术的可迁移性。

 

另外,大厂的面试官酷爱考察底层能力水平,诸如上来就让你手写算法、通过你的工作经历层层深入问下去,尤其是如何调优之类。

 

2.不能在错误中汲取教训

 

对于软件开发人员来说,在工作中获得反馈,并通过反馈矫正行为和方向非常重要。

 

这其中的重点是:在错误中得到反馈,并汲取教训,获得成长。

 

交付产品的BUG、一次code review的结论、领导对你提的建议等等,这些你是否记录了、沉淀了,并力争在下次得到进步和改进?

 

来自业务、产品和其他人的反馈,会让我们明白自己的短板在哪,应该如何针对性的学习和成长。

 

很遗憾的是,不少同学不仅不会在错误中成长,反而试图掩盖和消弭自己的错误。

 

应该怎么做:

 

  • 对每个反馈保持积极的态度。你可以选择接受或者拒绝,但都应该保持平和和学习的心态。

  • 从错误中学习。没有人能永远正确,终身学习才能让自己持续强大。

 

3.习惯写烂代码

 

大部分优秀程序员或多或少都有代码洁癖,这是因为他们把代码和交付物当作艺术品而不仅仅是完成一项工作。

 

关于这点,我们看看曾经是程序员大神的雷军是怎么说的:

 

“编程的工作和石匠的工作相差不多,是技术活同时也是体力活,而编写优秀的软件,是一件困难的事情。编程不仅仅是技术,更是艺术,也只有具备对艺术的追求,才能催生出更多优秀的产品。”

 

缺乏经验的程序员很难写出优美代码,在看他们的代码总有一种感觉:一不小心就陷入了迷宫,找不到方向和出口。

 

应该怎么做:

 

  • 在动手写代码之前,设计出代码框架并用StarUML等软件绘制出代码时序图和类结构图;

  • 重视命名规范和注释,命名最好能起到部分注释作用;

  • 定期重构代码,无论是函数和类的抽离、还是架构的优化,在不影响业务开发节奏的基础上,需要经常做。

 

追求代码的优美还有一个很明显的好处:会帮助你快速获得结构化能力和思维。

 

别怀疑,有经验的技术面试官可以很轻松的考察出你的思维是否是结构化的。

 

4. 盲目追逐新技术

 

很多开发人员总是在谈论技术潮流,当有了新的技术之际,他们总是异常兴奋,快速投入这项技术的怀抱。

 

过了一段时间,更新的技术出现了,他们又抛弃了刚学会的前一项技术。

 

这就跟狗熊掰玉米一样,他们总是在学习教程,并且总是虚幻的感觉自己都掌握了,但其实真正要掌握一项技术需要长时间的实战应用并需要在反馈中前行。

 

限于公司业务的稳定性,他们学习的新技术大部分不会应用于线上产品,自然很难得到实践和反馈。

 

应该怎么做:

  • 从工作中需要的技术学起,再应用到工作中,同时从线上得到反馈并改进。

  • 即便学习和工作无关的新技术,也要做一些实际的应用或者小玩意出来。

 

2008年我刚加入腾讯,发现我们的QQ游戏大厅调用游戏程序存在1%左右的失败率,这之后我深入学习了管道通信和共享内存通信,并做了一个调用失败立即切换的SDK,替换了原有的多进程通信的方式。上线后失败率下降到1/1000,这个过程让我真正掌握了新技术。

 

以上四点真正在工作中做到,相信大家的进步速度会明显加快。另外程序员常见的一些问题也需要规避下,比如养成工作摸鱼的习惯、傲慢自大(新手在学到一些知识之后,很容易站在愚昧之巅)等。

 

程序员朋友在职场的前5、6年,一定要想办法进大厂,虽然大厂不一定是职场终点,但大厂有这些优势:海量用户量、健全的福利、完整的培训体系、完善的晋升制度,它们会助力大家的发展。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一休日记

csdn打赏扣费20点,这

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值