对于开发人员来说, 对于操作系统,IDE(集成开发环境), 编译环境以及其他的一些环境, 必须是非常熟悉的, 作为开发者, 面对最多的, 就是在各种环境上面做事情.
操作系统的背景知识:
所谓操作系统, 是处于底层硬件和应用软件的中间层, 各种应用软件是通过操作系统提供的接口,来对底层硬件进行操作. 例如对于文件的操作,不是直接操作硬件电路和磁盘,而是调用操作系统提供的读写命令,完成对文件的处理. 还比如对于网络编程, 不是直接去把网络的七层模型都自己亲自实现出来, 操作系统本身已经将其实现, 当要进行网络传输的时候,只要调用操作系统提供的socket函数簇就行. 这就是操作系统最主要的作用, OS提供了一层抽象, 隔离掉底层的硬件相关的一切, 以后面对的, 就不再是各种硬件接口, 也不需要再多考虑硬件特性. 对于硬件的操作, 已经抽象成各种系统函数.
需要注意的:
对于操作系统, 困难点在于需要理解OS的运行原理, 需要对OS的多进程, 多线程, 进程调度, 多进程的并发问题, 以及多线程间可能引发的死锁问题, 都有所了解. 对于多进行间的通信,说实话, 在我写服务器的时候, 用到的时候并不多, 可能和需求有关, 反而多线程间的并发和死锁控制很棘手.
并且也需要了解OS提供的网络操作, 对于socket函数簇, IO复用, 例如select, epoll轮询, 都要熟练运用.
这些是很最基础的, 也可能我的经验有限. OS提供的网络编程, 其实掌握好并不容易, 有非常多的细节, 尤其是OS本身提供的错误信息, 以及一些不常用的控制选项, 这些没法在短时间内速成, 也无法速成, 需要在项目中不断的积累和思考, 否则欲速则不达.
操作系统的分类:
虽然windows系统在PC上的占有率最高, 但是作为服务器来说, 优先选择的还是linux.
这主要基于1. 资源占用, linux作为服务器, 不需要图形界面, 直接远程终端控制.
2. 对于OS的控制, linux更强, 内核开放源代码, 提供给用户非常大的选择.
3. 在网络编程中, 提供更强大的功能, 试想下epoll轮询.
4. 大量的遗留项目, 是运行在linux平台的, 改换平台代价太高.
这里面需要说明下嵌入式的平台, 因为linux系统开放源代码, 可以对内核自由剪裁, 所以嵌入式平台用linux比较多, 而且需要对Linux有比较深入的了解. 所谓的嵌入式平台, 其实是种统称, 只要在除了个人PC的硬件平台上, 能够覆盖一层操作系统, 都会把自己叫做嵌入式系统. 硬件平台各种各样, 嵌入式不但需要对系统有所了解, 对硬件平台也需要有了解. 虽然不需要自己去制作电路板, 但至少需要能看懂电路原理图, 能调用硬件接口. 嵌入式口头上宣传的软硬结合, 所谓的软, 就是上面能跑操作系统, 所谓的硬, 就在于有时候需要针对硬件编程. 嵌入式的概念其实是炒作出来的, 不要太迷信, 以往电气自动专业领域的事情, 在硬件上增加了linux系统后, 就开始自我吹嘘是嵌入式的, 不要太人云亦云就好.
开发环境:
作为开发者, 最熟悉的, 除了操作系统. 就是各种开发环境了. 所谓的集成开发环境(IDE), 其实是一系列小工具的集合, 将文本编辑器, 编译工具, 各种调试工具集成在一个软件里, 并且提供很方便的文件夹视图. 能够在IDE里直接看到整个项目的文件, 此外. 还提供了代码补全, 代码的格式整理功能, 语法高亮, 还能对函数调用提供方便的查询方法. IDE对开发速度的提升非常有效, 也方便了开发者, 在IDE里, 能够对整个项目的文件进行浏览, 能进行编译和调试.
如果将集成开发环境看成一系列工具的集成, 那不用IDE, 其实也能完成项目的开发, 只是麻烦点, 需要先用文本编辑工具将代码写出来, 然后再用编译工具将项目编译成可执行代码, 然后再用调试工具对可执行文件进行不断的调试, 除了问题之后, 再回过头来修改源代码. 这里面, 每个用具都是独立的, 比如在linux环境下, 文本编辑器一般用vim, 编译工具用gcc/g++, 调试工具用gdb, 都是分开的, 需要单独完成每一步骤, 但是在IDE里,这些都是开发环境中的一个菜单选项, 开发中用到的各种小工具, 被集成在一起.
写c/c++的项目, 在windows下, 最常用的是 visual studio
不得不称赞visual studio 确实很方便, 而且可以自己往里面添加各种插件. 其实 visual studio, 可以写很多语言, 比如c#, 其实visual studio当初是配合c#开发的, c#是微软推出的, VS同样是微软推出的, 配合的非常好. U3D有时候就需要用C#来调用, 这时候用visual studio比较方便.
写java, 用的最多的, 就是eclipse 和MyEclipse , 区别是, MyEclipse集成了一些java框架, 不需要再手动配置, 对于写Java项目, 能节省很多时间.
用IDE能提高开发速度, 但是对于新手来说, 使用IDE, 反而会拖慢学习进程, 因为在基础还不牢固的情况下, IDE会减弱人的思维过程, 举例来说, IDE对代码的自动补全, 对常用函数的记忆是种干扰, IDE提供的对项目的自动生成, 也将干扰学习者对于整个项目的配置和架构的理解, 当然, 做项目来说, 自然是越快越好, 没有哪个公司是让员工来学习的.