【转】给程序员的提示词工程手册

帮助程序员通过精心设计的提示词与 AI 编码助手(如 Cursor 等)高效协作,来自 Google Chrome 工程负责人

提示工程的基础原则

· 提供丰富上下文:明确说明编程语言、框架、代码功能及问题背景。例如:“这是一个 Node.js Express 函数,抛出 TypeError,代码如下…”
· 明确目标:避免模糊问题,如“代码不工作”,改为“此函数应返回排序数组,但返回 undefined,哪里有问题?”
· 分解复杂任务:将大任务拆分为小步骤,逐步提示。例如,先要求 React 组件骨架,再添加状态管理
· 提供输入输出示例:如“输入[3,1,4],应输出[1,3,4]”,帮助 AI 理解预期结果
· 使用角色扮演:如“扮演 React 高级开发者,审查代码”,可提升回答的专业性
· 迭代与优化:根据 AI 输出调整提示,如要求改用迭代而非递归
· 保持代码清晰:清晰的代码和注释有助于 AI 理解并生成一致的输出

调试代码的提示模式

· 明确问题和症状:描述代码目标、错误信息和实际行为。例如:“此函数应计算数组和,但返回 NaN,错误代码如下。”
· 逐行分析:如“逐行分析此函数,检查变量 total 的值”,帮助发现逻辑错误
· 提供最小可复现示例:简化代码,聚焦问题,方便 AI 定位错误
· 提出具体问题和跟进:如“此错误原因是什么?如何修复?”并根据回答进一步跟进修复
示例:
· 差的提示:“为什么 mapUsersById 不工作?”(AI 猜测,输出模糊)
· 好的提示:“此函数应将用户数组转为 ID 映射,输入 [{id:1, name:'Alice'}] 抛出 TypeError,代码如下…”(AI 精准定位循环边界错误并修复)

重构和优化的提示模式

· 明确目标:如“提高可读性,减少重复代码”或“优化为 O(n) 时间复杂度”
· 提供代码上下文:包括相关代码、语言版本(如 Node.js v14)或框架(如 React Hooks)
· 要求解释:如“重构代码并解释改进点”,便于验证和学习
· 角色扮演:如“扮演 TS 专家,重构代码遵循最佳实践”
示例:
· 差的提示:“重构 getCombinedData 函数”(AI 可能忽略特定需求)
· 好的提示:“重构此函数,消除重复 fetch 逻辑,保持错误分离,优化数据合并,代码如下…”(AI 并行 fetch、使用映射优化并保留错误细节)

实现新功能的提示模式

· 从高层次开始,逐步细化:先描述功能(如“React 产品列表带搜索”),再分解为子任务(如“创建搜索输入组件”)
· 提供上下文或参考代码:如“参考现有 UserList 组件,创建类似 ProductList”
· 使用注释作为内联提示:如// TODO: 验证请求有效性,让 AI 自动补全
· 明确输入输出:如“formatPrice(2.5) 应返回'$2.50'”。
· 迭代优化:根据 AI 输出调整,如“改用 useProducts 钩子而非直接 fetch”
示例:实现 React 产品列表组件,逐步添加搜索和排序功能,AI 生成带状态管理和错误处理的代码。

常见提示反模式及避免方法

· 模糊提示:如“代码不工作”,应补充错误信息和代码
· 超载提示:如“写完整应用”,应拆分为小任务
· 无明确问题:仅提供代码,应明确要求(如“修复 bug”)
· 模糊成功标准:如“优化代码”,应明确“减少内存”或“提高速度”
· 忽略 AI 反馈:AI 提问时应回答或调整提示
· 不一致风格:保持提示格式统一,如始终使用 ES6 语法
· 模糊引用:避免“上述代码”,直接引用或重新提供
· 调整策略:识别 AI 输出偏差,补充缺失细节,分解任务或重新开始

实然感觉人生一眼就到头

一个人 胡思乱想着,突然感觉人生一眼就到头了。不知为啥突然就有这种想法了呢。

空投是否适合你

最近,我利用夜晚的宁静时光沉浸于空投知识的学习之中。我意识到,对于初次涉足这一新兴行业的人来说,待掌握的知识颇众多且复杂。网络上的相关信息错综复杂,对新手而言,迈过学习门槛确实不易。

观察周围,许多朋友目睹他人通过空投获得利益,便急切地加入空投的行列。然而,在这样的冲动之前,我们需要先判断自己是否适合投身于这项工作。在我看来,理想的空投投资者应该具备如下特质:

灵活的时间管理:有效的时间管理是参与空投的基石。虽然它不要求像传统工作那样固定的8小时工作制,但同样需要时间投资,初学者需要的时间尤其多。对于我,一个最初的理想安排是工作日的晚上能够投入3-4小时于学习与实操。这种持续的夜晚学习和行动能促进对空投领域的深入理解。

耐心和坚持:空投的过程极易变得乏味,甚至可能比例行工作还要单调重复。长时间盯着屏幕,点击些看似无关紧要的链接,如此类推,不断地循环。能够持之以恒,甚至在枯燥的重复中找到乐趣的人,是这个领域的理想参与者。

持续学习和快速适应:数字货币是一个不断变化的新兴行业。即使是从事相关技术工作的人,也未必对这一领域通晓。空投投资者必须有致力于不断学习的精神,对于资讯保持敏感并快速适应市场变化。同时,在面临可能的挫败时,持有坚韧不拔的态度同样重要。

稳固的财务基础:希望在加入空投早期即实现盈利的想法往往不切实际。虽然空投提供了独特的盈利机遇,但急功近利的心态可能导致高风险的决策。因此,有稳固工作来源的人更适合利用业余时间参与空投,这样可以确保在空投不稳定的早期阶段保持经济的稳定性。

适当的风险资金:网络上有众多不要求任何前期投资的空投活动,但这些通常难以带来实质性的回报。合理的小额资金投入可以增加参与优质空投项目的机会,同时也应该意识到,应仅投入可承受损失的资金量。

以上五点只是空投投资者潜在特质的一个概述。一个更完整的自我考察会涉及对数字资产的安全存储、交易和保管的了解,对所涉行业项目的深入分析,以及对相关法律法规的认知。同时,对行情波动保持良好心态,维持对行业趋势的持续关注,以及在整个过程中保持着谨慎的乐观态度。

成功的空投投资者不仅需要应对初始的学习曲线,也要准备好在这个充满机会和挑战的市场中长时间地沉浸其中。仅当你准备好以一种积极而稳健的方式投身于空投,你才能最大限度地捕捉到这一行业中的机遇。

开工大吉|只要踏实做事 从来都不晚

今天我们正式开工啦,很多小伙伴昨天已经开始上班了,祝大家2024年发大财。
过年放假的这些时间,一直在思考想做些什么,比如今年怎么搞(亏)钱,顺便把公众号或博客用起来。
目前确认了在以下三个方向努力了。
1、股市投资
很多朋友觉得股票不能买,是赌博。个人觉得中国的A股是比较垃圾的,普通人还是不要参与了。目前我个人还是大部分资产在A股市场,在垃圾中吃屎是我目前的状态。
个人投资方向侧重:半导体、XR、光伏,已被套牢三年以上了,国内产业没有一个能打的。各位别来,快跑。
2、数字货币
对于数字货币这个东西,我是接触的比较早,但是没有实际参考太多。周边有朋友通过数字货币发财移民,也有朋友亏的离婚无家可归的。数字货币交易是一个极高风险的行为,建议普通人不要参与进来。
我个人也不会参考现货与期货交易,已经在A股中交易中亏了,就不再换一个新地方再亏了。目前我会投入一些精力搞代币空投,代币空投就是某一种数字货币发行,会给提前参与到这个币的人免费发一些数据币。当然代币空投也不全是免费发,只是投入的成本比较小。
对于新人来说撸空投是一个风险最新的参考方式,正好我也是新人,从零开始操作数字货币。后面个人的公众号也会更新相关的内容给大家。
3、工具应用
早在移动互联网爆发时,独立开发工具类应用的人已经发财了。现在进入这一块很难再有机会捞一把,然而现在已经进入了AI时代,如果使用做一些AI的工具还是有大把机会的。AI让独立开发人员的机会变得更多,学习成本也提高了很大。以前都在思考做什么或做了一半没有坚持下去。
今年觉定花一年时间去好好开发一个工具类应用。相信未来会跟大家见面的,具体就不透露了。
以前都是天天想着做啥,如何做,想得多做的少。今年要从小事做起,踏实做事,从来都不晚。另外离远情绪不稳定的人,跟积极者做朋友。

Android  坐标点是否在简单多边形内

简单多边形是不相邻的边不相交的多边形。判定点p是否在多边形G内部,包括边界。方法很多,这里只讨论android 并尽量使用api方法。
使用方法:通过多边形 path 转Region ,使用Region的contains方法判断。

 private boolean inside(Path path,Point point){
        RectF bounds = new RectF();
        path.computeBounds(bounds, true);
        Region region = new Region();
        region.setPath(path, new Region((int)bounds.left, (int)bounds.top,(int)bounds.right, (int)bounds.bottom));
       if (region.contains(point.x, point.y)){
            return true;
        }
        return false;
    }

读《软技能-代码之外的生存指南》

看很多大佬都读过了《软技能-代码之外的生存指南》这一本书,乘着年底没有太多的事,也买了这本书看一看。
这本书的作者也是一位软件技术开发从业者,深知程序员的工作与生活状态。虽然这一本书写的很广,阅读起来对大家还是有很大的帮助的。
从职业,生活,学习,健身都谈到过,简直是一个全家桶,里面还有一点点恋爱的内容;非常适合新人阅读。
对比自己的经历,对作者的一些话还是有感触的。
首先,最最重要的就是房产投资。在来深圳工作的前几年,从来没想过要在深圳定居,也没想过要在深圳买房了,对投资也不了解。这两年一直在看房子,深圳的房价一直涨涨涨;你挣钱的速度永远跟不上房价涨的速度,甚至涨不过房租。年轻人应该多存钱,多学习投资。
第二就是写作,作为一个理科生,写作一直不是我的强项;然后作为了一个10多年的博客主、站长,却没有坚持的写作,与学习更好的写作,并进行自我营销。曾经认识与接触过很多朋友,在几年的写作下来,出书的出书,出名的出名,感触良多。
最后就是健身了,身体素质一直不是很多,健身也一直跑跑停停的。

也许是坚持太少,想法太多,让我的很多计划没有很好的执行下去。未来的2020年,我将进一步的压缩事务,逐步推进,作为本书的阅读笔记总结:不积跬步,无以至千里;不积小流,无以成江海。

Flutter入门-Text Widgets

今天我们将学习怎么显示文本,并操作文本;在Flutter中,使用Text控件显示。

显示单行文本

 new Text('Text style',
   textAlign: TextAlign.center,
   style: new TextStyle(
        fontSize: 12.0,
        fontWeight: FontWeight.bold,
        color: Colors.black,),
    overflow: TextOverflow.ellipsis,
            ),

其中textAlign是用来控制文本对齐方式,style控制文本包括字体,颜色,字体大小等样式。
Text文本是没有边距的设置参数,我们使用ContainerPaddingText嵌套使用。

Container
new Container( child: new Text("Container text"),
              color: Colors.blue,
              margin: const EdgeInsets.all(5.0),
              padding: const EdgeInsets.all(5.0),),

容器Container是一个常用的控件,由基本的绘制、位置和大小控件组成。负责创建矩形的可视元素,可以用BoxDecoration来设计样式,比如背景、边框和阴影,Container也有边距、填充和大小限制等。

Padding
new Padding(child: new Text("Padding text"),
              padding: const EdgeInsets.all(5.0),),

如果只是设置文本的边距就可以使用Padding控件来实现效果。
如果想让文本控件响应Touch事件,要把该控件放在GestureDetector控件里使用。
在我们的开发中,RowColumnText使用,会被遮挡,提示如下警告:
A RenderFlex overflowed by 29 pixels on the bottom ...
不管你设置多行,还是别的还是会只显示一行。这里我们要使用Expanded控件包装每个控件。
Expanded组件可以使RowColumnFlex等子组件在其主轴方向上展开并填充可用空间(例如,Row在水平方向,Column在垂直方向)。如果多个子组件展开,可用空间会被其flex factor(表示扩展的速度、比例)分割。

显示富文本

使用RichText 可以显示丰富样式的文本。

new RichText(
  text: new TextSpan(
    text: 'Rich ',
    style: DefaultTextStyle.of(context).style,
    children: <TextSpan>[
      new TextSpan(text: 'bold', style: new TextStyle(fontWeight: FontWeight.bold)),
      new TextSpan(text: ' Text!'),
    ],
  ),
)

最后的效果如下:

Flutter入门-Hello Flutter

上节我们已经知道如何安装Flutter的环境了,这次我们简单的了解下如何创建一个Flutter项目。

创建首个Flutter项目

首先打开Android Studio,面板右部中间选择 Start a new Flutter project;
弹出New Flutter Project窗口,选择Flutter Applcation。
弹出New Flutter Applcation窗口,输入项目名Project Name,下一步。
弹出Set the package name 窗口,输入company domain(公司域名),修改package name(包名,可不修改),勾选支持语言(不会kotlin,swift可不选择)。点击完成,需要等待小会时间,我们的第一个项目工程就创建好了,见下图:

运行项目

在工程目录结构如下:

/android   Android工程目录
/ios       IOS工程目录
/lib      flutter开发目录
/test     测试目录
pubspec.yaml  flutter 依赖包管理文件

因为我们的Flutter支持跨平台,所以会生成Android,ios的工程文件。
运行项目之前,我们需要把模拟器跑起来。在Android Studio的工具栏上有一个手机的图标的按钮,点击后会弹出“open IOS simulator”的下拉选项,我们也点击就好,这时系统会打开一个IOS模拟器。
IOS模拟器启动后,就可以运行我们的程序了。点击工具栏的绿色三角,等待几分钟程序加载到模拟器中。
Material看起还是很炫的,见下图:

最近比较忙,所以只好写一篇来应付下,下周更新控件相关的内容。

Flutter入门-环境安装

最近比较热爱学习,正在学习Flutter,记录Flutter的学习过程,大家一起进步。因为博主使用Mac,以后的教程都是在mac环境下编写。

获取 Flutter SDK

获取 Flutter ,你可使用 git 去克隆Flutter的仓库然后添加 flutter 工具到你的路径,运行 flutter doctor 显示你可能要安装的依赖。
克隆仓库
如果你是第一次在你机器上安装 Flutter,克隆 beta 分支的仓库然后添加 flutter 工具到你的路径:

git clone -b beta https://github.com/flutter/flutter.git

下载Flutter SDK
因为官网提供了SDK包下载,所以我直接下了,速度也比较快。不能访问的还是使用上面获取SDK吧。
flutter_macos_v0.3.2-beta.zip

设置环境变量
Flutter路径添加到环境变量中。

export PATH=`pwd`/flutter/bin:$PATH

将以上代码添加到 ~/.bash_profile中,这样Flutter命令就可以执行。

运行Flutter doctor
运行以下命令可以看到你是否需要安装任何依赖来完成安装:

flutter doctor
我的运行结果显示如下:

~flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v0.3.2, on Mac OS X 10.12.6 16G29, locale zh-Hans-CN)   
Android sdkmanager tool not found (/Users/jun/Documents/Developer/Android/sdk/tools/bin/sdkmanager).    
Try re-installing or updating your Android SDK, 
visit https://flutter.io/setup/#android-setup for detailed instructions.

运行Android Studio 安装Dart支持
首先你得安装了Android Studio,对于Android Studio怎么安装,大家百度,我们的教程前置条件是学习过App开发(android或IOS)。左上角菜单Preferences->Plugins,在搜索框中搜索Dart,然后安装就可以,见下图:

安装完后,重启IDE,就可以开发Flutter应用了。

PJBlog3转换wordpress4.9记录

某学长的个人blog一直使用pjblog3,然而空间一直我在打理。手上的空间,域名,网站太多了,管理起来很不方便,所以打算把pjblog转wordpress,放到以前学校论坛的服务器上。
PJBlog版本:PJBlog3 3.1.6.227
wordpress版本:WordPress 4.9.1

1.导入pjblog数据并导入wordpress

使用PJBlog3_到WordPress升迁工具导出数据,参考最新PJ3转移到WP过程详细记录——转换教程

2.内容反转义

导入wordpress的正文与摘要中的Hmtl被转义,这里需要代码编程进行反转义一下就好。

3.替换附件路径

PJBlog3的附件路径是通知download.asp访问的,在wordpress中不能访问,需要替换。
把BlogDB文件夹内的.asp结尾的文件改成.mdb后缀文件,这样就可以使用ACCESS软件打开。这里需要编程替换文件。最好把blog_Files表导出成mysql,然后在wordpress中创建这个表,导入数据。最后编程替换就好。
因为我是使用golang写的反转义与附件替换,所以没有代码可以提供。