平凡的我

Photo by Octavian Dan on Unsplash

2016年6月计算机硕士毕业之后进入移动地级市公司工作。原本以为国企铁饭碗很香,也没想到那么快会对这份工作失去兴趣。每日的工作主要是取数和资产管理类工作,中间穿插大大小小的培训,我觉得这样的生活不是我想要的,于是想到了跳槽。

17年5月离职去了另一家相对轻松的国企做数据库管理工作。和上一份工作相比,这份工作显然轻松了很多,每天基本就是看数据库相关的技术书籍,这个阶段学到了很多东西,比如基础的 Linux 运维、自动化的一些工具、系统学习了 Python 和 Shell 脚本。

18年8月上岸现在的单位,接触全栈开发相关内容至今。经过不断的折腾,用 Python、Nodejs、Go、C# 都做过工程,目前熟悉的技术栈是 React + Gin。

2021年5月开始构思自己的产品。在小城市,体制内的工作还是最香的。但是招聘信息碎片化,不够系统,不利于研究分析。为此正在做一个职考类相关 App。采用微信服务号+H5的形式完成最小化可行产品(Minimum Viable Product, MVP)验证,后续看发展可能采用 Flutter 做双端。

独立开发者也需要原型工具

我一开始认为独立开发者是不需要原型工具的。原因有两个,一是原型工具上手需要成本。而独立开发者前端技术比较熟悉,比较容易构建一个原型出来。在这一点上,手绘草图的意义也大于原型工具。二是独立开发不需要沟通,原型做出来也没有意义。

但是在上手原型工具墨刀之后,我发现工具本身也在改变我的认知方式。首先,墨刀上手并不需要多少成本,反倒可以专注产品功能本身,而写代码无论怎样都可能陷入细节。其次分享功能的便利性让我学着去分享自己的创意,然后可以与用户进行沟通,可以在项目前期确定好功能点。

另外通过设计和编码进行分离,在设计和编码阶段都能更好的投入。若混合在一起,往往会因为不知道自己要什么而带来更大的成本。

Gin 路由默认重定向问题

有个问题很诡异,IOS Chrome 版本登陆会显示 401 未授权问题。经过定位,发现表面上是前端路由和后端路由不匹配才会出现。比如前端写着请求地址是 /api/users,后端路由是 /api/users/。但是在 PC 上却没有复现这个问题。PC 上 Chrome 根据 Gin 的 301 重定向到新的地址。IOS 没有办法看到,但是从后端日志看出应该是重定向再次访问的时候,手机浏览器没有带上 token 导致的,好像只是请求体的重定向。具体原因尚不清楚。

Gorm 关联语法解惑

Photo by Lerone Pieters on Unsplash

Gorm 关联语法与我的常识有冲突,导致尝试他的关联语法花了一些时间。最终结果如下

type CrawlResult struct {
	Crawler     Crawler   `gorm:"foreignKey:CrawlerId;references:CrawlerId"`
	CrawlerId   string    `json:"crawlerId" gorm:"column:crawler_id"`
}
type Crawler struct {
	CrawlerId string `gorm:"primaryKey;column:crawler_id"`
}

可以看到,在外键存在的表需要自己设定一个外键,这里是 CrawlerId,同时需要将对应结构体 Crawler 作为属性聚合在其中。这里 foreignKey 是指 CrawlResult 本体结构的属性 CrawlerId,references 指的是 Crawler 的外键。然后你在关联的时候可以直接这样做

db.Preload("Crawler").Find(&results)

这里 Preload 指的是外部结构名称。

总结

内部实体的外键要自己建立,然后用foreignKey关联才行。

umi + antd-pro 精简化流程

深度使用 antd pro 和 umi 的组合之后,我想自己对这个框架进行控制,脚手架搭建出来的那些乱七八糟的就不要了。在精简过程中,有一些小技巧,故记录在此。

安装 umi

npx @umijs/create-umi-app

安装插件

想在菜单中用字符串指定 icon 需要安装 umi-plugin-antd-icon-config 这个插件进行转换。

修改配置

config/config.ts

import routes from './routes';

import { defineConfig } from 'umi';
export default defineConfig({
  // https://github.com/umijs/umi-plugin-antd-icon-config
  plugins: ['umi-plugin-antd-icon-config'],
  nodeModulesTransform: {
    type: 'none',
  },
  routes,

  fastRefresh: {},
  dva: {
    hmr: true,
    immer: true,
  },
});
继续阅读umi + antd-pro 精简化流程

浅谈技术八股对开发者的危害

Photo by Evgeny Ozerov on Unsplash

虽然不在 IT 行业,但是大大小小加了不少微信群,关注了不少技术公众号,目前普遍的趋势是,技术面越来越卷。面试 Java 的,面试官恨不得 JVM 是你写的,面试前端的,恨不得框架是你写的、标准是你定的。这种风气不断蔓延开来,小厂也纷纷效仿,更有趣的是不少开发者也竟将技术八股奉若圭臬,开源了不少面经之类仓库。暂且不说,对于管理者来讲这种做法能不能招到真的有能力的开发者。对于开发者来说,我认为,技术八股对不仅对思维提升没啥好处,还会带来不少危害——自我否定和限制发展。

自我否定

先来看看考察的内容吧。面试大多是解释器原理、框架原理等,但是有多少人真的做到这个层次的开发,大多数都是针对业务来做的应用层开发。熟读八股花了大把精力,能上岸还好,否则只是白白损失了精力,丧失自信力罢了。

继续阅读浅谈技术八股对开发者的危害

独立开发的阶段性体会

Photo by Thought Catalog on Unsplash

注册一个公司

不管规模多大,公司是必不可少的。自然人能够开发的东西是单机工具类产品。假如想整合更多的资源,需要一个法人身份,开公司是唯一的选择。

多途径输出

总结的形式可以是笔记、可以是视频,多途径输出自己的经验,帮助更多的人。

减少一切非必要成本

这里非必要成本包括公司财务的开支,服务器的开支,在项目初期尽可能减到最低配置。保持无负担低成本启动,可以让你不用那么焦虑,保持清醒的头脑聚焦到关键的核心产品上。

从上至下规划产品

从上至下规划产品,不要陷入技术细节。要知道,除了核心功能,其他大部分的功能都是可以通过技术手段实现。产品的方向是最重要的。其中首要的是要明确市场。通过量化使用者的数量,乘以每个用户可以给你带来的效益,得出整体的规模。然后看目前的市场情况,看从中能分到多大的蛋糕。

继续阅读独立开发的阶段性体会

技术文章分类

Photo by rashid on Unsplash

找准定位,深度挖掘需求,以做产品的方法打造出来的技术文章必定是好文章。这篇文章算是我对常见的技术文章分类以及如何写好对应的技术文章的一点总结。

源码级别的探究文章

假如这篇是源码级别的探究文章,那么你的读者往往是具有相当功力或者有探究好奇心的技术达人,他们可能是想搞懂这个实现的原理,那么最直观的流程图是少不了的,可以一下子抓住眼球,理清思路,然后针对流程中的关键环节进行击破。这个源码探究我很少形成详实文字,毕竟曲高和寡,而且市面上类似八股已经形成大量可以记忆的知识点,并不能起到多大的贡献。

继续阅读技术文章分类

为什么我推荐 Antd Pro + Umi

Photo by Vincent van Zalinge on Unsplash

React 生态很神,套娃框架很丰富,比如 antd pro 组件库和 umi 开发框架。这段时间,经过深度的使用,我对这个框架的也越来越喜爱。因为它解决了独立开发者最关心的效率和代码质量的问题。

效率很好理解,代码质量可能有人有些疑问,一般的理解是代码质量可能是多人协作需要考虑的事情,实则不然,根据我独立开发多年的经验,作为独立开发者,很多时候无法知道自己代码是被合理的组织的。如果任凭代码随意组织,在后面迭代中也会影响业务上线效率。

为了解决这个问题,我往往需要看别人的代码学习一些经验,这个会耗费比较多的时间。而 umijs 从阿里的业务中提取除了很好的实践,使用插件和配置形式很好的组织了前端代码,让开发更加关注业务本身。

React 状态机使用感受

Photo by erik cid on Unsplash

上手 react antd 之后,按照官方推荐的套娃框架 umi 和 antd pro 配合搭建了目前的项目。其中 umi 又可以使用 dva 状态管理框架进行数据流管理。

一开始我的认为是这个东西比较麻烦使用起来不太顺手,并且解决不了什么问题。但是现实是在我的项目里有很多组件共用的数据,不用状态管理会让代码显得非常冗余。学习了 dva 之后发现套娃框架非常适合上手,也精简了不少代码。

状态管理的核心是拆分状态。一开始我综合了知乎的一些回答,认为若组件之间有大量的共享数据,那么就可以使用状态机管理数据可以精简非常多的代码。

产品随想

最近痴迷曾国藩传,试想读一些近代史相关的书籍,但是发现手头没有相关产品的。作为用户,我希望有一款可以输入一本书然后关联出所有相关知识点的工具,类似知识图谱。

这个工具比较适合 Web 大屏幕来展现。

暂时那么多。