写给所有程序员_寻求更优解_你值得更好的

来源:互联网 发布:ip与mac地址扫描工具 编辑:程序博客网 时间:2024/06/06 15:42

1.逻辑更优解

举个例子:
我们刚刚学习编程的时候,老师往往用下面一个例子告诉我们1+2+…+99+100=?的结果:

int sum = 0;for(int i = 1; i <=100; i++){    sum += i;}System.out.println(sum);

我相信很多人记忆尤新,但实际上,更好的做法是:

int sum = (1+100)*100/2;

我相信很多人都学过这个公式。可因为你在编程,因为你的习惯,所以选择了第一种方式。还记得为什么老师会这样写吗?因为我们学习循环的时候还没有学习数组,所以老师可以举的例子比较少,事实上或许举个乘法的例子更好:

int mutiResult = 0;for(int naturalNum = 1; naturalNum  <=10; naturalNum  ++){    mutiResult *= naturalNum ;}System.out.println(sum);

当最大值改到100的时候,刚好可以讲讲边界问题。

再举个常用的例子:菲波那切数列
f(1)=1;
f(2)=1;
f(n)=f(n-1)+f(n-2);(n>2)

求当n=20时f(n)的值。

那时候刚学回溯法,没考虑到时间问题,直接用:

public int getFibonacci(int maxNo){    if(maxNo == 1 || maxNo == 2)        return 1;    else        return getFibonacci(n-1)+getFibonacci(n-2);}

哇塞,看起来好牛13,代码好短哦
实际上,你重复计算了好多次。。。
以maxNo=5为例:
f(5)=f(4)+f(3)=(f(3)+f(2))+(f(2)+f(1))=((f(2)+f(1))+f(2))+(f(2)+f(1))
这个过程中,f(3)计算了两次,f(2)计算了3次,f(1)计算了2次,如果我们计算的次数越多,这种重复次数就越多。

更好的:
public int getFibonacci(int maxNo){
int numFirst = 1;
int numSecond = 1;
for(int i = 3; i <=maxNo; i++){
int temp = numFirst + numSecond;
numFirst = numSecond;
numSecond = temp;
}
return numSecond;
}

2.选择更适合的框架

作为程序员,不要放弃找更好的框架,我很多框架源自git。这个时候注意看访问人数,如果用的人少,往往代表还不够优秀或者不够完善。如果你不能确定,就亲自下载来尝试一下,然后比较一下不同框架之间的差异和性能。选择更适合的。

注意,我这里说的是更适合的,而不是更优秀的。有些框架结构比较复杂,难以移植修改,虽然看起来不错,但如果不具备可移植性和可修改性,可能后面项目需求变更的时候需要更换框架,则会大大增加了项目的整体风险。

什么样的框架是更有框架?
1.适合项目需求。无论何时,这一点都是首选。老板需要的是将产品快速开发,早期占领行业市场,没有大量的时间给你显示改造和扩展技术的优异,更适合的往往意味着更节省时间。

2.用户更多。用户多,意味着框架足够受欢迎,意味着实验框架的人数多,意味着框架的稳定性经过不断测试,已经越来越适合市场。当然也不尽然,或许框架只是没有开始流行而已。不过选择用户少的框架意味着承担更大的风险,我使用这种框架的时候,有成功也有失败的,对于一些使用失败的,框架本身带有重大失误,设计上存在问题,对于这种框架,建议还是不要去改动,直接换一个,设计问题修改比自己写一个更加消耗时间。

3.结构优异。采用常见的MVC,MVP或者MVVM的一种,另外使用合理的设计模式,以及一些回调,这些都是判断优秀框架的条件。

4.灵活配置和可扩展性。根据自身的编码能力,选择可扩展性在相似性能中更高一些的,配置更灵活些的。比如选择图片的框架,如果这个框架本身带有图片选择,对于照相功能可选择添加到第一个位置,也可以选择不添加,那么就比单纯的选择图片更优。另外,如果一个图片选择器没有浏览功能,那么可以考虑是否容易添加,如果容易添加,也可以使用。

5.不存在最好的框架,只有更好的。新框架在不断诞生,在闲暇之余多去尝试,或许会找到更好的。就像android的刷新框架,早期有XListView,现在有XRefreshView,SmartRefreshLayout;图片加载框架,早期有ImageLoader,现在有Picasso,Glide,Fresco。代码一直在时间的长河不断前行,我们也要跟上才行。

总之,选择能让你的开发周期更短,后期扩展风险小的框架。

3.多写代码和重构,哪个能让我变得更优秀?

实际上,可能两个都能让你变得更优秀。但我想说的是,先学会思考。你要知道自己的缺失是什么地方,然后再选择合适的方式。

学习阶段,大多bug找不到解决办法的阶段,需要多写代码。多写,就多了解bug的出现时机,增强编码调用;多写就熟悉代码的使用,减少基础代码的查阅和翻资料。

扩展阶段,对各种流行框架还不熟悉的阶段。多尝试不同的框架,使用它们,甚至去看看它们的源码;另外可以看看一些典型的开源项目,这些开源项目能快速提升你对结构的整体感,学习到一些难以用文字直接描述的设计方式。

整理阶段,对框架大致熟悉了,对自己的设计还存在迷茫和疑惑。这个时候就可以拿一个初级项目来练手了,比如一个简单的音乐播放器,根据所学的框架知识不断去重构,思考,将它的内容丰富,结构尽量搭建的漂亮。

提升阶段,我能搭出基本架构了,可是总觉得缺点什么。我在这一阶段的时候,感觉自己越来越缺少知识了,很需要的那种。我觉得基本架构有了,但是好像还不够好,不知道差的那一点再哪里。于是我开始买有关敏捷开发,架构方面的书。另外,我在算法方面没什么认识,于是又买了本算法书。这种补充,比单纯在学习阶段的补充更快速,吸取的也更加快。这阶段中,我开始能写出不算差的代码了,就是有那种看到代码,就理所当然觉得就该这样的感觉。

阅读全文
0 0
原创粉丝点击