版本:v1.3
摘要
本文主要介绍了软件技术领域内,做软件开发期间,常见的,通用的,共同的,一些知识。
2015-05-22
修订历史 | ||
---|---|---|
修订 1.3 | 2015-05-22 | crl |
|
版权 © 2015 Crifan, http://crifan.com
目录
插图清单
目录
摘要
此处整理一些,软件开发期间,会遇到的一些通用的技术概念或名词。
很多技术的框架都是有Host和Device(Controller)
比如:
蓝牙技术中,也有主机端Host和设备Device端,的概念。其中蓝牙中将设备端,有时候也叫做Controller端,指的是设备控制器,设备端。
详见:蓝牙协议详解
USB协议中,也有主机端和设备端的概念。
profile,作为英文单词,本意是:侧面;轮廓;外形;剖面;简况
而在软件技术领域内profile的的含义,可以翻译为:
不同的协议层次,档次,应用领域划分,对应不同的协议和规范
再白话点说就是:(某种技术)根据应用领域不同,而专门划分出来的一部分协议或规范的总和
比如:
卫星通讯,DVB,方面也有相关不同profile的划分
DVB,根据应用领域不同,可以分为:
PROFINET也是有多个profile的协议:
蓝牙协议中的profile的概念更明显:
蓝牙中,根据应用领域不同,针对不同领域,定制了很多profile,相当于子协议。
相关的子协议,非常多。具体的解释参见协议的详细介绍:
详见:蓝牙协议详解
在软件开发期间,涉及到软硬件产品时,常常会听说到一个词:portfolio
其英文原意是:n. 公文包;文件夹;证券投资组合;部长职务
而实际上此处的含义,更接近于:产品组合,产品线,一系列的产品,产品家族
此处列举很多例子来解释其含义,如下:
[ZT]Freescale’s i.MX and Micrium’s μC/OS-II | 在路上
中的:
The i.MX portfolio is a central feature of Freescale"s i.Smart smartphone reference design, providing power performance to our Innovative Convergence platforms.
New English Words v2011-10-31 | 在路上
中的:
XXX discussed the four key growth technologies pervasive across the ACS portfolio.
Micron Technology, Inc. - Serial NOR Flash
中的:
The broadest SPI NOR portfolio in the market
Micron Technology, Inc. - Serial NOR Flash
中的:
Micron Flash Portfolio
Micron has one of the broadest portfolios of NOR and NAND Flash solutions in the industry.
We have products that are tailored to meet your application requirements, including a strong product offering for automotive applications, which require more reliability than others.
HS==High Speed==高速(传输速率)
有些技术,涉及到传输速度的话,会提到高速,High Speed。
比如USB 2.0的HS,Bluetooth 3.0+HS。
高速的高,是相对而言的,是相对于更低一些的速度来说的:
USB 2.0的HS是480Mb/s,是相对于USB 1.1的Low Speed(1.5Mbs/s)和Full Speed(12Mb/s)而言更高一些。
不过后来的USB 3.0的Super Speed(5.0Gb/s),则是比HS更高。
之前版本的蓝牙的速度就相对较低,而后来的标准Bluetooth 3.0,支持更高的速度,所以就叫做HS,意思是更高的速度,高速了。
很多设备或产品的手册中,都会出现一个:Technical Notes,中文暂翻译为技术说明
此技术说明的主要作用是:针对此处涉及的技术,尤其是产品相关的技术,如何使用,如何将其应用到产品,需要哪些注意事项,等等这方面的内容,都专门写个说明,让技术的使用者更快的上手使用。
比如:
在计算机领域,包括计算机软件的应用和开发,都可能会遇到Image这个词汇。
Image,本意是:图像,影像。
在计算机领域内,往往指的是,对应的一个文件,该文件包含了相关的软件的二进制文件。
而相关的软件,往往指的是:操作系统。
而操作系统,有的指的是普通的桌面级的,比如Win7,也有的指的是嵌入式领域内的,比如嵌入式Linux
所以,你可能会看到这样的说法:
此处的镜像Image,指的是就是:
对于微软开发的Win7这个桌面操作系统来说,往往都是对应的.iso文件
是可以刻录到光盘(或者启动U盘中模拟出来的光盘CDROM)中。
然后用词光盘,就可以启动笔记本电脑,然后按照正常的操作步骤去安装Win7这个操作系统了。
即:
桌面级操作系统的(往往是ISO的,可刻录用于启动和安装系统的)镜像文件
此处的image,就是指的是:
在嵌入式Linux系统开发过程中,已经把Linux源码编译成为Linux的二进制文件了。
->这个二进制文件,就是对应某嵌入式开发板的真正运行时候所需要去运行的嵌入式Linux系统。
->即嵌入式版本的Linux镜像文件。
除了前提条件,还有个词是:辅助条件
co-requisites是辅助条件的意思。
在写教程解释说明某东西之前,往往有个pre-requisite
prerequisite,表示前提条件:表示你要学习下面将要介绍的内容之前,本身需要掌握何种背景知识,相关基础知识,才能看得懂。
举个最简单的例子:
要是你的小学老师在叫你数学中的乘法之前,你还没学过加减法的话,那自然很难,无法学会乘法
此时,在老师教你乘法之前,就需要你掌握,加减法,这个背景的基础知识。
也就叫做:
在学习乘法之前,要先有前提条件:已经学会掌握了加减法。加减法,就是乘法的前提条件。
协议栈往往指的是:
相对于普通的某个技术的单个的协议而言,是一个协议的集合
就像计算机领域内的栈的概念一样
是有层次划分的,是多个协议一点一点地堆起来的
其中的单个的协议,设计的初衷就是用于该协议栈的某一层
比如:
很多技术,协议都有专门的协议分析工具,便于开发调试
比如:
有很多个USB协议分析工具,包括国内公司做的,和国外公司做的。
TODO:详见:
在:
CC2541发送超长字节内容的处理方式?(500~1000字节) - 蓝牙Bluetooth 技术 - 德州仪器在线技术支持社区
中看到的:
TODO:详见【记录】下载试用HART协议分析工具FrameAlyst
TODO:详见【记录】折腾WireShark(旧称Ethereal)
此处之所以整理各种不同的协议都有专用分析工具的意思是:
不论做哪方面的技术和协议,一般来说,都是有对应的专用工具的。
在折腾对应的技术的时候,找到对应专用工具,并合理利用,可以大幅度地提供做事情的效果:
对于抓取出来的某协议的数据,无需手动地极其费力去分析,并且人工也很难分析,而改用工具分析数据,立马就so easy的节奏。
UUID==Universally Unique IDentifier
主要用来标示,某种系统或环,中的唯一性
PROFINET CBA Protocol Overview
中就有解释到PROFINET中也用到UUID
作为某种技术来说,官网去宣传该技术,往往都是制作一个技术类的宣传手册,往往叫做:Brochure
比如:
HART Communication Protocol and Foundation - Home Page
中的:
HART Communication Protocol (brochure, PDF)
就是个PDF文件:HART_Protocol_Brochure.pdf
就是对应的用于宣传HART技术的Brochure
cheat sheet,本意是,小抄
不过在技术领域内,其含义是:
用一个小抄的形式,去简明介绍某个技术
往往表现形式都是一个简明扼要的,图片,图表,等方式,去整理出某个技术的核心的东西。
以便可以起到,想要学习使用某个技术,带上这个,小抄,随时可以方便的“抄写”,查看到自己所需要某个点的用法。
vim中最核心的就是各个快捷键及其含义
所以就有人去以键盘的方式,去整理出vim中有哪些快捷键,及其对应含义:
What a wonderful world ! - Coding~
中的vim的cheat sheet:
中的git的cheat sheet:
不过,另外也看到了,好像cheat sheet只是表示总结摘要,所以也可以有其他形式,比如网页:
HTML 5 Cheat Sheet (PDF) – Smashing Magazine
中的HTML5的cheat sheet:
计算机领域内的技术,尤其是软件,协议等东西,正常的普通的逻辑是:
先有人(或组织)设计了某个技术的标准,然后再有众多人去实现了这个标准,将技术应用到某个现实领域内。
不过现实往往有些特例:
开始某种技术的应用,并没有统一的标准,此时是百花齐放,但是也是诸侯混战,没有统一。
最后,由各方出面,大家达成共识,统一采用某个标准。
比如,HTML就是这样一个先有了实现后才由标准的retro-spec,详见:HTML4,HTML5,XHTML 之间有什么区别?
国际标准,尤其是IEC,是工业领域方面的国际标准。
每个IEC标准,对应的是IEC加上编号,对应的是某个协议,标准等等。
比如:IO-Link im Durchblick中的IO-Link
IO-Link是工业领域用的一种协议,对应的IEC中的标准是:IEC 61131-9
类比来解释就是:
IEC 61131-9 就像一个学生的学号;
学号背后,对应的是某个真实存在的,具有名字的学生:IO-Link,就像该学生的名字。
比如:
命令行界面,图形界面,是两种不同形式
两者的区别和联系是:
相同点:
对于很多事情,或者说实现很多功能,都可以既有命令行方式,也可以有图形界面方式。
只是,实现目的的方式,不太一样而已。
但往往底层所依赖的东西,内部实现的原理,是一致的。
假如是Linux类的Ubuntu系统,在电脑上去放一首歌听,则可以有:
比如之前介绍的Python的开发,有命令行方式,也是各种GUI工具,即IDE的方式
但是本质上,底层都是调用Python的解析器,去解析和执行Python程序的。
软件发布领域内的常见的概念和名词:
在我们进行计算机领域内的开发时,往往会涉及到某个软件、硬件、某个源代码文件等等的版本号的命名。
这些版本号的命名,原先并没有什么规律。但是随着系统的复杂,就需要一个行之有效的,版本号的命名的规则。
然后就诞生了,对应的,多数人都采纳的一种版本号的命名的规则。
TODO:将请问python2.7.x各个版本之间的差异的回复中提到的:语义化版本号整理过来。
nightly,每天晚上编译一次,编译出来一个可以工作的版本
这个是软件开发过程中的,软件发布的一种方式。
这样每天一个新版本,每个版本都包含了最新的功能,但是相对于正式发布的版本,可能存在一定的bug缺陷,但是不妨碍想要尝新的用户去试用。
http://www.worldhello.net/doc/nightlybuild/ar01s01s01.html
也有提及该概念。
软件正式发布之前,往往会其他几个版本,比如RC版本等等。
对应的RC的意思是:
Release Candidate(简称RC)指可能成为最终产品的候选版本,如果未出现问题则可发布成为正式版本。
在此阶段的产品通常包含所有功能、或接近完整,亦不会出现严重问题。
多数开源软件会推出两个RC版本,最后的RC2则成为正式版本。
闭源软件较少公开使用,微软公司在Windows 7上应用此名称。
苹果公司把在这阶段的产品称为“Golden Master”(简称GM),而最后的GM即成为正式版本。
不同时期的版本的叫法分别是:
举例:
http://www.python.org/中就有提到RC:
Python 3.3.4 release candidate has been released
The first rc for Python 3.3.4, Python 3.3.4rc1, has been released.
在软件开发领域内,随着经验积累你会发现,在不同计算机语言进行开发期间,都会遇到各种不同的IDE。以及:
比如调试功能,调用堆栈,变量值等等。
比如:
Python的IDE:PyScripter中,就也支持调试相关的功能。
包括:
等等
TODO:将请问python2.7.x各个版本之间的差异的回复中提到的:语义化版本号整理过来。
摘要
此处整理一些,软件开发期间,会遇到和用到的,通用的思想,想法,做事情的态度,方式。
目的是,更加高效的,去搞开发,搞软件开发。
很多时候,做软件开发,和做其他事情,道理都是相同的:
即使是临时文件,也要清晰的命名,避免后续可能的,潜在的错误发生,并且还可以帮助我们快速分析,调试出现的错误。
或者是快速恢复思路:自己之前做过的开发,即使过了相对较长的时间之后,比如3,5天,3,5个月,甚至3,5年,自己回头再看自己的软件或代码,仍旧可以看懂,并且明白自己当时的意图。
举例:
之前看到这个新手玩python偶遇坑爹错误,求开导
中的我的回复:
不论错误的原因是否是由于测试文件名和模块同名。但是这样的做事情的方式,都是偷懒的做法,不好的做法,都属于很不好的习惯。
而针对该特定问题:其由于第一次,刚开始就没有给临时文件一个清晰的名字,而导致了后续的问题。
而正常的思路,好的做法,应该是:
去测试该requests模块,需要写个测试文件,目的是用来测试此模块,
那么该测试文件的命名,就不应该很随意的、轻易的去起个无意义的名字,比如:
a.py
或abc.py
1.py
或123.py
test.py
或demo.py
而是应该要保持思路清晰,起个见名知意的名字,比如:
requestsDemo.py
或requests_demo.py
requestsTest.py
或requests_test.py
如此,才可以达到写代码的目的:
都可以快速的看懂你所写的代码,能读懂你的每个文件所要实现的功能。
否则就很容易变成,很多人所遇到的情况:
都是:
如此:
就变成了典型的:
这就和之前的软件开发的重中之重的要注意的那一点写代码是给别人看的所冲突了。
看到这里,估计有人会问:
不就是简单的给测试文件命个名,写点测试代码吗?
又不是真正的去搞软件开发,写详细实现功能的代码,用得着这么严谨,甚至说死板吗?
对此,我的回答是:需要这么严谨。
因为:
把这个问题,上升到做事情的态度来看,那么你需要明白一个做事情原则中,很重要的一条:第一次,就做对的事情
因为,如果第一次就马虎,尤其而带来的以后的潜在的错误,以及解决该问题的错误所需要花费的精力和成本,
远大于你为了第一次做对的事情,仅仅比你随意的就下手做了,而多思考了几秒,几十秒,甚至几十分钟
这个逻辑,也非常类似于:
解决软件的bug的时间,永远是越早越好,最好是想办法找到合理的机制去预防软件的bug。
因为随着时间往后推移,软件的bug所导致的问题会越严重。
只有严谨的,认真的态度,养成好的习惯,才能从好的习惯中获益:减少后续发生问题的概率
最终实现我们的终极目的:更加高效的做事情,更加高效的搞软件开发。
而高质量的软件,和低质量的差距,也就是从第一天的做事情、搞软件开发的态度上,就决定了。
在http://zh.wikipedia.org/wiki/%E8%84%9A%E6%9C%AC%E8%AF%AD%E8%A8%80中看到的:
在很多案例中,如编写一些数十行的小脚本,它所带来的编写优势就远远超过了运行时的劣势,尤其是在当前程序员工资趋高和硬件成本趋低时。
由此想到:
所以为了提升软件开发效率,不论是公司还是个人,都要舍得适当的投资:
不论是公司还是个人,都是要舍得在升级电脑硬件配置方面舍得投入
当然前提是,升级了配置,对于软件开发的速度,效率方面有所提升
此种情况,往往是在发生了,电脑硬件配置不够用,比如Windows下跑Linux的虚拟机,编译项目代码占用资源较高
此时才考虑,是否值得花钱,升级内存,还是把机械硬盘换成SSD硬盘,甚至是购买新电脑
由此,保证硬件资源够用,方便软件开发,不会把多余的时间和精力消耗在低硬件配置无法解决软件方面的高性能的要求上。
关于SSD固态硬盘,对于电脑性能的提升,的确很大,不了解的,可以参考:
TODO:添加换了SSD硬盘后电脑性能提升对比的帖子
搞软件开发,往往是国外的资源更有参考价值
而如何找到这类国外资源,往往需要利用google
而google被封,被墙,导致基本无法使用
想要方便的,稳定的用google,及查看其它国外技术资料,往往就需要翻墙
而目前免费的可以翻墙的资源,往往效果不够好
所以,在能接受的前提下,可以购买翻墙方面的服务,比如VPN,Shadowsocks等等服务。
比如我放弃了GoAgent,而花钱99元买了一年的shadowsocks,使得可以稳定高效的翻墙用google。
TOOD:添加购买shadowsocks的帖子。
比如搞特定领域的软件开发,而需要一些工具类的软件。
为了支持国内外的精品软件,在可以支付的起的情况下,可以考虑购买正版软件,而不要一直都用盗版。
比如我觉得一些做的好的软件有,Source Insight,Beyond Compare等等。
其他值得推荐的,详见:crifan推荐软件
摘要
此处整理一些,软件开发期间,所涉及到的,通用的学习方法。
尤其是,在查技术资料时,利用好谷歌(google),而不是百度。
当然,还有stackoverflow,维基百科(wikipedia)等有价值的网站。
TODO:把之前写的,以某些技术点为例,说明如何利用google去搜资料的过程整理过来。