当前位置:首页 » 代码人生 » 正文

java老人给新人的一些学习忠告

597 人参与  2023年08月15日 11:12  分类 : 代码人生  评论

1. 做更多,做比主管分配给你的任务更多的事情



  我在HW的时候负责一个版本的开发,这个版本的工作量大概是2000行左右。但除了完成这个功能之外,我还掌握了所有相关的功能,并阅读了所有的代码(大约10000行)。做完这个版本后,我对这个版本相关的整个业务都非常熟悉了。经过一两次会议,大家发现我对这个领域最熟悉,接下来的事情就有趣了:联系我询问产品讨论需求,联系我询问测试问题,联系我询问老板的外部支持;后来我就不负责了。他们还向我询问了该功能。即使我当时不知道,我也会看代码或者找文档来帮助他们解答。 。 。 。 。 。最终我成为了我的系统的“专家”。虽然此时我还在做业务,写业务代码,但我已经熟悉了整个业务。
  上面只是一个简单的例子。其实我想说:要想有机会,首先要脱颖而出。如果你想脱颖而出,你就必须与众不同。要想与众不同,你必须做得更多!




  如何赚更多?可以从以下几个方面入手

  1)熟悉更多业务,无论是否负责;熟悉更多代码,无论你是否编写过它们
  这样做有很多好处,以下是一些简单的例子:
  需求分析更精准,需求阶段即可识别风险、影响、难点
  问题处理更快,因为相关业务和代码熟悉,可以快速判断问题可能的原因并排除故障
  方案设计更加周到。因为对全球业务的了解,才能设计出更好的方案


  2)熟悉端到端
例如,你负责Web后台开发,但实际上,当用户发起http请求时,需要经过很多中间步骤才能到达你的服务器(如浏览器缓存、DNS、nginx等),而服务器在达到您的书面要求之前通常会经过很多处理。大多数人不可能参与编写很多系统的代码或者部分代码(路由、权限等)整个过程中的步骤,但是掌握这些知识会对你的综合水平产生很大的影响,比如作为解决方案 设计、在线故障排除等更有价值的技术工作需要全面的技术水平。
   “系统”、“全面”、“全面”这些词看似空洞,实则是技术大师必备的素质。要达到这个水平,你必须熟悉更多的系统和业务、代码。


   3)自学
  一般在比较成熟的团队中,因为框架或者组件已经封装了很多,用来编写业务代码的技术确实比较少,但是我们一定要明白“唯一不变的是变化”,框架可能需要改进,组件可能需要更换,或者换一家公司,新公司既没有组件,也没有框架,需要从头开始,这些都是机遇和挑战,而机遇和挑战只会分配给那些有能力的人。有了准备,那么这种情况下我们就需要自己多去学习,因为真正需要用到的时候却没有时间去学习。



  二、以Java为例具体方法




  Java中的大部分业务代码都是if-else加上一个数据库操作,但是我们可以自己多学习一些java知识,比如垃圾回收、调优、网络编程等等,这些可能暂时没什么用,但是当你真的需要使用它,你不能只用谷歌搜索它。这时候谁掌握了相关的知识和技能,谁就有机会。
以垃圾收集为例。我通常会花时间学习这些知识。我一年没用了,后来用了几次,每次都解决了卡住的大问题。有的同学,写了几年java代码,都不知道stop-the-world的概念,更不用说优化了。


  做得更好


  你要知道,这个世界上没有完美的东西。你所负责的制度和业务总是存在不合理和需要改进的地方。 “改良”是更高等级的怪物,战斗后可以增加更多的经验值。找出这些地方,给出解决方案,然后向主管提出,一次不够,两次,提几次,只要一次落地,这就是你的机会。


  例子:

   - 重复代码太多,能否引入设计模式?
   -系统性能一般,可以优化吗?
   -目前是单机,做成双机是不是更好?
   -版本开发质量不高,能否引入高效的单元测试和集成测试解决方案?
   -当前系统太大,能否通过重构、解耦改为3个系统?
   - 阿里中间件有一些我们觉得也可以用的系统,可以介绍一下吗?
   - 只要你思考,总能找到需要改进的地方;如果你觉得系统没有改进的空间,说明你的水平还不够。你可以多了解相关技术,看看行业内其他公司是怎么做的,BAT都会做。


  当我分配到九游时,我只是接手了一个简单的后端系统,每天配合前端进行数据的增删改查。看起来很无聊,对吧?如果只做这些事情确实很无聊,但我们接手后做了很多事情:
  解耦,将一个后台拆分为两个后台,提高可扩展性和稳定性;
  双机,变单机为双机系统,提高可靠性;
  优化,将一个需要5小时的界面优化为需要5分钟
  还有许多其他优化。后来我们组接手了更多的系统。后来这个小组5个人,负责6个系统。



做运动

  在做专业层面的交流时,我发现很多同学确实在尝试做更多、做得更好。不好,我该怎么办?



  例子:
  学习过jvm的垃圾回收,但是FGC导致的冻结问题网上比较少见。即使是,我了解Reactor的原理,但不知道也许参与Netty的开发,如何让自己真正掌握Reactor的异步模式?
  诸如此类的疑问还有很多。我将在这里分享我的个人经历。其实就三个字:学习、尝试、教学!



   1)学习
  这是第一阶段,你可以看书、谷歌、看视频、看别人的博客,但是要注意“系统化”,特别是一些基础的东西,比如JVM原理、Java编程、网络编程、HTTP协议。 。 。 。 。 。等等,这些基础技术不能只通过google或者博客来学习。我的做法一般是看书全面了解,然后用google、视频、博客搜索一些有疑问的地方,或者一些窍门。


   2)尝试
  这一步是解答上面提到的很多同学疑惑的关键点。形象地说就是“自己动手,丰衣足食”,就是尝试自己搭建一些模拟环境,自己写一些测试程序。例如:
   jvm垃圾回收:可以自己写一个简单的测试程序,分配内存而不释放,然后调整各种jvm启动参数,并使用jstack、jstat等命令查看jvm运行过程中的堆内存分布和垃圾回收状态过程 。这样的程序写起来非常简单,简单的就几行,复杂的就几十行。
Reactor原理:尝试自己写一个Reactor模式的demo。别以为这很难。最简单的Reactor模式代码(包括注释)不超过200行(请参考Doug Lee的PPT)。自己写完之后,再去看看netty是怎么做的,对比之后理解会更加深刻。
   MySQL:既然在线配置可以参考,那么可以直接让DBA把在线配置发给我们(注意去掉敏感信息),直接学习;然后自己搭建MySQL环境,并通过在线配置启动;你需要了解很多 我的同学使用MySQL很多年了,但是他们连一个简单的MySQL环境都无法搭建。
  框架封装了DAL层:你可以使用JDBC尝试写一个简单的分库分表的实现,然后和框架的实现进行对比,看看差异在哪里。


   3)教学
  一般来说,经过学习和尝试,你可以掌握70%左右,但要真正掌握,我想你必须能够向别人解释清楚。因为在说话的时候,我们不仅需要系统化一个知识点,还需要考虑各种细节,这会促使我们进一步思考和学习。同时,读或听讲座的人可能会有不同的理解,或者有新的补充,相当于不断完善整个知识技能体系。


  类似这样的例子还有很多。当我们感觉自己已经全面掌握了一切的时候,却发现很多点在写的时候都没有考虑到;我们在集体训练的时候经常会看到这样的情况。讲到的时候,大家提问或者讨论的时候,你会发现很多点没有解释清楚,或者有些点其实是被误解的。写PPT、说PPT、讨论PPT,这个过程都经历过了,基本上掌握一个知识点就比较全面了。

本文链接:http://44116.cn/?id=4

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。