ARTS打卡

ARTS是什么?

Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。

第3周(20190805-20190811)-20190819补

Algorithm

leetcode 24 - 两两交换链表中的节点(递归解法)

上周的同一道题目不同解法,采用了递归来解决,代码更加优雅。

递归的三个要点要记住

  1. 返回值
  2. 调用单元做的事情
  3. 终止条件

Review

开始翻译之前的文章,计划每周一小部分。本周翻译的内容如下:

首先让我明确一件事。如果你是一个初级程序员,本文并不是意图让你对你所可能犯的错误感到糟糕,而是希望你能注意到它们,教你发现它们以及提醒你避免它们。

我曾经犯过这些错误,并且从每一个错误中学习到了一些东西。我很开心我能养成避开它们的习惯。我想这对你也是一样的。

以下是我展示的错误,这些错误并没有特定的顺序。

1)不做计划就写代码

高质量的文章容,在一般情况下是不容易被创造的。它需要仔细地思考和研究。高质量的程序同样如此。

高质量的程序的创造过程是如下:思考、研究、计划、编码、验证、修改。不幸的是,这是一个无法压缩的过程。你需要养成总是经历以上过程的习惯。

当我还是一个初级程序员时,我犯的最大错误就是在没有仔细思考和研究就开始编码。这对于一个小型独立的应用来说可能是有效的,但这么做会在一个大的应用上产生大的负面影响。

就像你在说话前需要先思考以免自己后悔一样,在编码前你也需要思考以防你会后悔。编码也是一个表达你思想的方式。

当你生气时,数到10再说话。如果非常生气,数到100。 -托马斯·杰斐逊

以下是我的版本

当你在阅读代码时,重构前请先数到10。如果该代码没有测试,请数到100。

编程的大部分工作集中在阅读以前的代码,研究需要什么、如何适应当前系统,以及计划如何使用最小的、可测试的增量代码来实现需求。在整个过程中可能只有10%的时间是用于写代码。

不要把编程与编码等同起来。编程是一项需要培养的基于逻辑的创造力。

2)写代码前做太多计划

是的。在一头扎进编码之前先计划是一件好事情,但好事情做多了也会伤害到你。水喝多了还会中毒。

不要寻找完成的计划。在编程的世界中这是不存在的。找到一个足够好的计划你就可以开始了。事实上,你的计划是会变的,但它的好处是强迫你进入某种模式以使得你的代码更加清晰。过多的计划会浪费你的时间。

我只会讲关于计划小特性。一次规划所有的功能是一种犯罪!这就是我们说的瀑布方法,这是一个系统线性方法,它需要完成一步再进行下一步。你可以想像这种方法这需求多少计划。这不是我想在这里讨论的计划类型。瀑布方法对于大部分软件工程而言是不合适的。任何复杂的事务都只能通过敏捷来适应现实。

编写程序是一项响应式的活动。你可能会添加一项你从来没有在瀑布计划中想过的特性。你可能会因为你没在瀑布计划中思考过而移除特性。你需要改bug和适应变化。你需要敏捷。

然而,总是计划你的下一步特性。你得小心地去做这个事情,因为过少的计划和过多的计划都会损害你的代码质量,而损害代码质量这件事是不值得冒险的。

Tip

一个iOS开发都会遇到的崩溃问题,以下是定位方法

定位iOS代码中崩溃的位置

Share

也不能算是分享了,只是一些小技巧,保持打卡

关于Xcode的一些使用技巧和说明可以在苹果的官方文档上找到。

Xcode Help

第二周(20190729-20190804)

Algorithm

leetcode 24 - 两两交换链表中的节点

注意链表的操作,记住两个关键点

  1. 设置前置节点来简化代码
  2. 改变指针时,从前往后改

Review

The Mistakes I Made As a Beginner Programmer

接上周,初级程序员易犯错误

14-25错误

  1. 不质疑现有代码
  2. 痴迷于最佳实践
  3. 痴迷于性能
  4. 不考虑终端用户的体验
  5. 没有为工作选择合适的工具
  6. 没意识到程序问题会造成数据问题
  7. 重新造轮子
  8. 对Code Review没有正确的认识
  9. 不使用版本控制
  10. 过度使用共享状态
  11. 对错误没有正确的认识
  12. 不休息

Tip

非原创,在iOS开发中,xcode无法显示中文,可用下面介绍的方法解决。

【iOS】让NSLog打印字典显示得更好看(解决中文乱码并显示成JSON格式)

Share

在阅读代码时,如果是App的代码,可以通过以下方式来阅读

  1. UI
  2. 数据获取
  3. 数据显示

先进行简单的分层,查看UI的设计,再看网络数据的获取,最后再去看数据流,这样对于某个业务流的实现会达到一个比较清晰的状态。

后续再出文章详细解说。

第一周(20190722-20190728)

Algorithm

leetcode 206 - 反转链表题解

常考链表题,记住从头节点前置开始不停翻转,并且使用一个指针来记录住旧链表即可。

Review

The Mistakes I Made As a Beginner Programmer

文中讲了一个初级程序员易犯的错误,文中的一些错误有些高级程序员都还会犯,很有借鉴意义,值得一看。

文章有些长,这周看了一半,下面列一些这些错误:

  1. 不计划就开始编码
  2. 编码前做过多的计划
  3. 低估代码质量的重要性
  4. 想到一个方案就开始执行
  5. 不丢弃(不愿放弃那些原有的不好的方案)
  6. 不谷歌
  7. 不使用封装
  8. 为未知进行计划
  9. 没有使用正确的数据结构
  10. 使现有代码更混乱
  11. 给显而易见的事写注释
  12. 不写测试
  13. 假设事情如果是正确的

Tip

在接触新代码过程中会有些很庞大的代码库,这时候看起来会有很多不便。

接触到了两个新工具对看大的工程代码有用处。一个是Drafter,一个是tree,介绍如下:

Drafter简单介绍

tree简介

Share

不算share,目前还在学习中,以知识点总结为主

-fobjc-arc和-fno-objc-arc的作用

posted @ 2019-07-29 09:20  狸猫副园长  阅读(158)  评论(0编辑  收藏  举报