学习某些 API 的方法

这里的 API 可能是某个系统平台,开发包,开发平台,开发工具等等,因为任何系统和技术方法提供给开发者的打包方式都是一系列 API 。

无论你有在哪一层级开发,从硬件驱动到系统软件,从应用程序到网页服务器总是要依赖和使用某些 API(Application Programming Interface 应用程序接口 ) ,当然,通常要依赖和作用更底层或同层的 API 。因此,我们总是要学习和使用各种 API 。当学习的时候要注意总结一些方法,以提高学习的效率:

首先,要了解 API 的功能和作用。也就是说知道它是什么,能用来做什么。可能通过 Google 一些介绍或是某些入门级的教程,都可以达到了解的目的。这一级别可以称作 Level 1

然后,要学会使用它们,使用它们去构建你的程序,实现你想做的事。这可以通过学习一些教程和参考 API 的文档。这时可做一些质量要求不高的和不太复杂的小练习。这里是 Level 2

之后,就可以通过不断练习进尔掌握一些高级技巧,以达到熟练应用的目的。这可以通过学习某些高级教程,或者到论坛,网上寻找资料,或跟高手进行学习。这时可以做一些专业级别的或是比较复杂的,质量较高的练习。这里就到了 Level 3

再后,因为这时对它们的使用已经了如知掌了,就要去了解它们的内部实现,去看看它们的源码,总结它的优缺点,发现隐藏的陷阱和深处的秘密。这通常没有什么教程,只能去看它们的源码,去论坛和网上寻找资料,也要跟高人学习或切磋。这里是Level 4

最后,就是定制,修改,扩展或优化它们的实现。这没办法,只能通过源码了。这里是最高境界 Level 5

基于上面的讨论,如果学习的 API 是一套开源的系统,那么可从头走到底,最终达到扩展和定制,这也是所有的开源软件的发展模式和魅力所在。但对于更多的非开源系统和平台,当能熟练使用后,最多也只能去猜测它们底层以实现,当然,也能去发现其深处的秘密并进行 Hack ,如现在人们对于 Windows 的研究也不仅仅止步于熟练使用它们。

当我们走完了这一过程,就可以去学习另一个系统平台,另一套 API 了。

另外,每一个阶段,都可要多多总结,多多实践,把所得进行梳理写成文档,这就是常言的经验。特别是,后面二三个阶段更是要把所得写下来,因为它们得来不易,非常宝贵。前面二个阶段所有人通过学习一些教程即可达到,但最后二个阶段要靠更多的练习和参悟,也靠几分天赋才能走过,所以一旦达到后面二个阶段,就更要把它们变成经验。

当然,我们的精为是有限的,不可能对每个系统平台的 API 都达到 Level 5 的境界,都需要走到最后一个 Level 。我们要有所选择,根据我们的需要,达到某个 Level,够用即可。但是我们必须在某个或某几个系统平台上达到最高境界。正所谓有主有从,有我所选。

学习某些API的方法的更多相关文章

  1. canvas学习之API整理笔记(二)

    前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...

  2. MVC学习系列4--@helper辅助方法和用户自定义HTML方法

    在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...

  3. 学习FFmpeg API

    ffmpeg是编解码的利器,用了很久,以前看过dranger 的教程,非常精彩,受益颇多,是学习ffmpeg api很好的材料.可惜的是其针对的ffmpeg版本已经比较老了,而ffmpeg的更新又很快 ...

  4. Java操作mongoDB2.6的常见API使用方法

    对于mongoDB而言,学习方式和学习关系型数据库差不太多 開始都是学习怎样insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是 ...

  5. 【转】学习FFmpeg API – 解码视频

    ffmpeg是编解码的利器,用了很久,以前看过dranger 的教程,非常精彩,受益颇多,是学习ffmpeg api很好的材料.可惜的是其针对的ffmpeg版本已经比较老了,而ffmpeg的更新又很快 ...

  6. 基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法

    基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法 Siamese CNN Temporally Constrained Metrics T ...

  7. 学习linux/unix编程方法的建议(转)

    假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过 我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux ...

  8. atitit.api设计 方法 指南 手册 v2 q929.docx

    atitit.api设计 方法 指南 手册 v2 q929.docx atitit.api设计原则与方法 1. 归一化(锤子钉子理论)1 1.1. 链式方法2 1.2. 规则5:建立返回值类型2 1. ...

  9. Java学习-026-类名或方法名应用之二 -- 统计分析基础

    前文讲述了类名或方法的应用之一调试源码,具体请参阅:Java学习-025-类名或方法名应用之一 -- 调试源码 此文主要讲述类名或方法应用之二统计分析,通过在各个方法中插桩(调用桩方法),获取方法的调 ...

随机推荐

  1. windows下webrtc的编译 2016(转)

    ====================20160124更新============================= 推荐一个FQ工具,shadowsocks,是需要付费的,一年也才不到100块,移 ...

  2. vue + django 的权限控制

    用vue做前端页面, Django 提供api, 写了一个后台系统,结合方式是vue打包后的dist目录直接作为Django的静态目录, 这样的好处是不用配置Nginx具体的做法不在这里写了,记一下遇 ...

  3. Codeforces 622F The Sum of the k-th Powers(数论)

    题目链接 The Sum of the k-th Powers 其实我也不懂为什么这么做的……看了无数题解觉得好厉害哇…… #include <bits/stdc++.h> using n ...

  4. 2017-10-29-afternoon-清北模拟赛

    T1 洗澡 贪心:将未匹配的右括号花费1变为左括号,最有多余的左括号有一半变成右括号 #include <cstring> #include <cstdio> ); int n ...

  5. luogu P3811 【模板】乘法逆元

    题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...

  6. 板子-GOD BLESS ALL OF YOU

    字符串: KMP #include<cstdio> #include<cstring> ; ]; ]; int l1,l2; void get_next() { next[]= ...

  7. putnik

    可将旅行商的路线看作是从n - 1号点出发, 跳着到0号点, 再折返走完之前跳过的点. 想到这个, 暴力就可以得50分. 正解是DP. f[i][j](i > j)表示, 从i开始跳, 并返回至 ...

  8. 346. Moving Average from Data Stream

    /* * 346. Moving Average from Data Stream * 2016-7-11 by Mingyang * 这里注意的就是(double) sum / count * su ...

  9. Android图片缓存之Glide进阶(四)

    前言: 前面学习了Glide的简单使用(http://www.cnblogs.com/whoislcj/p/5558168.html),今天来学习一下Glide稍微复杂一点的使用. GlideModu ...

  10. js转换金额为中文大写

    function changeMoneyToChinese(money){ var cnNums = new Array("零","壹","贰&quo ...