祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说
在祁宁家里,有一套完整的赛车模拟器,他甚至还请人到国外代购了最新的 VR 设备。作为沉浸式赛车游戏发烧友,除了享受速度与激情带来的愉悦感,祁宁在玩的过程中更多的是思考如何将技术能力进行产品化的问题。
Answer.dev 就是将技术问答社区能力提炼而成的产品,也是祁宁深度思考的一个成果。
开源问答社区软件 Answer.dev 于 2022 年 10 月 24 日在 GitHub 上线,发布后就在 GitHub Tending 上持续霸榜了一周左右,不到一个月就拿到了逾 4,000 个 Star,四个月内收获的 Star 数更是超过 6,300 个。
需要补充说明的是,Star 数是 GitHub 上最直接的热度指标,意味着该开源项目对开发者的吸引和关注程度,体现了该项目的流行程度。
Answer.dev 在 GitHub 上的受欢迎程度,远远超出了其创始人祁宁的预期。在国内开发者的印象中,祁宁更为人熟知的身份是 SegmentFault 思否(下称「思否」)联合创始人兼 CTO——同样为人所熟悉的还有他的网名昵称 joyqi 。创办于 2012 年的思否,是目前中文领域最大的编程问答交流社区平台,累计注册开发者用户近 700 万。在思否 10 余年的发展中,祁宁积累了大量问答社区领域的经验和资源。
近年来,不少 B 端企业用户向祁宁提出需求:能否帮助搭建企业自己的问答社区,或者协助建设类似思否这样的企业社区。当时,囿于商业运营条件等限制,祁宁和思否团队很难去响应这样的需求,只能提议对方在思否建一个专区或子站。但实际上,企业的需求此时并没有被完全满足,因为客户希望能自定义社区内容,自主掌控数据,而不是「寄居」于一个公共社区之下。
于是,祁宁和思否团队一直都在思考:能不能将思否在问答社区领域多年沉淀下来的能力完全开放出来呢?最好的状态就是做成一个开源项目让所有人都能使用,也就是将思否的技术问答社区形态转化为一个软件产品。
直到 2022 年 5 月,研发管理平台 ONES 完成对思否的收购后,祁宁及思否团队得以将输出问答社区能力的「夙愿」变成现实。「ONES 是一家对市场和商业化都有深刻理解的软件公司,对于将问答社区能力产品化,ONES 给予了思否很多灵感。」祁宁说,开发 Answer.dev 相当于颠覆了思否的商业模式——之前思否是一个社区公司,主要通过广告服务来盈利;如今,思否变成了一家开源商业公司和软件公司,提供的是软件产品,「我们开始用社区来驱动开发,跟我们此前的驱动方式完全不一样。」
然而,祁宁又说:「思否和 Answer.dev 两者最终要做的事情其实没区别,归根到底还是做一个社区。」在他看来,开发 Answer.dev 的目标是把社区当作一个产品来使用,具体就是,一个商业软件公司把自己的代码免费让其他人使用。建立一个真正以开发者为中心的开源社区,用社区的力量去推动项目开发,这是思否和 Answer.dev 共同的目标和使命。
Answer.dev 于 2022 年 5 月正式立项,6 月初启动。为了赶在 10 月 24 日发布(「1024」被公认为是中国程序员节),9 月底就必须得交付内部预览版,所以,该项目的开发实际上只有不到三个月的时间。
在如此紧张的期限内,祁宁及其团队相继迎接了产品设计、技术选型、团队磨合以及研发管理等挑战,准时在「1024」发布了 Answer.dev 开源软件。尽管 Answer.dev 已经发布了一段时间,但祁宁并不止步于此,而是继续思考人工智能对问答社区软件的影响,以及探索如何融合和接入相关人工智能的应用——最近,祁宁的爸爸买了一款智能手表,但面对复杂的操作使用说明书一筹莫展,只好致电儿子祁宁求助。「未来人工智能可以天然地解决这个问题,哪怕是老人家也可以轻松地玩转各种电子产品。」祁宁如此畅想。
ONES:苏格拉底说:「人类最高级的智慧就是向自己或别人提问。」除了苏格拉底,莎士比亚、爱因斯坦、乔布斯等名人都擅长通过提问来寻找答案以追求创新,那么企业该如何利用 Answer.dev 来建立自己的问答社区,并沉淀高级智慧呢?
祁宁:
首先,Answer.dev 是易用的。我们的目标是:非专业人士或非程序员们也可以非常轻松地将它运行起来——当然,这可以是在我们的指导协助下或在文档的帮助下。目前,市面上的部分社区软件或开源产品,在运行时需要一些很专业的知识,比如配置、技术名词等。但在 Answer.dev 中,我们想面向的是一个更广大的人群,所以在产品设计及文档设计之初,我们更多考虑的是:如果用户是一个非专业人士,怎样才能很好地上手这个项目。
其次,Answer.dev 是一款开源软件。我们之前做互联网产品的创业,可能只会发布一个最终的产品,直接给用户用,或发布给特定的商业用户。而开源项目的话,就会把该项目的直接源代码开放出来,让所有程序员都可以看到源代码,然后可以参与到我们的项目中来。
最后,在设计之初,我们就将 Answer.dev 定位为一个国际化的项目。我们以国际化的标准来开发这个项目,包括后续的文档以及在代码中的注释,都是执行的国际化标准,其目的是希望它的受众足够广,各个国家和地区的程序员都可以以同样的标准参与进项目里,而不仅仅是面向中文的用户和开发者。
ONES:Answer.dev 的开发实际上只有不到三个月的时间。如何在这么短的时间内完成一个全新的项目开发?高效率的秘诀是什么?
祁宁:
据以往的开发流程,研发队伍通常会按照产品说明做项目研发。但对于 Answer.dev 这个项目,在研发的过程中会不断地迭代,在中间设置很多持续交付的节点。因此,按照这样的特点,我们对产品的交付流程做了改进。
正是基于这样的交付流程,我们采用了 ONES 研发管理平台。
首先,将功能模块全部按功能维度拆分,变成一个个子任务。也就是说,通过 ONES 平台整理项目,分批次地提取其中一部分的功能模块,按照功能组别将任务拆分成子任务,继而逐项落实,最后再监控其工时及完成情况。ONES 对项目进度状态的跟踪是很全面的。
然后,按周来设立里程碑——项目的启动为第一周,第二周是正式开始开发,接着,将周设为持续交付的节点,每个节点交付一部分功能模块。「1024」的前夜就是第 11 周的「最终节点」,该任务开发阶段的任务即终结,后面会进入产品迭代的过程。
期间,如果本周功能模块最终验证完成,那这一周的任务就完成了,还可在 ONES 上查看整体交付的百分比进度。我们每周会做定期检视,了解这周交付的内容有哪些问题,是否需要调整;如果需要调整,就规划到下一周的任务中去,这是个持续迭代的过程。
此外,ONES 对于各个角色及任务分配都很清晰,例如关注者、处理者、参与者等,各司其职,体现了高效协同的特点。
当然,每周任务进行时,我们必须紧盯总目标,才不会在每周执行时逐渐迷失、将总目标丢失,或做成了另外的项目。在任务排期或任务分配时,我们会以总目标为最高优先级来安排工作。
ONES:Answer.dev 项目采用的是前后端分离的方案,前端使用的是 React 技术栈,后端则是使用 Golang 编写。于此,你是如何进行技术选型的?对未来的技术趋势,你有哪些思考?
祁宁:
之前,思否的后端主要开发语言是 PHP,而 ONES 是 Golang。ONES 并购思否后,出于技术协同、系统互通的考虑,我们还是决定用同一套语言进行开发。
无论 Golang 还是 React,两者都已经是业界特定领域认可的标准。彼此在各自的领域都很稳定,从人才储备到各种工具链的建设上,都相当完善。当然,前端的技术变化可能更快一点,但是我觉得,相对来说,前端技术更新迭代不是那么麻烦,因为它其实是跟着用户的需求走的。
业界的先进技术,我们每个开发者都需要去定期跟踪。ChatGPT 横空出世,可以预见人工智能的发展会有很多颠覆,包括它的交互模式。例如,以后用户的界面会更加简单,人们直接和计算机交流,不需要太多的按钮或者复杂的界面。
ONES:你是如何理解以 ChatGPT 为起点的人工智能普及浪潮?
祁宁:
根据人们对 ChatGPT 的使用反馈,我们看到了人工智能的巨大潜力所在。ChatGPT 是计算机第一次在交互上能够对人的话语进行分析,并且能够理解更准确的指令,继而作出更准确的回应。
之前的工业革命是解放人的体力,让人不需要再用手工去做重复的体力劳动,而像 ChatGPT 这样的人工智能,解放的是人的思维。如今,我们从小学就开始学习知识,学习的时间很长,要学到 20 多岁甚至 30 多岁,才能开始做一些前沿性的研究。那么,当未来人工智能普及后,有没有可能将知识直接移植到我们大脑中来呢?就算不能,能否实现制作一个「知识共享的大脑」呢?这样一来,我们人类就不需要去耗能记住很多知识,需要的时候就直接取出来;而是把精力放在更多有创造性的东西——也就是解放了思维。
人工智能更深层次的应用被开发出来后,应该会推动社会的发展。但也不排除会带来一定程度的不确定性,因为人工智能或许会影响人类的思想,也可能会把我们社会带到一个不可知的地方去——我们人类对此不能掉以轻心。
相关文章:

祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说
在祁宁家里,有一套完整的赛车模拟器,他甚至还请人到国外代购了最新的 VR 设备。作为沉浸式赛车游戏发烧友,除了享受速度与激情带来的愉悦感,祁宁在玩的过程中更多的是思考如何将技术能力进行产品化的问题。 Answer.dev 就是将技术…...

linux安装
1. 准备前说明 本文采用的是CentOS6.8,64位的,虚拟机时VMvare,采用的是双网卡方式。至于双网卡的作用和nat,桥接和hostonly模式请参见我的另一篇文章。安装回环网卡&安装Linux前准备 2. 废话不多说,开始了 ◆打…...

【Go编程语言】 Go语言基础语法
Go语言基础语法 文章目录 Go语言基础语法一、注释1.单行注释2.多行注释 二、变量1.变量的定义2.变量的初始化3.理解变量(内存地址)4.变量交换5.匿名变量6.变量的作用域 三、常量1.常量的定义: const2.iota(特殊常量) 四…...

洗稿用什么软件-洗稿软件免费
洗稿文章的主要优势 洗稿文章的主要优势在于提高文章的质量和效率。以下是洗稿文章的几个主要优势: 优化结构和语言 洗稿可以删除冗余、无用和重复的内容,同时对文章的结构和语言进行优化,提高文章的可读性和吸引力。这可以使文章更加专业…...

网络请求发送
私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…...

微信小程序开发
文章目录 1 开发准备工作2 小程序开发工具使用3 初始化项目4 index页静态搭建5 数据绑定5.1 初始化数据5.2 使用数据5.3 修改数据 6 数据绑定---小程序,Vue,React7 事件绑定7.1 事件分类7.2 绑定事件7.3 向事件对象传参7.4 补充:事件流的三个…...

number类型超出16位的问题(前端、后端处理)
目录 1、前端解决方案 1.1 甩链接 1.2 接口返回数据过程中将数据处理为字符串(过过嘴瘾) 1.3 对返回的json字符串进行数据预处理代码如下 2、后端解决方案 2.1 toString、String、 、new String() 自己悟、就是要改的地方多。 2.2拦截器 (可能超出…...

【高并发】网络模式
I/O 多路复用 多线程创建 服务器的主进程负责监听客户的连接,一旦与客户端连接完成,accept() 函数就会返回一个「已连接 Socket」,这时就通过 fork() 函数创建一个子进程,实际上就把父进程所有相关的东西都复制一份,…...

springboot+dubbo+zookeeper 项目实战
现在有一段代码再前台,后台系统中都存在,都需要这段代码,存在这种情况,我们可以选择将这段代码提取出来作为一个服务,让前台和后台系统作为消费者远程调用这段代码,提高了代码的复用性。 springboot集成dub…...

PHP学习笔记第一天
前言 作者简介:不知名白帽,网络安全学习者。 博客主页:不知名白帽的博客_CSDN博客-网络安全,CTF,内网渗透领域博主 网络安全交流社区:https://bbs.csdn.net/forums/angluoanquan 目录 PHP语法 基本的PHP语法 PHP的数据类型 PH…...

案例研究|萤石网络通过JumpServer解决安全运维难题
杭州萤石网络股份有限公司(以下简称为萤石网络)于2015年在杭州成立,是安全智能生活主流品牌,核心产品包括智能家居摄像头、智能门锁、智能服务机器人等。2021年,萤石网络家用摄像头占国内出货量市场份额的25%ÿ…...

即时聊天app开发-即时通讯app开发方案分析
如今,即时聊天APP层出不穷,它已经成为人们日常生活中密不可分的社交工具。如今,即时聊天APP不仅是聊天工具,也是企业营销的利器。我们经常可以在聊天主页上看到一些广告。如有必要,用户可以直接点击广告了解详情。即时…...

js为什么会阻塞渲染, 什么是异步?
javaScript 是单线程执行的语言,它的执行机制是基于事件循环模型的。当 JavaScript 执行代码时,如果遇到阻塞(如执行时间较长的代码、同步的网络请求、计算密集型操作等),则会阻塞 JavaScript 引擎的执行,直…...

Nuvoton NK-980IOT开发板 u-boot 编译
前言 最近搭建了 Nuvoton NK-980IOT开发板 的开发编译环境,记录一下 u-boot 的 编译流程 Nuvoton NK-980IOT开发板 资源还是比较的丰富的,可以用于 嵌入式Linux 或者 RT-Thread 的学习开发 开发板上电比较的容易,两根 USB 线即可࿰…...

OpenCL使用CL_MEM_USE_HOST_PTR存储器对象属性与存储器映射
随着OpenCL的普及,现在有越来越多的移动设备以及平板、超级本等都支持OpenCL异构计算。而这些设备与桌面计算机、服务器相比而言性能不是占主要因素的,反而能耗更受人关注。因此,这些移动设备上的GPU与CPU基本都是在同一芯片上(So…...

浅谈osgEarth操控器类的createLocalCoordFrame函数如何将局部坐标系的点转为世界坐标系下的Martix(ENU坐标)
在osgEarth操控器类的EarthManipulator中的如下函数: void EarthManipulator::setLookAt(const osg::Vec3d& center,double azim,double pitch,double range,const osg::Vec3d& posOffset) {setCenter( center );.... //…...

PHP程序员和Python程序员的职业前景怎么样?我来聊聊自己的体会
大家好,今天我们来聊一下程序员这个职业的特点。在讲这个话题之前,我先说一下我自己的情况:我在福州和深圳做了8年左右的程序员,然后回到老家,在家里面为福州的一个公司做远程开发。目前已经在老家做了将近3年。 今天…...

【MATLAB图像处理实用案例详解(8)】—— 图像数字水印算法
目录 一、背景意义二、基本原理三、算法介绍3.1 数字水印嵌入3.2 数字水印提取 四、程序实现 一、背景意义 数字水印技术作为信息隐藏技术的一个重要分支,是将信息(水印)隐藏于数字图像、视频、音频及文本文档等数字媒体中,从而实现隐秘传输、存储、标注…...

最全的免费SSL证书申请方式
在SSL广泛普及的今天,申请一张免费的SSL证书是一件非常容易的事情。这里为大家总结当前阶段(2023年)拥有一张免费SSL证书的方式。首推的方式为来此加密网站,文章后面会有详细的介绍。 下面介绍几种获取免费SSL证书的方式,大家可以根据自己的…...

Ceph入门到精通-CrushMap算法概述
下面是伪代码object到osd的伪代码 locator =object_name obj_hash =hash(locator) pg =obj_hash %num_pg OSDs_for_pg =crush(pg) # returns a list of OSDs primary =osds_for_pg[0] replicas =osds_for_pg[1:] defcrush(pg): all_osds=[osd.0,osd.1,osd.2,...] resu…...

如何利用API做好电商,接口如何凋用关键字
一.随着互联网的快速发展,电子商务成为了众多企业的首选模式,而开放API则成为了电商业务中不可或缺的部分。API(Application Programming Interface),即应用程序接口,是软件系统不同组件之间交互的约定。电…...

Give me a logic game idea about economics
Here’s an logic game idea about economics: Game name: “Economics Tycoon” Game Objective: Build an economic empire and grow from a small business owner to a global tycoon. Gameplay: Start with a small business and limited resources. Manage your compa…...

测试之路,2023年软件测试市场领域有哪些变化?突破走得更远...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…...

配置Windows终端直接执行Python脚本,无需输入“python“
配置Windows终端直接执行Python脚本,无需输入"python" 1. 将Python加入环境变量2. 将Python后缀加入环境变量PATHEXT中3. 修改Python脚本的默认打开方式4. *将Python脚本命令加入环境变量*5. 测试 在Linux系统中,在Python脚本的开头指定Python…...

IDEA快捷键
文章目录 快捷键介绍重点掌握CtrlAltShiftCtrl AltCtrl ShiftAlt ShiftCtrl Shift Alt其他 快捷键介绍 重点掌握 psvmmain函数sout输出soutv带变量名输出.sout变量.调用 输出变量值.if布尔值.调用 生成if语句.for数组类型变量.for 生成for语句.var补全接收的变量&#x…...

关于c++指针数组的要设置初值的情况
在大多数情况下,都应该对指针数组进行初始化,以避免出现未知的值和潜在的未定义行为。指针数组在定义时必须指定元素个数,如果未指定元素值,则需要对其进行显式初始化。如果未初始化数组,则未知的值可能指向无效的内存…...

泰克RSA306B频谱分析仪测试信道功率方法
泰克RSA306B实时频谱分析仪是一种用于无线信号分析的仪器。它可以实时监控无线信号的频谱,帮助用户分析信号特征,掌握信号的功率、频率、调制等关键信息。在无线通信中,信道功率是一个非常重要的指标,它反映了信号在传输过程中的强…...
深度学习技巧应用12-神经网络训练中批归一化的应用
大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用12-神经网络训练中批归一化的应用,在深度学习中,批归一化(Batch Normalization,简称BN)是一种重要的技巧,它在许多神经网络中都得到了广泛应用。本文将详细介绍批归一化的原理和应用,并结合PyTorch框架构建一个简…...

Masonry使用以及源码解析(未完待续
文章目录 Masonry使用约束约束优先级 以及 intrinsicContentSize相关问题 Masonry:iOS12Masonry源码解析下面是使用make.width点语法后的全部内部调用过程: Masonry使用 约束 在写Masonry之前,我想先来聊聊约束的基础知识,我们首先要了解一…...

118-Linux_数据库_索引
文章目录 一.索引是什么?二.索引为什么选择b树三.测试索引1.在mysql中创建数据库 test_indexdb2.在test_indexdb中创建表 test_index3.运行程序向表中插入1万条数据,都是字符串4. 查询验证 一.索引是什么? 索引是一种特殊的文件,它包含着对数据表里所…...