对于初学编程的一些建议

    最近工作上有点闲,自己开始看看书,学习一些新的技术.最近开始看Linux内核的分析,Object-C编程和git的使用等书籍.看到累得时候,就喜欢到CSDN的论坛里逛逛,看看上面C语言论坛里大家提出的问题.只要是贴出代码的,我就习惯性copy到本地,运行一下发帖人的问题.然后开始找其中的问题.有的LZ贴了很长的代码,我也一并拷贝,然后运行复现问题,最后解决问题回帖给LZ看.这种方法可能不太好,不如给他讲解问题所在的好.有时候我也会附上一些问题的解决办法或者问题出在哪里.让我感觉不舒服的地方是,大部分的帖子代码风格没法看,所以一般我都是先改一下代码风格,然后再查找问题,更不用说很长的代码了(大于200行).以下是我对初学者的一些建议,言语不当之处请见谅,说的不对之处望指出:

    1) 函数长度控制要适宜,一般控制在200行左右吧;功能多,逻辑复杂代码的行数自然会多,但不能把所有功能都放到一个函数里去实现,尤其是放在main函数里去实现;我们应该有意识的去分割,不论是按功能还是按代码重复度去分割,都是可以的.如果有多个功能要实现,建议用一个函数去实现,如果多个函数里有重复性或者类似的代码,建议把重复的代码另写一个函数实现.这样写的好处是功能清晰,函数短小利于阅读和理解.但也不要极端,把每个函数都写的很短很小,这样反而对程序的性能起到反作用.所以,建议大小要适宜.

    2) 函数名和变量名的定义;我的建议是要做到见名知义,变量名或者函数名建议使用单词或单词的缩写形式,所以需要我们有一定的专业英语基础.学编程也需要我们学好英语的,尤其是专业英语.对于这个方面的学习,可以通过看别人的代码(优秀的),积累一些通用的单词缩写,比如一个计数变量count,也可以用其缩写cnt,再比如循环变量,大家都基本上使用i,j,k,所以我们也尽量使用,这样别人看到这样写就知道什么意思了.看到有些LZ的代码里使用拼音,不是不行,自己看是好理解,中国人看还可以,如果是外国人呢.我们的代码要朝着外国人也能看懂方向去吧,再说我们用汉语拼音定义变量或函数名,公司领导估计也不愿意的.所以,我们现在就要有意识的去做这件事情,不明白的单词可以去网上查嘛,学编程还能提高我们的英语,多好的事情.

    3) 代码风格.看到LZ的帖子里代码写的都很紧凑,还好没看到把多行代码写在一行里的,不过有见过把两行代码(两个分号)写在一行的,如果较短小的话,还是可以理解的,如果有超过3行的写在一行里,我感觉看着不舒服.我们写出的代码不是仅仅为了实现功能的,另一重要的是给别人看的,别人如果看了我们的代码很乱,不知道在背地里怎么骂我们呢.先不管功能实现的好不好,程序性能有没有最优.这些需要积累的,不是一天两天能够做到的.但是,把代码写的清晰有序,这是一个习惯问题,所以我们要养成这样一个好习惯.什么样的格式是好的呢,不同的公司可能有自己的代码风格,有些是通用的,比如空格的使用,for (i = 0; i < MAX_LEN; i++);变量与逻辑符之间加空格,分号后加空格, for, if, else后面与括号之间加空格等等.华为有自己的代码风格,可以参考一下他们的.总之要有自己的一个好的编程风格习惯.

   4) 代码的调试步骤,我在论坛里看到有些LZ的贴出的代码比较长,我编译一下发现有多个语法错误,警告也有好几个;然后标题写上"编译通不过";编译不过,只能说是语法学得不够好,基础不牢固.对于语法错误,与其让他人帮忙解决,不如自己独立去解决,不论是查书,还是上网自己搜资料,通过自己的努力将错误去掉,把警告找出原因,尽量也去掉.这样才能学到更多的东西,求人首先要求己.不通过自己的思考和努力,把问题交给别人,这样就相当于把学习的机会让给别人.因为将来去公司工作,工作是让我们自己去做的,而不是求别人.所以,首先要摆正态度,养成独立思考,独立解决问题.如何让自己的编程能力提高呢,不就是在初学时多出错误,多去解决错误和问题,这样才能够更快的进步嘛.

    话题扯远了,对于代码长,错误有多,警告也多的情况,除非是拷贝别人写的代码,如果自己写,我建议还是一步一步的来.怎么说呢,就是要实现若干个功能,那么就一个功能一个功能的实现.每个功能写好了,编译运行没问题了,然后我们再去实现下一个功能.这样如果功能之间有穿插,调用,我们也好定位问题的位置.反之,把功能一下子都写出来,然后编译看到那么多错误和警告,大家都会看着头疼,不愿意继续去看,况且是代码风格很奇葩的呢.

    对于拷贝别人的代码,我们也可以分步去调试,可以把一部分功能先注释掉,然后多加一些调试信息判断一下函数是否按照预订的逻辑去实现了,变量是否为想要的值等等.如果,自己对调试工具用的还行,也可以使用调试工具,设置断点方法等等去调试错误.比如使用gdb去调试运行出现的段错误.

    5)对于自己的代码保持精益求精的态度,不能实现了,测试没问题了就认为很好了。独立写出来,这是一种进步,这种进步只要通过自己的努力,养成编程的思想,慢慢都能够做到;但是,如果在实现的基础上对代码进行优化,比如将时间复杂度和空间复杂度考虑进去,以及如何让代码更有扩展性和易于移植,这些不是很容易做到的。之前,一位老师跟我们讲,学习C语言要想达到精通的地步,没有3~5年以上的使用和开发经验,不能谈得上精通。如果自己这方面的悟性不很高,那么需要更长时间的练习和摔打;对有些初学者,能够实现功能,运行没问题已经是很大的挑战了,考虑这些会不会更难呢。我的回答是肯定的,所以给我这个结论的老师也提醒我,学习C语言像一条递增的曲线,随着时间的推移,曲线上升的加速度越来越小,就像爬山一样,约往上山坡越陡,上升的速度就会越来越慢;所以,我们不能安逸于相对平坦的山坡,而是勇于挑战陡坡。平时对于自己的代码应该多修改,多总结。平时学习和使用过程中,尤其看到他人对于一个功能使用不同算法或者不同写法要多留意和学习;


  • 27
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值