你遇到过最奇葩的软件开发中经常遇到的问题有哪些需求是什么?


选择擅长的领域继续答题?
{@each tagList as item}
${item.tagName}
{@/each}
手机回答更方便,互动更有趣,下载APP
提交成功是否继续回答问题?
手机回答更方便,互动更有趣,下载APP
展开全部席卷全球的人工智能浪潮——一浪高过一浪,它为现有的服务场景提供了技术支持,正在重新定义我们的生活。人工智能是一个比较复杂的产业结构,它由大数据和计算能力构成人工智能产业支撑,有了这层支撑,还不足以撑起整个产业链,这里需要核心的关键技术,包括机器学习、计算机视觉、语音及自然语言处理等关键技术的研究和应用,促进实现人工智能产业商业化构建,最后应用在服务机器人、个人助手、智能医疗、智能家居、智能营销等细分行业。然而落地应用五花八门,只有你想不到,没有你见不到的人工智能落地产品。那些人工智能落地产品有“正经”的,也有“不正经”的;有“严肃”的,也有“奇葩”的。总之,“雅俗共存”。人工智能落地应用无非是创造变革生活的方法,而且按照目前人工智能企业定位,大多是在图像识别、语音识别、无人驾驶等方面的应用,所以它是“正经”的。但这里小编只想说些看起来“不正经”“奇葩”的人工智能应用,依据个人观点和评价,分别打了奇葩指数,供大家“参考”。1.智能养猪马云要去“养猪”了?!!你没看错!2月6日,阿里云与四川特驱集团、德康集团达成合作,对人工智能系统“ET大脑”进行针对性的训练与研发,在未来实现全方位智能养猪。“在前期的理论验证阶段,‘ET大脑’将母猪的年生产数量提升了3头,死亡淘汰率降低3%左右。”据工作人员介绍,AI养猪项目总投资达数亿元,首期落地了各类猪只数量识别、猪群行为特征分析、疾病识别和预警、无人过磅等十项功能。根据特驱集团CIO张海峰表示,以记录小猪出生数据为例,每天有大量母猪生产,到底生了多少只小猪,恐怕人都数不清。“我们现在合作研发的技术,能自动分析记录生产的数量、是顺产还是助产。如果小猪被母猪压住,还可以通过尖叫声判断小猪的位置,及时解救。”在未来,通过人工智能和大数据技术,创建这么多头猪的数据档案,包括猪的品种、日龄、体重、进食情况、运动强度、频次、轨迹等,消费者在超市挑选猪肉时,只需扫码,就能获取猪的全部信息,包括健康指数、重量、位置等信息。上榜理由:只有你想不到,没有AI做不到。你始终没有想象到人工智能居然可以应用在养猪上吧?哈哈哈哈,小编也是!不过,这项技术如果能够完善,那么猪肉的味道可能会很鲜美吧。奇葩指数:2.私人订制性伴侣人工智能的发展,科技已经达到了前所未有的高度,在智能制造时代,随着AR技术和人工智能的相结合,更多的东西被制造出来。机器人发展很快,在性爱人类伦理方面机器人的出现也是某一方面的需求。自从将AI应用到性爱机器人的那天起,它就赚足了公众的眼球,更多的科技产品被制造出来,开始蔓延市场。世界上的首款性爱机器人当属RealDoll的Harmony,她能聊天会移动,在这场性爱机器人革命中,人工智能被赋予了崭新的任务,让机器人试图变得有思维、“通人性”,甚至有感觉。而用户体验则是产品的核心部分,用户已经可以通过手机设置Harmony的性格,调成自己喜爱的那一类型。上榜理由:叹为观止!或许这就是为什么有些专家认为人工智能会对人类产生威胁,在道德伦理上,这点的确是在挑战人类的底线。奇葩指数:选美机评委器人据主办方介绍,之所以让人工智能当选美评委,是因为他们希望将来通过一张照片判断人的健康情况。他们认为,人的长相通常和健康程度成正比,所以人工智能可以从选美开始,逐渐学会判断人的健康状况。人对美的标准是很主观的,所以主办方将美的标准细分,具体包括肤色、皱纹、性别、年龄段、脸部对称性及种族等因素。参与的人工智能算法有三种,均掌握深度神经网络技术。参赛人只要下载客户端,在里面上传自己不带妆、不戴眼镜、无胡须的脸部照片,最后经过三个人工智能“评委”的选择就可以了。上榜理由:长相和健康程度成正比?那你让长相丑的该怎么活?奇葩指数:4.智能捡黄瓜人工智能干的活有时候不仅不高大上,还很容易让人一头雾水,比如下面要说的拣黄瓜。日本的一名技术人员开发了一套人工智能系统,用来给黄瓜分门别类。开发者的父母以种黄瓜为生,但是为了给种出来的黄瓜定品级是十分麻烦的一件事。就像他们家,为了给自家黄瓜分到九类品级,需要大量的时间观察黄瓜的颜色、长短、粗细、纹理等等,费时费力,而且需要长时间的学习,没法临时雇人帮忙。所以这名技术人员开发了一套可以分拣黄瓜的人工智能系统。他利用谷歌开源的TensorFlow平台,通过图像识别,再加上树莓派3(RaspberryPi3)的硬件,人工智能系统就这样做出来了。他给这套系统“喂”了7000张黄瓜照片,帮助人工智能学习黄瓜类别。但目前为止,这套系统用于实践的准确率仅为70%,并且因为训练系统的照片分辨率太低,目前系统还不能分辨出黄瓜的颜色、纹理、小刺和刮痕等判断因素。目前这名技术人员正打算使用谷歌的云机器学习平台,改善他的人工智能系统。上榜理由:开发人员是个孝顺的孩子,赶紧开发让更多孝子能用上。奇葩指数:无论如何,人工智能落地应用就是一种实践,它是检验理论的基础。不管奇葩与否,能够应用在生活中,并改变我们细微生活,都是人工智能的实践。已赞过已踩过你对这个回答的评价是?评论
收起人工智能领域中的很多项目都需要高质量数据做支撑。定制化采集标注数据需要花费大量时间和资源,可能延误AI项目的进度。因此购买成品数据集成为众多企业快速构建高质量AI模型训练数据的选择,其购买成本通常比定制采集标注数据低很多。景联文科技成品数据...
点击进入详情页本回答由杭州景联文科技有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
为你推荐:
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。说明
做任务开宝箱累计完成0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...
2016-05-21 23:50
来源:
覃超帝国兴亡史
做软件开发十数年,见识了形形色色的开发者,和各种各样的奇葩软件开发模式。本文跟你侃侃这些软件开发模式及其特点。
IDD(IDE-Driven Development)
大巧在所不为,大智在所不虑。
-- 荀子 天论
IDD,也就是 IDE 驱动开发,几乎是初学者步入软件开发殿堂的必经之路。IDE 为开发者屏蔽了很多细节,并且几乎不用配置(相对于 vim / emacs / sublime)就可以使用代码自动补全,代码跳转,搜索,以及签入签出等软件开发中将会使用到的几乎所有工作。
然而,它带来的危害也是显而易见的,陷入 IDD 开发模式太深,开发者离开了 IDE 便像无头苍蝇一样,几乎不知道怎么读代码,甚至不太会写代码,不懂怎么编译,不会自动化完成常见的任务(比如 android 项目从编译到打包到 apk 分析),甚至连基本的 git 操作都无法完成。而这些被屏蔽的细节都是软件工程师的基本功,就像弹钢琴的基本指法一样,是必须修炼好的。试想一下,如果你只会在 IDE 里读代码,离了 IDE 的跳转就不知道怎么追溯代码的脉络,那么有的代码你只能通过 browser 阅读怎么办?不读了?如果你只会在 IDE 里写代码,有天你只能 ssh 到服务器上写代码(表笑,有很多公司这么做,也有很多场合需要这么做),你难道就不写了?
此外,IDD 开发者如果不能及时从对 IDE 的极度依赖中抽身而出,很容易转化成下一类开发者。
DDD(Debugger-Driven Development)
合格的程序员的代码是一行行写出来的;不合格的程序员的代码是一行行调出来的。
-- 某子 程序员的自我修养
DDD,面向调试器开发,是 IDD 依赖到一定程度的必然反应。这种开发模式的典型表现为:写出来的代码不知道对不对,从头到尾设置无数个断点,然后进入到调试模式,一个断点一个断点跟踪。发现一个问题,解决一个问题(也许引入一个新的问题),直到所有断点走数遍,所有遇到的问题被消灭,抹一抹头上的汗,心里骂上一句:妈的,这段代码老子(娘)终于调通了!
DDD 是非常浪费程序员生命的一种开发方式,它让我们把有限的时间精力都浪费在无穷地瞎忙活之中。因为断点过于唾手可得,程序员会变得懒于思考,懒于设计,甚至写完了代码都懒得自己看一眼 —— 大手一挥,无数个红色的断点就设置好了,反正出了问题我调就行了呗。
其实很多 concurrent 的问题,靠调试器是无法复现和解决的,更要命的是,DDD 还容易使程序员陷入 tunnel vision —— 我们太过于关注眼前的那一点点状态,而忽视了全局。
PDD(Print-Driven Development)
王好战,请以战喻。填然鼓之,兵刃既接,弃甲曳兵而走。或百步而后止,或五十步而后止。以五十步笑百步,则何如?
-- 孟子 梁惠王上
看到 DDD,做嵌入式开发的 C 程序员笑了,我们没有那臭毛病 —— 大部分嵌入式开发的场景,要么设断点太麻烦(需要 remote debugger),要么无法设置(比如说很多内核态的代码),所以我们的代码都是写出来的。不过,这部分程序员大多自发聚集起来,立起一个山头:PDD,也就是面向打印开发。其开发逻辑有如下面的代码:
PDD 和 DDD 相比,是旗鼓相当,半斤八两。PDD 开发者加入的代码,和 DDD 开发者设置的断点一样,头疼医头,脚疼医脚,哪里的状态不对了,或者和预想的流程不一致,先不考虑设计上是否有缺陷,为什么会出现这样的结果,而是不管三七二十一,加个打印(设个断点)看看状态是什么。如果没抓对位置,那么就继续细化,直到很被动地找到原因为止。
BDD(Bug-Driven Development)
以管窥天,以蠡测海,以莛撞钟,岂能通其条贯,考其文理,发其音声哉。
-- 东方朔 答客难
看到 BDD,也就是问题单驱动开发,相信大家都相视一笑。本来这里我想用 TDD(Ticket-Driven Development),更接近我的原意,为了不和 Test-Driven Development 混淆,故而只好改成 BDD。这可能是我们最熟悉的开发模式了 —— 在一个业务稳定的软件公司(甭管规模大小),勉力维护现有的代码,小心地添加新功能是多数程序员的主要职责。在这些公司里,与其说我们是工程师,不如说我们是补锅匠。看不懂代码?没关系,只要你会读日志(出错信息);解决不了问题?不打紧,能找到 workaround 把问题绕过去也可以,更有甚者,遇到神问题,看不懂,想不明,解不了,还没有 workaround,大笔一挥:not reproducible,就把问题关了,几个月半年后,说不定自己已经去补别的锅了。
BDD 开发者修的都是防御之道,一手华丽的 defensive coding skill,堪比仙女座的星云锁链,把系统的每寸肌肤防得滴水不漏。如果你看到一段代码,函数 A(a, b, c) 调了函数 B(c),即便参数 c 在 A 的入口进行了详细的检查,在 B 中也还会再度详细检查(哪怕 B 只有 A 调用),那么这代码一定是 BDD 开发者开发的。
BDD 开发者的视野往往很窄,所学所用皆局限于已有的系统,由于系统并非自己所写,阅读代码又是就着问题去追根溯源,所以对系统的理解会比较狭窄。这并非程序员能力不足,相反,能做 BDD 开发往往都是很有经验的程序员。然而,他们被公司的需求所局限,整日被 ticket 追逐,疲于奔命,在工作中无法有效提升,渐渐迷失在一个又一个犯罪现场,眼界变得越来越狭窄。
RDD(Rat-race-game-Driven Development)
From day to day, we programmers dreamed of being an expert inside the team/company; however, when that day really comes we trapped ourselves.
-- 程序君
These walls are kind of funny. First you hate ’em, then you get used to ’em. Enough time passes, gets so you depend on them. That’s institutionalized. They send you here for life, that’s exactly what they take. The part that counts, anyways.
-- Red, The Shawshank Redemption
RDD,老鼠赛跑驱动的开发,是指那些整个职业生涯都在原地打转的开发模式。Rat race game 是『富爸爸穷爸爸』中的经典例子 —— 老鼠在环形的笼子里拼命地奔跑。
每个程序员都在努力地成为他所在领域的专家。成为专家的代价是巨大的,我们需要付出经年累月的努力,才能爬到峰顶,带上「专家」的帽子。然而,成为「专家」往往意味着一条路走到黑 —— 一来之前的累计的惯性实在太大,掉头的机会成本太大;二来你的雇主因此而付你更高薪水,所以你只能在这个方向上不断前进。
我们知道,软件是个工程的活儿,并非科学。科学的路上走得越远,打出的装备越稀缺;而在同一家公司或者同一个行业里搞软件的,走得越远,就有越多的路是重复再走。你可能精于 chip verification,于是从第一份工作到第 n 份工作,干的都是 verification 的活,直到有天惊闻这个职位被砍;你可能是web 桌面化的好手,extjs 玩得风生水起,公司依赖你的技能开发产品,直到有一天,这个产品没人用了,你到市场上一看,你的 extjs 九段的功力,比不上玩 react 才刚刚两段的水平受欢迎。
RDD 就像 Red 口中所述的那些高墙。当你沉浸在 RDD 中不能自拔时,悄悄地,你曾经引以为豪赖以生存的能力成了你生存下去的最大障碍。
以上写了这么多,总有一款符合你。你有没有找到自己心仪的开发模式?如果没有,恭喜你;如果找到了,别慌,有则改之,无则加勉即可。
返回搜狐,查看更多
责任编辑:
做软件开发十数年,见识了形形色色的开发者,和各种各样的奇葩软件开发模式。本文跟你侃侃这些软件开发模式及其特点。IDD(IDE-Driven Development)大巧在所不为,大智在所不虑。-- 荀子 天论IDD,也就是 IDE 驱动开发,几乎是初学者步入软件开发殿堂的必经之路。IDE 为开发者屏蔽了很多细节,并且几乎不用配置(相对于 vim / emacs / sublime)就可以使用代码自动补全,代码跳转,搜索,以及签入签出等软件开发中将会使用到的几乎所有工作。然而,它带来的危害也是显而易见的,陷入 IDD 开发模式太深,开发者离开了 IDE 便像无头苍蝇一样,几乎不知道怎么读代码,甚至不太会写代码,不懂怎么编译,不会自动化完成常见的任务(比如 android 项目从编译到打包到 apk 分析),甚至连基本的 git 操作都无法完成。而这些被屏蔽的细节都是软件工程师的基本功,就像弹钢琴的基本指法一样,是必须修炼好的。试想一下,如果你只会在 IDE 里读代码,离了 IDE 的跳转就不知道怎么追溯代码的脉络,那么有的代码你只能通过 browser 阅读怎么办?不读了?如果你只会在 IDE 里写代码,有天你只能 ssh 到服务器上写代码(表笑,有很多公司这么做,也有很多场合需要这么做),你难道就不写了?此外,IDD 开发者如果不能及时从对 IDE 的极度依赖中抽身而出,很容易转化成下一类开发者。适用人群:初学者舒适指数:五星危害指数:四星解决之道:学会任意一个 shell 下的编辑器DDD(Debugger-Driven Development)合格的程序员的代码是一行行写出来的;不合格的程序员的代码是一行行调出来的。-- 某子 程序员的自我修养DDD,面向调试器开发,是 IDD 依赖到一定程度的必然反应。这种开发模式的典型表现为:写出来的代码不知道对不对,从头到尾设置无数个断点,然后进入到调试模式,一个断点一个断点跟踪。发现一个问题,解决一个问题(也许引入一个新的问题),直到所有断点走数遍,所有遇到的问题被消灭,抹一抹头上的汗,心里骂上一句:妈的,这段代码老子(娘)终于调通了!DDD 是非常浪费程序员生命的一种开发方式,它让我们把有限的时间精力都浪费在无穷地瞎忙活之中。因为断点过于唾手可得,程序员会变得懒于思考,懒于设计,甚至写完了代码都懒得自己看一眼 —— 大手一挥,无数个红色的断点就设置好了,反正出了问题我调就行了呗。其实很多 concurrent 的问题,靠调试器是无法复现和解决的,更要命的是,DDD 还容易使程序员陷入 tunnel vision —— 我们太过于关注眼前的那一点点状态,而忽视了全局。适用人群:入门者舒适指数:四星危害指数:五星解决之道:多花时间思考和设计,使用 TDD(Test Driven Development),如果非要追踪状态,合理地使用日志(log)而非断点PDD(Print-Driven Development)王好战,请以战喻。填然鼓之,兵刃既接,弃甲曳兵而走。或百步而后止,或五十步而后止。以五十步笑百步,则何如?-- 孟子 梁惠王上看到 DDD,做嵌入式开发的 C 程序员笑了,我们没有那臭毛病 —— 大部分嵌入式开发的场景,要么设断点太麻烦(需要 remote debugger),要么无法设置(比如说很多内核态的代码),所以我们的代码都是写出来的。不过,这部分程序员大多自发聚集起来,立起一个山头:PDD,也就是面向打印开发。其开发逻辑有如下面的代码:// ...some awesome logic...
printf("haha, hit 1");
// ...some more logic
printf("!!!!!! hit 2");
if (awesome_check(awesome_state)) {
printf("####### condition captured")
}
PDD 和 DDD 相比,是旗鼓相当,半斤八两。PDD 开发者加入的代码,和 DDD 开发者设置的断点一样,头疼医头,脚疼医脚,哪里的状态不对了,或者和预想的流程不一致,先不考虑设计上是否有缺陷,为什么会出现这样的结果,而是不管三七二十一,加个打印(设个断点)看看状态是什么。如果没抓对位置,那么就继续细化,直到很被动地找到原因为止。适用人群:入门者舒适指数:三星危害指数:四星解决之道:多花时间思考和设计,合理地使用深思熟虑过的日志(log)而非用完即扔的打印信息BDD(Bug-Driven Development)以管窥天,以蠡测海,以莛撞钟,岂能通其条贯,考其文理,发其音声哉。-- 东方朔 答客难看到 BDD,也就是问题单驱动开发,相信大家都相视一笑。本来这里我想用 TDD(Ticket-Driven Development),更接近我的原意,为了不和 Test-Driven Development 混淆,故而只好改成 BDD。这可能是我们最熟悉的开发模式了 —— 在一个业务稳定的软件公司(甭管规模大小),勉力维护现有的代码,小心地添加新功能是多数程序员的主要职责。在这些公司里,与其说我们是工程师,不如说我们是补锅匠。看不懂代码?没关系,只要你会读日志(出错信息);解决不了问题?不打紧,能找到 workaround 把问题绕过去也可以,更有甚者,遇到神问题,看不懂,想不明,解不了,还没有 workaround,大笔一挥:not reproducible,就把问题关了,几个月半年后,说不定自己已经去补别的锅了。BDD 开发者修的都是防御之道,一手华丽的 defensive coding skill,堪比仙女座的星云锁链,把系统的每寸肌肤防得滴水不漏。如果你看到一段代码,函数 A(a, b, c) 调了函数 B(c),即便参数 c 在 A 的入口进行了详细的检查,在 B 中也还会再度详细检查(哪怕 B 只有 A 调用),那么这代码一定是 BDD 开发者开发的。BDD 开发者的视野往往很窄,所学所用皆局限于已有的系统,由于系统并非自己所写,阅读代码又是就着问题去追根溯源,所以对系统的理解会比较狭窄。这并非程序员能力不足,相反,能做 BDD 开发往往都是很有经验的程序员。然而,他们被公司的需求所局限,整日被 ticket 追逐,疲于奔命,在工作中无法有效提升,渐渐迷失在一个又一个犯罪现场,眼界变得越来越狭窄。适用人群:业务稳定的公司里的『高级程序员』舒适指数:二星危害指数:四星解决之道:自己主导一个项目的开发,或者,跳槽RDD(Rat-race-game-Driven Development)From day to day, we programmers dreamed of being an expert inside the team/company; however, when that day really comes we trapped ourselves.-- 程序君 Programmer’s dilemmaThese walls are kind of funny. First you hate ’em, then you get used to ’em. Enough time passes, gets so you depend on them. That’s institutionalized. They send you here for life, that’s exactly what they take. The part that counts, anyways.-- Red, The Shawshank RedemptionRDD,老鼠赛跑驱动的开发,是指那些整个职业生涯都在原地打转的开发模式。Rat race game 是『富爸爸穷爸爸』中的经典例子 —— 老鼠在环形的笼子里拼命地奔跑。每个程序员都在努力地成为他所在领域的专家。成为专家的代价是巨大的,我们需要付出经年累月的努力,才能爬到峰顶,带上「专家」的帽子。然而,成为「专家」往往意味着一条路走到黑 —— 一来之前的累计的惯性实在太大,掉头的机会成本太大;二来你的雇主因此而付你更高薪水,所以你只能在这个方向上不断前进。我们知道,软件是个工程的活儿,并非科学。科学的路上走得越远,打出的装备越稀缺;而在同一家公司或者同一个行业里搞软件的,走得越远,就有越多的路是重复再走。你可能精于 chip verification,于是从第一份工作到第 n 份工作,干的都是 verification 的活,直到有天惊闻这个职位被砍;你可能是web 桌面化的好手,extjs 玩得风生水起,公司依赖你的技能开发产品,直到有一天,这个产品没人用了,你到市场上一看,你的 extjs 九段的功力,比不上玩 react 才刚刚两段的水平受欢迎。RDD 就像 Red 口中所述的那些高墙。当你沉浸在 RDD 中不能自拔时,悄悄地,你曾经引以为豪赖以生存的能力成了你生存下去的最大障碍。适用人群:大公司里的『专家』舒适指数:五星危害指数:四星解决之道:在公司里换不同的团队,或者,跳槽去更有挑战的公司以上写了这么多,总有一款符合你。你有没有找到自己心仪的开发模式?如果没有,恭喜你;如果找到了,别慌,有则改之,无则加勉即可。

我要回帖

更多关于 软件开发中经常遇到的问题有哪些 的文章