热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

编程语言软件工具都是为了实现市场价值

以前,我认为一个事物对我没有直接用途的时候就不会去理会它,心理学上说我们都戴着自己的认知偏见的有色眼镜去有选择性地看待这个世界,纷繁的信息经过我们的认知图式过滤之后便成为少量有序的事件,所以我们都在有强烈选择性地关注一些事物和忽视另一些事物,然而,这样可能会导致丧失一些很有价值的信息,而总是将知识面停留在自己的小世界中

以前,我认为一个事物对我没有直接用途的时候就不会去理会它,心理学上说我们都戴着自己的认知偏见的有色眼镜去有选择性地看待这个世界,纷繁的信息经过我们的认知图式过滤之后便成为少量有序的事件,所以我们都在有强烈选择性地关注一些事物和忽视另一些事物,然而,这样可能会导致丧失一些很有价值的信息,而总是将知识面停留在自己的小世界中——当然这倒也不是说看到什么都要凑上去学一学。如何在这两者中间取得折中,我觉得一个好的办法是先简略地想一下这是个什么东东,他的本质是什么,出现是为了满足什么需求,等等比较“高层”的问题(即“What”和“Why”而不是“How”),这些问题应该是可以通过简单的调研和思考得出结论的,至于背后的技术细节,如果你打算入行,就可以去学,如果不打算的话则可以免了,至少前面的思考和简单的调研能够一定程度上保证当有价值的信息或机会摆在你面前的时候你不会把眼睛蒙上走开,并且多做做这类思考对于思维的广度也很有价值。最近我开始认为,最佳的学习方法就是先广度优先遍历(先弄清What和Why),然后择最合适的分支深入(How)(算法牛人DD同学在TopLang上的一个帖子里面也提到类似的想法,刚进大学就能够如此清晰地看清前方道路的走法,我对DD很佩服)。

方法论看似是个很抽象的东西,并且的确有一些方法论是抽象到 over-generalized (泛化过度)的地步,然而说实话在实践当中我总是发现(正确的)方法论是再现实不过的东西,比如一个大家都明白的道理是:如果方向走错了,那么做的功就基本全白费了(还有比如“如果方法对头,就能事半功倍,反之可能多走很多弯路”)——然而现实中有多少人能够真正实践这个方法呢?绝大多数人都是只顾解决眼前问题,抓了这头丢了那头,更多人是不知道问题是什么,只管把头脑中能联想到的一个以前类似情况下的类似方案套用上来。以前我总是觉得一个公司里面,CEO/CTO 这样的角色是基本摆设,但我现在不这样想了。在 How 层面把事情做好,做成一个精钻的程序员,那顶多就是能把钳子使好,这样的事情很多人都能做到,熟能生巧嘛。换句话说程序员基本上是去解决一个定义好的问题,去实施一个定义好的方案。然而决策问题就不一样了,决策问题是需要去定义问题是什么,以及权衡最佳方案是什么,不管是决策技术架构还是决策商业策略,都是非常复杂的思维过程,需要综合和权衡大量的信息,这种能力就不是简单楞着头搞下去能练出来的了,很多时候需要抬起头来看,免得只见树木不见森林。(以上也是为什么我在讨论组里面一篇帖子中提到我觉得学数学学到精通未必就会思考日常决策问题的原因——数学几乎总是去解决一个定义好的问题,用的也都是定义好的严密的逻辑推导。然而现实中的问题是一个复杂系统,诸多变量互相影响,如何权衡最佳方案实际上是一个复杂的统筹规划。更重要的是,你往往甚至都不知道问题是什么,能够从纷繁的信息中抽象出问题,是一种极大的能力。这里推荐《你的灯亮着吗?》和《失败的逻辑》)

当然,我自己还没能到这个层面,尚需要不断实践和总结,所以只能稍微的谈一点感受,再往下扯只怕就会流于空泛了。这一点上我还是举一个程序员们喜闻乐见的例子吧,在程序员眼睛里面,做一个项目,也许首先想到的是用什么语言,什么框架,什么库,在这个方向上那就是什么看上去牛B用什么,恨不能都用 haskell、lisp 来写才爽,用 Java?那多没意思啊,Java 那坨弱智语法我小学的弟弟都能掌握,也没啥牛B的语言特性,忒没成就感(只可惜真正判别弱智与否的并非用什么语言技术,而是做出什么产品满足什么需求)。这就是属于只考虑单个孤立因素的简单(或者说 Naive 的)决策,这个因素就是——只要让我自己感觉爽——只可惜并不是让自己感觉爽的做法就是真正解决问题的做法,始终要弄清问题是什么,在后者意义上,一些对于技术型程序员往往没有吸引力的话题其实有着极其重大的价值——比如什么时候设计,什么时候重构,什么时候集成,再往上一层其实这些又都是次级问题,首要的问题还是这个产品满足什么需求,有什么市场(即这件事情值不值得做),有一句话想必很多人常听说,如果不知道要做什么,套上十二层架构也无济于事,方法永远不是因,而是果。

再举个例子,如果我想给我的网站做一个 feature ,我认为这个 feature 技术上很牛很强大,而且刚好有机会使用一下我最近修炼的某某 framework 和某某语言,而且这玩意很有挑战性,还不是一般人能够做得了的,综合以上三点,我立时觉得心痒难耐摩拳擦掌。然而实际上这个问题应该怎样分析呢?首先,考虑到以上三点,这将会是一个投入相当大的项目,那么其收益就必须要对得起这个投入,技术上很牛不代表商业上就牛,再牛再难做的 feature 如果不能带来商业价值那就是负收益。总而言之:

  1. 一件事情仅仅让你感觉挺牛不代表这件事情就是值得做的;
  2. 一件事情仅仅让你感到很有兴趣并不代表这件事情就是值得做的。

这两句话和我们日常的认识并不冲突,其实我们几乎总可以找到既有价值、又有趣、又有足够挑战性的工作。举个例子,本科数学学得精纯无比的同学有没有偶尔也会觉得盲目呢?做这些题目到底有什么实际用途呢?这就像是你总是在磨一把刀,磨得闪闪发光锋利无比,你可以向别人炫耀自己的刀很牛B,但是刀是为了冲锋陷阵血溅五步的,你也不想让它折戟沉沙吧,不管是将数学用在数学物理上还是用在人工智能、机器学习、密码学、通信上,都是既让人有成就感,同时又有意义和价值的事情。对我们程序员来说,你把一门语言玩得很精通,不仅知晓它所有的语法细节,陷阱和缺陷,还了解它的底层实现模型是如何。你觉得很牛很有成就感——的确,我们都会为一件自己做到了别人做不到的事情而感到自豪,然而反问一句,除了情绪价值之外,这样的事情在本身的价值上有没有你感觉到的那么牛呢?如果你只是在削铅笔,那么何必磨一把倚天屠龙剑来?反之,如果你做的是一个本身功能很牛很创新很有价值的软件,那么语言技术其实完全是次要的,并不是看上去越眩越好,关键是选择各个方面综合考虑起来最合适的工具即可,瑞士军刀也许很丑,但对于丛林冒险很实用就行。拿着一把屠龙宝刀去野外生存,同样也不靠谱。

编程语言是为了实现软件的,软件是为了服务于人的。诚然,了解一门语言的方方面面能够使你更有效地使用它,然而另一方面,如果结果发现这门语言并不何时来解决你手头的问题呢?受到投入的沉没成本的影响你一定觉得很不甘心吧?同理,由于你对一门工具投入了很多的精力,这门工具已经和你的情感挂上了钩,于是如果让你来决策用什么工具来完成一个任务的时候,你几乎会毫无疑问地想到使用你最熟悉而喜爱的那个,这就是“当你手头拿的是一个锤子,任何东西看上去都像钉子”这句话的一个解释。原先的问题是使用一门技术使得能够性价比最高地实现要完成地产品,然而到你那里问题就悄悄地变成了“使用一门技术让我感觉最爽”,问题的所有其他需要综合考虑的因素都被选择性忽略掉了,所以如果你是一个语言技术 fans ,那么几乎毫无疑问你会成为一个糟糕的决策者。最近,在学习和研究的方法论上我已经听到不止一个人(参见《失败的逻辑》和这里——一位诺贝尔奖得主的忠告(引言如下))忠告我们,不要为了工具而工具,忘记了工具的目的是什么。

CodingHorror 的作者最近在博客里面跟着 Steve Yegge 同学宣称,如果有一件事情是他想教给程序员同学们的,那就是 Marketing 。无独有偶,有一次吃饭的时候鲍志云同学也提到: Marketing Sense 是很重要的。其实也就是不要总想着写牛代码,用牛语言技术,不要落入为技术而技术的怪圈,而是首先想明白做的事情有什么价值,先弄清做什么,为什么做,再去想怎么做,这样后面的功夫才花的有价值。

You won’t– you cannot– become a better programmer through sheer force of programming alone. You can only complement and enhance your existing programming skills by branching out. Learn about your users. Learn about the industry. Learn about your business.

当然,最后必须声明的是,不要矫枉过正,误会以上的观点,以上观点并不是说学生时代做的基本功是不需要的,一些非常基本的功夫(如计算机体系结构、数据结构和算法、两个主要流派(命令式和声明式)的编程语言都使用了哪些主要的编程范式、对主流语言的优缺点和适用场合的了解等等)是有必要掌握牢靠的,因为一方面我们并不是都能去做判断与决策,码农总是一个可靠的职业。另一方面对技术大方向的把握也是决策的基础知识,只是不要掉进无尽的技术漩涡,成为技术追星族。此外也许还有一个小小的好处就是如果被老板逼着用一门不熟悉的语言时不会很不痛快,因为真正重要的事情是你完成的产品,而不是用的语言。

我们的思维有很多很多的弱点,前文讲的其实就是这样的弱点。我一向认为,正确的思维方式,是一切高效学习的基础。比如参见如下2个例子,错误的思维方式得到的结论有大得多的可能性是谬误。

  1. 人总喜欢沿袭以往习得的经验,并通过类比来进行外推。我第一次在一个地铁终点站坐地铁的时候,看着从远方开来的地铁,我心生疑惑——“这车每节车厢都这么长,待会怎么调头呢(我心说没看到铁轨终点有一个大大的供调头的U形弯啊)?”,当车开始开的时候我终于意识到原来车是可以往两头方向开的。
  2. 人喜欢从关联当中寻找因果,有一次我我老婆去银行取款,到了 ATM 室的自动门口,我开玩笑地拿着手头的饭卡去刷了一下,然后——门居然开了。我顿时来了劲,立即得出一个结论:这个刷卡装置不安全,至少不是能够专门识别银联的卡的。我甚至飞快地泛化出了一个更具一般性的理论来解释这个现象:即可能所有带有磁性的卡都可以用来开门。老婆看我得意洋洋,就泼过来一盘冷水:不一定是你的卡刷开的啊,你不刷卡试试看。我不信,说怎么可能呢,心想我刷卡,门就开了,还有比这更明显的因果关系嘛。但出乎我意料的是,我走出门,这次没刷卡,门也开了——原来是感应门——原先这个 ATM 室的确是刷卡门,但后来改成了感应门,刷卡的那个装置只不过没拆掉残留在那里而已。
  3. 《失败的逻辑》里面从认知心理学的角度系统介绍了我们在复杂情况下的判断与决策是如何出错的,非常值得一读。

本文地址:http://www.nowamagic.net/librarys/veda/detail/719,欢迎访问原出处。


推荐阅读
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • 本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文详细介绍了商汤科技面试中涉及的CV算法面经内容,包括CornerNet的介绍与CornerPooling的解决方案、Mimic知识蒸馏的实现方式、MobileNet的特点、普通卷积和DW PW卷积的计算量推导、Residual结构的来源等。同时还讨论了在人脸关键点和检测中的mimic实现方式、pose对人脸关键点的提升作用、目标检测中可能遇到的问题以及处理检测类别冲突的方法。此外,还涉及了对机器学习的了解程度和相似度分析的问题。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
author-avatar
许小懿_336
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有