Copy the existing codes should be the best way of programming. This is the most important lesson a programmer should learn.
BY use pcs(astropeak’s code snippets), copy is easy!! When I want to writting codes that detect the src blocks’s mode in an org file, I found related codes in ‘evil-nerd-commenter’, so I search ‘org-mode’ there, and found the codes. Then I create a snippet for that codes, and use in my project. very #GOOD PRACTICE#.
Ideas comes when implementing perl module Aspk::Tree
.
- new. create an object
my $n = Aspk::Tree->new({data=>"aaaa"});
- _prop. set a property value or get a property.
Usage:
# set property value $self->_prop(data, $spec->{data}); $self->_prop(parent, undef); # get property value if second parameter not given $self->_prop(parent);
Implementation:
sub _prop { my ($self, $name, $value) = @_; if (defined($value)) { $self->{"_$name"} = $value; return $self; } else { return $self->{"_$name"}; } }
new 和 _prop函数与之前的对象的生与死中的想法相同: 即创建对象与配置对象应该分开。
做tooltip , selectlist 的一些想法,目前并不是很好用,每次都要重新创建一下,不太好。 对象需要提供的最基本的接口
- 创建 生成一个空的对象,填充所有的静态信息。 如果需要,可以调用配置接口接置动态信息,但这个配置接口必须独立。
- 配置 设置、更新所有的动态信息
- 显示 显示这个对象
- 删除 删除这个对象
以上4个就是通常说的‘增删查改’吧,但强调了静态信息和动态信息的区别,及何时设置。
Thu Apr 28 10:07:28 2016 感觉软件不好,可以先放一下,之后再改进。只要坚持,就一定能够做好。 前提是代码要整理好,这次写wubi-app感觉就是这样,一开始运行效率有问题,尝试了一些方法,效果不佳,都不想继续做下去。就几天没管。几天后再尝试,居然一下就改好了。其实之前已经改得差不多了,只需要这最后一步,但当时已经MENG了。
我习惯于自底向上编程。 如果底层没有实现好,则我不能够很好地思维上层的编写过程。 这点我感觉不好。
先想好怎么编,然后再开始敲代码,效率较高。call-stack实现时采用的方法,确实有效。
定义call-stack语法表时想到。
将异形数据过滤/转换为理想数据,核心算法只针对理想数据处理,则核心处理算法将得到简化。
编译器的编写就采用了这种方法。
一个过滤器处理一种异形。
理想数据没有任何特殊情况。
可以定义一个Aspk::Filter的类,用于处理这种情况。 new时,添加源数据(可能也需要添加迭代器); 提供添加filter函数的方法。 TODO: 实现Aspk::Filter.
github上信息给纷杂。 awesome系列文章(curation for some topics), pondal的一些文章。 https://github.com/sindresorhus/awesome/blob/master/awesome.md
开源软件:
- 提供不同产品线
- 提供服务
- 提供附加产品
- donation
关键的是先提高影响力。向头条发文章,做有影响力的软件,写文章。
pondal 的 awesome-iot中的关于 home automation中可以看一下。可以先选个方向研究下。
解决条件判断的问题。 一种判断对应一组派生类对象,虚函数将这些连接在一起。
OOP and if conditional http://stackoverflow.com/questions/7264145/if-less-programming-basically-without-conditionals
目前太过于关注具体小的实现了,整体设计训练太少。
- 界面
界面=模板(静态)+数据(动态)。 因此界面模块对外只需要提供一个
update
接口就行了,用于更新动态数据。这是界面第一层。界面还应该包括一层:各个数据的 update关系。比如update了控件A,控件B也需要update。这是第二层。
https://en.wikipedia.org/wiki/Worse_is_better
完美主义者:什么时候都完不成。是一件坏事情。
提倡快速实现, 即使有缺陷。
改变方法论, programming by poking, instead of by creating everything. 将软件组件组合起来,以达到目的。组合创新。
来源: Gerry Sussman: why MIT stopped teaching SICP. 当今软件开发模式已改变,90年代是通过将大系统分割为小部分,每个部分程序员都非常清楚,并且亲自编写;而如今是通过组合不同的库。程序员对库及硬件可能根本不清楚(或者不需要清楚)。 为什么会产生这种变化呢? => ? 软件规模越来越大,程序本来就更加复杂了。用原有的方式只能写出小、简单软件,要构造现代软件,必须用新的方法,也即基于已有软件。
adapter模式可能发挥作用。
错误: 在软件开发过程中,无法忍受未知,因此只能自底向上。要会定义问题。
- 一味造轮子,无法赶上时代发展,进步将很慢,在做无用功。
- 和他人无法竞争。别人站在巨人的肩膀上,你从最底层造起,谈何竞争?
- 出活太慢
在编写call-stack时, 从文件中读取字节,使用了迭代器接口,后来将token也做成了迭代器。没有下标操作,要好用很多。
Thu Aug 25 09:39:46 2016
将程序运行的流程(或者框架)与具体动作分开实现。
- 代码会更清楚。
- 流程代码可以复用。
在实现 modify readme 时,使用了这个方法,实现了一个ProcessFiles的流程类,这个类决定什么时候做什么事情,但不会真正去做事情,而时提供出接口,让使用者定义怎么做。流行的框架都是这样的,如windows编程的中onCreate, onOpen等接口,都在在框架中定义的接口。
是否所有的软件都可以采用这个方法?