要感谢去年混迹在steemit的日子,当时的我只是一个干了多年市场类工作,单纯想从区块链中捞一桶金的人,即便在上一家公司时,身边全都是程序员,我也从未敢想过有一天我会走上编程这条路。从未想到我会对程序有超越其他所有事情的兴趣,也没想到什么东西能重燃我学习的热情,但今天看来,这些从未敢想的却都成为了现实。
大概是去年七月份,大量的新人涌入steemit,我是其中一员,每天乐此不疲的写文章看文章,经常会看到@myfirst的文章,而他也勤快的给每一个新人的帖子点赞,所以对他很有好感。他会在文章中说起炒外汇的事,后来又说起自己开发交易程序的经历。作为每天盯盘的苦逼韭菜,我想如果我也能开发一个交易程序,岂不是再也不用盯盘到半夜?这么好的事真是应该说干就干,只是这程序在印象中是非常高深的事情,到底该从何处开始呢?查了些资料,又尝试读了几本python和c语言的初级教程,发现很简单,而今天回头看,那时是无知者无畏,如果拿起书本的第一天就有人告诉我后面这一年要经历什么,我一定立即就放弃了,这可能就是那些21天从入门到精通类书籍唯一的作用,给了人们自信。
这情况持续了一段时间,甚至在开发mt5交易程序的过程中都很顺利,一度让我以为自己就是天才,九月,我开发出了自己的mt5指标,十月拿出了基本的交易程序,至少那个指标还是挺完美的,因为我实现了缠论的多级别、线段、中枢、甚至背驰。虽然开发程序与盈利是两个世界的事,不过要感谢这段顺风顺水的经历,如果那时就被挫败,也就没有后来了。
由于没有系统的学习,我在编程上的知识储备都是割裂和片面的,所以当我想从mt5这单一的平台跳出,去开发一个python的用于炒币的交易程序时,我发现自己什么都不是。
事情总有几个重要的节点,如果第一个重要节点是初次尝试,第二个节点便是偶然的一次失眠,半睡半醒间在虚无的黑色幕布上,画出了一个加法器,当时我叫它加法器,其实只是半加器。什么原理呢?
二进制的计数方式是:00 01 10 11
如果让两个bit相加,应该如下
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0
当时我模糊的听说过,加法是电流通过与门、或门、非门特定组合得到的结果,与门代表着语言中的并且,或门代表语言中的或者,非门就是否,但这个神奇的过程到底是怎样的?
由于是加法器,输入假设是两根电线(a ,b),输出是一根电线(c)表示结果。
只要我创造的加法器实现上面列出的那个加法规则,无论我如何完成,那都是加法器。
我发现当希望得到1这个结果时,输入的a,b必须满足两个条件的筛选
1.a或b有一个是1,筛选掉a=0,b=0
2.a与b的结果是0 筛选掉a=1,b=1
所以我需要三个门,或门,与门,非门。非门要用在第二个条件上,使得结果0变为1。最终两个条件都输出1,这时再让它们通过一个与门,便得到了我要的结果。
虽然很简单,但对于当时的我却是巨大收获,这一是一否的逻辑,经过特定的变换,便能够衍生出数理,计算机将这两个领域联系在一起后,改变了世界,而我在明白这个道理后,再看程序有了另一个视角。
这样我独自半夜竟然画出了计算机最基本的原器件-半加器,这也确定了我今后的学习路线,无论什么理论,只用自己的方式重新推导,如果推导不出就再回到基础的学习,而后发现,计算机领域的知识虽然庞杂,但核心的理论都是简单而浅显,只不过在不断的高层抽象下,创造了天量的名词,使后来者轻易迷失,忘了最初的那些简单的理论基石。
最后送给看了这篇文章的朋友一个思考题,上面的图是SICP一书中的半加器,通过我的描述,我们知道S是最终的结果,c是进位。这里用到四个门电路,我当时还设计了另一种加法器,用到了两个与门,两个非门,一个或门,也能够得到希望的结果,如果喜欢思考,可以尝试设计设计这个电路图。