学习编程,以“上帝视角”创造和改变这个世界
喜欢游戏的朋友可能都知道外挂这东西,这是指和游戏一起运行、为了提升游戏体验的小程序。外挂一般分为两类:一是在游戏系统框架内简化玩家操作的辅助性外挂,提供如自动拾取、自动打怪、改键之类的功能;二是利用游戏漏洞营造不平等的作弊性外挂,提供如开图、加速、无敌之类的功能。
随着游戏行业的迅猛发展,现今很多网游都已经配备了原本由辅助性外挂提供的功能,辅助性外挂正在逐渐消亡,只剩下作弊性外挂和衍生的一系列黑色产业链,你懂得。
。
当我们说某个人“开挂”时,其实是在说他的表现(数量、速度、精确度……)明显超出正常的范畴。当原始土著人碰到使用着各种科技产品的现代人时,大概就是一种“**,这哥们开挂了吧?”的感觉。
要知道,身体并不强壮的人类之所以能征服地球,就是因为我们会创造并使用工具来突破生理的局限,做到原本不可能做到的事情。在即将到来的全信息时代,编程将是创造工具,甚至使用工具的主要方法。我们天天都在使用的软件和APP,不管是文字处理,K歌软件还是搜索引擎,都已经和我们的生活融为一体,成为我们生命的延伸。通过使用这些软件,我们可以不断突破自己经验和能力上的局限,我们随时都在给自己“开挂”。
然而大多数人都是在被动地等待别人来满足自己的需求。他们会使用通过朋友推荐、广告宣传等各种渠道推送给自己的软件,然后感慨一下:“哇,居然还可以这样!”他们只会使用已有软件提供的标准功能,而一些个性化的特殊需求就只能因为软件不支持放弃掉了。这就和穿衣服一样,大多数人只会买标准尺寸穿,如果这里紧那里松,这里长那里短,也就只能忍了。
还有少部分人会主动考虑如何去满足自己的特殊需求。他们会想:“如果有XXX功能就好了……”他们会主动去寻找能满足自己需求的软件,研究软件的个性化配置,或者给软件的开发者提功能建议。同样,追求个性的人可能会找裁缝为自己量身订做或者修改衣服,使其尽可能地适合自己。
只有极少数的人有能力自己去实现那些别人不能满足的需求。他们能在原有软件的基础上开发插件,对软件进行二次开发,甚至写出一个全新的软件。同样,追求完美的人可能会亲自设计衣服,并把一件衣服不停地改来改去,直到自己彻底满意为止。
如果说学好英语能为你的世界打开一扇门,让你拥有更多的选择的话;那么学好编程就能让你有机会以“上帝视角”来认识和改造这个世界,并拥有几乎无限的可能性。因为在现实中的一切最终都会被信息化,而你可以通过编程来对信息做任何形式的加工和处理,只要你想得到,就能做得到。
学习编程要培养深入的思维方式
每个人都应该学习编程,因为它将教会你如何思考。——苹果创始人 乔布斯
思考,是人之所以为人的行为,而编程是一种对人的思考进行再思考的行为。
我们不需要把每件事情想清楚,就可以在现实社会中生存。对某些从事机械性操作的职业来说,甚至完全不需要进行思考。然而在编程时,我们只有在想清楚之后,才能把程序写出来。在编写正确、高效、优雅的程序的同时,我们也在塑造自己的大脑,让它能思考得更清楚、运转得更高效。
编程要求我们客观地去思考事物的本质,将注意力放在事物本身,而不是事物与我们的关系上。
当古代的妇女在河边洗脏衣服时,她可能在想:“河水好冷啊……这衣服颜色真漂亮……我家孩子为啥这么调皮……”而当我们在为洗衣机设计程序时,只会想:“哦,这有一堆脏衣服需要洗”。其实很多原本困扰你许久的问题,只要跳出“我”的范畴,进行“忘我”的思考,就变得特别简单和容易解决。
编程是将人的想法“实体化”的过程,这要求我们进行更深入、更细致、更全面地思考。
为了实现一个需求,你必须对其原理和运转流程了解得十分透彻,否则就无法用编程语言精确地描述出来让机器去执行。在实体化的过程中,想法的结构缺陷和逻辑漏洞会自然凸显出来,你总会发现存在没有考虑到的可能性,以及需要进一步思考的细节。
编程要求我们能够对事物和流程进行各种维度上的拆分,并在不同的抽象层次上进行完整自洽的思考,这使我们有可能去解决那些规模无比庞大的问题。
通过在抽象层次上的划分,我们能做到在宏观上考虑整体的同时,也能在微观上考虑每个细节。经过合理拆分后的细粒度需求简单明了,更适合团队协作,其成果还可以在不同场景下进行复用。在一个成熟的软件或互联网公司,上千名工程师一起开发同一款产品是很常见的,而这种协作的规模除了行为艺术以外,几乎是不可想象的。
编程是不断解决问题的过程,也是不断完善解决问题的方法论的过程。
一个优秀的程序员总是解决问题的高手。在编程的各个阶段(需求定义、方案设计、编码实现、调试纠错……)中,都将面临无穷无尽的问题。这个问题要不要解决?什么时候解决?其根源是什么?需要考虑哪些方面?如何做取舍?有哪些方案可供选择?选择的原则是什么?……解决问题的方法论展开来讲可以写一本书了,且容我有时间另撰一文来表。
学习编程,在未来更好地生存
半个世纪以前,美国有70%的人口在农场工作;随着自动化耕种的大面积普及,现在只剩下不到1%。 ——凯文.凯利《必然》
从登陆月球到生产纳米机器人,我们已经通过设计并使用各种机器完成了人类原本不可能亲手做到的各种事情。迄今为止,人类从事的简单重复性的工作(如洗衣、耕种、制造等)已经几乎完全被机器接管,人类的工作方向已经转向对机器的研发和维护。而那些需要复杂知识和精密操作的工作(比如驾驶汽车、外科手术等)也正在被机器逐步接管。
洗衣机解放了家庭主妇们的双手,全自动流水线则解雇了工厂里的大部分工人。只有在一些正享受人口红利的发展中国家(比如中国和印度),由于技术引入成本比人工成本高,目前体力劳动者还有一些生存的空间。但技术的成本会不可阻挡地快速持续下降,而人口红利的窗口期将快速消失,拐点很快就会到来。
资本是具有意志的,且不为人性所改变。当产出的质量不变,而技术的成本显著低于人工成本时,几乎所有的体力劳动者都会失业。机器不知疲倦,不会抱怨,干得比人又快又好又省钱,人类怎么可能和机器竞争?
与此同时,人工智能正在将逐渐接管人类的简单重复性思考活动(如寻路、翻译等),人类只需要下达命令、制定原则和做出选择即可。人工智能甚至已经进入了那些被人们认为是“人之所以为人”的领域:写作、编曲、绘画……
Google的AlphaGo战胜李世石是一个里程碑式的事件,它证明了人工智能已经可以在人类最擅长的思考领域超越人类。现在最优秀的棋手都在向AI学习下棋,职业棋手和AI进行日常训练成了常态。纯机比纯人强,人机比纯机强,这早已是棋界的共识。
在《未来我们该学什么语言?》一文中,我曾畅想过未来可能出现的脑接口技术,以及与之配套的人机共用结构化语言。届时我们的大脑将直接接入互联网和人工智能,可以瞬间将需要的知识和信息下载到大脑中……我们将成为神一样的存在。但前提是你必须具备编程基础,才能享用这一革命性技术带来的成果。
我的英语很烂,能学会编程吗?
英语不是学习编程的瓶颈,关键在于理解其概念和原理,以及改变思维方式。虽然几乎所有编程语言的关键字都是英语,但常用的关键字也就那么几个,热门语言的相关书籍也都有译版。如果你愿意的话,甚至可以用中文来给程序里的变量、函数和类命名。正如只要你认得start / save / load / quit这几个单词,就能去玩英文游戏;只要会说sorry和how much,就能去国外旅游一样。
我已经工作好多年了,现在开始学还来得及吗?该从什么地方开始?
任何时候开始都不晚,当然越早越好。中国第一款杀毒软件KV300的作者王江民,就是38岁才开始学习编程的。
我们正身处一个只要愿意思考,就能改变世界的时代。那么你是愿意去改变世界,还是等待被世界改变呢?
在这里给大家分享一下,我是一名5年前端工程师,自己根据这几年从事前端的经验,整理一套系统的前端教程(基础+案例+工具),跟大家分享下我的成果,进群:731+771+211,群里不停更新最新的教程和学习方法,有想学习网络前端的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴可以加入学习。