kaFFa fORest

kaFFa's Blog

解决编程领域难题的有效方法

为什么会有编程领域的难题?

现实世界很复杂,编程是世界的抽象和理想模型,理想和现实的差距存在于细节上,编程经常会遇到这些细节带来的鸿沟。

解决编程领域难题的有效方法是什么?

  1. 独立思考

    一般来讲,大多数问题都是读的太少而想的太多带来的。在允许的情况下,推荐独立阅读思考的方式来解决问题。

  2. 向外部求助

    为了解决一个具体问题,第一步是将问题定义清楚,第二步将问题复杂度降维,例如采用正交的方式分解。 在决定向外部求助时,首选当然是浏览官方网站文档,毫无疑问,这是最新一手参考资料。 如果再推荐一个有效而快速的解决,无疑是 Stack OverFlow

编程领域问题两种分类维度:

  1. 按平台和设备

    • 桌面系统
      • Windows:最佳效率桌面系统
      • macOS:与 Windows 相比,有所长,有所短
      • GUN/Linux:建议玩 CentOS 或 Debian
        • Debian:以服务稳定闻名
        • Ubuntu:最流行易用
        • openSUSE:界面好看
        • Fedora:RHEL创新实验田
        • CentOS:RHEL换商标版,一个靠谱的服务器版选择
        • Arch Linux:功能全定制
        • Gentoo:功能定制靠编译
        • Raspbian:极客爱玩
      • Unix
        • FreeBSD:玩BSD桌面首选
        • OpenBSD:可能是世界上最安全的系统
        • NetBSD:多CPU架构
      • Chrome OS:基于浏览器的计算环境
      • Xfce:轻量级多媒体桌面
    • 移动设备
      • Android:移动设备半边天
      • iOS:先进的移动OS
      • Windows Phone:输在移动OS的设计
      • Firefox OS:低端机好用
      • Sailfish/Meego:寄予厚望却错过时代
      • Sybian/WinCE/PalmOS/NucleusOS:历史
    • 穿戴设备
      • watchOS:目前最成功的手表OS
      • Android Wear:没有机会用
    • 平板设备
      • iPad:打破PC思维,基于场景的资讯、娱乐和媒体平台
      • Android Tablet:生产力平板
      • Kindle:读书人最好
      • Windows RT:不能运行传统程序的 Windows 大家不买单
    • 浏览器
      • Trident:作古
      • Webkit:将作古
      • Gecko:作古
      • Presto:有前景
      • Servo:有前景
      • Blink:有前景
    • Web
  2. 按语言:

    • 按类型模型
      • 强类型
      • 弱类型
    • 按范式
      • 面向对象
      • 函数式
      • 过程式
      • 多范式
    • 按交互
      • 编译型
      • 解释型
    • 按热度
      • 不会不好意思打招呼系列
        • JavaScript
        • HTML
        • CSS
      • 大公司都用系列
        • C/C++
        • Java
      • 聪明系列
        • Python
        • C#
        • Delphi
      • 快系列
        • PHP
        • Ruby
      • 有Qian景系列
        • Swift
        • Go
        • Kotlin
        • TypeScript
      • 科研系列
        • F#
        • R
        • Matlab
      • 极客系列
        • Clojure
        • Perl
        • Rust
        • Assembly

编程领域问题的根本难度

编程领域问题不仅仅只有分类,根据金字塔原理,分类是一种局部但重要的思维模式,解决问题最终依赖的是网状的知识图谱。 从长远来看问题的解决最终依赖于自我的学习力,而决定编程领域问题的根本难度可能在于:

  1. 语言障碍 因为语言学习本身不是短时间能解决的问题,所以如果当待解决的问题所依赖的知识与提问的人之间存在语言障碍,那么解决此问题将会面临一个较高难度。

  2. 自我认知 有一本书叫做《提问的艺术》,可以参考。从测试的角度上,一个好提问,需给回答的人创造一个条件,方便回答者重现或进入问题的场景,一个自我认知好的人容易提好问题。

解决编程领域难题的有效方法是推演和搜索

  1. 推演 即依赖自我认知

  2. 搜索 除了依赖自我,更多的是依赖外部