如何锻炼写代码能力
2013-09-13 16:41
225 查看
最近一直在看侯捷的《STL源码剖析》,看到第二张的空间配置器的时候,对于次级空间配置器中的obj这个结构体以及对它的运用不是很清楚,然后自己就写了一个简化的obj以及测试代码。
在写这些代码之前,我抄写了alloc.h中的大部分代码和vector.h中的部分代码,实现了一个简化了的vector。在这过程中,我感觉自己几乎理解了大部分源码。
可是接下来,在写一个简化了的obj以及测试代码的过程中,我发现自己忽然变的不自信了,发现只靠自己写代码和抄代码完全两回事。自己写的代码,写完后,10分钟过后,再回头看看,感觉真的很凌乱,没有结构,虽然编译运行都ok。
后来我google了一下“如何锻炼写代码能力”,看到了一位前辈写的东西,让我很有感触:
学会用STL是件很爽的事情。但是须知有所得必有所失。如果过早地接触STL,会让你失去很多锻炼代码能力的机会。
不可否认,队里确实有一些人SCL用得很好。但是,我至今仍然没有见过一个SCL用得很好,同时有拥有很强的代码能力的人。同样是有所得必有所失,你平时习惯了去抄程序,必然少了很多自己构思程序的机会,从而影响代码能力的提高。
尤其是红色字体部分,让我很触动,因为我平时的确爱抄写sgi stl的程序。
那我如何来提高写代码的能力呢?
我目前能够想到的就是,看看自己能不能“默写”上来。
附:我写的那个很凌乱的obj及其应用
#include <iostream>
#include <cstddef>
using namespace std;
struct obj{
obj * free_list_link;
};
obj * link8;
void init()
{
char *a = (char *)malloc(8*8);
link8 = (obj *)a;
obj * current = link8;
obj * next = (obj *) ((char *)current + 8);
int nobj = 8;
for(int i=1; ;i++)
{
if(nobj == i)
{
current->free_list_link = 0;
break;
}
else
{
current->free_list_link = next ;
current = next ;
next = (obj *)((char *)next + 8);
}
}
}
obj * allocate( )
{
init();
obj * result = link8;
return result;
}
void main()
{
int * i = (int *)allocate();
int * start = i;
int * head = i;
int j;
for(j = 0;j < 8; j ++)
{
*i = j;
i ++;
}
for(j = 0;j <8; j ++)
{
cout<<*start<<endl;
start ++;
}
char * c = (char *)allocate();
c = "hello,world!";
cout<<c;
void *f=head;
free(f);
for(j = 0;j <100; j ++)
{
cout<<*head<<endl;
head ++;
}
}
在写这些代码之前,我抄写了alloc.h中的大部分代码和vector.h中的部分代码,实现了一个简化了的vector。在这过程中,我感觉自己几乎理解了大部分源码。
可是接下来,在写一个简化了的obj以及测试代码的过程中,我发现自己忽然变的不自信了,发现只靠自己写代码和抄代码完全两回事。自己写的代码,写完后,10分钟过后,再回头看看,感觉真的很凌乱,没有结构,虽然编译运行都ok。
后来我google了一下“如何锻炼写代码能力”,看到了一位前辈写的东西,让我很有感触:
学会用STL是件很爽的事情。但是须知有所得必有所失。如果过早地接触STL,会让你失去很多锻炼代码能力的机会。
不可否认,队里确实有一些人SCL用得很好。但是,我至今仍然没有见过一个SCL用得很好,同时有拥有很强的代码能力的人。同样是有所得必有所失,你平时习惯了去抄程序,必然少了很多自己构思程序的机会,从而影响代码能力的提高。
尤其是红色字体部分,让我很触动,因为我平时的确爱抄写sgi stl的程序。
那我如何来提高写代码的能力呢?
我目前能够想到的就是,看看自己能不能“默写”上来。
附:我写的那个很凌乱的obj及其应用
#include <iostream>
#include <cstddef>
using namespace std;
struct obj{
obj * free_list_link;
};
obj * link8;
void init()
{
char *a = (char *)malloc(8*8);
link8 = (obj *)a;
obj * current = link8;
obj * next = (obj *) ((char *)current + 8);
int nobj = 8;
for(int i=1; ;i++)
{
if(nobj == i)
{
current->free_list_link = 0;
break;
}
else
{
current->free_list_link = next ;
current = next ;
next = (obj *)((char *)next + 8);
}
}
}
obj * allocate( )
{
init();
obj * result = link8;
return result;
}
void main()
{
int * i = (int *)allocate();
int * start = i;
int * head = i;
int j;
for(j = 0;j < 8; j ++)
{
*i = j;
i ++;
}
for(j = 0;j <8; j ++)
{
cout<<*start<<endl;
start ++;
}
char * c = (char *)allocate();
c = "hello,world!";
cout<<c;
void *f=head;
free(f);
for(j = 0;j <100; j ++)
{
cout<<*head<<endl;
head ++;
}
}
相关文章推荐
- 如何锻炼敲代码的能力
- 如何提升程序员的代码编写能力
- 如何提高代码能力
- 学习《如何提升程序员的代码编写能力》文章笔记
- 如何通过阅读别人的代码提高自己的编程能力
- 如何为micsoft SQLserver精简代码提高运维能力
- 从源代码分析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(让你的Struts2代码更简洁——如何培养框架设计能力
- 如何锻炼锻炼排错能力
- 如何提高编程能力?写更多代码是最显著的方法,但是本文这一种与写代码完全相反,一起来看看吧
- 简单的代码,适合初学者,锻炼逻辑思维能力,可以练习练习!
- 一些锻炼代码能力的函数总结
- 如何用python制作一个锻炼计算能力的exe小程序-学习笔记11-pyinstaller
- 职场分享--职场中如何锻炼自己的交际能力
- 主要通过你的行为看你的编程能力,除了让你做算法题外,更重要的是你实际写过的代码和项目,效率如何?有没有考虑过异常处理?实际的访问性能如何?有没有开过自己的 github 项目,或者是给知名项目贡献过源
- 基础都掌握了却还是敲不出代码?编程新手如何快速提升coding能力?
- 如何锻炼出强悍的分析能力?
- CSS那些事儿——关于如何提高编写代码的能力
- 如何锻炼自己的抗干扰能力
- 如何锻炼出强悍的分析能力
- 如何手写代码以生成Composite图表?