总结一下为了复习英语,在编程上面的努力

之前为了学习英语,而想过自己编写一个抓取不会的单词,然后再复习的插件,但是现在已经放弃了。 程序也编了不少了,是用 C++写的,为什么要放弃呢?因为已经没有必要做了,我已经选择了 anki 与 python 相结合的方法。 但是无论是用 C++写抓取单词并且复习的程序,还是用 python 写爬虫爬取 collins 字典上面的英英解释,都有一些踩坑的经验与踩坑的教训,不吐不快啊,便写一篇文章整理一番: 单词抓取程序 一开始,我想写这个程序的动机,完全与考研没有关系,而是基于如下的想法: Emacs 上面有翻译插件,但是没有记录生词的插件,我应该可以做一个出来,顺便练习一下 C++,而且也能用来学习英语。 而如果仅仅是一个单词,也没有那么容易背下来,市面上面的单词书也大多数都是不仅仅有单词,也有对应的例句。 我可以写一个单词抓取的程序,抓取单词与当前单词所在的句子,然后将它们存储起来,实现查询,复习,等功能。 这种方法难道不是比买一本单词书,然后照着书上的例句记单词更加有主动性,也更加让人印象深刻吗? 想法是美好的,但是没有考虑到实际,也太过于热衷于规划教堂,而不是去从小木屋做起积累经验,最后规划了非常多的功能,但是一直写,写到现在也还没有写完,并且最终迎来的也不是写完,而是放弃,不得不说,悲惨。 但是我也并非不是完全浪费了时间,我也从这些事情里面得到了一些益处: 得到了教训?哈哈,确实,但是教训到最后讲。 我得到了一些写 C++的经验,而且也学会了很多的 C++技巧,很多的学校考研的复试是考 C++上机的,而且很可能数据结构与算法我也需要使用 C++来学习,所以这种练习也是有益的,不是在浪费时间。 我以此为动力,看完了 C++ primer 这本书,也学习了一些库的使用,还因为这个项目,学会了使用油管看编程的视频,这些习惯或者说这些经验,也都是财富。 我从这件事情里面得到的教训是: 需求要明确: 作为一名软件的开发人员,需求在刚刚开始的时候要尽量明确。 至少要做到将一些自己绝对不可能会扩展的方向规定死,而不是模棱两可,觉得一个船的程序需要考虑到以后飞起来怎么办而留出扩展接口。 杜绝完美主义: We are not a programmer, we are problem solver! 一个程序,只要能解决了当前的问题,就是好程序。没有必要去考虑那么多的条条框框,把问题解决了,再谈优化。 没有必要追求一次就写好 正如好书、好电影,人们想一遍又一遍以求看得更加深入看一样,一段好程序,很难一遍就能够做到最好。 如果真正想要写好一段程序,那么一开始不妨带着“打草稿”的心态去写第一遍,然后等到能够 run 起来了,并且在几次优化之后,再重新开始写这段程序,不要有心理负担。 stackoverflow 永远的神!...

February 3, 2021 · ColaWithSauce

C++中的 enable_shared_from_this

概念说明 当一个类是被 shared_ptr 管理的时候,不是所有的操作都可以被 shared_ptr 内部的计数器识别的。shared_ptr 如果是被用普通指针,或者干脆是一个内存地址赋值的时候,两个 shared_ptr 之间是没有交流的,根本无从知道彼此的存在,所以也就无从对自己的计数器作出变更。比如如下的代码: int *ip = new int; shared_ptr<int> sp1(ip); shared_ptr<int> sp2(ip); 运行完毕之后会有如下的提示 free(): double free detected in tcache 2 因为两个 shared_ptr 都从一个普通指针初始化,彼此相互是无从相互认识的,因此都认为自己是唯一管理这段内存的 shared_ptr,所以最后会对同一个内存地址释放两次,这种行为有时会造成严重的后果。 这种两个 shared_ptr 没有办法知道彼此存在的情况亦存在在使用类与对象的时候。比如如下这段代码: struct S { shared_ptr<S> dangerous() { return shared_ptr<S>(this); // don't do this! } }; int main() { shared_ptr<S> sp1(new S); shared_ptr<S> sp2 = sp1->dangerous(); return 0; } 看似解决了,因为在类是被 shared_ptr 管理着的,而返回的值也是使用 shared_ptr 在类的内部指向了 this,这样两个 shared_ptr 应该相互认识了吧?但是很可惜,普通的类是不支持这样做的,它是没有办法为这样的两个 shared_ptr 牵线搭桥的,调用 dangerous()函数的时候,它仍然相当于从一个普通指针(本来就是啊)初始化。...

January 28, 2021 · ColaWithSauce