学科介绍
软件工程
- 2012年升级为教育部一级专业
- 软件工程是指大型复杂计算机软件系统设计、开发、测试、维护的工程学科。
培养全栈工程师
- 掌握软件开发过程的全链路技术
- 注重实操
- 不局限一门语言,重点学会编程思维
- 使用编程解决生活中的一些问题
- 对算法和数据结构有简单了解
教材
《程序设计基础(第四版)》 – 清华大学出版
主要章节
- 绪论
- 编程准备
- 代数思维与计算机解题
- 逻辑思维与计算机解题
- 函数思维与模块化设计
- 数据的组织与处理(1)- 数组
- 数据的组织与处理(2)- 结构
- 数据的组织与处理(3)- 文件
- 递归思想和相应算法
次要章节(有时间就讲的内容)
- 多步决策问题
- 宽度优先搜索
- 深度优先搜索
- 贪心法
- 动态规划
- 蒙特卡罗法
附录
A. 程序调试
B. 库函数
C. ASCII码表
D. 输入输出的格式控制
要求
- 经过这门课程的学习,对于简单的程序,应可以做到纸笔编程, 学会快速构思程序结构, 积累经验避开常见的“坑”
- 对于稍微复杂的程序使用IDE编程, 需要掌握一般调试手段。
考核
本门课程为理论课程,另外有实验课安排。
- 平时成绩 40% – 考勤、答疑、测试、作业
- 期末考试 60% – 机考 或者 试卷 (试题为标准C语言)
行业分析
IT行业岗位主要分为研发岗、市场岗、管理岗、技术支持岗。
研发岗位
对于软件开发的研发岗来说,又可细分为:
- RD
Research and Development engineer,研发工程师,对某种不存在的事物进行系统的研究和开发并具有一定经验的专业工作者,或者对已经存在的事物进行改进以达到优化目的的专业工作者。 - PM
Product Manager,产品经理,又称品牌经理。举凡产品从创意到上市,所有相关的研发、调研、生产、编预算、广告、促销活动等等,都由产品经理掌控。 - QA
Quality Assurance,品质保证。QA的主要职责就是质量保证工作。 - OP
Operator,运维操作员,服务器、数据库管理员。
其中由于产品经理与设计、开发工程师之间的恩恩怨怨,被编成了很多段子在网络上流传。
编程语言分类
最早的编程语言以Fortran为主,主要是辅助科学计算。随着技术更迭至今已经产生了上千种编程语言,
编程语言分为三类:
机器语言
- 机器语言由很多0和1构成的指令组成,无需解释或编译计算机就可以直接执行
- 编写难度大、效率低
- 华为、Intel、高通、三星等研发芯片部门
汇编语言
- 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。下面是汇编版hello world程序,是不是十分复杂呢。
12345678910111213141516; hello.asmsection .data ; 数据段声明msg db "Hello, world!", 0xA ; 要输出的字符串len equ $ - msg ; 字串长度section .text ; 代码段声明global _start ; 指定入口函数_start: ; 在屏幕上显示一个字符串mov edx, len ; 参数三:字符串长度mov ecx, msg ; 参数二:要显示的字符串mov ebx, 1 ; 参数一:文件描述符(stdout)mov eax, 4 ; 系统调用号(sys_write)int 0x80 ; 调用内核功能; 退出程序mov ebx, 0 ; 参数一:退出代码mov eax, 1 ; 系统调用号(sys_exit)int 0x80 ; 调用内核功能 - 编写难度仍然很大,难理解和复用
- 优点是汇编生成的可执行文件小、执行速度快
- 芯片公司或硬件厂商
高级语言
高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。
但是高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:
-
编译类
是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行(编译后生成的可执行文件,是cpu可以理解的2进制的机器码组成的),使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .obj,也就是OBJ文件)才能执行,只有目标文件而没有源代码,修改很不方便。
编译后程序运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等 -
解释类
执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器(想运行,必须先装上解释器,就像跟老外说话,必须有翻译在场),但这种方式比较灵活,可以动态地调整、修改应用程序。如Python、Javascript、PHP、Ruby等语言。
现在很多高级语言同时兼顾编译和解释型语言的特点。比如Java为了兼顾跨平台和运行速度,Java 源代码首先会被编译为字节码文件(.class),但并非是机器语言,而是需要在 JVM 上运行,而 .class 文件在 JVM 上是解释执行的。所以 Java 兼具编译型语言和解释型语言的特点,为了更高的效率,JVM 还引入了 JIT(just-in-time,即时编译)编译器,在 Java 程序运行时进一步编译,转换成高度优化的机器代码。由于Java更接近编译型语言的特征,个人更愿意称Java为编译型语言.
下图分别是编译型语言、解释型语言、以及基于虚拟机的语言。
面向过程 VS 面向对象
高级语言还可以分为面向过程和面向对象两种.
面向过程的语言
- C / Fortran / Pascal / SQL
- 把重复逻辑封装成函数
- 控制结构构造: 顺序,选择,循环
- 对于简单的程序, 流程明确, 简单粗暴高效, 但不利于编写复杂系统
- 代码重用性低,扩展能力差,后期维护难度比较大
面向对象的语言
- C++ / C# / Java / Python / Scala
- 抽象共同属性和行为封装成类, 万物皆对象
- 类与类之间关系更符合真实世界特征, 符合人类思维习惯
- 使用类组织代码, 结构化, 模块化
- 易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;
- 易维护,系统低耦合的特点有利于减少程序的后期维护工作量。
- 执行效率通常没有面向过程的语言高。
很多语言比如Javascript和PHP一开始是面向过程的, 后面也逐渐支持面向对象了.
这里所说的某个语言是面向过程或者是面向对象的, 这是通常情况下使用这个语言编写出来的代码是面向过程或者是面向对象的. 面向过程和面向对象更多是编程思想的差异, 并不是使用支持面向对象的语言比如Java写出来的就一定是面向对象的代码, 反过来使用纯C语言也不见得只能写出面向过程的代码, 只不过使用C语言编写面向过程的代码相对容易, 而使用Java语言编写面向对象代码相对容易, 因为Java是天生支持面向对象的语言.
国产编程语言
- 易语言(中文写代码)
- 木兰(假)
搞笑篇
下面这些并不算真正的编程语言, 只是好玩:
-
文言文编程
-
粤语编程
面向交互的高级语言
- HTML
- Javascript
- XML
- ASP
- PHP
编程语言排行榜
TIOBE编程语言排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如Google、MSN、Yahoo!、Wikipedia、YouTube以及Baidu等)进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
这个排行榜可以用来考查你的编程技能是否与时俱进,也可以在开发新系统时作为一个语言选择依据。
C/C++如果联合起来毫无疑问会排到第一名. 只要计算机还是冯诺依曼体系, C语言将会一直永存.可以说C语言是最接近底层的高级语言, 执行效率最高.
反过来C/C++由于其复杂性不利于编写大型企业级网站项目, 因为内存必须程序员手动管理, 指针用起来也比较容易出错. 而Java语言没有指针类型, 又支持垃圾回收(GC)机制, 更容易编写出健壮的程序.
如何成为大神
- 多敲多练多想 大神如何敲代码
- 云笔记多总结
- 推荐有道云笔记
- 及时偿还技术债
- 善用搜索引擎
- 谷歌/百度
- 学会提出问题
- 切忌无脑问
- 说明前因后果
- 总结经验
Views: 36