[心得][英文] 刷 LeetCode 练习命名

楼主: AmosYang (泛用人型编码器)   2020-11-08 12:25:54
# 刷 LeetCode 练习命名
过去几个月,《程式英文》把焦点放在“分享知识”;例如,变量名称样板、单字
使用情景、等等。对学习者来可说是“输入”的动作。
这次试个不同的方向,做了个实验,把焦点换到“演练技巧”,希望能帮助学习者
改善输入与输出的平衡。
* Google 文件 https://bit.ly/2GIyLtk
* GitHub 讨论区 https://bit.ly/321ResR
# 先说结论
* 实验内容:用 C# 刷 20 题“解题率最高、 Easy 等级”的 LeetCode
* 题目列表: https://github.com/EngTW/English-for-Programmers/issues/69
* 所有 20 题 LeetCode 英文题目(含提示)总共约 2841 字。
* 其中 2434 字 (86%) 包含在“高中英文 7000 字”内。
* 可还原成约 394 个单字原型;例如, am, are, is 的单字原型为 be 。
* 其中 285 个单字原型 (72%) 包含在“高中英文 7000 字”内。
* 所有 20 题 LeetCode 解答内“自订变量”用了约 119 英文字。
* 其中 105 字 (88%) 包含在“高中英文 7000 字”内。
* 可还原成约 44 个单字原型。
* 其中 36 个单字原型 (81%) 包含在“高中英文 7000 字”内。
以下是一些观察与心得。
# 堆叠( stack )字
在英文语法中,可以把多个字“堆叠( stack )”起来来表达意思,例如,程式
设计师熟知的 API: Application Programming Interface 。
这样的语法也可以应用在命名变量上,但要小心拿捏资讯量与复杂度的平衡;例如:
* 在有 1 个字的时候,例如, Name, 只有 1 种读法,没有问题。
* 在有 2 个字的时候,例如, ManagerName, 仍只有 1 种读法,没有问题。
* 在有 3 个字的时候,例如, StoreManagerName, 就有 2 种可能的读法要去辨别:
* StoreManager Name
* Store ManagerName
* 在有 4 个字的时候,例如, DollarStoreManagerName, 就有 (4-1)! = 6 种可
能的读法要去辨别。
* 在有 5 个字的时候,例如, CentralDollarStoreManagerName, 就有
(5-1)! = 24 种可能的读法要去辨别。
每多一个字的确会加入新的资讯,但也会提高阅读的困难度(复杂度超过工作记忆
区的容量,使得资讯变成了噪声)。
我个人经验是“用 3 个字以下的变量名称”,如果要用到超过 3 个字,或许可以
想想否是能用其它方法(程式码架构、型别、注解、规格书、等等)来提供读者理
解程式码所需的上下文脉络。
# 是什么( what )、为什么( why )
以下这个案例很有趣:
* https://github.com/EngTW/English-for-Programmers/issues/89
* https://leetcode.com/problems/sum-of-all-odd-length-subarrays/
程式码本身是在实作从题目要求推导出来的解答算式。
在这个案例中,我发现要描述“这个变量‘是什么’”并不难,难的是让读者了解
“为什么要有这个变量”。
最后我选择用注解的方式提示推导解答算式的方向,读者需要先了解解答算式,程
式码才会比较好懂。
相对之下,其它案例的变量的名称与实际使用情形多半可以说明该变量“是什么”
及“为什么”。
# 英文语法资料
## 位数
案例: https://github.com/EngTW/English-for-Programmers/issues/79
* 个位: ones place 或 units place
* 个位数: ones digit 或 units digit
* 十位: tens place
* 十位数: tens digit
* 十分位: tenths place
* 十分位数: tenths digit
参考资料
* https://en.wikipedia.org/wiki/Numerical_digit#Computation_of_place_values
## 上限、下限、包含、不含
案例: https://github.com/EngTW/English-for-Programmers/issues/88
* 上限: upper bound 或 majorant
* 下限: lower bound 或 minorant
* 包含: inclusive
* 不含: exclusive
* 参考资料
* https://en.wikipedia.org/wiki/Upper_and_lower_bounds
* https://www.lexico.com/en/definition/inclusive
* https://www.lexico.com/en/definition/exclusive
# 结语
* 因为是第一次进行这样的实验,所以选了 LeetCode 是 Easy 级解题率最高的
20 题。
* 从简单题目开始,容易掌控问题复杂度,适合新手学习者入门。
* 对进阶学习者来说, LeetCode 的程式架构变化少,学习效果可能有限。
* 题目定义明确,有共通的讨论基础。
* 就现今软件业求职面试文化来看,学习者投入“刷 LeetCode ”的成本容易回收。
* LeetCode 题目是以英文写成,也是练习英文的机会。
* 解答的首项要求是正确,再来是可读性,最后是效能(时间、空间)、程式码语
法的精练度。
读者如果有兴趣的话,可以 code review 一下这里列出来的 20 题 LeetCode 解
答,尤其是其“命名可读性”;或著,对 LeetCode 题目或解答中的任何英文用字
、语文解读有疑问的,也欢迎提出来讨论。
* https://github.com/EngTW/English-for-Programmers/issues/69
在此感谢所有参与讨论的网友 :)
作者: ucrxzero (RX-0)   2020-11-08 15:02:00
是说linux跟windows的命名浅规则也不同 这有考虑ㄇlinux:my_name Windows:MyName
作者: x246libra (楓)   2020-11-08 15:27:00
微软有这个浅规则?那为什么os大小写没区分,用git还需要另外设定
作者: ucrxzero (RX-0)   2020-11-08 15:47:00
while Microsoft have always used capital letters forthe functions and classes我本身没再写Windows但Linux平田丰的书前面讲规则有提到一些命名差别,只是想问楼主的讨论有没有包括这部分我也没用小乌龟还是git bash都用linux command下的所以你说的我也听不懂
作者: wulouise (在线上!=在电脑前)   2020-11-08 17:54:00
档案命名规则跟实作不一样很正常吧c#通常是camelCase, linux比较习惯 snake_case
作者: Bencrie   2020-11-08 20:30:00
潜规则
作者: CoNsTaR ((const *))   2020-11-08 21:02:00
这篇重点完全不在名称格式的 convention 上吧...
作者: ucrxzero (RX-0)   2020-11-08 21:15:00
问问而已
作者: x246libra (楓)   2020-11-09 07:29:00
作者: kangan987 (Jon.Snow)   2020-11-09 07:53:00
作者: Ouranos (å—¨)   2020-11-09 11:53:00
必推,谢谢分享!
作者: jasonwung (路人JJ)   2020-11-09 13:27:00
作者: y956403 (寻欢)   2020-11-09 13:47:00
作者: mirror0227 (镜子)   2020-11-09 14:08:00
作者: rei0 (安德列斯沙漏☆泪)   2020-11-10 13:00:00
作者: alimamado (alimamado)   2020-11-11 14:07:00
作者: Lhmstu (lhmstu)   2020-11-12 16:11:00
推推
作者: showgunLa (show_gun)   2020-11-21 08:56:00
推推
作者: billy8407 (suprmenode)   2020-11-21 17:09:00
推,命名很重要
作者: iwillbehere (FromNow321)   2020-12-01 17:13:00

Links booklink

Contact Us: admin [ a t ] ucptt.com