外部依赖项很多未定义标识符_从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一)

f613ed27bf5fd2c5de4a79e511b3772b.png

日本作者平山尚在前言归结了本书的三点独特之处:

  • 从始至终只编写一个程序(俄罗斯方块游戏)
  • 使用专门的工具
  • 绝对面向首次接触程序的人群

第一点,优势是一个项目主体贯穿全书,但同时很考验编排顺序,以及技术覆盖范围。个人很赞同”想要体会到一件事物的必要性,需要了解没有它时的窘境才行“和”我会在你感到走投无路时才介绍需要的工具“的教学思路。

第二点,作者”提供了专门的工具。无论是编程语言、开发环境,还是具体的用语和概念,我都为新手的你准备好了“。使用一个专用的编程语言环境的缺点不言而喻,但作者的这段话有当头棒喝之感:

说的好听些,你不需要查阅其他资料。说得不好听些,你想查也查不到。既学不到查阅资料的技术,也无法通过查阅资料学习他人优秀的解决方法。我已将这种学习方式完全排除在外了。
因为我认为这对你是很有必要的。

第三点,一是不依靠其他书籍,这与第二点有关,因为它不需依赖任何市面上的编程语言工具。二是尽量降低了入门门槛,包括:

  • 不需了解编程术语(”变量“、”函数“、”loop“、”分支“这些都不会在书中出现!?)
  • 也不需要懂英语。作者有个脚注,颇有共鸣:
等到真的需要英语时再学也不迟。很多人都有”先学好,已备不时之需“的心态,但我并不认同。在没有感到必要性时,我们是不会认真学习的。
  • 不需小学算术之外的数学

相应的缺点就是,教学过程比较啰嗦,另外最终做出的程序规模较小。作者作了这个比喻:

人人都能爬上去的缓坡,其高度肯定不会很高。

下面,就看看这本作者自称”到 2 层需要走 100 米缓坡“一般的书,特别是其中的中文例程(辛苦译者,将原本的日语例程全部翻译为中文了(包括关键字、和标识符。为什么日文的例程就要翻译标识符,而其他英文书籍的例程就不翻译标识符呢?)。

开门见山

作者在第一章,全书第十页就贴出了最后成品的完整代码,不到 180 行:

38da8841b3854cf59b2d8ee4b7b7a5f9.png

3f11fde874de0ad8e4a8307387af19a7.png

第一感觉是,满眼都是“存储区”。细一看,主程序(无限循环)中的”存储区“还是出现较少,业务逻辑相对较集中。大多数牵涉存储区的”底层操作“被封装在”堆积“”方块“”挪动“等等方法中。但由于项目本身是算法较密集的游戏(超级玛丽/僵尸大战之类的应该就会有更多的日常词汇),个人觉得母语的优势尚未充分体现

第二,有些方法命名值得推敲。比如”将 6 个数字存入存储区“,鉴于方法本身代码的功能一目了然,更加简洁的命名比如”存六个数“就足矣。还有”事先保存好各个类型“,目测是初始化几种方块组合形状。那么”初始化形状“之类似乎更加可读。

第三,其中不少大数字常量,如 999999,990000,6000,50006 等等,如果有常量名称,应该会更可读。

第四,代码中不少重复代码似乎可以用循环代替,比如这段:

堆积(存储区[0], 存储区[1])
堆积(存储区[2], 存储区[3])
堆积(存储区[4], 存储区[5])
堆积(存储区[6], 存储区[7])

应该可以改成(如果语言支持):

序号 -> 0
只要 序号 < 4堆积(存储区[序号 * 2], 存储区[序号 * 2 + 1])

”移动方块“方法中的两块代码应该也可以类似处理。

初感

如作者前言所说,为教学自制基于母语的编程语言工具的一个优势,就是可以使得所有术语都用母语表达。也可以根据作者的喜好设计不同层次(比如存储区[65050] -> 999999就能将视图中某个位置的点变为白色)。

同时,这个编程语言的特性直接影响了代码写作风格。在代码可读性方面,一个大风险就是写出的代码不如饱经实践检验的市面常用编程语言来的好读。

也许,在语法设计方面有明显贴近母语的优势的话,可以增色一些,但那样对语言设计和实现又是一个不小的挑战。

提前的结语

下面摘自书末的结语,虽然本系列还未结束(也许?),但提早了解作者的初衷也不错。因此借用在此:

在我们看来,读书写字稀松平常。但是在有的时代就不是这样...
我希望编程也能变得这样,掌握它们的人恒河沙数,没有任何特别之处...为什么现状不是这样呢?
常听人说”适合的人不教都能上手,不适合的人再教也没用”...难道没有什么解决办法吗?
我便开发了 Sunaba【本书中使用的编程工具,日语意义是”沙地“】,并将其带到了课堂上。然后我发现,“再教也没有用”这种话根本就是骗人的。....“程序是什么”“应该如何思考”这些本质上的内容不是教不会的。

后续:

从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——抽象层次(二)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt: QTableView如何获取(行)选中、行切换信息

**情景&#xff1a;**做一个信息表格&#xff0c;需要多个Model切换&#xff0c;必须用QTableView&#xff0c;而不能用QTableWidget&#xff0c;因为后者不可以进行setModel()。 方案&#xff1a; QTableView和选择有关的的信号有&#xff1a; void activated(const QModelI…

动态网站的技术路线_3个好玩实用小网站!闲暇时间不妨打开看看

感谢你关注“最佳应用”每篇文章解决某行业或某人群的一个痛点第八十四期原创文章By&#xff1a;小佳昨天刷抖音听了一首很有魔性的歌曲&#xff0c;结果分享到社交平台&#xff0c;没想到被很多键盘侠喷了&#xff0c;留言全是批判“审美有毒”&#xff0c;这种垃圾歌曲能火就…

【转】1.DThread、ThreadPool、Task、Parallel的基本用法、区别以及弊端

多线程的操作在程序中也是比较常见的&#xff0c;比如开启一个线程执行一些比较耗时的操作(IO操作)&#xff0c;而主线程继续执行当前操作&#xff0c;不会造成主线程阻塞。线程又分为前台线程和后台线程&#xff0c;区别是&#xff1a;整个程序必须要运行完前台线程才会退出&a…

vue传值到后端_Vue.js快速入门就从这儿开始特别是后端程序员

自从前后端分离开始变成主流后&#xff0c;曾经的Jsp、FreeMarker、Velocity、Thymeleaf貌似慢慢被遗忘了&#xff0c;取而代之的是兴起的前端主流语言&#xff0c;比如Vue、React和AngularJS介绍VueVue其实是借鉴了 Angular&#xff0c;目前GitHubstar数最多&#xff0c;建议后…

unity3d collider自动调整大小_自动网格组合建模工具Unity游戏素材资源

分享最新的CG教程与素材资讯&#xff01;人人素材RRCG-专业的CG艺术交流网站点击上方蓝字关注人人素材本游戏资料是自动网格组合建模工具Unity游戏素材资源&#xff0c;大小&#xff1a;735 KB &#xff0c;格式&#xff1a;unitypackage&#xff0c;使用软件&#xff1a;unity…

【转】2.2[译]async/await中阻塞死锁

这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题&#xff0c;以及如何避免出现这种死锁。内容主要是从作者Stephen Cleary的两篇博文中翻译过来. 原文1&#xff1a;DontBlock on Async Code 原文2&#xff1a;why the AspNetSynchronizationContext was remove…

Java运用自身排序算法将数组或容器进行随机打乱。

基本思路&#xff1a;数组调用Arrays.sort(T[] a,Comparator<? super T> c),对Comparator进行重写。运用Random类 &#xff0c;实现对数字的随机排序。 对数字进行随机排序。代码如下&#xff1a; import java.util.Arrays; import java.util.Comparator; import java…

文本编码解释

一张图解释字符集 举例说明什么是编码&#xff1a; UTF-8编码 等长编码对于英文来说浪费空间&#xff0c;所以出现了变长编码UTF系列&#xff0c;如UTF8&#xff0c;UTF16&#xff0c;UTF32。 UTF8的编码对象是整个Unicode字符集&#xff0c;所以可以表示所有国家的语言而不会…

tkinter label_tkinter做一个简易提词板

我们看综艺的时候&#xff0c;经常能看到现场的提词板。今天我们就用tkinter做一个简单的提词板&#xff0c;用到了tkinter的label来动态显示文字。我们就以最近火爆的《想见你》这首歌为例&#xff0c;按照歌词时间来显示歌词。首先我们要准备好歌词文件&#xff0c;一般是lrc…

web前后端 http转https

1.转换前准备 http转https需要一个证书、本文已ssl证书举例&#xff0c;只有认证的证书才能被认可。阿里云可以申请免费的证书&#xff0c; 但是生成证书需要域名。且域名要绑定ip。故ssl申请前需要域名。可上阿里云购买。 证书申请教程:证书申请 绑定ip:如果没有服务器、也…

Qt开发技巧:编写.pro文件,在构建流程中加入命令行的方法

1、在项目构建前执行命令 在项目构建前执行命令cmd存在问题system(cmd)存在执行多次的问题&#xff0c;可以参考message函数的QMake Manual说明 优化后的表达式如下&#xff0c;这样此命令只会在构建前执行一次&#xff1a; !build_pass:system(cmd) 2、在链接前后执行&#x…

c++清空输入缓冲区_干货 | C++的输入输出方法

C和C并没有将输入与输出实现在语言中&#xff0c;而是在类库中实现。作为C的超集&#xff0c;C继承了C的输入输出方法。同时将输入与输出视为字流。流充当了程序和流源流目标之间的桥梁。本文将介绍C的输入输出方式&#xff0c;并且浅谈C与C均有的输入输出方式对C有一定学习的同…

Qt应用程序发布:Qt应用程序添加版本版权生产商等信息

设置方法 在QMake Manual手册中搜索关于QMAKE_TARGET内容可以看到有如下QMake变量&#xff1a; QMAKE_TARGET_COMPANY&#xff1a;用于指定生产商QMAKE_TARGET_DESCRIPTION&#xff1a;用于描述应用程序QMAKE_TARGET_COPYRIGHT&#xff1a;用于声明版权QMAKE_TARGET_PRODUCT&…

stl源码剖析_STL源码剖析 阅读笔记(二)allocator

一、空间分配器 allocator从使用上看&#xff0c;空间分配在任何语言的任何组件都不需要我们去过多关心&#xff0c;因为语言、组件的底层肯定都比较完整的做了这件事情。从实现上看&#xff0c;学习 allocator 的原理在源码学习中是首当其冲。因为没有空间分配&#xff0c;则无…

easyexcel将对象处理为多列,自增序列

概述 主要记录在开发中遇到的问题&#xff1a;使用easyexcel导出excel&#xff0c;一般数据都是保存在数据库中&#xff0c;如果查询返回的是一个实体类&#xff0c;且里面有嵌套的实体类对象&#xff0c;这时导出的时候要先对查询出的数据进行业务逻辑处理&#xff0c;让它符…

python做excel表格代码_python操作excel表格

我们在写测试用例的时候&#xff0c;是创建一个表格.xlsx&#xff0c;然后把各种条件加到这张表格中去&#xff0c;所以&#xff0c;如何对excel表格操作&#xff0c;是相当重要的一环&#xff0c;那么&#xff0c;接下来&#xff0c;这篇博客就直接教会大家如何通过python去处…

Windows 查看程序ip地址(面对小白)

前言&#xff1a;Windows自带资源管理器可以查看程序的IP地址。下面以微信通话为例&#xff0c;详细步骤如下(面向小白)&#xff1a; 打开任务管理器 打开方法(以下方法都可以)&#xff1a; 键盘按住 【ctrl】 【alt】 【delete】 ,选择【任务管理器】Windows 10 以下系统…

【转】C#中相同不同程序集存在相同的命名空间的时候的冲突解决办法

快速解决办法描述描述: 1.将相同命名空间的不同程序集分别进行取别名&#xff1a;【具体操作:右击相同程序的引用&#xff0c;在别名上修改&#xff0c;默认的为global】。 2.调用&#xff1a;在所在调用文件里面最前面写 extern alias 别名&#xff0c;然后using 别名.Names…

chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver

摄影&#xff1a;产品经理产品经理的三文鱼炒饭在《一日一技&#xff1a;如何正确移除Selenium中window.navigator.webdriver的值》一文中&#xff0c;我们介绍了在当时能够正确从Selenium启动的Chrome浏览器中移除window.navigator.webdriver的方法。后来时过境迁&#xff0c;…

【转】2.3async中必须始终返回Task(@Ron.liang)

Asp.Net Core 轻松学-经常使用异步的你,可能需要看看这个文章 目录 前言1. 异常的发生来得太突然2. 问题所在3. 问题的解决方案前言 事情的起因是由于一段简单的数据库连接代码引起&#xff0c;这段代码从语法上看&#xff0c;是没有任何问题&#xff1b;但是就是莫名其妙的报…