一个程序员的成长之路,会经历多个阶段,从初级工程师、中级工程师到高级工程师再到这个领域的专家,但是能成为技术专家的终归是少数,因此我们通常给自己规划的是前几个阶段。刚毕业的时候就在想,如何能成为高级工程师?高级工程师到底是什么样子的?有的人会说,工作3-5年后,自然就成为了高级工程师,这种以工作年限来定义的并不准确,有的人或许工作好几年却在原地踏步,还停留在初、中级别,有的可能工作2-3年就成为了独挡一面,攻坚克难的高级工程师。那么,同样是3、5年,为什么差距能这么大呢?利用周末时间说说自己的看法(反正周末写技术文你们也不看。。。)
![3513995-31fe34de9ed983ae.gif](https://i-blog.csdnimg.cn/blog_migrate/cff81350f7f231d36e978ea990679768.gif)
思考方式(分析问题)
我记得在我毕业后的第一家公司的时候,在开发中遇到了一个问题,我就跑去问老大,然后老大给我说:如果这个问题给你来解决,你会怎么做?当时一脸懵逼?心里是这样的
![3513995-7c7125d3541cca9d.gif](https://i-blog.csdnimg.cn/blog_migrate/6c7112ba6db0fa21f6b1d2e4af0cd4b6.gif)
不给答案就算了,反而给他问住了,老大问你你得回答啊,于是就分析了一下,说出了自己的想法,老大说:这不是知道吗?还跑来问我干嘛。从那以后,我都不敢轻易去问了,遇到问题了自己先分析,然后寻找解决方法,有的时候就算实在解决不了,也要先整理一下思路然后再去问。
为什么讲这个故事呢?因为很多同学都是这样,在技术群里经常有些同学会问一些没有营养的问题,可能他们自己都还没思考或者实践过,就把问题仍出来,等待答案。在发现问题的时候就为自己设置了门槛,觉得自己解决不了,想找人帮忙解决。久而久之就形成了习惯,才会发现自己没有独立分析解决问题的能力,遇到难题就扔给别人,工作了多久都是原地踏步,技术没有长进,这非常不利于我们的职业发展。
我们与高级工程师的差距可能就在我们的思维方式,分析问题的能力。遇到问题时,先想想自己的解决方案,然后再问别人,这样才会有比较,发现自己的不足,从而提升自己。
工具方法 (解决问题)
经常有同学私信问我问题,有的问题我也碰到过或者没用到过,就会跟他们说,google 一下呢,或者我google 一下,搜到一些相关文章、博客,把链接发给他,然后过了一会儿,收到他的信息说解决问题了。谢谢大佬(其实我不是大佬。。。只是用工具找到了问题的答案和方法)
![3513995-2ee321d1a02320c2.gif](https://i-blog.csdnimg.cn/blog_migrate/e0d02b59164d9830dc782fcf4ce40379.gif)
高级工程师可能也不是面面俱到,不是所有的问题都会解决,可能很多问题都没碰到过,或者没有用到相关的技术,但是,遇到问题,知道该怎么去找解决方案。作为一个程序员,遇到问题我们要懂得利用已有的工具方法去解决问题,那么有哪些好的工具呢?
Google : 遇到问题的第一时间想到的就是Google一下,万事问google,国内访问不是很通畅,这个时候就需要自备梯子了,作为开发者,我们随时都会用到Google,基本上大多数的问题都能够解决。Google 一下,你就知道了。X度一下,你就上当了。(开个玩笑)
StackOverFlow: StackOverFlow 也是我们程序员的宝地,上面有许多优质的问题和答案,如果通过Google 没有找到解决办法,那么不妨去StackOverFlow 搜一搜,或许也有别人遇到相同的问题并且已经有了结局方案。
Github: Github 上有很多优秀的开源项目,各种框架、炫酷的UI、类库等等,多在上面看一看、逛一逛,或许下一次你就是用上别人的开源,当然如果你有好的方案,也不吝开源出来,帮助其他人少走弯路。
除了上面这几个知名平台,国内的像知乎、CSDN 、掘金 也都不错,有很多技术博客和文章,不过水平参差不齐,自己过滤掉糟粕就好。
我们和高级工程师的差距可能就在我们对于工具的运用和解决问题的能力,遇到问题学会运用已有工具去寻找解决方案。工欲善其事,必先利其器,有什么枪打什么鸟。除了上面说的这一些,我们平时开发也需多积累一些工具,提升开发效率。
知识延伸 (总结)
实现一个需求可能有多种方案,每一种方案可能都有利有弊,在开发赶需求阶段,我们可能不会考虑哪种方案最好,或许根本就没有考虑有几种方案,只要实现了需求就行,管他效率还是封装解耦呢。但是随着需求的增加,项目的项目变大,原来的方案可能就满足不了了,这个时候,我们就需要为以前的方案还债了。花费更多的时间和精力。
高级工程师会考虑得更加全面,不止于眼前,考虑性能和可扩展性,这样才能应对将来不变的需求和更高的性能要求。会进行技术预研和考量,选择合适的方案。善于总结和分享。自己进步的同时也帮助他人进步。
结尾
通过以上几点浅谈了一下和高级工程师的差距,其中养成独立分析问题的能力尤为重要,其实不止程序员,其他行业同样重要,当和领导和团队一起讨论方案之前,自己先分析问题,整理可行方案和疑惑难点等,开会的时候,领导也会对你另眼先看。
最后附2篇关于Android工程师进阶的文章:
Android 开发者该如何进阶?
Android 进阶路线(思维导图)