如何建立你自己的开发知识体系

1,861 阅读9分钟

1、前言

首先,我认为学习总结,要有所总,所结,就是有归纳后,能用自己的话告诉别人!有所结,就是有所收获输出,一般我认为是思维导图,所以,每篇文章前,我都会先给出文章的脑图:

建立你自己的开发知识体系.png

2、正文

学习任何文章之前,一定要有可行的方法论,否则很难有所突破。上面脑图中,我列出了一些个人认为非常好的方法论,所以,在学习课程前,先了解一下,对后续自学或其它的学习都会有益处。

一个知识点

  1. 为什么需要 XXX
  2. 什么是 XXX
  3. 怎么使用 XXX
  4. 使用 XXX 时注意的问题
  5. XXX 的应用领域
  6. XXX 的优缺点
  7. XXX 触类旁通

这个理论是在郝斌老师所录制的计算机(编程)教学视频里提到的,很适合初学者,有兴趣的大家可以自行搜索。

为什么这个很受用?因为简单的套用一下,你就知道自己是否掌握了一个知识点!

举例:

  1. 为什么需要 单例模式
  2. 什么是 单例模式
  3. 怎么使用 单例模式
  4. 使用 单例模式 时注意的问题
  5. 单例模式 的应用领域
  6. 单例模式 的优缺点
  7. 单例模式 触类旁通

当我们在谈论性能优化时,我们在说什么?

  1. CPU
  2. 内存
  3. 网络
  4. I/O

大家有没有发现,以上4点对应计算机的基本组成原理,在谈论性能优化时,其实就是在说计算机的瓶颈!,所以,当在谈论性能优化时,我们可以做的,就是把计算机的瓶颈提高或转化

单一 CPU 处理不过来,我们新加 GPU;一个 CPU 处理不来,我们8核、16核心!多核 CPU 处理不过来,我们可以集群!分布式!云化!

当内存不足时,我们加内存!内存压缩!内存置换

当网络带宽不够时,我们加带宽!我们加服务器!我们加异地多端!

当I/O过高时,我们取舍I或O!我们把I和O拆分

在深入到程序、代码中,所有的优化,是不是也一样,你要减少计算和循环次数,你要节省内存开销!你要网络数据缓存!你要定量定时入库

所有的性能优化,不过如此!大家明白了吗?

移动设备时代,性能问题还有一个就是在小的空间里没有大的电池,其实就是电池的瓶颈!但是一般开发者并不关心,因为他们感觉自己只是开发App,使用App的是用户和他们的手机设备!电池的瓶颈有消耗损耗2个问题,消耗是我们写的程序在实现功能的同时能不能减少计算量,损耗是我们写了一些我们并不需要的代码导致了不必要的计算量。如果平时有注意的,2015年时三星手机针对那么功耗过大的App 直接强制退出,这可能也是大家说的对中国本地化做不好的原因导致失败吧?因为优化是不是真的为了解决卡顿或性能,就一定要为所欲为呢?这也是开发者需要思考的问题。电池技术当下没有突破的时候,电量依然是非常值得关注的事情。现在iOS 和 Android 都开始统计App的电量使用情况,所以不从现在开始节能,你的App可能就被用户删除。当然,针对这些问题,iOS/macOS 系统苹果做了很多系统层级的优化,这也许也是很少开发者关心的原因,感兴趣的可以看看历年 WWDC - Apple Developer,苹果很多关于电量节能有很多策略可以借鉴。

换空间

  1. 压缩
  2. 分片
  3. 索引

上面说到的性能优化,从大方向时如此,然后细化到具体,会有非常多的算法或技巧,其中换空间就是一个经典的问题。

大家一定听说过类似:

  • “20张100MB的图片,怎么显示在1G内存的设备上”
  • “在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。”
  • “给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?”

这些问题,其实解法,基本上可以用上面3个方法!

大家明白了吗?建立你自己的开发知识体系!其实并不难,学习是没有捷径,但有方法!,所以,了解和掌握更多的方法论,构建自己的知识体系树,这样,才是不用被动的每天在各种各样的文章中,人浮于事!

学什么

  1. 不要被难倒 —— 分治思想
  2. 不要想太简单
  3. 学习曲线陡峭度,跳过原则
  4. 多疑问,多思考,多总结
  5. 学习不仅仅是知识,还有过程
  6. 授人以鱼不如授人以渔

我个人推崇 授人以鱼不如授人以渔,学习不是给你知识,而是学会如果获取知识,如何知识点串联起来,如何快速有效的掌握知识!

学习技巧

  1. 先实践再学理论更有感觉
  2. 按工作需要来,工作毕竟是实践,最容易有成就感的
  3. 实践&思考
  4. 经验&总结
  5. 方向很重要,坚持方向更重要
  6. 不断深入,理解和认知都在更新
  7. 把逻辑和流程整理出来,更清晰
  8. 尝试作为一个提供 api 的人
  9. 并不是样样精通,而是有擅长的领域。
  10. 融会贯通

很多人可能迷恋/迷信学习的快捷方式,每次学习一个知识点时,总时想找到捷径在学习,往往不得其道!有需要,大家可以看看我之前的年终总结 2020,爱你爱你 | iHTCboy's blog,这里我就不多说了。关于学习,先深挖某一领域,经过大量的学习和实践后理解了编程的本质,从而可以灵活调配和运用自己已经积累的知识。切记!切记!切记!学习是没有捷径!但有方法!

知识点

  1. 组件化是将上层业务隔离开,下层提供通用能力的一种架构模式
  2. 组件化、热修复、动态化、大前端、Flutter、小程序
  3. 提高编译速度,内存优化,性能优化,电量优化,测试驱动开发,架构设计模式和iOS中算法数据结构的使用

虽然大家都是程序员,工程师,但是,所在行业不同,现实是千差万别的!了解和熟悉的知识也是不尽不同!如何把计算机的万千技术用到自己所在的行业?每个人的精力有限,但是无极限,当别人告诉你不可能时,那一定是他度量的尺子与你不同!我们度量一件事,要尽量放长线,放大眼光,放高视角!,对于知识点,有太多的东西,选择自己感兴趣和工作需要的,不用太关心别人的评论,绝大多数事件,不是做不来,而是需要长期做

面试

  1. 被别人问底层原理答不出所以然
  2. 1.业务代码谁都会写,你还会什么?
  3. 2.我觉得iOS开发不值这个价,我们公司这个价的也不是没有都是后台,前端不需要。
  4. 公司不考虑员工的成长,多待无益
  5. 成体系地提升自己的内功,完善自己,然后反哺到工作上,让工作效率和质量达到质的提升,进而从容应对技术的更新迭代
  6. 面试应聘者的时候,通常都会问他所负责项目的整体架构是怎样的。
  7. 只对自己负责的那摊子事儿说的溜,而回答所在项目整体情况时却支支吾吾,面试不会成功。

如果不是自由工作者,我想大多数的国内同学都没有机会选择,所以,面试是一个总是要面对的问题,每次辞职、被辞职,大家就重新拿起试题集来刷,刷题目!刷算法!刷刷刷!

所有的问题不能简单的一刀切!,经过这么多年,我的理解里,问题没有对与错,好与坏。刷题目也是一样。我想说的是内力是不能一天俩天就长成,所以为面试,建立自己的开发知识体系,面试题就是西天取经,每一道题目就是一个怪兽,你不可能一天打败所有怪兽,所以,不要忽视七七四十九日的轮回。

书籍

  1. 《代码整洁之道》
  2. 《人月神话》

书籍很多,好书也很多!这里暂时不列出所有值得看的技术书,因为,我害怕大家一下子又回到原点,买了一堆书,然后不知道从那里开始!,所以,我是不建议买书!买书是自己要系统学习的时候买!怕伤害眼睛时买,但不能因为别人推荐或感觉不错就买!要从自身出发,从自己工作,从自己从事的行业,从自己的规划发展,从自己的兴趣,任何事情的起点,都是初心,不要忘了初心!

3、总结

 关于如何建立自己的开发知识体系,以上就是我认为比较重要的点(还有很多方法论,但是多并一定是好事,以后有机会在归纳吧),贯穿到开发的每一个细节,需要大家长期长时间的学习、研究和经历,才能打造一套属于自己的知识树,任何告诉你可以复制的知识,你可以复制!但永远无法粘贴到自己脑心中!


更多关于 iOS 开发和程序开发相关的内容,可以查看系列,目前还在连载中 【学习总结】iOS开发高手课 -- (连载中) | iHTCboy's blog,以上,希望对你有用!

参考


  • 如有侵权,联系必删!
  • 如有不正确的地方,欢迎指导!
  • 如有疑问,欢迎在评论区一起讨论!

注:本文首发于 iHTCboy's blog,如若转载,请注来源