这篇文章继续不谈技术,我们来谈谈关于程序员的焦虑感,写这篇文章源自有位同学问了我一个问题:
我接触Android 应用层也快3,4年了,说实话,公司一直让做app 层开发,工作之余,学完ReactNative 和Weex,简单的做了Demo,实际开发中不让上,学完一年忘完了,之前大学专业还专门学了一年Linux 内核,开发中很少去用,慢慢就废了。有公司前辈建议我学java后端 ,有前辈建议我去学混合开发,说实话,好迷茫,尤其是偶尔学的新东西,如果成为不了一种知识体系,很碎片化的在学习,跟我这样,学了一个月的node.js,学完没处上,慢慢就发现,不知道学啥了。
我一看,这不是我曾经迷茫过的类似的问题么。我相信这也是工作几年的程序员会产生的迷茫,因为工作的几年已经不是那时刚步入社会的新人(菜鸟),已经可以做一些曾经做不了的事情了,也算是个熟练工了,能够自己解决日常工作的一些问题,能够比较轻松实现一些功能需求了。但是现在问题来了,技术到了瓶颈,怎么办?我曾经在知乎回答过一个问题:
当时我的回答是这样的:
独立开发过几个产品,说一下自己的见解,基本上有完整经历过一个产品的开发过程都应该清楚UI层是应用开发中最常变的一部分,app开发者绝大部分的时间都花在UI微调上,而业务逻辑基本上需求定下来不会变动太多,除非是产品迭代一些功能性的追加,不然就是不停的堆UI、堆UI,干过两年以上的开发者基本的开发能力已经有了,业务能力也差不多,这时候会遇到瓶颈,基本上就是找不到更加深入的方向,这个时候就可以考虑一下自己参与过的产品所使用到的技术是自己深究过的,打个比方,开发app的时候,一般会用到Http框架,这样的框架你是否有真正去实践过,或者有研究过它的实现思路和设计思想,我们一般都会拿过来用,但为什么要这样设计就是我们需要去了解的,这可以提高你的架构的设计能力和编码的水平,除了框架,更多的是深入framework层相关的,一些特殊的需求,比如动态热更新、插件化的实现,对应用开发者来说都是新的挑战,还有对app的性能调优,产品上的优化,这些东西都是可以根据其中某一个点进行发散的。只做UI层的尝试是没有什么前途的,不管干多少年,眼界也是极其有限,做技术的只能不停的深挖,构建完整的知识体系,才能打通自己的任督二脉。我个人的一些观点,仅供参考。
这个只是针对App开发的一些见解罢了。想一想,现在技术日新月异,层出不穷, 就拿Android领域来说:
RxJava、Kotlin、React native、MVP、MVVM、插件化、热更新、Data Binding…
这些技术的出现都是为了去解决以往解决不了的问题,那么我们的问题来了,我们是不是每出一个新技术都要去学一下,当然我们作为程序员也应该与时俱进,去接受一些先进的思想。但这里有个问题就是,我们太过于强调新,而忘记了这些新技术的本质,任何一门新的技术都改不了一个事实:底层技术是不会变的。至于学不学,可以问自己一个问题:
学这门技术能够解决什么问题?我如何在实际工作中运用上?
我们学习一门新的技术不是为了学习而学,最终还是要回归实际应用上去,不然过一段时间你发现自己又给忘记了,不然怎么叫学以致用呢。
前面的问题还有一个就是,要往哪个方向学更有前景?这个真不好说,很多人经常犯的一个毛病就是想得太多,做得太少,每天都在纠结学什么,就是不动手。我们可以看到是前几年移动开发很火,大家一股脑的就往这个领域钻,再看看现在,移动开发似乎没有这么火了,想找工作的同学和想换工作的同学是不是发现难很多了,你能想到会是这样的局面吗,真不好说,现在也许是市场冷静了,任何一门领域的火热都跟市场的需求相挂钩,一旦市场需求量少了,或者不再需要,我们都有可能面临失业。
我们来看看现在什么最火热,列举一些:
VR、AR、机器学习、深度学习、人工智能
想必大家每天都会看到这些相关的新闻和资讯,也许这些是未来比较有前景的领域了,但我们不能因为这些概念的火热就一股脑得投入到里面,我的看法就是找一个自己感兴趣的方向,持续发力,让自己成为这领域的专家,但前提是你得打好基础。
好了,说到这里你的焦虑感是否少了些许呢?如果还没有,我提个问题就是你想成为哪个领域的工程师:
- 终端
- Android/iOS
- Cocos2d
- Unity 3D
- Web前端
- 后台
- 运维
- 测试
其实每个领域都有相应的技术栈,你可以从中选一个自己感兴趣的方向去学习,但并不局限于说你只关注于某一个方向,我的建议是:
专注于一个领域,横向扩展其他领域的技术。
总之一句话,不要自我设限,没有人说你一定要成为什么样的人,而是你想成为什么样的人。谁知道哪天你不想做程序员了,想回家卖咸鸭蛋了,那你就不需要纠结学什么的问题了,及时行乐,开心就好。