计算机是一个很庞大的体系,主要的领域可以包括:计算机系统结构,程序设计,软件工程,人工智能,网络、数据库等辅助技术,算法理论等。
计算机系统可以说是硬件与软件两部分组成。硬件包括 CPU、内存、硬盘、输入输出设备以及其他外部设备。这些硬件设备为软件的运行提供了物理基础,软件必须在硬件基础上才可以运行,计算机硬件的作用就是存储并运行软件。
计算机软件指的是计算机系统中的程序和数据。计算机系统展示给用户的各种强大功能都是由软件实现的.
软件:计算机系统的一系列计算机能识别和执行的指令,通过加载到计算机的内存中才可以运行。比如一个“计算器”软件,启动后首先运行在内存里,通过将用户的输入信息转成数字的加减乘除运算,并转换成计算机硬件能够明白的指令,然后将指令下发给 CPU 进行运算,最终结果输出给用户。
操作系统也是软件 计算机系统的运转需要很多软件来支撑,大体分为系统软件和应用软件,系统软件指的是我们通常用的各类操作系统,Unix,Linux,Windows7 等。应用软件值操作系统上的各类程序,比如:Vim,Office 2003,QQ 等。为了能够开发出这些软件,我们需要计算机编程语言,这些语言是与计算机沟通的方法。
计算机硬件
人机交互?是我们可以像阿凡达那样通过与电脑的接触,就能产生感应,从而完成软件的编写?当然不是!
人机交互是我们通过人机交互界面(就是软件的界面,比如用鼠标一点发射,导弹就会发射的图形界面)与系统交流,并进行操作。小如收音机的播放按键,大至神舟号上的仪表板。
这里我们借用一下这个词,我们将程序(软件)写好,并在计算机上运行起来,如果我们写的代码不出问题(用鼠标点击发射导弹,本想是打击敌人的,结果导弹在敌人阵地兜了一圈又回来把自己给炸了,这就叫做程序逻辑错误),计算机将会反馈一个我们想要的结果。
编程语言就担任了这种,我们人类和计算机之间沟通的重要作用。
机器指令:计算机工作基于二进制(0 和 1 进行编码),只能够识别由 0 和 1 组成的指令,组成的语言称为机器语言。由于机器语言我们很难编写,所以后来出现了汇编语言,通过一些类似 ADD,SUB 的符号来写程序,然后用汇编程序转换成机器语言。汇编语言仍然要依赖计算机的硬件状态,很难在不同的机器上运行,所以属于低级语言。
高级语言的出现: 低级语言写软件很不方便,于是出现了不依赖具体计算机硬件的高级语言。高级语言写出的程序(源程序)可以通过编译程序转换成机器语言(目标程序),运行在不同型号的计算机上。一条高级语言会被编译成多条机器语言。目前世界上存在几千种高级语言,发展分为三个阶段:非结构化语言,结构化语言到面向对象语言。C 语言属于结构化语言,程序流程由顺序结构,分支结构,循环结构等构成。C++,C#,JAVA 等属于面向对象语言,是以对象为核心作为基本程序结构单元。
程序员设计程序框架,然后用高级语言编写实现,最终得到若干源程序文件。有些语言需要使用编译程序转换成二进制的机器语言,然后才可以在计算机上执行,这类语言称为编译型。有些语言不需要编译器,直接由解释程序直接解释运行,这类属于解释型语言,或脚本语言,例如 Python,Ruby 等。解释型语言每次执行的时候都需要解释,而编译型则只需要编译一次。
编程语言
计算机技术,尤其是编程语言是一门实践科学,学习过程需要多多的动手实践,没有捷径,只有不断的练习,做项目才能够有所收获。最好的方法就是不断地写代码。
大致分成四个步骤:理论基础、代码阅读、动手实践、开源项目。 在 实验楼 做练习是个极好的方法。
可以通过一些书籍或实验楼教程中的文档部分进行系统的学习,对于编程语言需要学习一些语法及关键字的用法,对于系统管理类知识则需要学习软件的部署及配置,命令的使用等。这些知识不需要死记硬背,只需要有所了解,在后续的实践过程中用到了自然印象会深刻很多。
阅读该编程语言开发的一些小项目的代码,并进行分析。可以在 github 上寻找,实验楼的项目课代码都放到了 github 上,可以直接查找。对代码分析的时候要回头看先前学过的理论,哪些语法和关键字被应用,以及为什么这么用。
有了一定的代码阅读后可以开始动手写一些小程序,这些程序可以直接找现成的代码进行组合,比如实验楼的项目课中,可以直接按照给出的代码示例进行临摹。目的不是求新,而是增加语言的熟练程度。当自己按照项目课的文档真正动手写出一个可以运行的程序时,成就感会增强,就更有信心和兴趣。
当练习了几个项目后可以参与或者自己创建一些开源项目。这个阶段是一个很大的挑战,会有点痛苦,因为你要利用所学的语言解决真实的问题,进行创新,需要思考消化先前的理论基础及项目经验,逐步学会灵活运用编程语言达到自己的逻辑与目的。在开源项目的开发中可以寻求实验楼问答及技术社区,谷歌搜索,StackOverflow 的帮助。
互联网的发展让真正的技术人才从来不缺好的薪水与职位。IT 领域的待遇是相当可观的。
由于技术的细分,IT 工程师也会按照所选择的技术领域分成了很多职位,目前主流的分类方法可以分为:研发、测试、运维、DBA 几个大类,研发工程师又可以分成Java、C++、PHP、Hadoop、Web 前端、Android、iOS 等细分的职位,同样测试可以分为:测试工程师、测试开发等,我们可以去各大招聘网站上查询更多更详细的职位。
虽然现在是个开放的年代,各个公司都在不拘一格的招纳贤才,但是真正能动手做事的工程师才是企业的最爱,华而不实的总会被淘汰。每种职位虽然看上去都是不同的职业发展道路,IT或程序的思维都是相通的,职位互相之间转换也经常发生,拥有丰富的实践经验永远是应聘成功的重要因素。
我们都是喜欢 IT,喜欢计算机,才想要从事这个行业,而不是因为待遇可观这种因素才选择。在电影《编舟记》中,房东看见主人公为编写一部字典彻夜翻看资料的时候,就说道:“年轻的时候就能找到自己喜欢并且干一辈子的事情是多么幸福多么令人羡慕啊。”