语言:交流的工具。人类的语言,像中文、英文等;人与机器交流的语言——编程语言。
语言的特性:基本词汇+标准格式规范(语法)。
编程语言的类别和作用:
C语言是上世纪70年代由里奇等人在贝尔实验室设计的新语言。
学习C语言这门基础语言的好处:
计算机硬件系统:
中央处理器(CPU)——运算器(包括寄存器)+控制器
内存——存储器
键盘、鼠标、扫描仪等——输入设备
显示器、打印机等——输出设备
主板——CPU、内存条、网卡、各种插槽接口等
程序数据和安装的软件是保存在硬盘的,当双击qq图标,操作系统发送消息并处理,应用程序打开。这个过程中,操作系统将硬盘里的数据集合复制到内存中,然后CPU读写内存中的数据,这个过程就叫做载入内存(Load into Memory),完成这个过程需要一个特殊的程序,这个程序就叫作加载器(Loader)。存储数据到内存,如果要保存到本地硬盘,就将数据再复制到硬盘。
当需要运行的程序很多,从硬盘中复制的数据集合超过CPU的大小,这时操作系统会将不需要的数据放到硬盘中的虚拟内存处。
计算机内存中数据的存储形式:0和1的二进制存储。原因是内存和CPU是由亿万个纳米级电路组成,电路的电压只有5V(高电平1)和0V(低电平0)。
二进制思想:逢二进一、借一当二。
1个元器件称为1比特(bit)或1位;8个元器件称为1字节(byte)
八进制:数字0开头
十六进制:数字0+X(x)开头
ASCII编码:一个字节 8位 最高位通常表示符号位
Unicode编码:多个字节,汉字一般两个字节
后者可以看成是前者的扩容;0-127个字符表示相同。
成为一名合格的程序员需要经过一段时间的磨练。站在求职的角度,能开发出实用的软件、网站、APP等才叫学有所成。
计算机涉及的知识非常广泛,不是每个人都能成为全栈大神。不要想着把客户端软件、网站、APP都开发出来,这在短时间内是不现实的。相信我,你不是神!
1) Windows开发:
主要是开发客户端(PC机上的软件),如QQ、迅雷、360等,需要学习C/C++、Windows API、操作系统原理、数据结构、算法等。
2) 游戏开发:
需要你有Windows开发的基础,再学习DirectX图形编程、Socket通信、游戏服务器架设等。
3) Web开发:
也就是做网站,分前端和后台。后台主要负责服务器端的编程,需要学习Java、PHP、Python等一门Web开发语言;前端主要负责网页的设计,需要学习HTML、CSS、JavaScript等。随着互联网的崛起,人才需求量大,工资高,很大一部分程序员都在从事Web开发。
4) 底层服务:
NB 的程序员都在搞这些,例如编写一个线程池为上层提供服务。工资比普通的程序员高。
5) 算法:
也是NB的程序员在搞,一般不注重编程语言,而是侧重解决问题的方法和效率。工资比普通的程序员高。
6) 移动开发:
包括IOS和Android,你可以开发APP,也可以开发游戏,需要学习Java(针对Android)、Objective-C(针对IOS)、Swift(针对IOS)等。
7) 软件和硬件结合:
包括嵌入式和单片机,不仅要会写代码,还要了解硬件,所以入门门槛比较高,知识也比较庞杂,学习时间长。选择该方向最好有数字电路、模拟电路和汇编的基础,非常适合电子信息工程专业的同学。
这个方向的同学,大部分去了中兴、华为等以生产电子产品为主的公司,工资虽然没有一般的程序员高,但是还说得过去。不过随着智能硬件的崛起,这部分工程师的春天或许就要到来了。
8) 测试(QA):
一款产品问世需要大量的测试才能投放市场,QA(Quality Assurance,译为“品质保证”)人员就是为程序员把关的,如果程序员的作品不符合产品需求或者Bug太多,QA有权驳回,这时就会影响程序员的绩效。QA不但要能看懂代码(大概理解什么意思),还要掌握一定的测试技巧,更重要的是心思缜密,有耐心有毅力,女生比例很高。
程序员的待遇(过时了)
IT行业的待遇比很多行业要高,程序员尤为突出,刚刚毕业的大学生,进入百度、腾讯、阿里巴巴等这些大企业,年薪一般在15万以上,经验丰富的可以拿到20多万,30万的就是神一样的存在,有,但是极少。这是第一梯队,一般重点大学的毕业生才能进入,怎么也得是个一本吧。
拿到融资的创业公司、规模不大的公司、一些国企等给的待遇也不错,年薪也可以超过10万。
很多小公司,老板一个人说了算,也没有融资,待遇一般都不会高,一个月几千块钱。这样的公司招人难,进入的门槛低,对学历的要求也可以忽略,能干点活就行。但是往往是这样的公司最折磨人,你什么都需要做,涨薪没有明文规定,老板经常画饼,还会威胁你说完不成任务就走人。
每个城市的待遇也不一样,北京、上海、广州、杭州这些一线城市都有大公司,待遇最高;成都、大连、西安这些二三线城市的待遇就一般了。
对于大部分初学者,学习C语言的目的是希望做一名合格的程序员,开发出靠谱的软件来。但是学了C语言的基本语法后,发现只能开发“黑底白字”的DOS程序,完全没有漂亮的界面和生动的交互。于是学数据结构,学算法,越陷越深,越来越难,最后迷失了,不知道学C语言能做什么,认为学习编程很难。
其实,这是很多初学者都会踩到的一个坑!C语言本身是一门很简单的语言,提供的实用功能不多,大部分要借助操作系统和其他库来完成。
第一阶段:学习软件开发基础
1) 首先学习C语言的基础语法,这些都是编程的基础。
2) 学习Windows开发,你就能够使用C语言开发出带界面的软件来了,可以有窗口、输入框、菜单等,也可以响应键盘和鼠标事件,可以播放音乐、视频等。
但是,你会发现比较麻烦,要使用很多API,还要手动写资源脚本。
3) 学习Visual C++开发,通过VC或VS来拖拽各种控件、编辑各种参数。
这个时候,你就可以用C语言做出小规模的软件了,了解了软件的底层是怎么回事,也学会了使用VC或VS来编辑界面。
第二阶段:提高软件开发效率
Windows API是软件开发的基础,如果你希望走得更加长远,拿到的工资更高,跟大家拉开差距,那么一定要学。
接下来是提高开发效率,有好几条路可以选择,众多大神争论不一。
第一条路:学习C++,包括C++基础语法、MFC、QT等。MFC和QT都是界面库,对Windows API做了封装,会大大提高开发效率。
第二条路:学习C#。C#语言本身对底层API做了很好的封装,可以使用面向对象的方式来开发软件。
第三条路:学习Delphi。Delphi是著名的Borland(现在已和Inprise合并)公司开发的可视化软件开发工具。“聪明的程序员用Delphi,真正的程序员用C++,偷懒的程序员用PowerShell”已经成为对 Delphi 的最真实写照。
一款大型软件,例如 QQ、迅雷、360 等,往往是多种技术的集合。
其他开发
C语言主要用于软件开发、底层开发、嵌入式和单片机等对效率要求高的地方,如果你希望学习Web开发或APP开发,那么学完了C语言的基础语法就跳出C语言,去学习PHP、Python、Java、Objective-C、Swift吧,千万不要陷在C语言不能自拔。
这个时候,C语言主要的作用是让你入门,了解编程语言的基本语法,强化编程思维,而不是用它来做实际开发。
关于数据结构和算法
如果你不是专门搞算法,而是做应用开发,那么了解一下就可以了,主要是堆栈、链表、排序、查找等比较基础的,千万不要深入学习,算法是个无底洞,不要陷进去,要尽早跳出来去做应用开发。
实践中你会发现,很多会用到什么数据结构和算法,用到的话也已经被封装好了,调用对应的函数就可以,而且像树、图一类的晦涩难懂的数据结构基本与你无缘。
Practice、practice and practice。
Google + Try + Think
Persistance