再快点

这两天的复习让我想起不久前看书,书里面的内容大概是:劝诫同志们多提升效率。个人效率提升主要来源于两个方式:一是使用效率工具,二是加快自己的思维与做事速度。作者举了个例子挺有意思,说巴西足球队和中国足球队有个很大的区别是,中国队会在九十分钟内的比赛慢慢地磨,看起来很不流畅。而巴西队则是三两下打破防线,犹如水银泻地。我偶尔也看足球,对此深有体会。结合到现实,我也成了慢蹭蹭的“中国足球队”。回想过去做过的事,大多数都比计划多用了两三倍时间,虽有马后炮之嫌,但也常常追悔。

好像慢悠悠地来做一件事情天生是人的舒适圈,做快点脑子就不舒服,也许还会下意识认为:慢工出细活,快工容易马虎。但经过我长期实践,极大多数工作,都是快工能做出来的,甚至是能训练的,而出错的概率,和慢悠悠地做最后忘记自己在干嘛所犯的错相比,根本不值一提。以下是我的训练方法:

  • 始终知道自己正在做什么
  • 赋予这件事意义,哪怕是早点完成能省下更多时间
  • 心无旁骛地做这一件事
  • 充满激情,不要懒惰

骑车所想之汇集

先说点推荐,因为这个网站主题太过文艺,阅读格式对于代码块等编程知识分享兼容得不好。于是我先使用gitee/github进行专门的知识分享,欢迎通过下面这个网址访问:
learn-programming: 我是如何成为开发者的
(这个名字起得很大,因为我还不是开发者,但我想看看一步一步走能不能做到)。

言归正传,我几乎每天都会骑车,大部分时间是往图书馆去。在飞驰的六七分钟里,思想也随风而起。我会想到今天看的比较有意义的视频,比如代码人生中自由、金钱、成就的不可能三角论;也会想到我为什么今天还是这个样子,失去了初到广州的那种雄心壮志;可能还会懊悔又在人际关系中犯下的错误。总而言之,我都会把最近想到的话语写在下方:

这是我对于为什么今天还是如此的思考:

如果让我回答世界上最珍贵的几种品质,我会说:勇气,坚持,专注。
人生正如程序,我不由得说出如此矫情的话。人不断地“灌输”或“被灌输”:短视频,书籍,饮料,风景,最后根据环境、规则、价值观无形地塑造着新的人。在这过程中,人也会“输出”或“被输出”:我现在心血来潮写下的文章,或是百无聊赖时刷视频留下的各种用户数据。每个人也会在此建立联系,留下遗产,影响后代。用超级宏大的视角来看,简单的一个人,能不被环境改变,甚至是裹挟,很难。
但人生不过三万天,当意识到我只是我的时候,我还会跟着大环境一样走吗?我试图去揣测一些事情的逻辑、本质,发现我们花费大量青春年华在做的,都只是糊弄自己,欺骗别人的无用功。技术不难,交流也还好,最难的是在一堆外界给你框好的傻逼栓里面戴着脚镣把这些都给办了。我发现我暂时失去了改变世界的想法,变得漫无目的,只想着先把定好的Java学习路线踏踏实实的过一遍。结果却是被快要截止的课程作业,整体吹水的无效群聊,每周一次的期末考试打乱一切。我想是我不够有勇气,不敢在研究事物的之后,坚定地为自己的想法买单。前段日子看了《硅谷》这套美剧,里面的独立开发者能够为了自己的软件梦奋斗昼夜,真的很让我羡慕。这并不难,但需要给一个说服自己的理由。我的梦是什么呢,我真的还没想好。我唯一确定的是,在这个烦杂的时代,精简输入,关注本心,坚持输出。总会在不久之后找到答案的。

黄楼里有个男人在弹钢琴

总是无厘头。五一回来不过一个星期,却觉得很久了。关于大理总是想起,但不知道怎么写,因为昆明篇也写得不好,暂且还没敢发。我想着此行回来之后,会重新审视我的生活。现在的情况是,我会在无缘无故刷短视频的时候想起认真生活的样子,强撑着吃饭时不要拿起手机,提醒自己没有什么真正需要关注的信息。但哪有那么容易改变,接下来的动作无疑还是选择看手机,自愿进入信息世界。

回来后除了改改python代码还没有真正进入Coding状态,下个月就要找实习了。我还在准备着除了顺利拿到毕业证以外重要性在哪的考试,我平时没怎么学,但期末笔记还算工整。于是我第一次开源了我的笔记。这么说不太好听,在我心里“开源”是很大的词,不如说小范围公开吧(只发了我的几个学习小组)。[此处专门说“开源”是因为我脑子中组织语言的第一想法,后来脑子在打架,第一想法输得很惨,所以我记录下来。]我发现男女有别,这几乎在我发出笔记前就有所预料:大部分男生的世界很奇怪,会对做事的人要求极高,即使这个事情真的做得无可挑剔了,在他们表现出来也只是“很不错”的样子。也正因如此,可能大部分男生不会将自己做的事情公开出来,甚至贬低自己,为的是避免口舌。其实我也是如此,而且还会持续很长时间,但我现在打算做些变化了。因为当豪情壮志没有讲出来,也就没有人在意你,监督你。当做的事情一直是舒适圈里的所谓“沉淀”,那么也没有人会竞争你,帮助你。因此去tm的,做自己就好了,我对自己充满信心。

时候不早了,没想到无厘头的随想只花了十五分钟,继续复习吧。

思绪似有还无

最近两周没做什么事,本来三月的学习,生活还算是励志,敲代码,撸撸铁,偶尔发发牢骚。一到四月就有点乱套了。或许是学业进程过半而看不到自己的太多收获,只能看到一大堆不感兴趣的课程作业。于是大脑产生了激烈的边际摩擦,一边想一口气做完,一边却没有勇气开始。一周的拖拉和一周的gap,我又回到了周一。

今日仍颓,直到晚上的小测。开卷的小测也并不轻松,需要抄写在书本上查找的内容很多,给了八十五分钟,竟没有提前交卷。抄写的内容我都快忘了,无非是输入、输出、信息、数据、组织、处理等等。但思想却很活跃。我想到了我的高中,那是一段擅长输出却极少输入的日子。我们学了一点点知识,然后就在作业、周测、月考里面反复操练,直到形成肌肉记忆。想到高三,我曾有一段时间想要自学,去学老师觉得我们不适合当时训练的新知识。我觉得需要找到自己的薄弱点,重点学习,甚至去学习新的方法。后来,是懒惰阻止了我。这种懒惰并不仅是行为上的,更多的是下意识的懒。我到现在都常常会体会到这个感觉:力不从心,害怕改变,最终就是一步步地走回舒适圈,继续维持,做烂人。

在很多无聊的,难过的,令人讨厌的时候,有一种思绪若有还无。脑子里忽然产生出这种念头,你觉得很对,但你难以精准记录。你能感觉你快要忘记它了,快抓住,然后思绪就飘走了。尽管你能在日后想起一些,但那只是片刻了。

大二,我开始了信息茧房的生活。我很少输出,喜欢漫无目的地刷视频,看教程目录,甚至看点书。以上都坚持不久,循环往复。我不知道有什么价值,这些东西越看越焦虑,越不想启动自己的生活。恐怖的是,我常常是清楚地沉迷,于是负罪感与傻逼栓交织,成为一个吃喝拉撒,偶尔打打鸡血麻痹自己的动物。在一段堪称“戒断”的无聊中,面壁者会恍然发现年华已逝不可追,而后忏悔。

接下来他会做的是:不在自以为的沉沦中沉沦,为所爱之事奉献所爱。说人话是,不在不感兴趣的事情中虚度光阴,可以看Developer Roadmaps – roadmap.sh系统点亮知识点,或是争取对这件事转变看法;对喜欢的人或事,付诸以最深刻的输入与输出。

最近

最近挺浮躁的,总静不下心来做事情,只有暑天带来的燥热和无尽的困,所以我觉得暂时停下来,想一想。

寒假,Deepseek发布并被大家熟知。我很想抓住这个机会,去做做AI应用。先做什么呢?我刻意地在生活中寻找灵感,甚至直接询问Deepseek如何落地的机会。那时我第一次知道技术可以出海,可以试试写程序去获得被动收入。不知道大家有没有想过,有些想法你觉得很新奇,可以尝试,但还是在头脑之中被自我否定。一个从理性来说有可能做成的事情会因为你的生活环境,从小到大的处事习惯(当个乖乖仔),以及现在的眼界而被想得很复杂。所以我迟迟没有走出第一步。

其实也不只是出海,还有很多事情在我脑子里打转,我预想的是:做出一个简单的,可以满足大家需求的AI产品,然后完善它,再利用这一版打出去,做成应用/小程序,看能不能成。如果中途反馈是伪需求,那我就丢掉它,重新发现idea。

问题是什么嘞,我容易陷入完美主义,然后什么都不敢尝试。

  • 1.与商业挂钩,如何推广,引流,获利?
  • 2.技术什么时候登场?
  • 3.如何结合人人都能用的AI,做出独特的优势?

以上三点是我对于最近思考问题的概况。
比如第一点,如果小demo真的找到需求了,如何引流能不被抄袭,需不需要离程序员远点,但我没有用户基础社群。第二点,我必须说服自己不知道从哪来的,没啥技术却一身的技术洁癖。我总觉得花很短的时间实现一个并不难的应用,很像在糊弄用户。但实际上小功能就是用不上那么多技术,而且技术是来解决问题的,不是装逼。所以我终于有点说服自己了,需求导向,用户导向,再好的技术也要服务于需求。不过第三点就来了,做AI应用,用的是大家都能用的AI工具,凭什么要专门用我的,甚至为此付费。我只有一个idea的前提下,是没有护城河的。所以我得研究,用户为什么喜欢,AI模型能不能自定义改进,数据怎么利用?以上几点说得越深,就越容易在脑子产生摩擦,把热情都磨没了。

偶然间看到了一些老词,给了我一些想法。
第一个是“产学研”,本来指的是产业、学校、科研机构的协调运转,却意外囊括了这三个问题。需求是一切技术的来源,本质上技术是为了产业提供服务。而现有技术受限的时候,就必须创新,做研究。寒假做了个兼职,整体工作流大概是:研究->应用->投产。我做的只是“应用”中的活,不是很难,没有很多创造性。当然收入链也是其中最低的。因此我在想,既然我大概率只读四年本科,现在不妨先从应用端入手,顺便能边做边学很多技术,以后也不怕失业。做的是AI应用,那么研究层就交给AI,毕竟AI的上限很高,如果我能用到80%,这就是属于我的护城河。难的反而是商业,我可能需要抽时间多参加社群,多发布博客,甚至利用自媒体,我还没想好。
第二个是“T型人才”。有没有可能,计算机的知识是学不完的。所以我并不需要面面俱到,也不需要做到事事亲为。有了AI,能用好为什么要排斥呢?我只需要掌握基本框架,需要我专业的时候专业,能够懂底层懂原理,比AI强一些。不需要我的时候,我把蓝图画好,让AI实现。所以我只用了解常用领域的关键20%,和我擅长部分的80%就够了。这么拆来,好像一切都欣欣向荣。开干吧!!!

如何写最基础的CRUD

本文基于Java,SpringMVC框架。MVC即Model+View+Controller。即使不太确切,我喜欢将其理解为:浏览器与数据库建立联系的方式。(Browser是浏览器,DB是数据库)

Controller 层

  • 掰收序列化信息(JSON)
  • 通过注解进行转换
  • @RequestParam(可默认不写)
    @DeleteMapping
    @ApiOperation("删除分类")
    public Result<String> deleteById(Long id){}
    查询字符串传递id参数:/admin/category?id=1
  • @PathVariable:
    @DeleteMapping("/{id}")//嵌入点
    @ApiOperation("删除分类")
    public Result<String> deleteById(@PathVariable Long id){}
    仅在URL后嵌入参数:/admin/category/1
  • @RequestBody:反序列化为实体类
    @PostMapping
    @ApiOperation("新增分类")
    public Result<String> addCategory(@RequestBody Category category) { // 业务逻辑 }

Service 层

一般来说,Service看有没有接口,有的话直接看Impl实现类会比较具体。

  • 新增(Insert): 需要将业务中的对象封装为程序中的完整实体类,再对应添加完整实体类中应该添加但业务对象缺失的部分(通过拷贝+set方法),好处是可以通过一次Mapper层编写实现不同新增对象的数据操作。(数据完整性/业务隔离/易维护) 说人话:把不健全的变得健全,这样方便数据操作时只用处理健全的一种情况。
  • 删除(Delete): 检查删除业务是否影响其余业务(调用其他Mapper),再进行删除处理
  • 更新(Update): 处理逻辑上与新增相同,封装+填充;但Mapper层有所不同,一般通过if判断需要更新哪些条件(实际上思想也是一致的,将所有情况假设好再使用if与where排除,只需写一次)
  • 查询(Select): Select的业务逻辑并不难,明确好输入参数,以及输出的是参数/对象/列表即可。

Mapper 层

  • 新增:
  Insert into 表名(字段名1,字段名2......) VALUES (#{对应对应参数1},#{对应对应参数2}...)
  • 删除
  Delete from 表名 where id = #{id}

注:若是删除某个属性,其实是通过update的更新逻辑去实现的

  • 更新
  Update 表名 
  SET column_name1 = new_value1,
      column_name2 = new_value2
  WHERE condition;

大部分会在xml进行操作,更加解耦与易管理,因为只需写一次

  • 查询
  Select * from 表名

一般是在xml中操作,需要明确parameterType和resultType会好一些。

琐碎的事情很多

好像时间越来越不够用了,技术门槛正在降低,但如何专注下来高效地做一件事已经变难了。课程、制度、欲望等等都在束缚着人们,很难挣脱。我一边做着这个,一边又不得不想着那个。《Head First》系列丛书的学习扉页中总会有个例子,关于一边学习,一边还要提防着是否有一个老虎会来靠近你(我觉得是暗示人类本能下的潜意识)。这种情况压根踏实不了。所以,有舍才有得吧,尽量不乱点技能树,不要做太多既要又要的选择。