首页 > 代码库 > 聊聊程序员如何学习英语单词:写了一个记单词的小程序
聊聊程序员如何学习英语单词:写了一个记单词的小程序
背景:
关于英文对程序员的重要性,就不多说了!
英语的学习,有很多,今天也不聊多,只聊英语单词!
关于单词的记忆,找过很多方法,下载过很多软件。
如图(其它不好用的都卸载了):
上图算是我以前用过软件,注意,是以前哦~~~
意思就是没有坚持下来~~~~
随时间的推移,最后它们还是被我遗忘了~~~
为什么???不能:坚持!坚持!坚持!
学习思考:
一直在找方法:
1:下载过联想记忆法、背文章记单词,词根,各种视频~~~
2:连单词的数据库都网上下载了一份了,期望从数据库的直接记忆单词快些~~~
通过各种查询语句,整理相似度的来记,才1天,就没后文了~~~
每天都在占用时间的事情:
可能写框架,可能写博文,可能其它事,一天一天过的很快~~~
于是,就在反反复复中~~~忘了背背了忘~~~~~
经过重新的思考之后,我觉方向错了!
我应该找一个如何坚持的方法,而不是继续找一个如何更快速学习的方法。
像产品经理一样思考(做个小程序(网页版))
我思考着,怎么利用下载的单词数据库来做点什么让自己能更好的坚持。
一开始思考,每天抓取CodeProject上的英文文章1篇;
然后分析单词频率,把频率最高的10个单词做为学习的方向。
后来又被自己否了:
1:出现的频道高的一定是那些the that this is a apple之类的,没有意义,要做过滤的话,工作量又大。
2:读一篇文章,学几个单词,估计很难坚持(毕竟从小到大都是这种学习模式,已经无数次验证了没用)。
3:纯记忆的短期记忆学习,和浪费时间没差别,又不是应付短期的考试。
于是,光单词的展示不行,必须要有思考和交互在里面!
目前的暂时效果是这样的:
最终思路:
1:One Day Two Words,一天2个单词(一开始是10个,后来觉的多了,毕竟有互动,要打字,怕10个容易坚持不来)
2:单词印象:每个人都会对单词进行评论(人玩多了,就会产生很多有意思有评论,前提是看大伙会不会玩)
3:造句:小时候学中文字的时候,老师都叫我们造句的,为什么长大后学英文就没强制这个要求了?
4:我的记录:可以查学过的词~~~~
5:单词库有3万多个,我挑了雅思共4034个词,随机出!
总体而已,主要是降低学习难度,这样容易坚持~~~
整体完成后,感觉还不够,内心隐隐都觉的还缺少什么,后续看看网友有什么建议~~~
技术思路(时间,给自己半天时间完成任务):
1:要支持手机浏览:
一开始还想着弄个前端的框架,或者弄个JQ Mobile之类的,搞个html+api请求。
后来光找框架和看Demo就花了不少时间,感觉做个简单的东西这么费时间,然后直接给我毕了。
于是,用Table,最好的兼容,最容易的布局!
用WebForm的ASPX,最省时的处理手段。
2:性能与并发的考虑:
网站要部署在原有的VPS上,1共就1G内存,已经跑了六七个网站了。
因此站用资源要少,性能要好,要经得起人民的考验。
数据库:
一开始是计划用文本数据库的;
但原有的单词数据已经在sql2005上了,顺手用sql2000了。
性能和并发:
页面要简单,能省多少是多少,于是一个JS都木有了;
对单词做了缓存,对单词的评论提交做了队列写;
考虑到访问量并不大,展示是直接读的数据库,有自动缓存。
安全:
考虑到并不是人人都很友善,会不会有人故意提交大量的一堆垃圾数据过来呢?
于是在后端做了简单的安全的验证。
前端的验证也很简单验证了一下长度。
3:音标采集:
自带的词库,有些单词的音标可能缺少,因此需要有一个采集的过程。
于是要找一个可以采集的点,一开始定位去百度里找:
写了代码采了一下,发现单词都在js里混淆输出。
想用百度API,发现要Money~~~~
时间很紧张,因为只给自己一个下午的时间~~~~
后来又找了几个,最后发现还是微软家的亲切:
图片框起来的,但是,是采不到的,因为也是JS里混淆的,然而:
标题描述里竟然有音标~~~这都被我发现了,写一段这样的代码就可以拿到了:
private string GetWordPronunciation(string word) { string pronunciation = string.Empty; WebClient wc = new WebClient(); wc.Encoding = Encoding.UTF8; string result = wc.DownloadString("http://cn.bing.com/dict/search?q=" + word); string key = "英["; int index = result.IndexOf(key, StringComparison.Ordinal); if (index == -1) { key = "美["; index = result.IndexOf(key, StringComparison.Ordinal); } if (index > -1) { int end = result.IndexOf(‘]‘, index); pronunciation = result.Substring(index + key.Length, end - index - 2); } return pronunciation; }
扩展的知识点IndexOf:
当我简单用WebClient的DownString拿到html存在result变量时(UTF8编码)。
result=".....英[......";
我用:result.IndexOf("英["),竟然返回-1,我纳闷了一下。
通过SubString截掉前面变成:result="英[...";
于是:result.StartWith("英["),竟然返回false,我纠结了一个。
可是:result[0]==‘英‘ && result[1]==‘[‘ 即是true的。
后来搜了一下,才发现:
html.IndexOf(key, StringComparison.Ordinal)
这样就正常了,解决在于:StringComparison这个参数了。
虽然理解参数的意义,但是不解的是:
这里并木有特殊的第三方字符?
而且采集的几千个词,有1000多个出现这种情况,目前无解,只能注意!!!
最终成果:学单词地址:
http://word.cyqdata.com/
单词数据库下载地址:
如果你需要单词的数据库,就在这里:
http://download.csdn.net/detail/cyq1162/9445894
总结:
就这样,昨天花了一个下午,半个晚上,今天又半个下午,把这个小程序给完成了。
希望能坚持~~~大伙也一起来,一群人坚持,比一个人更容易坚持!
聊聊程序员如何学习英语单词:写了一个记单词的小程序