系统程序员的定义:
从事操作系统内核,DBMS,GUI系统,基础函数库,应用程序框架,编译器和虚拟机等基础软件开发的程序员。
软件开发的困难:
一是控制软件的复杂度。软件的复杂度越来越高,而人类的智力基本保持不变,如何以有限的智力去控制无限膨胀的复杂度?没有单个难题和技术细节是我们无法搞定的,而所有这些问题出现在一个项目中时,其呈指数增长的复杂度往往让我们束手无策。
二是隔离变化。用户需求在变化,应用环境在变化,新技术不断涌现,所有这些都要求软件开发能够射中移动的目标。即使是开发基础平台软件,在超过几年时间的开发周期之后,需求的变化也是相当惊人的。需求变化并不可怕,关键在于变化对系统的影响,如果牵一发而动全身,一点小小的变化可能对系统造成致命的影响。
技术能力与工作态度并重:
做一流的程序员,也要德才兼修才行。既要培养自己的技术能力,也要注重个人道德修养,为人处世的素养。
理论,思考,实践,勤奋缺一不可。
VIM和emacs是linux下最流行的代码编辑器。学习vim可以通过vimtutor教材。
掌握gcc,gdb
业余程序与专业程序员之分在于一种态度。
首先表现在代码风格上,专业程序员才能写出人能读懂或者易懂的代码。首先要从代码风格开始,从此养成一种严谨的工作态度。
专业程序员就要有一种精益求精的精神,朴实的态度。
什么是封装?(保护好内部的东西,不该让调用者知道的事,坚决不要暴露出来。)
为什么要封装?(1.隔离变化。2.降低复杂度。)
如何实现封装?(1.隐藏数据结构。2.隐藏内部函数。3.禁止全局变量。)
1.不要写重复的代码。尽量思考把重复的代码抽出来。不公共的部分用回调函数的方式让调用者来决定。
2.任何回调函数都要有上下文。(这个上下文就是回调函数额外的参数,这个额外的参数最好放在回调函数的第一个参数。虽然有时候这个上下文不一定用得到,留着以后方便扩展。)
缓冲区溢出是指将数据写到没有分配到的范围内,造成对随机数据的破坏,大部分问题都是缓冲区溢出引起的。