在鹅厂,我作为一个Java 程序员每天都在摸鱼!!!

作为一名 在大、中、小微企业都待过 的 Java 开发者,今天和大家分享下自己在不同公司的工作日常和收获。包括一些个人积累的工作提升经验,以及一些 Java 学习的方法和资源。

先从我的第一份 Java 开发实习工作说起吧~

实习生工作日常

我是在大二暑期开始了我人生的第一次实习,岗位正是 Java 开发,还混了个 title 叫 “助理 Java 工程师”!

这家公司属于一家中型企业,作为第一份实习,我已经很满足了。

刚进入公司的第一天,在导师和运维同学的帮助下,搞好办公设备,安装开发环境,本以为第二天就能开始写代码。但是整整两周,我都没有写下一行 Java 代码!而是先花了一周的时间熟悉企业的业务、我要参与的项目源码(Spring 全家桶 + Dubbo)、以及公司的各种办公套件和研发流程。这些几乎是每位刚刚进入新公司的同学都要做的事情。

在这里插入图片描述
然后我就开始接需求了,面对前人留下的 xx 一样的代码和复杂的业务,我根本无从下手。那么这一周我做了些什么呢?在导师的指导下,我针对这个需求涉及的业务流程画了一个很完整的流程图,并且在流程图上进行了详细的标注。画完流程图之后,我突然感觉思路清晰了很多,接下来就是写伪代码,终于在一周后,我才正式开始写 Java 代码了。

在此之前,我基本都是跟着视频教程写写简单的 Demo 程序,或者自己为了学习做做简单的小项目。从来没有像这次一样在写代码前进行如此精心的设计,第一次有了自己走出校园的感觉,这种体验和成长是在学校无法感受到的。这也是为什么我建议计算机专业的同学在学了一些开发技术后,趁早去找一份实习,不用担心自己的经验不足,通过面试和企业工作的磨练才能让你积累更多的经验、提升技术,也能帮助你明确自己的目标。现在也有很多帮助大学生找实习的平台,像 牛客网、实习僧 都是很不错的。

实习的这家公司虽然不大,但是团队的氛围非常好。也正因为公司不大,和技术主管、CTO 等大佬的交流机会也非常多,我们每天开工前都会开站会(敏捷开发)来讨论工作,并且定期地举办技术分享。

整个实习过程真的非常愉快,学到了很多技术和业务知识,也开拓了眼界,明确了我今后的职业发展方向。最爽的事是工作不忙的时候也摸鱼儿刷了一些算法,真的非常感谢公司和这段实习经历!

然后分享我目前在 腾讯 做 Java 开发的日常。

鹅厂工作日常

没错,鹅厂并不是只有 C++ 这一门后端开发语言,其实鹅厂的 Java 程序员数量也是很多的!

我从大三暑假开始就在腾讯实习,并通过答辩转正,虽然只毕业半年,但至今累积在鹅厂写 Java 已经一年半多了,那除了偶尔摸鱼外,我平时的工作都做些什么呢?

在这里插入图片描述
起初我以为大厂程序员的工作日常也就是写代码、造轮子,在大公司,就得写更多的代码!

结果在刚入职时,由于经验不足,再加上年轻气盛,有着莫名的自信。刚拿到需求后,我觉得特别简单,不就是 CRUD(增删改查)么?于是,我就懒得设计方案了,没怎么思考就直接上手写代码了,结果不断翻车,出现了很多细节问题,比如数据没有访问权限获取不到、和其他部门的同学接口字段没对齐等等,甚至还出现需求理解错误的情况!最后导致的结果就是做了很多无用功,把本来几天就能做完的需求一拖再拖,一度以为自己要被劝退了! o(╥﹏╥)o

经历了一次次的翻车后,我开始思考自己的问题到底出在哪里,为什么我总感觉自己什么都知道、可以写出代码,但写出的代码却经常错误连篇呢?

我向导师和其他的同事请教后发现,其实大家更多的时间并不是在写代码,而是在 开会讨论、核对需求、沟通对齐、设计技术方案、测试等。写代码的时间其实很少很少!

导师对我说:“其实写代码并不难,关键是要明确为什么要写代码、怎么写代码、写什么代码。”

原来,相比写代码,更重要的是写代码前的技术方案设计和写代码后的测试!

技术方案设计

当程序员确认完需求后,要先根据需求来给出一个清晰明确的技术方案,一方面是证明需求的可行性,另一方面是对自己之后的代码实现有一个大致思路。很多的问题其实是可以在设计阶段去发现和规避的,而不是等你写代码的时候,才发现之前的设计有问题、甚至是需求本身就不合理!到时候耽误了项目上线,背锅的就是程序员自己!

之前有朋友问,在大公司,万一写着写着代码,没思路了、写不出来了怎么办?这种问题其实就是可以通过前期的技术方案设计来规避的。毕竟老板才不关心你代码写的怎么样,他只关心你的技术方案,换句话说,是关心你能不能按时完成项目!

此前,我即使画了一些流程图,目的也仅仅是在于帮助自己写代码。觉得代码能写出来后,我就不再去考虑方案设计了。

而在意识到技术方案的重要性后,我会在理解需求后,先写一份详尽的技术方案,包括需求的合理性分析、选用什么技术来实现指定的功能、怎么设计库表结构、怎么设计类之间的关系(用哪种设计模式)、怎么设计接口、计划工期是多久、有没有什么风险点等等。
如需课件源码软件等资料添加小助手vx:ma-xiaoguo(备注:果果)

开发

设计好方案后,就要投入开发。

基本就是先利用一些数据库管理软件或者登陆服务器去配置一些库表,然后选用一些 Java 类库和工具来编写业务代码。说是编写代码,其实 80% 以上都是复制粘贴!复制别人的,复制自己的,积累的代码多了之后,简直爽的飞起!不能复制粘贴的,也可以用一些代码生成工具、甚至是低代码工具来偷偷懒。谁说 CRUD 工程师就没有技术?哼,咱偷懒也要有水平。

写代码的过程中,你要遵循一定的规范,不断地将重复的代码进行抽象、封装和复用,可以利用一些设计模式,并且要多多编写注释,提高代码的可读性和可维护性。

关于代码规范,建议参考 Google 开源的 Java 代码规范或者阿里巴巴的 Java 代码规范,非常专业!
在这里插入图片描述
写好代码后,你要再次检查自己的代码,可以利用一些代码格式化和代码检查工具来提前发现一些规范问题以及 bug,还要在本地编写单元测试来最细粒度地保证代码的可运行性和正确性。

Java 的单元测试类库一般用 JUnit就行了,本地自己测试请求接口的话可以直接用 IDEA 自带的测试插件,也可以选用 Swagger或者 YAPI、Postman 等接口管理工具,甚至还可以直接使用命令行 curl 等。

在这里插入图片描述

测试

在写完代码之后,要经过非常非常非常充分的测试才能提交代码!这个阶段也是非常花时间的,需要配合测试同学,提供一些测试的细节和补充说明,并且对测试中发现的问题进行修复。很多程序员应该都有这种感受:写 bug 一分钟,改 bug 一小时!

在这里插入图片描述
这些就是我目前在鹅厂的日常工作,其实和其他公司不会什么区别,无非就是你负责的业务量级越大,你在设计、测试等环节上投入的时间和精力就要更多;业务团队越大,你在需求沟通和合作上也要花更多的时间。这些工作看似和写代码关系不大,但对于程序员的经验积累以及职业素养、工程能力的提升是至关重要的!

优秀的程序员,不只是有能力写得一手好代码,更多的是需要具备一些工程师素养,比如:

对技术有独特的兴趣和追求,持续学习

  • 有全局观,总能站在一个更高、更全局的视角去考虑问题

  • 处理事情小心谨慎,而不是凭直觉和过去的经验主观臆断

  • 沟通能力强,能够用方便他人理解的方式来描述问题

  • 强大的设计架构能力

  • 刨根问题,深究问题本质

  • 代码洁癖,精益求精

  • 不止技术,还注重业务底层逻辑,关心用户

  • 执行力强,有责任心

  • 懂得利用自动化工具提升效率

  • 善用绘图、图表来描述技术架构和问题

  • 乐于分享,积极为他人指路

在工作之余,我也在朝着成为一名优秀工程师的路上而努力。因此,我会利用公司提供的知识平台、问答平台和技术资源进行学习,并且多和身边的技术大牛们交流。大公司技术好,大佬多,提供的资源也真的非常多,这是我认为很多同学应该去大厂的一个原因,而身在大厂的同学更应该利用好这些资源。

我还会积极参与一些公司内外的开源项目,和优秀的程序员朋友一起合作,互相学习进步,提升代码的水平。这里也建议大家多看 GitHub 上的开源项目,先在本地运行并熟练使用它,然后尝试分析源码和贡献代码。

最后,祝大家早日学有所成,拿到满意offer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

心中一万只草泥马在奔腾是种怎样的体验?| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源横店街道办主任,侵权删)

iOS工程中的info.plist文件的完整研究

原地址:http://blog.sina.com.cn/s/blog_947c4a9f0100zf41.html 们建立一个工程后,会在Supporting files下面看到一个"工程名-Info.plist"的文件,这个是对工程做一些运行期配置的文件,很重要,不能删除。 如果…

不会自动化UI测试?不会编程?没问题,会造句就行!

上次,我们介绍了用于Web应用程序自动化测试的工具Playwright for .NET。但是直接使用它来编写测试用例,代码比较凌乱,后期也不好维护。因此,我们利用SpecFlow让测试用例更好理解和维护。1.SpecFlow介绍SpecFlow是.Net平台下用于行…

鼠标手势识别 [Flash]

算法:演示:源代码:http://www.foxaweb.com/demos/mousegesture/mouse_gesture_v1_0.zip转载于:https://www.cnblogs.com/boringlamb/archive/2008/05/20/1203115.html

Java交流|面试最后一问:你有什么问题想问我吗?

尽管,我们之前做了这么多的面试准备,然而,最后这个90%可见的最后一问可能直接让你功亏一篑。这么厉害的最后一问:”你有什么问题想问我吗?“ 看似平淡无奇的问题,但是却蕴含着多方面的含义。这个问题表面上…

基于MapWinGis的开发探索(三)--改善缩放、渲染、显示文本

继续对MapWinGis进行研究探索,紧接上一篇文章。MapWinGis自身有很多功能,此篇主要也是基于其内在方法来写的。除了第二点显示文本是根据其源代码进行扩展的。原图:一、改善缩放功能上一版本放大缩小都必须点击下工具栏的放大、缩小。是鼠标处于缩放状态&…

T-SQL利用Row_Number函数实现分页

SQL: CREATE PROCEDURE PagingViewTest (currentPageIndex INT, --页序号pageSize INT, --页大小pageCount INT OUTPUT --返回值,总记录数 ) AS BEGIN--取总记录数 SELECT pageCountCOUNT(OrderID) FROM dbo.sale_Order; --利用CTE以提高执行效率 WITH Result AS (…

程序员没有女朋友的原因,我终于找到了!

全世界只有3.14 % 的人关注了青少年数学之旅程序员没有女朋友的原因▼程序员大脑里想的▼每天要学习太多语言,程序员太忙了▼女朋友 VS 编译器▼程序员sao起来,还需要女朋友吗?▼电脑才是程序员的女朋友▼互道晚安后,会不会偶遇在…

dotNet 5 中执行 Node.js

在低代码产品中为了扩展功能,我们在业务编排中会扩展代码块的功能,允许用户直接在界面中进行代码(Node.js、 Python)的编写,来实现取数或者赋值的一些功能。本文简单介绍下在 dotNET 5 中怎么样进行 Node.js 的调用以及…

求职学习笔记|并发编程知识点常见问题总结(一)

1. 什么是阻塞队列?阻塞队列的实现原理是什么? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可…

实验——Windows常用网络测试命令

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1.Ipconfig该命令可以检查网络接口配置。如果用户系统不能到达远程主机&#xff0c;而同一系统的其他主机可以到达&#xff0c;那么用该命令对这种故障进行判断是有必要的。当主机…

Protel中的快捷键使用(网上资源)

Protel中的快捷键使用&#xff08;网上资源&#xff09; 使用快捷键之前&#xff0c;将输入法切换至中文&#xff08;中国&#xff09;状态 Enter——选取或启动 Esc——放弃或取消F1——启动在线帮助窗 Tab——启动浮动图件的属性窗口Page Up——放大…

为什么会有蟑螂这种反人类的动物出现?

全世界只有3.14 % 的人关注了青少年数学之旅相信很多人都听过南北蟑螂的故事&#xff0c;即使是一个可以打死老虎的北方人在南方蟑螂面前也会惊慌失措。除此之外&#xff0c;我们日常生活里和蟑螂的故事还有很多&#xff0c;比如&#xff1a;当你打开灯的时候&#xff0c;会有一…

Ajax使用初步

Ajax定义为“Asynchronous JavaScript XML”的简称&#xff0c;也就是异步的JavaScript和XML处理。从原理上看&#xff0c;主要是Ajax可以通过调用HttpRequest实现与服务器的异步通讯&#xff0c;并最终在网页中实现丰富友好的用户界面Ajax使用初步&#xff0c;配置步骤1.把Aj…

WPF 如何流畅地滚动ScrollViewer

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 前言看了看原生UWP的ScrollViewer&#xff0c;滑动很流畅(例如 开始菜单)&#xff0c;但是WPF自带的ScrollViewer滚动十分生硬..突发奇想&#x…

面试难点!常用算法技巧之“滑动窗口”

算法简介 滑动窗口&#xff0c;顾名思义&#xff0c;就是有一个大小可变的窗口&#xff0c;左右两端方向一致的向前滑动&#xff08;右端固定&#xff0c;左端滑动&#xff1b;左端固定&#xff0c;右端滑动&#xff09;。 可以想象成队列&#xff0c;一端在push元素&#xf…

回公司上班

回到公司上班了&#xff0c;悠闲的生活从此开始.....

10岁吊打职业教师的天才,仅用10篇论文称霸数学界160多年,40岁英年早逝却迄今无人超越...

全世界只有3.14 % 的人关注了青少年数学之旅今天超模君就给大家讲讲黎曼。人类历史上最伟大的数学天才的德国数学家是十九世纪数学界的巅峰——节选自《数学之旅 闪耀人类的54个数学家》1826年&#xff0c;黎曼作为家中的老二在德国汉诺威的布雷斯伦茨村出生了。他的父亲是村里…

NET问答: 如何集中化统一验证 Authorization

咨询区 Felipe Deveza&#xff1a;我自己实现了一个 basic 验证&#xff0c;现在我的做法是在每一个 Action 中都提取 Request.Headers["Authorization"] 进行权限验证。[HttpGet] public IActionResult Get() {string token Request.Headers["Authorization&q…

c#操作excel后关闭excel.exe的方法

C#和Asp.net下excel进程一被打开,有时就无法关闭, 尤其是website.对关闭该进程有过GC、release等方法&#xff0c;但这些方法并不是在所有情况下均适用。 于是提出了kill process的方法, 目前我见过的方法多是用进程创建时间筛选excel.exe进程, 然后kill 。 这样的…