当前位置: 首页 > 科技观察

跨过编程入门门槛,从写“代码诗”开始

时间:2023-03-18 23:25:27 科技观察

对于很多人来说,学习写代码是一件很困难的事情。本文将通过编写有特色且富有诗意的代码来克服学习编码的最初困难。如果您是JavaScript新手,或者在学习编程的过程中遇到过困难,本文介绍的方法或许能帮到您。为什么学编程这么难?以下是人们对编程难学以及JavaScript(或任何编程语言)乏味的误解:晦涩难懂的代码令人望而生畏,实用函数毫无乐趣;代码仅供机器使用,人们无法与之交流或参与;代码不是语言,因为它的使用方式和形式与普通语言截然不同;一想到程序员就会想到邪恶的黑客或者黑客帝国成员的刻板印象,所以没有身份感。刚接触编程的开发人员需要以非常具体的方式查看代码,甚至以完全不同且高度合乎逻辑的方式思考。编程语言是如此严格,以至于对错误零容忍,单个字符可能会混淆机器与人类的理解并导致应用程序崩溃。在学习编程时,您应该将学习人类语言(以及学习新的人类语言时)的阅读和写作规则归零。但并不是所有的编程语言、文档或者网络上的视频教程都是为了“从人类语言到编程语言的转换”的思想而写的。当然,他们不必这样做。毕竟,编写代码的主要目的是告诉机器该做什么。为此,没有机会比较两种语言,因此人类语言(包括词汇和语法规则)对于学习编程语言似乎毫无用处。JavaScript语言中不存在“爱”这个词,也不存在“我爱你”这句话。机器(或浏览器)根本不懂爱。这种“闻所未闻”和“无从下手”的感觉可能令人生畏。编程初学者这就是本文的主题,利用您已经获得的人类语言知识,以更轻松、更艺术的方式将JavaScript学习为人类语言。让我用一个小例子来说明吧!一个有趣的事实是,一些编程语言实际上已经从一种编程语言切换到另一种编程语言。这就是为什么掌握多种编程语言要容易得多——只需学习一种。一个小例子例如,在许多情况下,为了运行JavaScript代码,您需要准备好与HTML元素交互的“文档”(基本上是用户每次访问时下载的网站)。在普通的JavaScript语言中,人们可能会偶然发现以下内容。(function(){//Yourcodegoeshere})();或者有时候像这样:if(document.readyState==='complete'){//Yourcodegoeshere}一段代码(可能需要一些想象力),可以这样理解:满足某个必要条件后,才能进行后续步骤只有通过观察。想象这样一个场景:onceUponATime(function(){//Yourcode(story)goeshere})像“从前”(“Onceuponatime”)这样的内容连小孩子都能理解。这种内容与开发人员对话(通过唤起他们的童年记忆),同时在理论上支持开发。这就是“将人类语言转化为编码语言”的思想。关于“功能”的快速说明:功能基本上是在调用之前处于休眠状态的技能。“阅读”是functionread(){...}}的一项技能。当你想读一些东西的时候,你可以这样写:read(),函数只有在被调用的时候才会被调用。还有一种“匿名函数”,即function(){...}(没有名字,就像上面的代码片段一样),它基本上是一种“一次性临时操作”,甚至不是技能,比如“按下按钮”。扭转局面:从信息到基础要使这个想法更进一步,请将上面的原因和误解颠倒过来:一首用JavaScript编写的小诗。为人类而写,关于两个人之间的爱。//Loveatfirstsightif(me.getDistanceTo(you.position)<200){me.setFeelings({inLove:true,});}没有功能,目前不适合机器,只是方便人们阅读和理解.如果你能看懂这首诗,你实际上就看懂了一段JavaScript代码,说不定你会把它比作英文。现在你可能会问自己:我明白了,但为什么要这样写呢?这种语言背后的规则(语法)是什么?“我”在技术层面上意味着什么?为什么这段代码看起来像英文?规则、词汇和变量学习编程语言时最重要的事情之一就是理解变量的概念。每种人类语言都有其规则(语法)和大量词汇(含义已知)。显然,只有先学会了这两点,才能说出语言。JavaScript与许多其他编程语言一样,有一套规则(例如,在单词之间放置什么“.”或如何编写“if”语句)和词汇表(if、document、window、Event等)。这些关键字由JavaScript(和浏览器)拥有(或“预定义”),并且每个关键字都有其特定用途。之前说过,英文好像没有机会比较词句,因为JavaScript中没有对应的词句。这就是引入变量概念的原因,开发人员可以(甚至必须)定义变量,以便机器和开发人员理解某些东西代表什么。变量可以采用多种形式(因此得名):它们可以是单词和字母的字符串(字符串)、数字、操作(函数),甚至是集合(数组),等等。在所有人类语言中,可能有一个表示“爱”的词,您可能知道它的意思,但不确定,因为它太主观了。但不管怎么说,还是有一个词可以形容的。但是在JavaScript中,如果不定义“爱”,就没有对应的表达方式。至于形式,完全由你决定。varlove={color:'red',duration:365,loveTarget:'cats',};//一个简单的变量表达式,//whereloveisanobject"{...}",athing//withsomeproperties(color,duration,loveTarget).constlove2={color:'purple',duration:'forever',loveTarget:'dogs',};//也是变量表达式,wherelove2(aconstant),//不能被重新定义/完全覆盖://love2=undefined;//=>willnotwork//(“undefined"isapre-definedjavascriptkeyword,//basicallysaying"hasnovalue")将JavaScript中预定义的内容(JavaScript规则和词汇表)与开发人员实际定制的内容(也称为“应用程序逻辑”或“业务逻辑”)区分开来。重要的。回到上面写的那首诗://Loveatfirstsightif(me.getDistanceTo(you.position)<200){me.setFeelings({inLove:true,});}这些表达式来自以下JavaScript词汇规则集:if(…){...}//ifstatement:when...ismet,dothingsin{...}{inLove:true,}//一个带有一些信息的“对象”,一些世界中的东西。//可以包含其他信息和“技能”(functions).//"inLove"isacustomproperty,//"true"是在javascript中预定义的,(意思是:"yes")//和"inLove"的值..//neededtoaccessanoobjectsproperty"myname:me.name"getDistanceTo()//表达式“调用”函数(“技能”)。//getDistanceTo是自定义的(非JavaScript)和函数,//因此它可以在“()”之后执行/调用。//有时您可以在这些括号中传递参数(如“位置”)//改变功能的结果。这些是变量,可以自定义它们的名称和行为。me//一个对象,世界上的某物你//一个对象,世界上的某物位置//关于“你”的信息,由“。”访问。getDistanceTo//我的技能,通过“。”访问getDistanceTo()//技能,使用javascript语法:doit。getDistanceTo(position)//相同,但使用“position”.setFeelings//anotherskillofme,通过“.”setFeelings({inLove:true});//theskill,withsomeinstructions(anobject)访问。假设这是一首人类可读的诗,您可能已经理解它,并且可能还看到了您需要遵循的JavaScript语言规则与您需要提出的(变量)之间的区别。但是机器会做什么呢?如果机器(浏览器)阅读了这首诗,它就会将其识别为错误。机器需要“我”和“你”的定义,因为它试图访问其属性(通过me.getDistanceTo()中的“.”)。有了上面提到的区别,你实际上可以为计算机设计“我”和“你”来执行或阅读这首诗,就像这样://这表明being(me/you)的定义可能看起来像varme={position:{x:0,y:0}//somecoordinates,maybegetDistanceTo:function(position){//calculatethedistance,relativetoownposition},setFeelings:function(feelings){//handlethosefeelings...}}varyou={position:{x:0,y:0}//somecoordinates,maybe}//thepoemitselfif(me.getDistanceTo(you.position)<200){me.setFeelings({inLove:true,});}那么这里发生了什么?为了让人理解,读一读用JavaScript写的一首JavaScript诗《语法》;理解消息后,区分规则、词汇和变量,以理解诗歌的结构(JavaScript语法和基础知识);通过这种区分后,其余的诗歌变量使用JavaScript规则设计,由机器(在浏览器中)运行。这是可以做到的,因为处理JavaScript就像处理英语一样。更大的例子:交互式代码诗LoveBits是一种代码学习或代码讲故事的体验。LoveBits:一个基于JavaScript的代码诗歌项目它试图通过以下方式让人们对JavaScript或代码感兴趣:将代码与读者可能熟悉的艺术形式相结合。故事情节与两位(矩形)有关;其中一位(blueBit)是一位浪漫主义者,为另一位(purpleBit)编写JavaScript情诗。当您启动LoveBits时,您可以选择其中一首情诗(用JavaScript代码编写)。每首诗都有一个代码片段,任何编程新手都能理解。该计划的唯一要求是英语知识。比如《一见钟情》(其实是LoveBits的一首诗)就讲述了这两位之间的故事,而在诗中,blueBit大致是这样说的,“如果我足够接近你的位置,我会‘定下我的感情’'到恋爱:真的。这些诗歌的特别之处在于,您可以通过单击下面的“播放”按钮来“运行”或“播放”它们。在“一见钟情”这首诗中,您看到一个蓝色和紫色的矩形和一个数字。正如你猜到的,这就是诗中提到的两个位,而blueBit下面的数字实际上是blueBit和purpleBit之间的距离。正如这首诗所暗示的,您可能希望通过缩短它们之间的距离来让blueBit爱上purpleBit。那怎么办呢?您可以与blueBit互动,将它拖来拖去,让它坠入爱河。但要小心,有时会有不止一种结果。实际上可以说程序员在这里变成了机器,但程序员是需要解释JavaScript代码并采取行动帮助两个数字生物坠入爱河的人。未来何去何从?如果您是一名苦苦挣扎的开发人员,请尝试将JavaScript视为一种人类语言,只知道需要首先执行的代码片段,而无需考虑它们最终如何运行。进一步的建议:始终喜欢将规则、词汇表和变量组合在一起以形成应用程序逻辑的整个应用程序;应用程序逻辑讲述的故事将帮助您填补上述代码示例中的空白。代码库和实用程序(如lodash)只能提供新的词汇表,以帮助您阅读和理解JavaScript代码;检查现有代码并尝试将其分解为具有反映其功能的名称的小函数。编写对人和机器都适用的代码,编写可以像句子一样阅读的代码,并在需要的地方加上注释。思考:您将如何用人类语言(对另一个开发人员)表达这段代码?结论当您将代码视为人类语言而不是外星人发明的东西时,学习代码会更容易。学会区分语言属性(内置)和应用程序逻辑的变量/自定义代码是至关重要的。了解应用程序逻辑可以让您在不了解语言特性的情况下进行改进和更改。在学习基础知识之前,你需要明白:理解了任何一个代码片段的信息之后,JavaScript的基础知识自然就掌握了。你听过多少次有人说:“我能读懂这门语言,但我还不会说。”这是一个自然过程,可以而且很可能适用于人类和编码语言的学习。另外,请记住,代码具有明确的功能目的,但情况并非总是如此。在诗歌甚至歌曲(说到这里,有人对JavaScript歌曲感兴趣吗?)之前,甚至人类语言也曾经纯粹满足功能需求,这些语言形式以非常不同的方式将人们联系起来。这同样适用于编程语言。