序
《元纪》上记载,在伊甸园的中央有两棵树,一棵为生命树,一棵为真值树。创世神对他的子民说,园子里各样的果子都可以吃,除了真值树上的果子不可吃。但亚当夏娃受了蛇的诱惑,吃了真值果,从此他们两人人知晓了二进制,离开伊甸园后过上了幸福快乐的程序猿生活。
“这条蛇怎么一动不动啊?”夏娃小心翼翼地躲在亚当身后
“蛇是冷血动物,启动比较慢!”亚当做着解释。
.....一刻钟后,蛇醒了过来。
“你是谁?为何出现在这里?”亚当的语气有些不满,估计这蛇刚才惊吓到了夏娃。
“哦,你好,我的名字是VisualSnake,觉得长可以简称VS。”
“这么奇怪的名字。”
“这是创世神起的,我可是他手底下最得意的IDE。”
“想起来了,我在前年见过你。”夏娃想起了什么。
“哦?那不是我,蛇每年都要蜕皮换代的!”VS回答。
蛇微笑着继续说,
“...我想你见到的应该是VS2013。”
图6.1 创世神的警告
第零章 如何成为一名优秀的程序猿
“为什么警告有256条?”夏娃有些疑惑
“多于256条就会引发SnakeOverFlow,我是不会吃饱了撑着的。”VS想摊一下双手的,意识到自己没有手只好摇一摇尾巴。
“既然警告这么多次,那我们就不吃了“
“别啊,一名合格的程序猿从来都是无视警告,他只关心错误!“
“啊?“
“开玩笑的,优秀是由好的习惯、辛勤劳动、惊人毅力...共同促成,好了,我就不穷举了。”
“那我们要怎么做呢?”亚当问了关键的一句。
“你们将在我的帮助下完成一个项目,只有实践才能真正出真知..."
"同时在这过程中我将教会你们优秀程序猿进行程序开发的必备准则。”
“所以一款优秀的IDE也是很重要的,比如我...”VS絮絮叨叨个没完。
第一章 所有的原则或者原理都有其适用范围。
“始终记住...无论它们是如何正确,都只能在特定场合发挥作用”
“你们要做的程序是创世神留下来的静态树,现在你们要进一步完善它。”
“首先给你们的项目起个名称,默认是MyFirstProject。”
“不如叫HelloWorld吧。”亚当突然冒出一句。
“小伙子,你很有天赋啊!”
图6.2 创世神的水墨静态树
“这是一颗静态树,现在你们要设计算法让它可以生长。”
第二章 从简单开始,逐步求精
“无论是学习过程还是程序开发,这点都适用。”
图6.3 动态树-生长
只要给每个树干设定一个成长系数,树干的长度和宽度都和这个系数相关。
----
“逐步求精方法就如同这树木成长,由简到繁,符合大自然的规律,哈哈...”VS似乎喜欢这种淳淳教诲的感觉。
第三章 尽量避免重复错误,及时承认错误并从失败中总结教训
“夏娃小姐,你有一条错误”
“什么?错误?没有啊”
“是的,你有一条错误信息”
“我不听我不听我不听。”
图6.4 动态树-晃动优化
假设风向水平,那么越垂直的树枝抖动越厉害。(旋转的角度乘以树枝方向向量与风向向量的夹角正弦值即可)
----
“前进道路中的错误时不可预料的,走错了方向就要及时纠正,错误同正确一样都是宝贵的经验!”
“那警告呢?”夏娃对刚才VS报错有些耿耿于怀。
“......警告也要尽量避免,毕竟事物很难完美。”VS越教越自信了。
第四章 如果某个方法奏效,则在今后的工作中善用这个方法
“总结过去是为了更好的未来。”
图6.5 动态树-飞舞
同前面的生长、晃动结合,并且每个树枝绕当前结点实际坐标旋转。
----
“掌握了简单的方法,以后就可以应用到复杂的问题中去,这也是为什么前面要说的从简单开始。”
“那大道至简怎么解释?”一直默默写代码的亚当终于说话了。
“一个完美的公式、统一的定理,虽然在在形式上是简单的,但它的内涵却是复杂的,这点毋庸置疑。”VS感觉自己化身一位老学究,没有人能够质疑他的话。
第五章 不要固执己见,要全面考虑各个方案的优缺点
“时代变迁太快,技术更迭更是如此,时刻保持灵活和开放的心态。”
“新旧事物都有好有坏,远离偏见,没有最好只有最适合的。”
图6.6 树枝贴图/画线
图6.7 树-直线树枝
图6.8 树-贴图树枝
树枝用贴图画效果会好看很多。
----
“你为什么要告诉我们这些?”
“创世神离开伊甸园的时候,就推出了VS的'伊甸社区版',对你们个人是免费的。”
“这不能成为理由。”
“理由不重要,难道你们就想一直待在这里?”VS吐了下蛇信子,反问道。
后记
后世。
“神父,圣母夏娃和亚当初为什么选择离开伊甸园啊?”
“他们要去找寻创世神的足迹呀!”
“父亲,圣母夏娃和亚当初为什么选择离开伊甸园啊?”
“他们不想两人的爱情结晶也被困在一个小地方呀!”
“老师,......啊?”
“啊什么啊,一天不好好学习,就知道胡思乱想!”
.......
“夏娃,......啊?”
“世界那么大,我想去看看吖!”
预知前情,请看上回分解
作者注:这个系列写到此处已经六篇了,每篇都有个不伦不类的故事,其实都是想到哪写哪,包括每篇涉及的程序,从自然树图像的更新就可以看出来,接下来我会做个目录导航并分享一些相关的资源。但故事还是有个大纲,至少目前为止时间线上是连贯的,一些人说他们看不懂,我的初衷很简单,古代的神话故事和编程文化元素的碰撞或许是非常有趣?当然,还是想写成技术型博客的,源码有些差劲所以很少往上来贴,人又比较懒。哈哈,新年新气象,年后一定找时间整理并开源。提前预祝大家新年快乐!