一个故事。
作为一名有着丰富经验的 Java 开发者,我曾在大、中、小型企业都有过工作经历。今天,我想与大家分享在这些公司的日常工作和收获。除此之外,我还会介绍一些我个人积累的工作提升经验,以及一些 Java 学习的方法和资源。
让我们从我人生的第一份 Java 开发实习工作谈起。
实习生的工作日常是非常有趣也非常充实的。我是在大二暑期开始了我人生的第一次实习,担任的岗位正是 Java 开发,并且还有一个助理 Java 工程师的称号,这让我倍感荣幸。
这家公司是一家中型企业,虽然是我第一份实习,但是我已经很满足了。刚进入公司的第一天,我首先搞定了办公设备,安装开发环境,在导师和运维同学的帮助下,我花了大约一周的时间来熟悉企业的业务、项目源码(Spring 全家桶 + Dubbo)、以及公司的各种办公套件和研发流程。这些几乎是每位刚刚进入新公司的同学都要做的事情。在此期间,我还跟着团队的其他成员一起讨论和思考,提出了一些自己的想法和建议。这些想法虽然不一定都被采纳,但是通过这个过程,我了解到了公司的文化和氛围,并且学到了很多知识和技能。
随着实习的时间推移,我的工作内容逐渐增多,我开始写代码,修复 bug,参与开发项目等等。这段经历让我深刻地体会到了实际开发过程中的挑战和乐趣。通过这个实习经历,我不仅学到了 Java 开发的基础知识和技能,还学到了如何与团队成员合作,如何在项目中发挥自己的能力和作用等等。
总的来说,这是我人生中非常有价值的一段经历,它让我对未来的职业生涯有了更清晰的规划和方向。如果你也是一名 Java 开发者,我相信这些经验和故事会对你有所启发和帮助。
然后我开始接受需求。面对前人留下的冗长、复杂的代码以及业务过程,我无从下手。那么这一周我做了些什么呢?在导师的指导下,我针对这个需求涉及的业务流程画了一个很完整的流程图,并在流程图上进行了详细的标注。画完流程图之后,我突然感觉思路清晰了很多,接下来就是写伪代码。终于在一周后,我才正式开始写 Java 代码了。
在此之前,我基本都是跟着视频教程写写简单的 Demo 程序,或者自己为了学习做做简单的小项目。从来没有像这次一样在写代码前进行如此精心的设计。第一次有了自己走出校园的感觉,这种体验和成长是在学校无法感受到的。这也是为什么我建议计算机专业的同学在学了一些开发技术后,趁早去找一份实习。不用担心自己的经验不足,通过面试和企业工作的磨练才能让你积累更多的经验、提升技术,也能帮助你明确自己的目标。现在也有很多帮助大学生找实习的平台,像牛客网、实习僧都是很不错的。
实习的这家公司虽然不大,但是团队的氛围非常好。也正因为公司不大,和技术主管、CTO 等大佬的交流机会也非常多。我们每天开工前都会开站会(敏捷开发)来讨论工作,并且定期地举办技术分享。整个实习过程真的非常愉快,学到了很多技术和业务知识,也开拓了眼界,明确了我今后的职业发展方向。最爽的事是工作不忙的时候也摸鱼儿刷了一些算法。真的非常感谢公司和这段实习经历!
接下来,我想分享一下我目前在腾讯公司做 Java 开发的日常。
鹅厂工作日常 没错,鹅厂并不只有 C++ 这一门后端开发语言。其实鹅厂的 Java 程序员数量也是很多的!
我从大三暑假开始就在腾讯实习,并通过答辩转正。虽然只毕业半年,但至今累积在鹅厂写 Java 已经一年半多了。那除了偶尔摸鱼外,我平时的工作都做些什么呢?
起初我以为大厂程序员的日常工作就是写代码、造轮子,而在大公司就得写更多的代码。然而,在刚开始工作时,由于经验不足,再加上年轻气盛,我有着莫名其妙的自信。刚拿到需求后,我觉得特别简单,不就是 CRUD(增删改查)么?于是,我就懒得设计方案了,没怎么思考就直接上手写代码了。结果不断翻车,出现了很多细节问题,比如数据没有访问权限获取不到、和其他部门的同学接口字段没对齐等等,甚至还出现了需求理解错误的情况!最终导致做了很多无用功,把本来几天就能完成的需求一拖再拖,一度以为自己要被劝退了! o(╥﹏╥)o
经历了一次次的翻车后,我开始思考自己的问题到底出在哪里,为什么我总感觉自己什么都知道,可以写出代码,但写出的代码却经常有错误呢?
向我的导师和其他同事请教后,我发现,实际上大家更多的时间并不是在写代码,而是在开会讨论、核对需求、沟通对齐、设计技术方案、测试等。写代码的时间其实非常少!
我的导师告诉我:“其实写代码并不难,关键是要明确为什么要写代码、怎样写代码以及写什么代码。”
原来,相比写代码,更重要的是写代码前的技术方案设计和写代码后的测试!
技术方案设计 当程序员确认需求后,首先要根据需求来提供一个清晰明确的技术方案,一方面是为了证明需求的可行性,另一方面是为了给自己之后的代码实现提供一个大致的思路。很多问题实际上是可以在设计阶段就发现和解决的,而不是等到写代码的时候才发现之前的设计有问题,甚至是需求本身就不合理!到时候耽误了项目上线,背锅的就是程序员自己!
之前,我甚至画了一些流程图,目的只是为了帮助自己写代码。觉得代码能写出来后,我就不再去考虑方案设计了。
而在意识到技术方案的重要性之后,我会在理解需求后,先写一份详尽的技术方案,包括需求的合理性分析、选用什么技术来实现指定的功能、如何设计库表结构、如何设计类之间的关系(用哪种设计模式)、如何设计接口、计划工期是多久、有没有什么风险点等等。
开发 设计好方案之后,就要开始开发了。
基本上,先利用一些数据库管理软件或者登陆服务器来配置一些库表,然后选用一些 Java 类库和工具来编写业务代码。虽然说编写代码,但实际上 80% 以上都是复制粘贴!复制别人的,复制自己的,积累的代码多了之后,简直爽的飞起!不能复制粘贴的,也可以用一些代码生成工具,甚至是低代码工具来偷偷懒。谁说 CRUD 工程师就没有技术?哼,我们偷懒也要有水平。
在编写代码的过程中,你需要遵循一定的规范,不断地将重复的代码进行抽象、封装和复用,可以利用一些设计模式,还要编写注释,以提高代码的可读性和可维护性。
关于代码规范,建议参考 Google 开源的 Java 代码规范或者阿里巴巴的 Java 代码规范,非常专业!
如果你不知道如何让你的代码更好,可以考虑参加一些代码评审会议或者请教一些经验丰富的程序员。他们会告诉你如何做得更好。
总之,写代码只是程序员日常工作的一个小部分。更重要的是技术方案设计和测试。如果你能够在这两个方面做得更好,你的编码能力肯定会得到提高。写好代码后,你可以按照以下步骤进一步检查代码,以确保代码的可维护性、可读性和正确性。首先,使用代码格式化工具来优化代码的格式,使其易于阅读和理解。其次,使用代码检查工具来发现代码中的潜在问题和错误。这些工具可以帮助你检查代码的规范性、安全性和性能等方面。此外,你还应该在本地编写单元测试来测试代码的最小可运行单元,以确保代码的正确性和稳定性。对于 Java 项目,你可以使用 JUnit 等单元测试库来编写测试代码。此外,你还可以使用 Swagger、YAPI、Postman 等接口管理工具来测试 API 接口,或者使用命令行工具 curl 等来测试 HTTP 请求的结果。总之,检查代码和编写单元测试是确保代码质量的重要手段,也是提高开发效率和减少 bug 的有效途径。
测试是软件开发过程中非常关键的一环。在写完代码之后,开发人员需要进行充分的测试,以确保代码的质量和功能的正确性。此阶段需要与测试同事密切合作,提供详细的测试说明和细节,并对测试过程中发现的问题进行修复。这个过程可能会非常耗时,但是它对于软件开发的成功至关重要。通过对代码进行深入的测试,开发人员可以不断完善和改进软件,为用户提供更好的体验。因此,测试是软件开发过程中不可或缺的一部分,它可以帮助开发人员提高软件质量,减少 bug 的数量,以及提高用户满意度。以上是针对原文的扩充和润色。
这些就是我目前在鹅厂的日常工作。在这里,和其他公司一样,你的工作量级越大,你需要在设计、测试等环节上投入更多时间和精力。同时,业务团队越大,你在需求沟通和合作上也要花更多的时间。这些工作看似和写代码关系不大,但对于程序员的经验积累、职业素养和工程能力的提升是至关重要的。
优秀的程序员不仅具备出色的编程能力,还需要具备一些工程师素养,例如:
对技术有独特的兴趣和追求,持续学习
有全局观,总能站在更高、更全局的视角去考虑问题
处理事情小心谨慎,而不是凭直觉和过去的经验主观臆断
沟通能力强,能够用方便他人理解的方式来描述问题
强大的设计架构能力
刨根问题,深究问题本质
代码洁癖,精益求精
不止关注技术,还注重业务底层逻辑,关心用户
执行力强,具备责任心
懂得利用自动化工具提升效率
善用绘图、图表来描述技术架构和问题
乐于分享,积极为他人指路
除了工作之外,我也在朝着成为一名优秀工程师的路上不断努力。我利用公司提供的知识平台、问答平台和技术资源进行学习,并且多和身边的技术大牛们交流。大公司技术好,大佬多,提供的资源也真的非常多,这是我认为很多同学应该去大厂的一个原因。而身在大厂的同学更应该利用好这些资源。
我还积极参加一些公司内外的开源项目。和优秀的程序员朋友一起合作,互相学习提高代码水平。这里也建议大家多看 GitHub 上的开源项目,先在本地运行并熟练使用它,然后尝试分析源码和贡献代码。
除此之外,提升个人影响力也是非常重要的。我认识很多 Java 开发工作者都喜欢写技术文章,并且一些朋友开通了自己的自媒体平台来分享文章,甚至有一些大牛靠自媒体收入还实现了财富自由!在写文章的过程中,我进一步锻炼了自己的文笔,向很多朋友学到了知识,也督促我来不断输入知识、提升自己。
Java 开发者的工作看似平淡,但只要你热爱编程、热爱这个行业,每一天都能过得充实而有意义!