10x程序员工作法
郑晔
火币网首席架构师,前ThoughtWorks首席咨询师 ,TGO鲲鹏会会员
立即订阅
7975 人已学习
课程目录
已完结 56 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 程序员解决的问题,大多不是程序问题
免费
思考框架 (1讲)
01 | 10x程序员是如何思考的?
以终为始 (11讲)
02 | 以终为始:如何让你的努力不白费?
03 | DoD的价值:你完成了工作,为什么他们还不满意?
04 | 接到需求任务,你要先做哪件事?
05 | 持续集成:集成本身就是写代码的一个环节
06 | 精益创业:产品经理不靠谱,你该怎么办?
07 | 解决了很多技术问题,为什么你依然在“坑”里?
08 | 为什么说做事之前要先进行推演?
09 | 你的工作可以用数字衡量吗?
10 | 迭代0: 启动开发之前,你应该准备什么?
答疑解惑 | 如何管理你的上级?
划重点 | 关于“以终为始”,你要记住的9句话
任务分解 (11讲)
11 | 向埃隆·马斯克学习任务分解
12 | 测试也是程序员的事吗?
13 | 先写测试,就是测试驱动开发吗?
14 | 大师级程序员的工作秘笈
15 | 一起练习:手把手带你分解任务
16 | 为什么你的测试不够好?
17 | 程序员也可以“砍”需求吗?
18 | 需求管理:太多人给你安排任务,怎么办?
19 | 如何用最小的代价做产品?
答疑解惑 | 如何分解一个你不了解的技术任务?
划重点 | 关于“任务分解”,你要重点掌握哪些事?
沟通反馈 (12讲)
20 | 为什么世界和你的理解不一样
21 | 你的代码为谁而写?
22 | 轻量级沟通:你总是在开会吗?
23 | 可视化:一种更为直观的沟通方式
24 | 快速反馈:为什么你们公司总是做不好持续集成?
25 | 开发中的问题一再出现,应该怎么办?
26 | 作为程序员,你也应该聆听用户声音
用户故事 | 站在前人的肩膀上,领取属于你的高效工作秘籍
27 | 尽早暴露问题: 为什么被指责的总是你?
28 | 结构化:写文档也是一种学习方式
答疑解惑 | 持续集成,一条贯穿诸多实践的主线
划重点 | 一次关于“沟通反馈”主题内容的复盘
自动化 (12讲)
加餐 | 你真的了解重构吗?
29 | “懒惰”应该是所有程序员的骄傲
30 | 一个好的项目自动化应该是什么样子的?
31 | 程序员怎么学习运维知识?
32 | 持续交付:有持续集成就够了吗?
33 | 如何做好验收测试?
34 | 你的代码是怎么变混乱的?
35 | 总是在说MVC分层架构,但你真的理解分层吗?
36 | 为什么总有人觉得5万块钱可以做一个淘宝?
37 | 先做好DDD再谈微服务吧,那只是一种部署形式
答疑解惑 | 持续集成、持续交付,然后呢?
划重点 | “自动化”主题的重点内容回顾汇总
综合运用 (7讲)
38 | 新入职一家公司,怎么快速进入工作状态?
39 | 面对遗留系统,你应该这样做
40 | 我们应该如何保持竞争力?
答疑解惑 | 如何在实际工作中推行新观念?
划重点 | “综合运用”主题内容的全盘回顾
总复习 | 重新审视“最佳实践”
总复习 | 重新来“看书”
结束语 (1讲)
结束语 | 少做事,才能更有效地工作
10x程序员工作法
登录|注册

30 | 一个好的项目自动化应该是什么样子的?

郑晔 2019-03-20
进入自动化这个模块,我准备从程序员的日常工作开始。介绍“迭代 0”时,我提到构建脚本是项目准备的一个重要组成部分,但在那一讲中,我并没有具体说构建脚本长成什么样。
今天,我们以一个典型的 Java REST 服务为例,介绍一下最基本的构建脚本应该做到什么样子。这里我采用的 Java 技术中最为常见的 Spring Boot 作为基础框架,而构建工具,我选择了 Gradle
估计很多 Java 程序员心中的第一个问题就是,为什么用 Gradle,而不是 Maven?Maven 明明是 Java 社区最经典的构建工具。答案是因为 Maven 不够灵活。
你可以回想一下,你有多少次用 Maven 实现过特定需求?估计大部分人的答案都是没有。随着持续集成、持续交付的兴起,构建脚本的订制能力会变得越来越重要,Maven 则表现得力有不逮。
其实,早在 2012 年,ThoughtWorks 技术雷达就将 Maven 放到了 暂缓(HOLD)里面,也就是说,能不用就不用。
为了配合这次的讲解,我写了一个 Demo,放在了 Github 上。它的功能非常简单:
通过向 /users POST 一个请求,实现用户注册;
访问 /users,查看已注册的用户。
如果方便的话,你最好把这个项目 clone 下来,以便参考。这里我主要是讲解自动化要做成什么样子,如果你想了解具体是怎么实现的,可以参考 Demo 里的代码。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《10x程序员工作法》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(18)

  • 西西弗与卡夫卡
    设想过这样的情景(还没实现,打算实践一把):我们新招一名比较熟练的程序员,从TA入职拿到机器,到开发示意代码,再提交SCM,然后CI/CD,再发布到线上交付给用户,整个过程可以在入职当天的午饭之前完成。

    这不光要求构建和集成自动化,甚至要求从入职开始的各个环节都能提前准备好,包括机器、开发环境、线上环境等,甚至连示范的需求都要能及时传递给TA。理想情况下,程序员只需要开发好程序,保证质量,提交到SCM即可,其他事情都应该交给机器。

    要知道程序员都很贵,越早给用户交付价值越好

    作者回复: 是这个意思,后面继续谈如何往线上送。

    2019-03-20
    1
    7
  • helloworld
    对于Gradle的特性了解还是比较少……感觉学习中会有这样的一个现象:对与技术是干什么用的其实是知道的,但是对于细节的把握总是容易遗忘,之前就拿实战Gradle这本书基本上通读了一遍,但是遗忘的确实有点快!我感觉这应该是大多数程序员的通病吧,老师能否给出一些建议?抑或是这种学习方式本身就是低效或者是错误的,谢谢

    作者回复: 我的学习方式是,我先要知道构建脚本要做哪些事情,就像这篇文章中写到的这些内容,然后看怎么样用对应工具如何完成,这样看起手册来就有针对性了。

    2019-05-03
    3
  • enjoylearning
    作为一个.net开发人员又看到了一堆java术语,哈哈,不过没关系,不就是配个java
    环境么,easy

    作者回复: 就喜欢你这种 enjoy learning 的感觉!

    2019-03-27
    3
  • 孤星可
    我一般会在需要专有的构建工具之上 再定义一个 Makrfile 封装 通用的 test build deploy 操作 统一各语言构建工具差异 比如 maven gradle npm

    作者回复: 我也做过类似的事情,用 shell 脚本去封装。

    2019-03-20
    2
  • shniu
    郑老师是否可以分享一下自己在模块划分上面的经验呢?

    作者回复: 《敏捷软件开发:原则、实践与模式》、《架构整洁之道》中都有关于模块划分的内容。

    2019-03-20
    2
  • 陈斯佳
    有时候感觉流程比技术更重要。之前有一个经历,就是本来想写个自动化的脚本把在做的事情自动化,但是我的一个同事直接改变了流程,让整个流程更加简化了的。原来脚本所要做的事压根都不存在了。确实像老师所说的,写程序是最高的成本,在着手写程序之前,一切都要考虑清楚。
    2019-06-12
    1
  • shniu
    老师,有个细节问题想咨询一下,现在用Spring boot做一个新项目,由于是前期阶段,短时间内要上线,选择了Spring boot,用业务划分模块的方式来进行开发,就像您文中提到划分模块,现在有个疑问的地方是模块之间会产生一些调用,比如用户的金币数据在用户模块里,游戏模块需要用到某个用户的金币数据,有比较好的做法吗?如果是让游戏模块依赖用户模块,然后注入用户的service,感觉跟之前没什么区别

    作者回复: 不要直接依赖于服务,要用接口的方式进行隔离,哪怕是接口和原来服务一模一样,也要隔离。必须明确的一点,这两个业务模块之间是服务相互调用的关系,不是程序库的关系。

    2019-04-23
    1
  • 大力
    老师之前的文章都是只讲方法论,本篇也有放上具体代码了,要开IDE试试!

    作者回复: 赶紧体会一下代码的感觉!

    2019-03-24
    1
  • 246小言
    老师,我有个疑问。公司最近有个技术老大说不准用lombok这个小工具,一定要我们手写set get?lombok真的那么差吗?

    作者回复: 我不清楚具体的情况。我凭一般认知回答一下,有一种可能是,你老大觉得 getter/setter 就不应该写,需要做更好的领域建模;另一种情况是,对于这种生成代码的机制有担心。lombok 本身不是问题,很多人乱用才是问题。

    2019-03-23
    1
  • hua168
    老师,以后用idea导向建立Spring Boot,我是不是把默认的maven改为gradle?
    自动化:gitlab CI/CD+jenkins的gradle+docker
    其中docker是把脚本放在jenkins,根据tag,如果是稳定版本就用makeFile生成docker镜像
    这样可以吧?

    作者回复: 我的建议是用构建脚本生成 IDE 工程。

    2019-03-20
    1
  • shniu
    自动化在持续交付中得到了非常充分的体现,把频繁的打包、单测、集成测试、部分验收测试、镜像构建和发布、CI环境更新、服务可用性验证等过程全部流水线化,极大的提升了构建发布效率,当然自动化的意义不仅于此;同时,把一切自动化是思维的转变,高效工作的有利工具。

    作者回复: 没错,我们下面就会谈到持续交付。

    2019-03-20
    1
  • hua168
    idea没有直接集成gradle吧?我看maven就直接有,好不容易学完maven,就淘汰了😂
    有gradle方面的书吗?idea方面的呢?看官方教程?
    idea是不是用到什么功能再学?还是先看过大概,用到再仔细看?还是最好都看一遍?
    目前idea只会一些基础的…

    作者回复: 理解错了,IDEA 提供了很好的 Gradle 支持。我的建议是生成 IDE 工程,maven 同样适用。

    我学 Gradle 和 IDEA 这种工具都是看官方文档。

    IDEA 的学习,别的不说,先熟练适用快捷键。

    2019-03-20
    1
  • 北天魔狼
    老师,我想问下PHP有类似构建脚本的工具吗?还没开始学习JAVA

    作者回复: 我并不擅长 PHP,你不妨用 PHP build tool 为关键词搜索一下。

    2019-03-20
    1
  • hua168
    In china,很多都是用破解版的……比如网上一堆idea激活码😃

    作者回复: 其实现在的开发模式,社区版足够用了,否则,就是开发做重了。

    2019-03-20
    1
  • maks
    老师,我在按步骤走的时候在一步一步构建但是我想要手动指定jdk构建,在网上看了许多方法大多都是配置环境变量。
    2019-10-09
  • Kobe
    在微服务架构中
    我更建议checkstyle、代码覆盖率等不要在gradle中配置。
    本机:基于团队统一的Idea配置和插件检测;
    部署:通过ci、Sonarqube等外科手术式检查,当增加环节或改规则无需改所有服务的构建脚本;

    部署不用gradle:
    1、jenkins同时大量项目构建时,maven的资源耗损比gradle要低很多,微服务的构建速度差不多(巨无霸项目另说);
    2、灵活的gradle易带来构建缓慢、构建方式差异等问题,团队比较大时带来额外维护成本;

    微服务我倾向:
    本机gradle(构建生成pom.xml)
    部署maven且无各种检查
    提交代码走sonarqube、单元测试等检查,通过则自动定期(如每天中午和下午)发到开发环境,保证主环境稳定(对敏捷+多项目并行很重要)
    紧急发布可直接jenkins构建发布。

    作者回复: 请回到24理解一下快速反馈。

    2019-06-06
  • One day
    对maven的使用还是停留在较为粗浅的构建使用层面上,得把Gradle好好了解了解

    作者回复: 如果你对两个的理解差不多,多在 Gradle 花时间挺好的。

    2019-03-26
  • like_jun
    运维现在也有很多工具支持了。都是显示了配置化。

    作者回复: 显示是一个 view,需要先把 model 做好。

    2019-03-24
收起评论
18
返回
顶部