聊聊程序员如何学习英语单词:写了一个记单词的小程序

背景:

关于英文对程序员的重要性,就很少说了!html

英语的学习,有不少,今天也不聊多,只聊英语单词!前端

关于单词的记忆,找过不少方法,下载过不少软件。程序员

如图(其它很差用的都卸载了):sql

上图算是我之前用过软件,注意,是之前哦~~~数据库

意思就是没有坚持下来~~~~小程序

随时间的推移,最后它们仍是被我遗忘了~~~后端

为何???不能:坚持!坚持!坚持!api

学习思考:

一直在找方法:缓存

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

总结:

就这样,昨天花了一个下午,半个晚上,今天又半个下午,把这个小程序给完成了。

但愿能坚持~~~大伙也一块儿来,一群人坚持,比一我的更容易坚持!

相关文章
相关标签/搜索