JavaRush /Java 博客 /Random-ZH /Java 开发人员生活中的一天。第1部分
alex8894
第 34 级
Санкт-Петербург

Java 开发人员生活中的一天。第1部分

已在 Random-ZH 群组中发布
问候,亲爱的同事们!《二十多年后》出版后,有读者要求续写故事。我还能谈什么?看来我已经完全涵盖了将“大胡子 enikey”转变为 Java 开发人员的主题。至少工作一年后才能得出一些结论。然后我决定简单地描述一下我典型的工作日是如何度过的。在“Java 开发人员生命中的一天”的剪辑下。 小时候,我很爱睡觉。当我还是个小白的时候,碰巧我睡到中午,三点甚至四点半才来上班。每次我都会回应管理层“像其他人一样来”的定期要求,即上午 9 点之前,每次都以同样的方式回应——他们说,我需要在不打扰任何人的情况下在电脑上工作。它滚动了。但随着年龄的增长,身体显然发生了一些变化,现在我更像是一个“百灵鸟”而不是“夜猫子”。这就是为什么我现在第一个(或者第一个)来工作。今天我是第一个,我有半个小时或一个小时的沉默时间,直到其他不那么“早起的鸟儿”赶上来。今天是时候计划一下了。我在 Linux Mint 下开发。我喜欢“开始”按钮,朴素而优雅,不喜欢这些瓷砖。Cinnamon 桌面管理器的视觉效果并不丰富,但在精美程度方面略逊于 MacOS,当然,MacOS 是这方面的标准。这很容易比较,旁边的桌子上有一台 Mac,用户体验设计师正在它后面工作。我对操作系统本身也几乎没有什么抱怨:它运行得很快而且非常稳定,我在这段时间只重新启动了它三次——当我在长假期间关闭计算机时。实际上,它也几乎可以立即加载,甚至连闪屏都没有时间出现,因为所有开发人员的计算机都配备了 SSD 驱动器。首先,我打开 Thunderbird 电子邮件客户端,里面有信件,其中包含有关 wiki 中我感兴趣的页面更改的信息(有设置和规范),但最主要的是来自跟踪器的通知。我们发生了什么有趣的事情?哦,他们测试了我昨天完成的功能回来了,看起来他们发现了一个错误。嗯,是的,确实如此。我需要尽快修复它,也许在测试人员到达之前我有时间,他会在进入一些“未完成的施工”之前立即查看更正。这是今天的第一件事。所以,这是关于我的“未完成的构建”,这是我在上一个冲刺中写的。看来这一次他成功的抵挡住了所有的 地狱圈测试阶段,今天,它可能需要合并到项目的主分支中。但这会在午饭后发生。即使今天,我们也必须在 DevOps 中工作,并从当前正在进行开发的分支更新展位,我们需要展示新功能。“权力越大,责任越大”,sudo 命令在授予 root 权限之前会显示一条警告。在我有点宽松的翻译中,这句话听起来像是“你能做的越多,你必须做的就越多。” 因此,带有“管理员印记”的我经常接到这样的“边缘”任务也就不足为奇了。好吧,让我们开始吧。昨天我正在开发另一个功能,现在我需要返回到错误所在的分支。Windows 用户通常喜欢各种图形 shell 并使用 Turtle (TortoiseGit),但对我来说,通过命令行更容易、更熟悉。总的来说,Linux 中的命令行是一个小杰作,非常周到且强大,特别是与 Midnight Commander 结合使用时。我们切换了,现在我们需要重建项目。我输入命令 gradle clean ass。我不知道这个命令最初是 gradle 作者的意图还是偶然创建的,但它只是清理和重建项目(ass 是 assemble 的缩写,而不是首先想到的)。在 javarush 上,gradle 仅被简单地提及为“和其他构建系统”。是的,在组装教育项目方面,Gradle 比 Maven 没有优势。互联网上的大多数教程和操作方法也使用 Maven。Gradle 的出现和日益流行很可能是由于构建现代项目的复杂性迅速增加。我参与的项目由几十个组件组成,后端用Java编写,前端用Javascript编写,测试用Python编写。顺便说一句,现在组装一个 Javascript 项目是一个独立且完全复杂的过程,甚至有一个名字 - Web Workflow,而且那里的依赖关系树几乎和 Java 一样庞大。好吧,至少你不需要组装 Python 组件,好吧,几乎不需要......组装和启动之后(这也很重要),你需要使用测试数据来引发和初始化具有关系的整个环境和NoSql数据库,消息队列和内存缓存。那么这一切都需要再次组装并运行在CI服务器上,然后使用ansible进行部署。同时,开发主要在Windows下进行,“实战”、演示、测试等预生产服务器自然也是在Linux下进行。我不太想象如何在 Maven 中实现这些东西,但在 gradle 中却可以很好地实现。事实上,gradle 构建文件是用 Groovy 编写的。这是一种非常有趣的语言,他们说它是 Java 和 Ruby 之间的交叉语言,但我不懂 Ruby,但我了解一点 Javascript,并且它的许多构造也可以工作。gradle 的创建者已经实现了这样一个 API,在简单的情况下,构建文件看起来相当具有声明性(顺便说一句,在我看来,它甚至比 Maven 的 pom.xml 更容易阅读),但如果您需要更复杂的东西,所有这些声明性都被丢弃,出现了变量、函数、类——总之,Groovy 的所有功能,顺便说一下,它可以在与 Java 代码相同的 JVM 上编译和执行。正如我已经提到的,程序集本身是跨平台的,但它与环境交互,因此也需要在 Windows 下进行检查。为此,我在虚拟机上安装了 Windows。KVM正在突飞猛进,如果客户系统配置正确,虚拟化几乎是看不见的。是的,Spice 现在支持两个显示器,屏幕分辨率自动调整,半虚拟化设备驱动程序几乎不会造成性能损失。有时我发现自己认为这两个平台之间没有太大区别。尽管如此,Java 仍然是一个令人惊叹的工具,它使两个完全不同的、有时甚至是敌对的世界更加紧密地联系在一起——专有软件的世界, 破解、注册机和序列号,以 Windows 和开放系统 Linux 世界为代表。这样,项目就组装好了,我们启动它(当然,也是通过 gradle)并看一下。嗯,是的,对我的灰白胡子感到羞耻,我没有实现制作的要求之一,这就是维基百科上白纸黑字写的。在我之前的工作中,我经常遇到这种情况,并且总是对开发人员如何错过规范中的整个段落感到困惑。是的,很容易!我想了想,把注意力集中在另一个问题上——有一个错误。只有在这里,经过几个阶段的测试,她才会被抓住,但在以前的地方 - 好吧,无论发生了什么。幸运的是,这里的工作不会持续太久。我正在推出 Idea Ultimate,顺便说一下,它是开发中使用的少数付费产品之一。原则上,您可以使用社区版,但您很快就会习惯好东西,例如与 Spring 的集成。您还需要几个用于日志的终端,一个用于前端的浏览器和一个 wiki,另一个带有命令行的终端,一切都在移动,闪烁......一般来说,两个显示器屏幕上的图片开始呈现出令人恐惧的效果外观就像低成本电影中展示的那样,描绘了黑客的辛勤工作。但这些仍然是小事,但我记得当我必须启动和配置故障转移集群时 - 七个终端窗口,屏幕一角的其他东西,在所有窗口中 - 来自 ascii 图形的一些数字和图片......但是我稍微偏离了工作,时间就这样过去了。...唷,好吧,看来我已经做了我需要做的一切,而且似乎我没有破坏我之前做的任何事情。我向该功能添加评论并发送线程进行测试。我尝试更详细地写下我到底做了什么或改变了什么,以简化测试人员的工作。在我之前的工作中,当我必须检查从开发人员那里收到的改进时,我真的很怀念这样的解释。与此同时,早晨顺利地变成了白天,人们也渐渐地起床了。很快就会有一个站立会议,或者我们认为,一个站立会议。事实上,工作日就应该从这里开始,对于大多数“夜猫子”来说几乎都是这样。站立是尽可能迟到上班的界限;强烈建议不要迟到。好吧,对我来说这就像一次休息。那么,让我们都站起来吧。在站立会议上,像往常一样,开发人员告诉我们他们昨天做了什么以及今天计划做什么,测试人员告诉我们他们测试了什么以及结果如何,而老板们很清楚,他们下一步计划做什么,出现了什么问题,需要特别注意什么。我们的团队分布在不同的地理位置,并且其全部成员只能在单口喜剧表演中(当然是在电视上)看到,而且也许每年也能在一般的公司活动中看到几次。在站立时,我经常想到它实际上是为了让开发人员放松而发明的。当你每天需要展示自己的工作进展时,不是在只有老板会看的纸质报告中,而是在同事面前,不管愿意与否,你都会尝试做得更多,有话可说。当然,也有一些“长期建设项目”,你连续几天重复“昨天我做了这个,今天我将继续做”,但即使在这些项目中,也不断有一些小的紧急任务楔入。简而言之,真实 牛仔开发人员总是有话要对他的同事说。在站立会议上,我被要求快速更新我的立场,所以现在我会这样做。当项目的主分支发布时,更新是由管理员进行的,但现在我们需要发布一个尚未完成的功能,同时不可避免地会出现一些管理员无法解决的问题。该展台位于数据中心,只能通过 ssh 访问它,当然,那里没有图形外壳 - 所以只有命令行,只有硬核!更新本身是自动化的并且进展顺利,但更新后其中一个组件无法启动。我用less命令看日志;顺便说一句,它有一个非常方便的功能:如果你按Shift-F,它会不断显示文件的当前内容,这对于日志来说是完美的。这是什么……奇怪的东西?全屏显示以逗号分隔的问号。第二屏、第三屏、第十屏……一共有多少个?哦,结束了,结果是相当多的堆栈跟踪。有人使用 IN 运算符编写了一个 SQL 查询,以从列表中选择所需的记录,并为列表的每个元素创建一个参数。一切正常,直到列表包含超过 32767 个元素,之后 SQL 服务器终于失去了耐心。您需要为此编写一份错误报告,但这与非工作组件的问题无关。让我们进一步看一下。现在很明显,数据库结构到新版本的迁移没有完成,似乎该功能的作者在迁移中改变了一些东西,在这里,在展台上,有它以前的版本。您必须通过 SQL Server 控制台实用程序手动回滚结构更改。如何在 DML 中编写命令来删除字段?指数?桌子?看起来就是这样。我重新启动了组件,迁移顺利......一切都很好。该去吃午饭了,顺便说一句,今天天气很好。“那个亮黄色的球一动不动地悬挂在天空中,让镇上的人们感到害怕,原来是太阳。” 几乎是一年中第一个阳光明媚的日子。我什至不想离开街道,但我必须离开——汇合的时间即将到来。待续
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION