编程的郁金香之热

过去几年来,科技行业有强烈的愿景去教会所有人编程。

"所有学校的每一个学生都应该有机会学习计算机科学"                    -code.org

每个人都应该有学习计算机科学的机会。对计算的理解可以改变你思考的方式,并且它直接地给你惊人的力量去实现自己的创意。理解一些概念比如抽象、耦合、普适、复杂度以及伸缩能够改变你思考以及定位问题的方式。运用通用性的编程工具改变你解决问题的方式。

自农业之后,现在软件比任何其它技术都更剧烈,更快地改变着世界。不管是在科技行业还是其他行业,现在它都是业务增长和创新的核心,并且快速的改变着人们生活的方式。软件已经主导了我们获取知识,存储及处理信息,发布及接收多媒体,处理商业事务,和朋友、同事、社区沟通的方式。世界上最大的图书销售商和最大的视频服务商都是软件公司;主要的几家音乐公司也是软件公司;增长最快的娱乐公司和电信公司还是软件公司。那些非软件公司正越来越多的依赖软件来优化物流、供应链、生产流程,和广告,亦或提供工具给员工去创造更多的价值。软件来到了这样的一个临界点,改变我们教授和学习知识,借款和贷款,了解和关心健康,搜索和消费各种服务的方式。

尽管软件给我们的生活带来了空前的变革,但总有一天,编程将会变少对编程的狂热以及编程的增长都是暂时的,编程是众多工具的产物。现在编程是实现计算最好的技术,但是编程自身并不是计算机科学的必要部分。计算就是处理数据并通过一些算法来解决问题。当前编程是我们不二的选择,但是我们必须创造更好的工具。将来一天,不需要写一行代码就可以处理数据以及驱动算法将变得习以为常。我已经迫不及待了。

编程是一项非常专业化的技能。处理复杂问题自然地是困难的,作为一个程序员,我经常写程序解决各种复杂度的问题。我对那些非程序员用来处理简单自动化任务的技术怀有敬畏之心。我有幸接触过一个逻辑及语言工具,在我脑中模拟一台电脑并通过有着怪异规则的不常见的语言和它沟通(我不太善于模拟人)。很多人并不适合编程,但大多数人还是需要解决复杂问题所带来的好处。编程相关的工具及方法使得通过编程解决问题复杂化,会把我们大多数人挡在通过计算解决问题的大门之外。编程并不容易学习,并且和人们所希望解决的问题也无多大关系。人们不应该非得通过编程才能运用软件来解决问题。

有那么几个工具,我认为能够给非程序员带来像编程一样解决问题的能力。


计算器

自上世纪70年代引进便携计算器以来计算器已经发展了很多。可编程的计算器让科学家和工程师能够解决一些比普通算术更复杂的问题(尽管他们可能使用了一些代码)。图形化的计算器帮助他们直观的理解计算结果。自从个人电脑和笔记本电脑流行以来,软件化的计算器界面已经朝着展示用户所处理问题的方向发展着,而不是不合潮流的累加风格实现方式(一次性从左到右敲一整行的表达式,而不是每次一个数据项目,一个操作符,来来回回多次)。创新的设计如Soulver和 Calca,把计算器内嵌其中,并在界面显示工作状态,提供改变输入参数及实时查看结果的能力。


电子表格

电子表格有30来年的历史了,但是依然像受书启发而发明的老祖先一样基础和重要。它依然最重要的轻量级记账工具,并且证明是一个通用的计算和建模工具,同样也善于展示表格式的数据。表格格式如今依然足够通用,并可分饰多角,实时重算功能有助于问题的拆分处理。许多和数据打交道的人有高超的电子表格技术,他们能够做一些非常非常疯狂的作品。更复杂的,电子表格可以用来存储和研究数据(特别是数据透视表出现之后),帮助人们开发和计算复杂的多变量的表达式,探索模拟和假设的场景,并实时呈现结果。电子表格是一个通用的工具,能做远超当初电子表格作者能够想象的事情。从某种程度上来说,它非常接近于人们使用的编程工具。

不过电子表格也有不足之处,特别是以今天对用户界面以及处理能力的标准来看。它在处理多维数据的时候就会显得力有不及,你得提前决定维度,否则需要从头开始。可以通过使用多个连续的单元格以及重复交叉计算来粗略地模拟矢量和并行计算,但是它们并不能理解你的数据模型,也就没有能力提供更多的帮助。电子表格把扁平化二维表格数据视图界面与数据本身和计算数据的公式合在一起。字母数字单元格的地址是不透明且易变动的,移动数据或者改变布局都有可能破坏其他的单元格或者影响计算结果。公式是隐藏起来的且难以验证其正确性,如果你不是原作者,甚至理解其功能也很困难。

80年代中期有几个电子表格项目尝试解决其中的一些缺点,特别是把数据与表格化显示剥离开来。比如 Javelin, Trapeze 以及Lotus Improv,不过它们已经消失在我们的视线中很久了,遗憾的是在软件市场上并没有再看到类似的软件。 


个人数据库

当你在处理复杂或者多维的数据时,有时候电子表格解决不了问题。对于大部分人们想解决的问题,对数据的操作、查询和统计都是必要的。但是不像电子表格,令我印象深刻的是过去几十年间个人数据库的受欢迎程度大大降低。个人数据库不再流行了吗?还是说现在的我和大家不在同一个圈子里面?可能是由于程序员不鼓励大家使用个人数据库吧,依"专家"的意见。还记得大学时候讨厌MS Access, 实在是不屑于鼠标点点就能构建查询那些小技能,我是幼稚的,痴迷于SQL的强大能力。我们应该把个人数据库的功能都教给大家,而不是教大家编程,至少也应该排到编程之前。

我最近发现MS Access可以很好的用来开发增删改查的应用,Filemaker也类似。等下次我想构建一个大数据量的应用的时候我倒是非常有兴趣试试Zoho Creator。尽管这些软件都发展了很多,但是如要构建真正的应用它们还是显得不够灵活,仅仅能处理一些简单的表单和视图。

还有好几个特定的领域,非程序员也有工具来处理类似编程能够处理的事情,但只需很少的代码。游戏开发就是一个很好的例子,游戏是提供特殊交互的计算机程序。游戏通常是复杂的程序,由用户界面主导,但是游戏开发项目组却由美工和设计师主导,而不是程序员(视游戏需求而定)。美工和设计师使用程序员开发出来的工具实现很大部分游戏包含的内容,如美术,结构,地图,模型,动画,情节,关卡设计,迷宫,对话,故事。假设这样的一个流程,关卡设计师提供图纸和写好的规则让程序员用代码来实现,一遍遍的重复相同的流程直到关卡设计师满意为止,看起来很冗繁(当前大部分的应用用户界面都是这样实现的)。游戏领域不是这样的,程序员先开发游戏引擎和关卡设计工具,然后设计师就可以在一个非常接近真实游戏的环境里面设计,并能够实时地把设计装载到游戏引擎中运行起来。

遗憾的是现在的界面设计工具不适合非编程人员使用,甚至是很多程序员。自鼠标发明以来,鼠标点来点去这样的小伎俩是被“真正的”程序员轻视的,就像汇编程序员看不起早期的Fortran拥护者,C程序员看不起Java程序员,Vi/Emacs用户看不起依赖IDE开发的程序员一样。那些已经掌握高难度工具或者流程的人总是很难接受新的更强大的事物。

长时间以来,GUI的构建工具就是一坨屎,现在依然是。它们通常只是简单的显示将要实现的界面效果,一方面不足够强大使得程序员可以用它实现他们所想要实现的功能,另外一方面又复杂且充斥着各种编程概念,使得非程序员难以使用。程序员自然而然地回归到编写代码实现界面的方式,因为他们需要做一些工具做不到的事情。这样做是错误的,虽然可以理解。代码带来一个视觉概念与思维方式的不一致的严重问题,特别是代码是过程式的,如果是申明式的还好些,你构建你正设计的界面。重新编译、发布并检查界面变动实在是一个漫长的开发过程。我完全理解这种做法,但是设计师在Photoshop设计好作品,然后让程序员用代码再次从头开始实现作品实在是一个人力的极大浪费。我们的GUI工具必须得提高,使得设计师设计GUI界面,随后程序员来接管界面与后台的交互(Spark Inspector和Reveal预示未来)。

其它一些提供给非程序员类编程能力的有批处理器(如Photoshop),多节点且分层的合成工具(如Shake, Blender),苹果公司多节点图片处理以及显示工具Quartz Composer,为Mac OS录制脚本的Automator,用于科学和工程设计分析的Mathematica、Matlab、和LabVIEW,收集聚合互联网内容及API数据的Yahoo! Pipes和IFTTT,内容管理和展示工具wikis。特别值得一提的是HyperCard(1987-2000),迄今为止最有影响力的应用设计环境。我依然清晰的记得远在掌握编程的基础概念之前就能够构建栈及写HyperTalk代码。我做了一些自己觉得骄傲的事情,看到我们和父辈(在计算机出现之前接受的教育)做相同的事情。如果你错过了,请读一读reminiscence。超链接, 互联网, wikis,都继承于HyperCard,LiveCode也是其中一个分支。

因此我们有应用于数学的分析及计算工具,糟糕的用户界面设计器,以及用于游戏、图形、黑客的特定领域工具。下一代的能够让程序员和非程序员都不用写代码就能完成应用功能的产品应该快速的增长,他们不帮你写代码,只是使得写代码不再必要。我希望这样的工具赶快出现,完成那些现在用编写代码方式实现的功能,让大家都能够构建各种有用、高质量的应用。特别地,我们将达到一个更高的境界,这些工具有自我改进功能,非程序员可以用工具构建出新的工具,从而构建更多的应用,包括更出色的工具。

那些六位数的工程师并不认为把Photoshop作品与一些指令合起来构建一个可用的用户界面是一件浪费时间的事情,从这可以看出解决此类问题有很重要的意义。如果你碰巧是一个程序员且我的言论让你感觉不快,请想想如果你不再需要花一半的时间去把PSD转化为HTML,你将能够创造多少更多的价值。是的,我知道前端开发并不容易,它确实很复杂。但是绝大多数的复杂性都是由我们所使用的工具引起的,而这些工具并不是解决问题所必需的。高深的软件工程技能和晦涩难懂的业务知识显得如此重要,那是因为构建一个用户界面需要几千行的代码。如果有一天不再需要那么麻烦,你就可以把你的聪明才智用到更有意义的事情上面。

以前那些尝试帮助非程序员写代码的项目大多都不成功,尤其是通用型的那种。感谢现在正使用我们的界面并提出改进建议的数十亿的用户,最近从他们那里我们学习到了很多关于用户界面的东西。开发创建型工具的挑战在于提供用户一个功能强大的界面但又不能复杂得让用户不知所措。然而在任何领域都有那么一些专家在攻克不可能与简单之间的壁垒,就像工具能够让曾经要求专业知识和技能的人才能完成的事情变得普通人也能够处理一样。我们见证了业余的音乐和视频在数量和质量上的爆发式增长,这都得益于生产音乐和视频的工具变得如此的好,如此的简单,如此的便宜。随着我们设计复杂业务界面的能力提高,我们将构建出更好更简单的可以让非程序员也能设计和实现更多软件的工具,我对此表示乐观。在这个过程中,有些人可能成为发展的奠基者,但更多的人只需要使用工具来帮他们完成工作。

程序员总是倾向于为程序员开发工具。为拥有较高专业技能的用户开发工具确实是件更容易的事情。但是非程序员能够使用的工具也能够为程序员提供帮助。减少对驾驭计算的认知压力将有利于程序员腾出更多的时间和精力去更快地解决更多的复杂问题。像虚拟世界里的成功员工一样,能够处理一些份外之事。我们依然需要程序员,经验丰富的工程师以及充满创造力的问题建模、算法和数据结构设计、难关攻克、流程管理相关的实践者。但他们会像今天的农民一样,只占总人口的一小部分,足以支撑全民的食物供给。

一个人人会编程的未来固然是好的,但现在代码只是驾驭计算的一个方法而已。当我们的技术达到每个人都拥有用来思考和创造的工具并且很少需要编码的时候,我们将能更好去攻克一些社会性的难题。程序员们现在就可以去构建那个技术了。

教会更多的人写代码是伟大的进步,但一个很少需要写代码的未来会更好。


英文原文链接:http://alexn.id.au/2013/10/30/the-end-of-coding/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
课程安排,暂定,有可能会实时修改 编程语言,VC++6.0 工具主要为(OD1.1,CE5.4) 预计平均3天左右更新一课 大家好,我是郁金香老师:QQ150330575 欢迎大家参加梅州技术 VC++外挂编程VIP培训班。 在接下来的一段时间将由我和大家一起学习游戏外挂的分析,制作。 课程分四个大章节 初级篇,中级篇,进阶篇,高级篇 初级篇内容:编写一个完整的,简单的外挂 C++的数据类型:Byte,Word,DWORD,int,float API函数的调mouse_event,GetWindowRect,SetCursorPos,FindWindow,SendMessage) CE5.4工具的使用方法 中级篇内容:调试工具的使用技巧,功能CALL的概念 调试工具OD1.1的使用技巧(如硬件断点,条件断点,内存断点。 常用汇编指令与对应高级语言的转换。 游戏功能CALL概念 找第一个功能CALL 外挂框架的构建(通用) 进阶篇内容:分析游戏内部数据,分析常用功能CALL 游戏数据实践找各种功能CALL(如打怪,选怪,物品使用,技能栏之类)及相应的代码编写 高级篇内容:编写完整外挂 完成一个相对完整的外挂,实现 自动挂机,打怪,存放物品之类的功能 1 入门篇.以《QQ连连看为例》 1.1、一个最简单的外挂 1.1.1、游戏数据分析(SPY++) 1.1.1、游戏窗口数据分析(SPY++) a、取得窗口相对坐标 b、读出游戏窗口信息GetWindowRect c、移动鼠标指针SetCursorPos 1.1.2 用VC++写个最简单的外挂(实现游戏开局) a、鼠拟鼠标单击mouse_event b、鼠标指针移动还原 c、集成到startgame函数里 1.2、用CE查找棋盘数据 1.2.1、数据类型:Bit,Byte,Word,Dword 、用CE查找坐位号; 1.2.2、用CE查出4个棋盘基址; 1.3、用模拟技术编制外挂 1.3.1 模拟鼠标点击实现 交换棋子 1.3.2 把所有功能集成封装到 函数里 1.3.3 利用棋盘数据 ,模拟实现下棋功能 1.3.4 编写完整外挂,界面美化 1.4、游戏加速.去掉对动画效果.非HOOK 1.4.1:用OD找出 动画延时代码 1.4.2:写代码去掉延时,实现游戏加速 2 中级篇 以热血江湖为例 2.1、分析前的准备..CALL简介: 2.1.1、CALL调用示例分析.远程代码注入器 2.1.2、调试工具OD简介,血值,魔力值,坐标偏移; 2.1.3、游戏基址概念; 2.1.4、常用汇编指令详解 2.1.5、内联汇编编程实例 2.2、游戏分析利器OD(OllyDbg) 2.2.1、分析角色基址 2.2.2、找打坐CALL 2.2.3、读出角色当前血值 2.2.4、远程注入代码,调用打坐CALL; 2.2.5、实例分析:找技能栏对象数组基址+偏移: 2.2.6: 拦截F1-F8功能CALL 2.3、外挂框架构建 2.3.1、DLL动态链接库构建,与调用 2.3.2、API与回调函数 2.3.3、DLL中构建窗口 2.4、用OD分析游戏功能CALL.《热血江湖》为例:主要是找CALL 2.4.1、选怪CALL 2.4.2、找游戏物品背包的基址+偏移 2.4.3、 吃红药(补血)CALL 2.4.4、 吃蓝(补魔)CALL 2.4.5、 技能CALL1 2.4.6、技能CALL2 2.4.7、所有技能CALL 2.4.8、捡物CALL 2.4.9、所有动作CALL 3、进阶篇 主要讲功能CALL的参数分析 汇编浮点指令/浮点运行/浮点数整数转换/汇编里的指针 3.1、喊话功能 3.2、走路 3.3、 怪物过滤 3.3.1、怪物属性分析 3.3.2、怪物列表关键代码分析 3.3.3、怪物列表基址+大小 3.3.4、怪物列表编写代码 3.3.5、怪物过滤 3.4、 物品过滤 3.4.1、物品属性分析 3.4.2、物品列表关键代码分析 3.4.3、找出物品列表基址+偏移 3.4.4、物品过滤(编程读出物品列表数据) 3.5、 组队相关 3.5.1、 玩家列表 3.5.2、 组队功能 3.5.3、 离队功能 3.6、购物/售物 3.6.1、与NPC对话框 3.6.2、打开购物/售物对话框 3.6.3、购物功能 3.6.4、售物功能 3.7、 摆摊.开店 a、开店CALL参数分析 b、写代码测试 4、高级篇 4.1、编写完整的外挂 4.2、游戏更新后的外挂更新 4.3、脚本功能 4.4、游戏多开实现 4.5、盗号的实现
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值