跳到主要内容

实战 Go:怎样快速实现一个极简任务调度系统

· 阅读需 5 分钟
Marvin Zhang
软件工程师 & 开源爱好者

引子

任务调度(Task Scheduling)是很多软件系统中的重要组成部分,字面上的意思是按照一定要求分配运行一些通常时间较长的脚本或程序。在爬虫管理平台 Crawlab 中,任务调度是其中的核心模块,相信不少朋友会好奇如何编写一个任务调度系统。本篇文章会教读者用 Go 语言编写一个非常简单的任务调度系统。

思路

我们首先理清一下思路,开发最小化任务调度器需要什么。

  • 交互界面(API)
  • 定时任务(Cron)
  • 任务执行(Execute Tasks)

整个流程如下:

image-20221003094216157

我们通过 API 创建定时任务,执行器根据定时任务标准定期执行脚本。

浅谈敏捷:你的团队在正确实践敏捷吗?

· 阅读需 7 分钟
Marvin Zhang
软件工程师 & 开源爱好者

引子

“今天加一下班把这个需求做了吧,老板催得很急。”--某时某厂某项目经理

敏捷,这个曾经作为灵活速度的代名词,在过去 20 年里逐渐发展成为 IT 界中被程序员们时常挂在嘴边的看似深奥的专业术语。敏捷开发(Agile Development)作为很多开发团队的项目管理框架首选,因为其简单、灵活,更重要的是它字面上暗示着 “快”。想一想无数码农为了赶进度而无偿加班吧。

敏捷 = 快速交付?

当你的开发团队遭遇项目延期、产品质量降低、士气低下以及客户关系恶化时,你的朋友或许会推荐你使用敏捷开发:“嘿,兄弟。我听说最近敏捷挺火的,你可以试一下。” 但是,当你在团队中推行敏捷一段时间后,你很可能会发现它并不好使:产品发布后依旧大量的bug、无穷无尽的加班、源源不断的最高优先级需求。在与老板的日常会议中,老板问你:“听说你们正在用敏捷来提升交付效率,很棒!所以我下周能看到之前给你提的重要功能吗?”

“敏捷就是快速交付”,这是很多敏捷实践者中最大的误区。其实,敏捷并不一定意味着快;相反,它还会引入更多额外工作,从而可能导致更慢的交付功能。对,你没看错。严格意义来说,敏捷会降低交付速度。例如,极限编程(XP,敏捷框架之一)要求为每一个功能编写单元测试,这会引入 1-2 倍的额外代码。

为什么推荐你用 C# 构建大型后端应用?- Part 1

· 阅读需 10 分钟
Marvin Zhang
软件工程师 & 开源爱好者

前言

今天下英雄,惟使君与操耳。--曹操《三国演义》

对于在 IT 圈摸爬滚打多年的程序员来说,如果要问国内最主流的后端编程语言,我相信大部分会说 Java。这并不意外,因为 Java 存在了 30 多年,有着庞大的用户规模和生态体系,在软件工程领域似乎有着绝对霸主地位。但是,古人云:“得民心者得天下。” 用户最多的编程语言不一定是最受开发者们喜欢的。根据 StackOverflow 2021 年在 82,914 名开发者中做的关于编程语言满意度调查,喜欢 Java 的占比只有 47%,已经排到 20 名开外了,仅高于 PHP、C、COBOL。另一方面,我们从调查结果可以看到,有着 “山寨版 Java” 之称的 C#,反而在开发者心目中满意度达到了 62%,比 Java 高 15%。虽然 C# 的满意度跟 Rust、TypeScript 差距还比较大,但可以看出 C# 作为 Java 的替代编程语言,在开发效率、部署便捷性、文档完善度等方面已经逐渐占据优势。笔者因为工作的原因,在平时开发中使用 C# 和 Java 开发了不少项目,因此对它们之间的相同点、不同点以及优势、劣势有一定了解。笔者认为,C# 相对于 Java 来说更受开发者欢迎是有一定道理的,因为它的开发体验很好。

20211119-language-satisfaction

限于篇幅原因,整个 C# 的原理及实战介绍(即为何推荐用 C# 构建大型后端应用),将被拆分为一系列文章,该系列将从语法特性、开发模式、生态体系、部署构建等维度深度分析 C# 这门 “年轻” 的编程语言,并以跨平台框架 .NET Core 为例介绍如何用 C# 构建大型后端应用。

本篇文章是 C# 系列文章的第一篇,主要在语法特性方面介绍 C# 的一些现代语法特性,以及它们是如何提高开发效率的。

除了甘特图,你还应该了解些什么软件项目管理知识

· 阅读需 18 分钟
Marvin Zhang
软件工程师 & 开源爱好者

前言

A bad plan is better than no plan.

坏计划也好过没有计划。--彼得·蒂尔《从0到1》

在软件开发工程中,很少会有单打独斗的程序员。这是因为现代较常见的软件项目通常都非常复杂,所要求的人力、资源、时间也比较多,仅由一个开发者来完成大型软件项目无异于 “愚公移山”。因此,软件开发通常离不开团队协作和项目管理。所谓项目管理(Project Management),简单来就是有序的组织、规划、执行并完成项目中各个任务的一种方法论。当然,实际项目管理的范畴还远不止这些,通常还会涉及资源调配、优先级制定、进度追踪等。它是工业革命的产物,也是现代管理学的分支,它能够大幅提高工程完成效率以及成功率。本文讨论的主要是软件项目管理,相较于传统的建筑工程、机械工程等项目管理有很大的不同。早期的 IT 项目管理来自于建筑工程等传统项目管理方法论,在信息时代早期扮演了重要的角色,大幅提高了软件开发和协同效率。然而,随着 IT 行业高速发展,消费者产品需求瞬息万变,市场形势变得越来越不确定(Volatile),传统的软件项目管理模式已经不能再满足软件开发需求。因此,现代软件开发模式,例如敏捷开发(Agile Development),应运而生,成为了很多互联网企业的首选。

传统项目管理模式(例如瀑布流)有什么弊端?现代项目管理模式(例如敏捷)又有什么改进?我们是否应该完全摈弃瀑布流模式,全面拥抱敏捷开发?作为一个程序员,是否应该掌握一些项目管理知识以及相关工具?作为一个团队领导,应该如何制定项目管理流程保证开发效率和质量?如果读者有类似上述问题的疑惑,本篇文章将为您详细分析和解答。

传统方法论

大红大紫的 Golang 真的是后端开发中的万能药吗?

· 阅读需 21 分钟
Marvin Zhang
软件工程师 & 开源爱好者

前言

城外的人想进去,城里的人想出来。-- 钱钟书《围城》

随着容器编排(Container Orchestration)、微服务(Micro Services)、云技术(Cloud Technology)等在 IT 行业不断盛行,2009 年诞生于 Google 的 Golang(Go 语言,简称 Go)越来越受到软件工程师的欢迎和追捧,成为如今炙手可热的后端编程语言。在用 Golang 开发的软件项目列表中,有 Docker(容器技术)、Kubernetes(容器编排)这样的颠覆整个 IT 行业的明星级产品,也有像 Prometheus(监控系统)、Etcd(分布式存储)、InfluxDB(时序数据库)这样的强大实用的知名项目。当然,Go 语言的应用领域也绝不局限于容器和分布式系统。如今很多大型互联网企业在大量使用 Golang 构建后端 Web 应用,例如今日头条、京东、七牛云等;长期被 Python 统治的框架爬虫领域也因为简单而易用的爬虫框架 Colly 的崛起而不断受到 Golang 的挑战。Golang 已经成为了如今大多数软件工程师最想学习的编程语言。下图是 HackerRank 在 2020 年调查程序员技能的相关结果。

hackerrank-survey-2020

那么,**Go 语言真的是后端开发人员的救命良药呢?它是否能够有效提高程序员们的技术实力和开发效率,从而帮助他们在职场上更进一步呢?Go 语言真的值得我们花大量时间深入学习么?**本文将详细介绍 Golang 的语言特点以及它的优缺点和适用场景,带着上述几个疑问,为读者分析 Go 语言的各个方面,以帮助初入 IT 行业的程序员以及对 Go 感兴趣的开发者进一步了解这个热门语言。

优秀开源框架就一定靠谱么?五招助你驾驭源代码

· 阅读需 24 分钟
Marvin Zhang
软件工程师 & 开源爱好者

前言

The most incomprehensible thing about the world is that it is comprehensible.

世界上最不可理解的地方就是它竟然是可以理解的。-- 阿尔伯特·爱因斯坦

开源(Open-Source)造就了如今繁荣活跃的软件行业。开源让全世界的开发者都能够协力编写出优秀的工具类项目,也就是所谓的 "轮子",在造福大大小小的公司个人的同时,也可以展现创作者或贡献者的技术实力。如今很多开发者都在大量使用开源项目作为自己项目的第三方库或依赖,更快更高效的完成开发任务。

open-source

笔者也不例外。我最近在用 Vue 3 重构 Crawlab 前端的时候,用到了 Element 团队开发的升级版的 ElementUI,也就是 Vue 3 重构的新 UI 框架 Element Plus。Element 团队在 Element Plus 中将该项目用 Vue 3 完全重构,全面拥抱了 TypeScript;而且相比于之前的 Vue 2 版本丰富了部分组件;而整体风格和使用方式跟之前的版本一致;一些 API 在使用上还变得更精简了。因此,笔者在重构 Crawlab 前端初期过程中没有遇到太大的障碍,再加上之前的编写经验,开发过程中显得驾轻就熟。然而,好景不长,随着项目的不断开发,笔者遭遇到一些技术上的困难。更准确的说,在实现一些复杂功能时遇到了来自于 Element Plus 框架本身的限制。虽然最终想方设法将问题解决了,但是我也深刻体会到了硬啃(Hacking)开源项目源代码的困难。因此,也希望借此机会将自己驾驭开源代码的经验分享给读者。

公元2021年,关于前端工程化你应该知道些什么

· 阅读需 27 分钟
Marvin Zhang
软件工程师 & 开源爱好者

前言

The only constant in the world is change.

世界上唯一不变的是变化。--《谁动了我的奶酪》作者 斯宾塞·约翰逊

IT 行业变化太快了,尤其是前端开发(Frontend Development)。如果能穿越回 10 年前,碰上一位 Web 开发软件工程师,他一定会告诉你玩转前端就是精通 jQuery 和搞定 IE 浏览器兼容性。不过随着前端的不断发展,jQuery 遭遇 “官方逼死同人” 逐渐退出历史舞台(元素选择和操作被标准的 DOM API 所统一);而饱为诟病的 IE 浏览器兼容性问题,因为 IE 市场的逐渐萎缩以及一些兼容性工具(Polyfill)的出现,让其从之前的核心优化问题降级为如今的瘙痒问题,不再成为前端工程师的标配。

如今的前端开发,有着玲琅满目的专业术语和纷繁复杂的技术生态,可能会让初入前端开发的工程师感到惴惴不安:要学的东西实在是太多了。现在的前端工程师如果不了解 Webpack、Babel、Node.js、NPM/Yarn、ES6/7、React/Vue、Sass/Less、TypeScript、ESLint、Canvas/SVG 等现代化前端知识,就难以让人信服自己的专业背景。2021 年的前端工程师可能是真正意义上的工程师(Engineer),他们通常需要运用大量的专业知识来解决工程化问题,包括如何将项目进行模块化,如何设计组件间的交互,如何提高可复用性,如何提升打包效率,优化浏览器渲染性能,等等。他们不再像以前,只需要 HTML/CSS/JS 一个套路来开发静态页面。

本文将着重就现代前端开发的主题,来详细介绍前端工程化的各个重要技术,帮助读者了解现代前端页面的复杂和多样性是如何构造的。本文是一篇关于前端工程的科普文,即使你不了解前端技术,也可以从本文受益。

TS 加持的 Vue 3,如何帮你轻松构建企业级前端应用

· 阅读需 22 分钟
Marvin Zhang
软件工程师 & 开源爱好者

前言

工欲善其事,必先利其器 --《论语》

在如今被三大框架支配的前端领域,已经很少有人不知道 Vue 了。2014 年,前 Google 工程师尤雨溪发布了所谓的渐进式(Progressive)前端应用框架 Vue,其简化的模版绑定和组件化思想给当时还是 jQuery 时代的前端领域产生了积极而深远的影响。Vue 的诞生,造福了那些不习惯 TS 或 JSX 语法的前端开发者。而且,Vue 较低的学习门槛,也让初学者非常容易上手。这也是为什么 Vue 能在短时间内迅速推广的重要原因。从 State of JS 的调查中可以看到,Vue 的知名度接近 100%,而且整体用户满意度也比较高。

stateofjs-vue

Vue 既强大又易学,这是不是意味着 Vue 是一个完美框架呢?很遗憾,答案是否定的。虽然 Vue 的上手门槛不高,灵活易用,但是这种优势同时也成为了一把双刃剑,为构建大型项目带来了一定的局限性。很多用 Vue 2 开发过大型项目的前端工程师对 Vue 是又爱又恨。不过,随着 Vue 3 的发布,这些开发大型项目时凸显出来的劣势得到了有效解决,这让 Vue 框架变得非常全能,真正具备了跟 "前端框架一哥" React 一争高下的潜力。Vue 3 究竟带来了什么重要的新特性呢?本篇文章将对此进行详细介绍。

为什么说 TypeScript 是开发大型前端项目的必备语言

· 阅读需 19 分钟
Marvin Zhang
软件工程师 & 开源爱好者

前言

怎么忍心怪你犯了错,是我给你自由过了火。 -- 张信哲《过火》

可能很多软件工程师都或多或少知道或了解 TypeScript(简写 TS),使用过 TypeScript 的前端开发者们也出奇一致的对 TypeScript 抱有好感。如果你在搜索引擎里搜索 TypeScript,会发现几乎铺天盖地都是称赞或表扬 TS 的文章,例如 《TypeScript 让你不会想用回 JavaScript》《TypeScript 真香系列》《再不拥抱TypeScript你就老了!》。根据最新的 《2020 State of JS 调研报告》,TypeScript 的受欢迎度(Popularity)以及满意度(Satisfaction)都在逐年增加,包括本文作者在内的 “TS 粉”(在 State of JS 中回答 “会继续使用”)的开发者甚至超过了 70%(如下图)。

typescript-2020-stateofjs-survey

总而言之,TS 如今在前端领域具有不可撼动的核心地位,是非常重要的前端工程开发工具。TS 是微软在拥抱开源项目之后为软件行业作出的突出贡献之一。然而,TypeScript 既不能提高 JavaScript 代码在浏览器中的运行效率,又不像 React、Vue 前端框架那样可以提高开发人员的生产力,更不能让你开发的前端页面变得好看而吸引人。那究竟是什么让它成为如此广受欢迎的 “真香语言” 呢,是什么让它令前端人员爱不释手呢?如果你带有这样类似的疑问,请继续阅读接下来的内容,本文将详细解释利用 TS 开发大型前端项目的优势。

开源免费的一文多发平台ArtiPub,让你的文章随处可阅

· 阅读需 7 分钟
Marvin Zhang
软件工程师 & 开源爱好者

背景

很多优秀的程序员和技术人员喜欢写技术文章和技术博客,通过这样的方式分享传播知识和经验,扩大自己的知名度和影响力,吸引粉丝关注,甚至有些技术博主还通过写文章来获取广告收入,很多优秀的博主还通过这种方法获得了出版书的机会以及工作机会。因此,写技术文章是一件非常值得投入的事情,帮助了自己,也让大众受益。

但是,写技术文章通常也很耗时,特别是一些优质文章,不仅需要旁征博引、构思文章结构、照顾读者受众,还需要做很多前期工作,例如搭建环境、写demo代码、测试代码等等。一篇优质技术文章通常需要3-6个小时来完成。然而,花了很多时间来写文章,最终发布出来的文章得不到很多人的关注是一件相当令人沮丧的事情。我们认为,优质文章值得获取关注和传播,让更多的技术工作者通过阅读文章获取知识获益。

每个技术博主都有自己喜欢的技术媒体平台,例如掘金、CSDN、微信公众号等等。很多技术博主也喜欢将文章发布在不同的平台上,寻求最大的关注度,同时也防止自己辛辛苦苦写的文章被别人复制粘贴盗版过去。然而,在多个平台上发文是一件麻烦的事情:博主需要同时登陆多个媒体平台,将自己的文章复制一个一个粘贴过去;更麻烦的是,有些平台只支持Markdown,有些平台只支持富文本,博主需要在这两者之间来回转换,这增加了工作量。

一文多发平台ArtiPub就解决了这样的问题。下面我们将介绍一下近日刚上线的开源一文多发平台ArtiPub。