《代码大全2》读书笔记 Week2
《代码大全2》第四、五章
第四章“关键的‘构建’决策”主要有以下三要点:1.每种编程语言都有优点和缺点,程序员应根据需要选择编程语言,尽量选择熟悉的语言以提高生产效率。作为一种表达工具,编程语言当然也会影响到使用者的思维,然而大多数重要的编程原则并不依赖与特定的语言,而是使用语言的方式。作者提倡“深入一种语言去编程”,当选择的语言缺乏构件或者其他问题时,我们不应该被语言的可行性束缚住,而是试着发明自己的编码约定、类库等去弥补它。2. 高质量的软件工程强调“架构的概念完整性”与其“底层实现”之间的关系,各个具体部件都能反映出架构的内涵。这要求我们,尤其是团队合作时要对变量名称、类名称、子程序名称、注释约定等底层细节有合理地统一规定,以避免程序充斥着不同的风格和随意的变化,从而程序员能够更好地关注本质问题。3.在技术浪潮前期与后期,编程的环境和难度是截然不同的,对此应该因时适宜地调整开发的策略。
第五章“软件构建中的设计”内容非常丰富,值得仔细阅读。以下只对部分要点做分析概括。要理解设计的出发点和最终目标,不得不先理解软件的首要技术使命:管理复杂度。在书中,作者暗示复杂度来源于两种难题:偶然性与本质性难题。偶然性与事物的偶然、非本质属性关联,已经在编程语言和编程工具数十年的进化中得到了较好的解决。而本质性问题的求解进展则缓慢得多,本质性的困难来源于很多方面,概括来说是在复杂、无序的现实世界中精确而完整地识别出各种依赖关系并给出一套解决方案,而人们对现实世界中各种实体以及运行规律还未参透,这就增加了软件开发的本质性困难。 从管理复杂度这个首要使命出发,作者列出了一些理想的设计特性:最小的复杂度、易于维护、松散耦合、可扩展性、可重用性、高扇入、低扇出、可移植性、精简性、层次性等等。要实现以上设计特性,其中,层次化设计显得尤为重要。作者给出的基本层次是:软件系统 -> 子系统和包 -> 包中的类 -> 类中的数据和子程序 -> 子程序内部。接着作者花了大量篇幅介绍启发式的设计方法,其中最让我印象深刻的有两点,一是形成一致的抽象和信息隐藏概念。两者其实是相辅相成的,为层次化设计服务,而且他们展示了面向程序编程和面向对象编程的显著差别。分而治之——或者说模块化思想,在两种编程中都举足轻重,但面向过程侧重于,也许只能支持过程(具体来说函数)和自定义数据类型的封装,而面向对象编程在引入了类和对象的概念后将模块化思想进一步延伸,使得能够形成统一抽象的范围得到了扩大,比如说可反复使用的一整套操作在接口中定义,允许某些操作的事物定义为一个类,类之间还可以继承、多态。而信息隐藏是结构化程序设计与面向对象设计的基础之一,这个概念在实现类与类或子程序与子程序的松散耦合、提高扩展性等设计特性中都有非常大的价值。
《代码大全2》读书笔记 Week2的更多相关文章
- 代码的未来读书笔记<二>
代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...
- 《第一行代码 android》 读书笔记:找出当前界面对应的Activity
在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记1 - 基本的bash shell 命令
这本书买了好久了,除了刚到手的那几天翻看了一下以外,竟然到今天都没有看过.突然想要写一个shell脚本,发现什么也不会,是时候开始学习了,今天先把最简单的一章再看一遍顺便做一些笔记,明天继续后面的! ...
- 软工读书笔记 week2
<程序员修炼之道>这本书后面一部分则是更深入.更具体.更细致地就程序员应该注意的事项做一些讨论,书中说的很多在过去的经历中都有较深的体会,同时也给了我很多启发.以下是一些我感悟较深的点: ...
- 【代码大全2 学习笔记】ADT 抽象与封装
ADT abstract data type 抽象数据类型 要理解面向对象编程,就要先理解ADT这个概念.不懂ADT的程序员开发出来的类只是名义上的"类"而已--只是单纯的把一些相 ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell
当用户登录终端的时候,通常会启动一个默认的交互式shell.系统究竟启动哪个shell,这取决于用户配置.一般这个shell都是/bin/shell.默认的系统shell(/bin/sh)用于系统sh ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令
更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...
- 《Linux命令行与shell脚本编程大全》读书笔记
第一章:初识Linux 1.linux可划分为四个部分:内核.GNU工具.图形化桌面环境.应用程序 2.内核主要负责:系统内存管理.软件程序管理.硬件设备管理.文件系统管理 3.内核的系统内存管理,有 ...
- 《代码大全》阅读笔记-33-个人性格(personal character)
很多好的编程做法都能减轻你的大脑灰质细胞(指脑力)的负担. 将系统"分解",是为了使之易于理解("设计的层次"). 进行审查.评审和测试正是为了减少人为失误.如 ...
随机推荐
- 《Hadoop学习之路》学习实践二——配置idea远程调试hadoop
背景:在上篇文章中按照大神“扎心了老铁”的博客,在服务器上搭建了hadoop的伪分布式环境.大神的博客上是使用eclipse来调试,但是我入门以来一直用的是idea,eclipse已经不习惯,于是便摸 ...
- linux 下安装chrome的rpm包
1. 下载chrome的rpm包,假设叫cho. 2.执行命令 rpm -ivh cho 3.报错提示需要lsb>=4.0,执行命令 yum install lsb 等待安装完毕. 4. 重新执 ...
- spark性能调优01-常规调优
1.分配更多的资源 1.1 分配的资源有:executor.cup per executor.memory per executor.driver memory 1.2 如何分配:在spark-sub ...
- TOPO DN 解析
介绍 有一个算法,是将大量TOPO DN实例解析成结构形式.并依据DN获取对应的数据.本人感觉值得分享.并供大家讨论与优化. 注意:TOPO DN实例的顺序,是被我的其他算法预处理过的 ...
- ReentrantReadWriteLock的相关使用
ReentrantLock具有完全互斥排他的效果,同一时间只有一个线程执行ReentrantLock.lock()方法后面的任务,这样虽然能够保证线程安全性,但是效率是比较低的 ReentrantRe ...
- 快速上手的Glide4.x教程
安卓基础开发库,让开发简单点. DevRing & Demo地址:https://github.com/LJYcoder/DevRing 学习/参考地址: https://blog.csdn. ...
- 在阅读众多的blog中,我学到了什么
写博客的人,自然会读别人的博客:读博客的人,不一定会写博客.但是这两种人之间的差别是很大的 在最近在一段时间,发现了一个好的博客,通过该博客的友链,发现了新大陆.... 从Jeff Wong开始,到老 ...
- 华南理工大学“三七互娱杯”程序设计竞赛 G: HRY and tree
题意:给出一棵树,定义两点间代价为两点路径上最长的边权,问任两点间的代价和. 解法:这道题的解法十分巧妙:直接用Kruskal对这棵树求最小生成树,然后对于即将加入到MST的这条边(u,v,w),这条 ...
- 笔记66 Spring Boot快速入门(六)
SpringBoot中使用Mybatis 一.注解方式 1.创建映射文件CategoryMapper.java 使用注解@Mapper 表示这是一个Mybatis Mapper接口.使用@Select ...
- ubuntu 安装pip并修改为阿里云pip源
0.sudo su1.安装pipapt-get install python-pip python-dev build-essentialpip install --upgrade pip pip i ...