ARTS打卡
ARTS是什么?
Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。
第3周(20190805-20190811)-20190819补
Algorithm
leetcode 24 - 两两交换链表中的节点(递归解法)
上周的同一道题目不同解法,采用了递归来解决,代码更加优雅。
递归的三个要点要记住
- 返回值
- 调用单元做的事情
- 终止条件
Review
开始翻译之前的文章,计划每周一小部分。本周翻译的内容如下:
首先让我明确一件事。如果你是一个初级程序员,本文并不是意图让你对你所可能犯的错误感到糟糕,而是希望你能注意到它们,教你发现它们以及提醒你避免它们。
我曾经犯过这些错误,并且从每一个错误中学习到了一些东西。我很开心我能养成避开它们的习惯。我想这对你也是一样的。
以下是我展示的错误,这些错误并没有特定的顺序。
1)不做计划就写代码
高质量的文章容,在一般情况下是不容易被创造的。它需要仔细地思考和研究。高质量的程序同样如此。
高质量的程序的创造过程是如下:思考、研究、计划、编码、验证、修改。不幸的是,这是一个无法压缩的过程。你需要养成总是经历以上过程的习惯。
当我还是一个初级程序员时,我犯的最大错误就是在没有仔细思考和研究就开始编码。这对于一个小型独立的应用来说可能是有效的,但这么做会在一个大的应用上产生大的负面影响。
就像你在说话前需要先思考以免自己后悔一样,在编码前你也需要思考以防你会后悔。编码也是一个表达你思想的方式。
当你生气时,数到10再说话。如果非常生气,数到100。 -托马斯·杰斐逊
以下是我的版本
当你在阅读代码时,重构前请先数到10。如果该代码没有测试,请数到100。
编程的大部分工作集中在阅读以前的代码,研究需要什么、如何适应当前系统,以及计划如何使用最小的、可测试的增量代码来实现需求。在整个过程中可能只有10%的时间是用于写代码。
不要把编程与编码等同起来。编程是一项需要培养的基于逻辑的创造力。
2)写代码前做太多计划
是的。在一头扎进编码之前先计划是一件好事情,但好事情做多了也会伤害到你。水喝多了还会中毒。
不要寻找完成的计划。在编程的世界中这是不存在的。找到一个足够好的计划你就可以开始了。事实上,你的计划是会变的,但它的好处是强迫你进入某种模式以使得你的代码更加清晰。过多的计划会浪费你的时间。
我只会讲关于计划小特性。一次规划所有的功能是一种犯罪!这就是我们说的瀑布方法,这是一个系统线性方法,它需要完成一步再进行下一步。你可以想像这种方法这需求多少计划。这不是我想在这里讨论的计划类型。瀑布方法对于大部分软件工程而言是不合适的。任何复杂的事务都只能通过敏捷来适应现实。
编写程序是一项响应式的活动。你可能会添加一项你从来没有在瀑布计划中想过的特性。你可能会因为你没在瀑布计划中思考过而移除特性。你需要改bug和适应变化。你需要敏捷。
然而,总是计划你的下一步特性。你得小心地去做这个事情,因为过少的计划和过多的计划都会损害你的代码质量,而损害代码质量这件事是不值得冒险的。
Tip
一个iOS开发都会遇到的崩溃问题,以下是定位方法
Share
也不能算是分享了,只是一些小技巧,保持打卡
关于Xcode的一些使用技巧和说明可以在苹果的官方文档上找到。
第二周(20190729-20190804)
Algorithm
注意链表的操作,记住两个关键点
- 设置前置节点来简化代码
- 改变指针时,从前往后改
Review
The Mistakes I Made As a Beginner Programmer
接上周,初级程序员易犯错误
14-25错误
- 不质疑现有代码
- 痴迷于最佳实践
- 痴迷于性能
- 不考虑终端用户的体验
- 没有为工作选择合适的工具
- 没意识到程序问题会造成数据问题
- 重新造轮子
- 对Code Review没有正确的认识
- 不使用版本控制
- 过度使用共享状态
- 对错误没有正确的认识
- 不休息
Tip
非原创,在iOS开发中,xcode无法显示中文,可用下面介绍的方法解决。
【iOS】让NSLog打印字典显示得更好看(解决中文乱码并显示成JSON格式)
Share
在阅读代码时,如果是App的代码,可以通过以下方式来阅读
- UI
- 数据获取
- 数据显示
先进行简单的分层,查看UI的设计,再看网络数据的获取,最后再去看数据流,这样对于某个业务流的实现会达到一个比较清晰的状态。
后续再出文章详细解说。
第一周(20190722-20190728)
Algorithm
常考链表题,记住从头节点前置开始不停翻转,并且使用一个指针来记录住旧链表即可。
Review
The Mistakes I Made As a Beginner Programmer
文中讲了一个初级程序员易犯的错误,文中的一些错误有些高级程序员都还会犯,很有借鉴意义,值得一看。
文章有些长,这周看了一半,下面列一些这些错误:
- 不计划就开始编码
- 编码前做过多的计划
- 低估代码质量的重要性
- 想到一个方案就开始执行
- 不丢弃(不愿放弃那些原有的不好的方案)
- 不谷歌
- 不使用封装
- 为未知进行计划
- 没有使用正确的数据结构
- 使现有代码更混乱
- 给显而易见的事写注释
- 不写测试
- 假设事情如果是正确的
Tip
在接触新代码过程中会有些很庞大的代码库,这时候看起来会有很多不便。
接触到了两个新工具对看大的工程代码有用处。一个是Drafter,一个是tree,介绍如下:
Share
不算share,目前还在学习中,以知识点总结为主