Tag Archives: Idea

Smart method to get similar name collection

Lots of programs need a function like this: get the all the similar file names in a folder, or get all the files than contain the similar content. Such as media player, image browser. Even comes to the arrangement work with the files on a server.

Here’s the things coming from my mind.

  1. Levenshtein distance
  2. Eigen value of a string
  3. Vectorize a string

Levenshtein distance is easy to use and really fast on runtime, but it’s a bad idea to directly cache the results. At last we need to compute all the strings every time, and it just take away more cpu time. Vectorize a string may be more difficult, but we can cache the eigen values, then time will be saved, and it won’t take up too much storage.

It’s up to the project which one we’ll choose.

创建新的语言

由于人的月历和知识的有限性,性能和开发效率的矛盾,一门语言的发明者不可能满足所有程序员的要求。随着高级语言的普及,那些不满于现状的程序员们会越来越多的选择定制自己的语言,当然我这里不是说想Lisp那么干,而是真正的从语言特性上定制。

说到这里,就不得不提及语言特性优劣该如何量化问题。简单的说就是我们该怎么判断一门语言的某个特性是优秀的还是表现一般呢?对于主观性很强的问题往往难以量化。我个人的量化标准是它对实际问题的抽象程度,抽象度越高越慢、越高级、越智能、开发效率越高。

比如C语言的for循环,相较于汇编的jump或者loop,抽象程度更低,它封装了更加抽象的循环过程——人们日常计数的行为过程:起始点,终点,步长,每次计数后干点什么。功能都可做到一致,但是表达方式的变化对于人们的理解有很大的影响。

这里出现了人们的日常行为,我觉得很重要,如何将底层的操作抽象成人们熟悉的日常操作行为是语言设计的重要问题。

另一个问题是如何将智能引入到语言本身,比如类似Object-C的智能垃圾回收,这个我觉得将是下代高级语言的发展方向。

Continue reading

统一的开发体验

目前来说网络应用是演变速度最快的应用之一。程序员们都习惯了用各种语言和工具混合拼凑自己的作品。比如一个人承担整个项目,开始做应用原型决定使用最快的方法完成草稿,于是选用IIS、.NET、C#、MVC、MSSQL完成主要草图,人性化的IDE加上完善的框架和Razor渲染引擎,这个过程在没有任何阻碍的情况下完成。然后由于环境的限制,下一步选用Apache、PHP、MySQL重构项目,虽说是重构,其实就是将把语言翻译下,整体思想不变,前端部分是scss、blueprint、 jquery、php等一些琐碎的东西,ajax接口部分可能要测试下大小写兼容,其他就没什么好修改了。当然这只是一个开始,部署项目、配置服务器,SEO优化,各种测试,这些都需要用到各种不同的知识,最后不要忘了前端设计知识更涉及各种更抽象的知识。

Continue reading

我们和代码的距离

我们总希望受控对象能尽可能的自理,但又能让任何一个细节完全受控于我们。我们讨厌琐碎的细节,希望不关心的都会有个默认值在那里等着我们。但是默认值总会有不适用的时候,我们总是无法用统一的方法解决问题,重构于是成为家常便饭。

我们要控制的对象总是不够聪明。

大一的时C语言考核有一项是:用字符模拟一个余弦波平行移动的动画,并且能通过光标控制波长和幅度。这是我的第一个界面程序。虽然是控制台模拟界面,没有抗锯齿,没有色彩,没有缓动,但是它让我发现了很多有趣的现象。比如开始编写时,我觉得为了调试平移动画就在右上角加入了显示平移计数,本来打算调试通过就注释掉,但没想到这个功能意外的可以便捷的扩展到幅度的调试环节,然后测试时又发现用光标控制波长和幅度时如果能显示数值的反馈会让操控更富有乐趣。于是这个一开始仅用于调试的功能不知不觉间变成了程序的一部分。

你有没有想过游戏的生命值显示一开始只是用于debug呢?开发者是否在开发过程中发现了乐趣呢?那些不认真编写单元测试的人是否无意间错过了无数美丽风景呢? Continue reading