面试官:说一下你做的项目中最有挑战性的技术问题吧!
张大胖:(脑子里快速过了一遍) 我大部分时间都在实现业务需求,没有遇到过什么有挑战性的技术问题啊!
这样的场景不知道你遇到过没有? 其实很多人的日常工作都是完成业务需求,很少有机会让你去创建高并发,高可靠,海量用户这样看起来挺有技术含量的系统,确实没啥挑战性。
这种工作做了一两年,就会很熟练,就会觉得无聊,就会想着跳槽。
跳到哪里去呢? 在自己的技能没有很大提升的情况下,即使是换一家公司,估计还是差不多。
针对看起来平淡的技术生活,如果还想再技术领域继续发展,建议尝试一下这么几种办法:
1. 深挖工作中的某个技术方向。
为什么要和工作相关? 这是因为有动力,有价值,可以现学现用。
比如搜索,比如缓存,比如RPC框架,都往深处挖掘一下。这需要读很多文章,看很多书,看很多源码。
光看也不行,要动手写一些,比如自己模仿着写个lite版本的RPC框架,简单的缓存......放到自己的GitHub上去。
这里就有个例子,stormmaybin同学写的storm-rpc框架:
https://github.com/stormmaybin/storm-rpc ,用到了Netty,Kryo,Zookeeper等技术。 面试管看到了这样实打实的东西,必定会高看一眼。
经过一段时间,你可能就会变成这个领域的专家。
当然如果你有其他兴趣爱好,例如钻研Linux源码,那也很好。
2. 研究学习公司自有的框架和平台
为了提高开发效率,很多公司都有自己的框架,无论是开源的还是定制的。 但是这些框架会把程序员限制到一个增删改查的狭小范围内,做一个HTML填空人员,可替代性极高,人走了也不怕,招来新人迅速就能上手。
存在就是合理的,想提高的程序员可以从增删改查中跳出来, 研究一下这些框架,看看它是怎么解决工作中问题的,例如它是怎么从数据库表直接生成Domain, DAO...... 等代码的。 你掌握了思想,自己也可以写一个,技能也就提高了。
记得有位同学是在SaaS的平台上做需求开发,这其实是个不错的机会,可以研究下SaaS的理论,架构,具体技术(如何保证安全,如果扩展,如何计费等等),都是很有意思的、很有挑战的技术。
3. 在软件工程实践中能不能突破?
工程实践包括单元测试、重构、持续集成、DevOps等。 每个项目都有自己独特的地方,都需要独特的小工具, 例如yangtaihsou同学给自己的项目写了一个pmock的框架:https://github.com/yangtaihsou/pmock 解决了项目的一些痛点问题, 这放到简历中也是闪闪发光的亮点啊。
想想自己自己手头的工作,有哪些还可以改进? 有哪些可以自动化?把它实现了,就把你和大部分人区分开了。如果你发现不了,很可能是你已经对这些问题习以为常了。
面试官看到这样的简历就会想: 此人发现问题后,没有随波逐流,不抱怨,能想办法解决问题,提高效率, 加入我们团队肯定大有好处。
总之事在人为, 关键是态度和行动, 这些事情没有一件是能轻松完成的,非得下一番苦功才行。
【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】