如何提高自己的编码水平

如何提高自己的编码水平

好久没写文章了,因为一个特殊的原因,这次讲一些如何提高自己的编码水平,主要是适用于初中级的工程师进阶使用,大佬请绕路。。。。

新手常见的困惑

经常听到一些困惑,比如说 看不懂别人写的什么啊,自己写的话写的乱,有的不知道怎么写啊,或者是出了问题不知道怎么解决吧啦啦啦之类的

不要怕,有我在

我们先把问题整理一下

  • 看不懂别人的代码(业务 算法看不懂正常)
  • 自己写代码感觉无从下手,不知道如何去设计,实现功能 写哪些类,写哪些方法等
  • 自己调试出了问题不知道要怎么去解决 一脸蒙蔽.jpg

其他问题一下也想不出来,就先说这几个吧

let’s go

如何解决这些问题

想要解决一个问题 分三步走(敲黑板,划重点):

  1. 发现问题
  2. 了解问题
  3. 解决问题

跟把大象塞冰箱一个逻辑,首先发现问题,进度条已经瞬间走了50%了, 嗯,没错 就是这么快,可能有人要问题,你就给这吹牛逼吧,发现问题就已经解决50%了? 没错,是的,,我见过好多都不知道自己问题在哪里的人。请注意你们身边有没有这样的同事,有的话赶紧跑。。。(逃)

屁话不多说,开始刚

如何提高自己的编码水平_第1张图片

看不懂别人的代码

看代码也是一门学问,刚接手前人留下的项目,内心想着,这特么是一坨什么鬼,怎么搞!(你 你 你 就说你呢)但是为了小钱钱还得硬着头皮搞下去,然后产品那边来需求了,让你写这个写那个,自己感觉有点懵了, 妈耶,这怎么搞。看代码又感觉无从搞起,或者硬着头皮搞,效率很低。

这时候怎么办呢?

首先你要知道你们项目大体的业务流程,也就是你把项目用一遍,知道大体有哪些功能,然后自己简单构思一下,假如要你从零开始写,你会怎么去写着破玩意

其次,假如有相关同事或者文档,根据他们给的一些信息(比如项目结构,大体流程,业务逻辑,调用流程等)去看跟你相关功能的一些模块的实现,看的时候注意做好笔记 哪些类是什么功能,有什么比较重要的方法,(如过是大佬写的功能你接手的话,你去看他们的接口(interface 或者 abstract ),就完全知道当前这个类是干什么用的,有哪些) 把整个调用的流程记下来,如过你会UML中的时序图,那就直观了。可能有的朋友会遇到这种情况,之前的人也是个坑货,什么抽象封装什么的垃圾的要死,啥都没有,那你也可以通过去看代码,打断点,去看他的方法调用信息,就像这样

public class Main {

    public static void main(String[] args) {
        // write your code here
        method_1(0);
    }

    public static void method_1(int count) {
        if(count < 10){
            method_1(count+1);
        }
    }
}

当count == 9时候,我们看他的方法调用

然后从这边就很直观的看到了它方法调用的信息,然后剩下的就是一步一步看他们方法里做了什么了

(看的时候假如明白了一个方法是干什么用的,没有注释的话可以打上注释哟)

没有什么问题是看源码解决不了的,如过有,那就多看几遍。

自己写代码感觉无从下手,不知道如何去设计,实现功能 写哪些类,写哪些方法等

我们现在都是面向对象编程,但有些新手还是面向过程的编程方式。面向对象和面向过程的差异是, 面向过程解决问题是一条线解决完就完事了,假如下次遇见类似这种问题,还要把之前那个解决的方法逻辑重新写一遍。面向对象会是把问题解决的过程抽象成解决类似问题的一个类,下次遇见这种类型的问题只需要调用当初实现好的方法就可以,效率不言而喻。

当你要写代码的时候,很多人就是看了需求之后直接埋头写代码,写的诗歌什么鬼也不知道,到最后功能是写出来了,但是实现的过程简直就是车祸现场。

当你接到需求的时候:
不要直接写代码!!! 不要直接写代码!!! 不要直接写代码!!!

你首先需要先有个思路,为了完成这个功能,我需要怎么做(又回到开头的把大象塞进冰箱的问题),需要哪些步骤,有的功能在目前的项目里有没有,如过这些想清楚了,先把接口类写好,规范好你的步骤,先实现接口之间的调用,看逻辑是否通畅,然后剩下的就是实现接口里的方法了,就这么简单 (手动摊手)此处注意几点

  1. 一个方法只做一个事情
  2. 一个类只负责一种事情
  3. 假如以后有需求变动,怎么样对现在的你来说更灵活

此处推荐两本书《设计模式之禅》、《重构》

自己调试出了问题不知道要怎么去解决

/*

为API生,为框架死,为了bug奋斗一辈子,吃符号亏,上大小写的当,最后死在需求上。
                                                            ——摘自程序员语录
*/

Bug常年有,你这特别多。 很多Bug的引起都是因为之前写的时候思路不清晰引起的,假如思路清晰,很多bug就已经灭亡在消失的路上了,但是天有不测风云,总有些强壮的Bug还是走到了你面前。

怎么办

我平常都是用的Java 所以这边暂以Java作为例子 Bug主要分为 业务上的Bug 和 程序上的Bug
业务上的主要是输出数据和预期的不一致,显示不正常等,程序上的最严重就是崩溃,其次是内存泄露和性能。
内存泄露和性能问题不在今天讨论的范围,业务上的问题很好处理,基本都是大意引起的,主要面对的就是程序上的崩溃,想处理崩溃,就要理解一们变成语言的异常体系,像Java中,常碰见的异常:

  1. java.lang.NullPointerException(空指针异常)
  2. java.lang.ClassNotFoundException(指定的类不存在)
  3. java.lang.NumberFormatException (字符串转换为数字异常)
  4. java.lang.IndexOutOfBoundsException(数组下标越界异常)
  5. java.lang.IllegalArgumentException (方法的参数错误)
  6. java.lang.IllegalAccessException(没有访问权限)
  7. java.lang.ArithmeticException(数学运算异常)
  8. java.lang.ClassCastException(类型转换异常)
  9. java.lang.FileNotFoundException(文件未找到异常)
  10. java.lang.ArrayStoreException(数组存储异常)
  11. java.lang.NoSuchMethodException(方法不存在异常)
  12. java.lang.NoSuchFiledException(属性不存在异常)
  13. java.lang.EOFException(文件已结束异常)
  14. java.lang.InstantiationException(实例化异常)
  15. java.lang.InterruptedException(线程被终止异常)
  16. java.lang.CloneNotSupportedException(不支持复制异常)
  17. java.lang.OutOfMemoryException(内存溢出异常)
  18. java.lang.NoClassDefFoundException (未找到定义的类)
  19. java.lang.StackOverflowError(堆栈溢出)

知道异常在哪里,然后根据里面的提示信息和错误的堆栈信息,外加上Google和度娘,解决问题,分分钟。

再不行 问我渣渣辉啊

哈哈哈哈哈(杠铃般的笑声)

你可能感兴趣的:(杂记)