今天我们来聊一聊程序员枯燥的编程生活和每天坐吃等死的状态,相对于其他行业来说,编程这件事肯定是枯燥的,即使是对编程非常有兴趣的同学和朋友也会如此,我为什么这么说呢?大家可以不看下文,在这里停顿思考一下。
实事求是的说,作为一个开发者,一个程序员,我相信大多数人干同一份工作的时间基本上不会超过两年,换句话说就是:一个程序员在同一家公司干同一份工作超过两年的很少。
很多人说,程序员是一个跳槽比较频繁的职业,每一次的跳槽都会使工资大幅度甚至成倍的增长,所以这时候就会有很多人跳出来说:程序员跳槽的目的很简单,就是因为想涨工资了。在这里,我想说:我并不否认,确实有很多开发者和程序员跳槽是为了涨工资,但是我相信作为一个有责任,有志向的程序员,跳槽中最大的目的并非涨薪,而是换一个更好的环境,更好的成长平台和发展空间,涨薪只不过是跳槽过程中附带的价值。
聊到这里,你们可能会说:你是不是跑题了?今天不是聊枯燥的编程生活,以及如何改变这种现状吗?其实这是有关联的,而且有时候可能关联还是很大的。我先卖个关子,一会再说其中的关系,在这里你们也可以停顿思考一下,到底是什么关系?好,回到正题上来说:程序员的编程生活为什么很枯燥,或者换句话说: 是什么导致程序员的编程很枯燥的?
其实原因无非就是以下这几种:
1.同一个环境,同一种技术
什么意思?跟同一个世界,同一个梦想不同的是,你在一个公司待久了,使用你所知的一种技术,重复的干着一个项目,你说时间久了,是不是很无聊呢?如果在一个公司做一个项目,长达一年,在这一年里,你仅仅是用你所知的技术一步一步的去实现,学不到新的技术和知识,技能得不到提高?这时候,无聊自然就会随之而来,悄无声息。可能对于公司来说,这是有意义的工作,但是对你来说:这是重复的,机械的搬砖。
2.复制粘贴……
其实和上边道理差不多。工作每天都是从网上粘贴复制,项目就是这样被垒起来的。很多人离开了网络,基本上就丧失了百分之八十的编程能力,而剩余的那百分之二十还是抄书。很多程序员编程不思考,而是简单的粘贴复制。
当然,聪明点的程序员还是会封装的,自己就会把一些常用的工具类,一些方法,一些控件进行封装,留着以后备用。在公司开发完 A 项目,然后开发 B 项目的时候,就会很简单,把自己封装的东西拿过来直接用,这样机械的复用或者粘贴复制是不是很无聊呢?答案是肯定的。
3.重复的迭代和维护,以及修改 Bug
其实当一个项目进入测试阶段以及后期维护和迭代阶段的时候,开发人员基本上百分之九十的工作任务就是在修复 Bug ,而不是在研发新功能,学习和使用新技术。天天在维护和更新迭代这个项目的时候,其实工作是很乏味的。
4.没有思想的程序员
其实很多时候,程序员是没有话语权的,尤其是在小的创业公司,因为老板基本上就是产品经理,需求说让你做什么,你就得做什么?让你去实现什么,你就得实现什么。不会让你参与到产品的讨论当中来的,当然,如果老板让你参加,估计由于产品经理是老板,你也没有什么话语权和发言权。
再这样一个没有个人思想和独立思考的开发环境中,你是不是很无聊呢?只是机械的去实现老板想法的一个工具?是的,你就是一个工具,这种现状那又该如何改变呢?
你们感觉还有哪些让程序员编程无聊的原因呢?
既然,有原因了,那就得想解决办法,而不是选择逃避。我们该如何改变这种编程无聊的状态呢?
从自身找问题面对环境的限制,技术的瓶颈我推荐一套最新的互联网技术知识体系
01
阅读源码
程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这也造成了很多错误看源码的方式。
那要如何正确的分析源码呢?
我们的目标应该放在最常用的框架上面,下面就介绍两个:一个是Spring,另一个是大家用来觉得一直不怎么出问题的Mybatis。
△spring源码
△mybatis源码
02
分布式架构
随着我们的业务量越来越大和越重要,单体的架构模式已经无法对应大规模的应用场景,而且系统中决不能存在单点故障导致整体不可用,所以只有垂直或是水平拆分业务系统,使其形成一个分布式的架构,利用分布式架构来冗余系统消除单点的故障,从而提高整个系统的可用性。同时分布式系统的模块重用度更高,速度更快,扩展性更高是大型的项目必不可少的环节。
03
微服务
关于微服务架构的取舍
在合适的项目,合适的团队,采用微服务架构收益会大于成本。微服务架构有很多吸引人的地方,但在拥抱微服务之前,也需要认清它所带来的挑战。需要避免为了“微服务”而“微服务”。微服务架构引入策略 – 对传统企业而言,开始时可以考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架构。
04
性能调优
我们不仅仅对项目要运筹帷幄,还要能解决一切性能问题。只有深入学习JVM底层原理,Mysql底层优化以及Tomcat调优,才能达到知其然,知其所以然的效果。除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识、思维以及做各种权衡的能力。
05
开发工具工程化
通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。程序员的战斗,往往不是一个人的战斗,我们如何在一个平台下高效的去重,进行代码review,对功能进行调整,debug,做到在统一的规划下步步为营,混乱的堆代码的过程中找到自己的记录。这一切都依赖于有效的工具。
06
项目实战
要想立足于互联网公司,且能在互联网浪潮中不被淹没,对于项目的开发实战演练是不必可少的技能,也是对自身能力的一个衡量,有多少的量对等于获得多少的回报。看似简单的一个项目需求图谱,其中的底层原理,实现原理又能知道多少?你搭建一个完整的B2C项目平台到底需要多少知识?这一切都是需要我们考量的。
以思维导图为指路方向,那么你未来的路会很可观,掌握以上技术要点那么你的人生架构师之路将不会遥远~
工作一到五年的java 开发工程师朋友可以加入我们Java架构交流群:760940986
群内提供 高可用,高并发,spring源码,mybatis源码,JVM,大数据,Netty等多个技术知识的架构视频资料
还有大把大牛在群内交流以及解答面试指导,问题答疑~~要进来和大牛交流学习提升提升自己吗~~~~
好了,我们继续聊怎么解决程序员现有的状态~
5.如何解决编程无聊的状态
首先,面对环境的限制,技术的瓶颈,其实我们应该想的是如何实现自我的需求和改变,而不是通过逃避和跳槽,其实你应该知道,不管你怎么跳槽,你都会将要面临这种无聊的状态,除非你这一辈子都在跳槽中度过。你试想一下:你今天跳槽了了另外一个公司,解决当时的无聊状态,学到了新东西,可是在新公司待了一段时间,又发展受限,技术又遇到瓶颈该怎么办?还跳槽,一直跳槽?
遇到问题,首先想到的应该是解决办法,而不是用跳槽的方式来逃避。比如:我们可以尝试轮岗,让前端去学习后台,后台来学习前端,大家互相帮忙,一起交流学习,是不是能够解决你这种无聊呢?还比如:公司的一群小伙伴,可以一起尝试着去创造和维护一个开源项目,再或者长期举办一些技术分享,拓展视野。其实从本质上讲要学会利用公司资源来改变无聊的现状,当然公司也应该在实现自己利益的前提下,还要关注和满足员工自己自我需求的实现才行。
其次,不要整天想着粘贴和复制,应该自己学习思考和学习,尤其是编程的思想和原理,平时多看,多读一些项目的源码,系统源码,看看高手是如何实现这个功能的,学会其中的思想和原理,不要仅仅从网上找到相关工具类或者开源项目就什么都不想,什么都不管,直接感觉能用就行。这样从本质上解决不了你自身的任何问题,当然,这确实让你实现项目功能,但是哪有如何呢?又不是你的。
再次,维护和迭代,以及修改 Bug ,不管你跳槽到哪家公司,这都是避免不了的,你感觉天天修改 Bug 和维护项目很无聊,那该如何改变这个现状呢?
1. 不要出现 Bug 就暴力的去堵,很多程序员解决 Bug 的方式就是暴力解决法,举个例子:比如报了空指针异常,他们就会在报空指针异常的地方做不为空的判断,这也太暴力了,宜疏不宜堵。你应该找到报空指针的真正原因,看看有没有更好的,更合适的解决方式,这样可能就会一下子解决很多地方的相同的 Bug 。
2. 还可以尝试着想着办法,如何优化一段代码,可能是不是有更好的方式可以提高性能,加入你的代码性能提高 1 秒的速度,你可能就会很高兴,就感觉很有成就感,这样就不会很枯燥和无聊了,反而很高兴。
3. 在 code review 的时候,可以项目的人之间相互 code review ,这样大家可以互相来找茬,既能够学到对方的编程的方法和方式,还能够把代码共同维护好,何乐而不为呢?
最后,关于没有思想的程序员来说,这个其实是公司文化的一部分,当然可能更公司太小有关,其实不管产品经理听不听你的,你都可以尝试着大胆说出自己的想法和看法,有时候,老板并不是专横,而是由于你们不敢说,认为老板专横。如果你的想法更好,我不相信你老板傻到还在坚持自己?当然,我并否认有这样傻的老板。总之,要鼓励讨论的公司企业文化,要大胆说出自己想法。说不定,有一天,你们老板由于没有听你的,而感到后悔,这可能也是你的成就感。
最后的最后我想说:公司环境,还有技术瓶颈,还有一些导致无聊的原因其实那都是外部原因,本质上遇到这些问题,解决的最后的方式是从自己身上找到解决方法,而不是逃避和抱怨。
有疑问加站长微信联系(非本文作者)