新语言学习

  用过的语言按时序算:c++、lua(粗浅脚本)、erlang、c#(unity)、lua、go。印象最深的是erlang,因为特别吃亏,嗯。

  那会连多线程、多进程都不怎么了解,虽然看了erlang的进程通信模型,mail_box、gen_server原理,但不理解什么时候要它们。还有递归为主的编码方式,也不大习惯。

  ……

  以上不是本是要说的重点:技术上的东西,时间够,多用用就熟络了,且项目组对新人也有足够的宽容度。

  更紧要的是那些“安全性”上的东西,尤其对已发布的项目而言。

  自己以往编码,把几乎全部精力放在把握“逻辑脉络”上,切换到新语言后连犯好几回错。一直在想为什么,以为细心、严谨方面的理由不够充分(当然确有些高手真的很细致,能考虑到方方面面~)。

  近半年后,某次看着项目里一片片的代码,大家写了那么多,忽然意识到:把业务逻辑写对并不是难事(写好另当别论),那么多人写了那么多……业务逻辑,理清之后在编码中算是比较粗枝大叶的了。可算人人都能写,效率差别而已,且这类逻辑上的错误、疏漏也更容易发现。据实际项目经历看来,外网损失极少是业务逻辑疏漏造成的。什么最多?边边角角的东西——临界值、空指针、参数检验、下标越界、析构回收不充分……这些家伙还比较难在测试中覆盖到,稍不留神就放出去了。

  知乎上见到一大神,职称:首席铲屎官。说了段非常精彩的评论,“所谓的出师其实就是把该犯的错误都犯一遍,有人出师快其实是他试错快。如果有人说他没有犯错误,只能说他还没学到家”。(PS:他把重构排为程序员的第一技能,再是代码设计、风格,English)

  还碰到客户端同事,自测试一个合作功能老报错,下狠心单步到c++底层,发现构造函数里指针没初始化。致电合作方开发者,沟通不是很顺畅,只听他爆了一句:“你在质疑我的专业性吗?”

  霸气十足,当场心动!

  很希望自己往后也有资格讲这样的话。

  调度回重点:各个语言都有些自己的坑,了解语法后第一该作死的就它们( ̄﹁ ̄)~

  比如c++的空指针,STL迭代器的实效,容器遍历it在某个分枝里木有++it,new/delete的恒久匹配,内存操作的越界防范,丢进函数算出个小标再访问数组……

  比如看到erlang的并发,就要想到ets里的数据是共享的,大伙都能读写,所以彼此交互时,得gen_server套一层;它函数的多分枝式递归写法,提供了新的死循环形式——同个函数分枝间无限蹦跶(~ ̄▽ ̄~) 啊哈

  作为动态语言,变量可匹配任意类型,许多函数的返回带有错误码,但无法从声明中看出。常常顺手一用就忘记判断了。尤其取数据接口,不似c++用指针作返回值,无脑判断空指针即可,形式统一(留个小心眼,所有Get、Find方法都是可能失败的,凡是此语义的函数,都检查返回值)。

  再比如lua的table引用传递,当参数传来传去,指不定哪哪改下,原始数据就变了,搞不好还是配置数据。一样有erlang动态语义,检查nil返回的问题……关键是不方便判定哪些函数要检查哇~

  c#,变量都是引用,连续使用闭包,触发回调时,很可能捕获的是同一value,上代码

for (int i = 1; i <= 7; ++i)
{
    EventDelegate.Add(uiBtn.onClick, () => SelectOne(i)); //回调时传入SelectOne的参数全是7
}

  了解c++11的Lambda表达式,知晓其有“[=]、[&]”两种捕获方式便可理解其原理。修补也就有了针对性:循环体内加一句“int idx = i”,重新生产变量给闭包即可。

  最近用的go,发现的一个大坑,range循环,值传递,比lua的ipair危险好多。尤其涉及状态改变时候(比如用框架代码中),循环体内的更改可能都是无效的,出了bug藏得还深( ̄^ ̄),跟同事商议后决定禁止用它了。

  最后:各个语言函数库的坑点,彼此差别很大,需额外关注,常用接口自己写代码试试边界情况,无论它多么简单。

时间: 2024-10-17 21:07:01

新语言学习的相关文章

零基础快速学习新语言的方法总结

"Do you want to spend the rest of your life selling sugared water or do you want a chance to change the world?"                                                                                                               -  Steve P.(aul) Jobs 学

学不动了!调查显示多数Java程序员不希望学习新语言

去年秋天,程序员熟知的 IDE 厂商 JetBrains 对超过 1500 名 Java 开发人员的学习模式和偏好进行了调查.让我们一起看看公布的调查结果里一些有趣的亮点吧. 首先是关于开发人员使用的 Java 版本,调查进行的时间点 Java 11 还没发布,对 JDK 8 的支持也还没停止.数据显示在当时,绝大多数受访者使用的都是 Java 8. 接下来,让我们看看 Java 开发人员第二常用的语言是什么.如下图所示,可以明显看到在 Java 语言之后,第二最常用的语言是 JavaScrip

Perl语言学习笔记 9 正则表达式处理文本

1.替换 s/PATTERN/REPLACE/; #返回是否替换成功的布尔值 可以使用捕获变量,如:s/(\w)/$1/ 匹配失败则不做任何处理 2.定界符 对于没有左右之分的定界符,重复三次即可,如:s///.s### 对于有左右之分的定界符,需使用两对,一对包含模式,一对包含替换字符串,这两对可以不一样,如:s{}{}.s[]{}.s<>[] 3.可选修饰符 /g可进行全局替换,替换所有匹配到的字符串,如:s/ / /g /s:使得 . 匹配所有字符 /i:大小写无关 4.绑定操作符 $f

[Golang][Mac]Go 语言学习资料记录

背景:最近的项目开发语言是GOlang 因此需要做一些简单了解和学习记录 又可以学习一下Google的新语言了,想想有些小激动哦~ 官方网站(需FQ才能打开,比如用蓝灯)https://golang.org/ 1. 下载安装:https://golang.org/ 2. 安装完毕后在Mac打开终端,配置环境变量以及创建目录 1 GOPATH=$HOME 2 echo $GOPATH 3 export PATH=$PATH:$(go env GOPATH)/bin 4 mkdir $HOME/go

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

关于c语言学习 谭浩强的书

2007-11-16 13:22:58|  分类: PROGRAMME |  标签: |举报 |字号大中小 订阅 广大有志于从事IT行业的同志们,在你们进入这一行之前千万请看这篇文章!太经典了!对你绝对有启发! 千万别买谭浩强和等级考试的书!!!!!! 整理别人的言论,请大家踊跃讨论!!!!!!!!!!!! 1:书皮上面有那么多的牛人题词,估计也许是自己的水平太低. 2:ANSI只给了两种方式:int main(void) {/*...*/}和 int main(int argc, char *

【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年本人C语言笔试难点进行梳理,希望能对今年应届毕业生的应聘有所帮助. 2013年10月18日更新-->    攻破C语言这个帖子更新到这里,我不仅仅是为了补充大学学生遗漏的知识,我更重要的是希望通过我的经验,你们实际项目中的C语言写得漂亮,写出属于你的风格.“朱兆祺STM32手记”(http://bb

PHP语言学习之html5的学习,一周总结

通过这周的html5的学习我整理了一下一些东西和一些总结 写代码的时候也开头都要对齐这样开起来很舒服,这些都是用到缩进键搞定的,比如<html></html>在一块写,要前后对齐,这样容易发现错误,而且看起来比较清晰 写代码是还有英文和中文的标点符号的问题,这些都要是注意的,(这基本是我在学习的时候遇到的问题) 要掌握好重要的标签,这样能够更好的学习.... 开始学习html 5 什么是html5HTML是由W3C的维护的 HTML是大小写不敏感的,HTML与html是一样的 HT

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性