当我们在谈论编程的时候,我们在谈论什么技术干货

编程中思考

2016-04-18  本文已影响109人  One9398

前言

前不久在微博上关注一个ID为的微博用户(后来百科之后才发现又是国内程序员中的牛人之一,就是池大大文章经常提到的“王垠”),无意间查看了他之前发的微博,其中许多都是对一些编程语言的犀利评价,而所发的微博之中一篇名为编程的智慧长文吸引了我注意,出于对内容的好奇就对这篇文章进行了阅读。阅读过程中,发现了博主对编程和设计语言的思考都有着独立深刻的见解,文章里都是对如何在编程中成长和对代码正确实践的干货指导,旨在帮助那些把编程作为主职工作的人们在技术开发的路上更好地找到属于自己正确的方向。阅读完这篇文章后,我发现里面提到的条条编程规范和编码要求,对自己现在以及未来的编程之路都有着很大的价值,也让我设想如何编程中更好融入自己的思考,对代码的反思以及对程序设计的反思。
在阅读了文章后几天,自己也不时地想如何在编程中有效成长,觉得有必要将文章《编程的智慧》中对针对自己有价值的内容提取记录下来,进行自我针对性的思考和实践,于是也就有了写这篇文章念头。

内容

编程提高 - 代码提炼

文中提到提高编程水平最有效的方法——提炼代码,学会对自己所写的代码进行思考。当写完一段代码看看是不是太长了,还能够缩减吗?是不是可读性太差了,要靠不必要的注释让其它人甚至以后的自己才能看懂这段代码。用这样的思考过程来提炼自己的代码,减少代码中的冗余。就算是阅读开源库或者一些其它人的代码时,也应该用这样思考方式来阅读他们的代码,来提取他人代码中的精华。这里引用下文章里一句话"作为一个好的程序员,应该看他删掉过自己多少的代码,留下来又是怎样的代码。"只有对自己的代码进行反复地思考,修改和提炼,以此才能改进自己的代码质量,真正提高自己的编程水平。

优雅的代码 - 让代码更加清晰

优雅的代码应该是容易管理和查看的,并且逻辑结构上是应该对称的,就像树叉式的树
状结构,一个常见的场景就是在if/else语句的使用上,让if/else的分支永远都是成对出现,不要仅仅因为省略掉少量的重复性代码而去省略一个else的分支,这样一来破坏整个逻辑的结构和对称性,使得在代码理解上就需要多一点投入。

if (conditionA) {
  ...
  if (conditionA-1) {
      ...
  } else {
      ...
  }
  ...
} else if (conditionB) {
  ...
} else {
  ...
}

模块化的代码 - 让代码更加独立

对代码的模块化,应该是对代码所表示的逻辑进行模块化,也可以在单个文件进行模块化的抽取,而不是单纯地将代码分成多个不同的文件和目录。对代码进行模块化处理的一种常见且比较有效就是"使用函数",通常的函数都会有一个输入和对应的输出,因此就可以将能够模块化的代码用不同的函数进行各自的封装,在最后的使用就是对模块化函数的组合调用。

文章也提到了想让代码更好模块化的必要方式:

可读的代码 - 恰当地命名,减少注释

文章主张了"真正优雅可读的代码,是几乎不需要注释的",当然这样的说法也是需要前提的。而给代码写注释这件事上,在方便他人的阅读上的确有所作用,而大量注释存在于代码之中,让代码本身阅读起来更加困难,并且随着代码不断改进和更新,也带来了更新注释的成本。当然注释也有存在的必要性,在少数的情况下,使用违反常规做法的代码实现则需要使用短注释来解释说明设计实现的理由。

以下就是几个文章提到减少写注释的必要方法:

"局部变量的本质——作为电路中导线的存在"

if (...) {
  let info = "good"
  print(info)
} else {
  let info = "bad"
  print(info)
}

简单的代码 - 使用程序语言中经过时间考验的特性

每一个程序语言多少会有一些自己的语言特性,对于语言特性的使用,应以其可靠,有效的前提下使用,并非语言提供什么特性,就一定需要用到什么.

几个具体的应该避免使用的语言特性如下:

if (...)
    action1()
    action2()

原本if条件下只有执行action1函数,而意外地对action2进行缩进,使得也作为if条件下执行函数而等待调用.

/*
  for(...) {
      if(conditon1) {
          continue;
      }
      ...
  } 
*/
  for(...) {
      if (!condition1) {
          ...
      }
  }
/*
while (condition1) {
    ...
    if (condition2) {
        break;
    }
}
*/
while (condition1 & !condition2) {
...  
}

直观的代码 - 永远用更直接,更清晰的写法

表达复杂的执行条件判断时,减少逻辑运算符的使用,利用简单的if-else嵌套,可以让函数执行条件更加清晰.

正确处理错误

正确处理null指针

null其实不是一个合法的对象,类型应该是NULL,不该是任何其他一种普通类型.而充分利用穷举法的思想,去更好处理null指针:

防止过渡工程和过渡设计

总结

面对长长一篇的干货文章,自己粗浅的总结下来也需要不少文字,更何况里面有着许多的内容需要反复的推敲和琢磨,也有着不少内容需要大量的实践和思考后才会有更深一步理解,.而每一段时间的实践和思考想必让这篇文章带来的价值不断彰显,的确值得在不同时期都多看几遍,一定要多回顾。

上一篇 下一篇

猜你喜欢

热点阅读