- 浏览: 126006 次
- 性别:
- 来自: 上海
最新评论
-
lliiqiang:
最简单的显示 存储分离,有的时候错别字与错误数据存储兼容。还有 ...
关于软件可扩展性与代码防御性编程的一点思考 -
bmqnc:
cqh520llr 写道sb,不帖代码,以后人家搜索到了浪费人 ...
今天自己做了redo-undo功能 -
cqh520llr:
我也觉得,代码风格和不定性样式太多了,
编码风格不取决于自己,取决于领导班子和现有代码 -
cqh520llr:
sb,不帖代码,以后人家搜索到了浪费人家时间,而且这个代码贴出 ...
今天自己做了redo-undo功能 -
shiqicai:
太隐晦,看不懂。
康神与顿神
文章列表
如果在windows下的编辑器中获取了一个编辑器的输入,则将编辑器的输入内容转换为Element的Text存储,在jdom中会做一个转换,里面主要做了一步操作,就是将原来文本的内容中回车换行转换为回车换行。(实际上是将“\n”转换为换行符,但是他这里没有考虑windows下平台的问题,因为windows前面还多了一个"\r")
看jdom中换行转换的代码:
public String escapeElementEntities(String str) {
if (escapeOutput == false) return str;
...
今天看了一下,parseInt和parseDouble,parseFloat等方法,发现Double那种在字符串中开始位置处包含“+”号不会抛出异常,而对于Integer那种反而能抛出异常,这点很奇怪。。。。
我看了parseInt的源代码,我觉得在前面加上控制“+”号的字符串解析应该是没问题的,这点很纳闷,不知道当初Sun的程序员设计考虑了什么因素,导致在Integer中不能用"+"号。
这里面的不知道有什么设计哲学?我觉得是不是因为考虑想审下键入“+”号的时间O(∩_∩)O。
不过从oracle的网站上找到了答案,这个是被报告为bug的(需增强的),jdk的开发人员 ...
今天看原来项目的代码,又让我发现了一处很urgly的代码,原来的程序员是这么判断传进去的字符串是否是整型或者浮点型数格式的数,他是这么做的:直接用parseInt或者parseDouble看调用这两个函数是否发生异常,如果发生异常,说明不符合,没有异常,则符合。
不能说这样做不对,但code smell太重,而且这种做法显得很诡异,靠抛异常来检查。。。。
(如果异常是由其它原因引起的呢??)这种编程风格非常不好,不过担心之前程序程序员已经用了多次这种手法,我只好自己另外写了两个函数,并且在他原来的函数里添加一些建议使用我现在写的函数的注释。
比较好的做法应该是用正则表达式判断是否符合整型或者 ...
我感觉代码质量很重要,现在很多出来的程序员非常不重视代码质量,很多时候大家以为只要做出来功能就够了,但实际上是远远不够的。我感觉这样写出来的代码根本不是产品级的,而是toy program。
大家好像都不太重视防御性编程,很多时候都是想当然,在某一步,想当然的认为某一种情况不会出现,某一种数据不会出现。我觉得这种思想非常错误。
令人惊讶的是有时候做出了某一个功能,然后我发现了bug,我觉得需要去改,但是其他人却说不要改,没必要改,因为这个功能现在没人用到,也很少人用。我觉得很雷,既然功能没用,又做这个干什么,不是给人口实么?
另外,项目中的模型结构比较乱,没有统一的模型管理,引用乱赋值,引 ...
对于开发人员来说,我觉得自己先做单元测试是必要的,当然,其实不管做什么测试,Test case我觉得有必要进行一个管理,可以将操作流程,测试中用的数据,发生了什么问题,出在哪个模块中,怎么修正的,我觉得都可以记下来,以方便进行管理。
这样做的好处是:保存Test Case,方便后来的程序员进行测试,因为他可以知道什么地方workflow没走过(代码覆盖率。。。。。),以及什么测试做过了,自己还要做哪些测试。
并且后来改的代码或重构之后的代码至少之前这些Test Case要跑通(流程,或数据)以验证现在的代码是正确的。
Bugzilla我感觉对于开发人员来说粒度太粗,很多时候我感觉是给外部那 ...
关于API设计的tricky的地方与pitfalls
- 博客分类:
- 算法
今天看项目中的一段代码,看完之后我对原来的程序员真是抓狂了,代码实在是ugly到了极点。本身那个类继承自ArrayList,姑且不说这种做法多么的ugly,因为实际上通过组合也能达到同样的目的,并且我一直很反感去修改类库的一些代码。继承本身没有错,继承类库的类也没错,错就错实现的代码实在太复杂,本来很简单的一件事情,却搞的超级复杂。
举个例子:
ArrayList中有add(E e) 与add(int index, E element) ,正常的行为是list中加入element对应的元素(是该元素本身),但是现在的程序员重写之后变成第一个只加入element本身,而第二个是加入element ...
现在的项目中有一个文本编辑器(类似记事本的),是之前的程序员写的,他是自己管理redo-undo栈,我看了一下,根本没法用那个redo-undo功能(只能redo-undo一次,晕死),而且其中的逻辑超级乱。
我改写了一下,代码还算简洁,由于是公司的项目,我不能贴代码,只能讲讲我实现的思路。
具体就是在编辑框输入的同时,将前面的输入压到undo栈,但要注意,当前在文本框的文本应该将其入redo栈。
每次编辑框发生修改时,undo栈压入的是redo栈的top元素,然后当前编辑框中的文本再入redo栈。但要注意的是编辑框刚打开时是有初始化值的(类似记事本打开一个txt文件,txt中本身存在内容 ...
当年听Boss Zhang谈起康神,顿神,当时Boss Zhang说时没怎么在意,也没注意听,O(∩_∩)O~。
有一天在浏览一篇文章,在听一个讲座时,突然看见这两个个名字,觉得很熟悉,原来想起了Boss Zhang说的。。。。。
看了一下,康神原来在google,顿神在baidu。。。。。。
我想我真的要在这条路上走很远。。。。
还是那句话:十几岁的少年天才导出都有,三十多岁的优秀设计师凤毛麟角。我做不了十几岁的少年天才,但愿到三十多岁能成为一个优秀工程师。
但是Niniane Wang绝对是既是少年天才,又是优秀(非常优秀)的软件工程师。
还是Boss Zhang当年有理想,Boss Zhang说他只想做一个程序员,优秀的程序员。我想我在这条路上还要走很久。
http://www.google.com/rec/aspireniniane/
软件可扩展性我从程序员的角度来理解,应该是这样的:
代码应该是可扩展的,便于他人阅读的,代码是非暴力的(非暴力的意思是说我修改了一个地方,其它与之类似的地方时页同时修改或者说只需修改很小的一部分,典型的例子是字符串的国际化问题,我见过n多人写的代码都不太好,而且经常都振振有词)
我感觉国人做软件的最大一个问题是:很多时候以为做出功能就很牛B了,都没有考虑软件的健壮性,易用性,和对意外事件的处理,这点也是国外软件与国内软件最大的区别。(典型的例子是ms)。记得翁恺当年说过国内很多程序员是想当然,很多情况下只考虑if part,至于else part他从来不考虑,因为他们很自豪的说:els ...
代码膨胀不是一件好事,我看云风的blog上说网易那款经典游戏的核心代码只有10w行。合理的组织代码结构(运用设计模式等)是可以控制住代码的。
代码量的多少我觉得不能单一的作为程序员优秀与否的唯一标志,我觉得更重要的是代码的质量,程序员写出来代码质量(代码结构,清晰性,可读性,对于性能要求高的软件,还包括算法的复杂性等)我觉得更是评判程序员优秀与否的更重要的衡量标准。
真搞不懂为什么现在很多人都以代码量来衡量程序员的水平。。。。
UI上我感觉要做好蛮难的,细节很多,以前记得看过一本书,说如果一个人细节做的很好,那么他做UI做合适。我个人认为UI也能衡量一个程序员思维的缜密和逻辑考虑的是否完全。
我觉得其实做软件是这样的:既然做出了软件就要有人用,做好是傻瓜软件,这里的傻瓜软件不单指软件功能要完善,用户的合理需求满足(不合理的我们可以试图说服用户)同时整个软件的界面要清晰和易于操作,同时要多替用户着想,即用户想到的我们开发人员要想到,用户想不到的,我们开发人员也要想到,同时UI界面上要防止用户的误操作,这样做出的软件用户才会从心里上产生依赖,久而久之,用户就不得不用我们的产品了,典型的例子是语言。比如c语言与Lisp语言 ...
首先说这个项目的结构比较混乱,软件架构我还看得不是很清楚,但代码结构实在很混乱,程序员的水平实在不敢恭维,代码中竟然能出现“index_1”一直到index好几十的那种命名方式,faint!后来还要一直遵守这种命名方式,实在很无聊。。。
好了,我就说说我今天的收获。
首先是CheckboxTreeViewer的setSubtreeChecked(Object element, boolean state)方法引起的。代码如下:
public boolean setSubtreeChecked(Object element, boolean state) {
Widget ...
今天改了一个bug,发现原来是原来程序员写的equals方法有点问题,实在问题很多。
顺便看了一下ArrayList的remove(Object obj)方法,不妨来看一下,以下是remove方法:
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
...
这题的500pts顺便提一下,500的纯暴力是不行的,这题主要用到了集合论的知识,一个元素和两个元素的都好做,三个元素的并集我倒忘记了公式,后来还查了一下关于三个集合的并集知识。
这题不是一般的恶心,关键是题意不明确,我是看了好久才看懂讲了什么意思。。。。
代码如下:
// Paste me into the FileEdit configuration dialog
import java.io.*;
import java.util.*;
import java.util.regex.*;
//srm 237 Div2 1000 pts
public class Mirr ...