像程序员一样思考

出版社:人民邮电出版社
出版日期:2013-6
ISBN:9787115316585
作者:V. Anton Spraul
页数:256页

章节摘录

版权页:   插图:   读者的一个想法可能是只要把所有的数据都声明为私有数据,并花费足够的时间设 计成员函数列表以及它们的形参列表使其永远不需要修改,就可以确保信息隐藏。虽然这 些对于信息隐藏而言确实是必须的,但并不充分,因为信息隐藏问题可能更为微妙。记住, 类同意不更改它的任何方法的功能,而不管具体是什么情况。在以前的章节中,我们必须 确定一个函数将要处理的最小情况或者在遇到一种异常情况下该怎么办,例如在寻找一个 数组的平均数时发现数组的长度为零时该怎么办。即使是为了适应一种异常的情况而更改 方法的结果都会导致接口的改变,我们应该予以避免。这也是为什么在编程中明确考虑特 殊情况如此重要的另一个原因。许多时候,当一个程序的底层技术或应用程序编程接口 (API)被更新时会出现问题,在过去有些会很可靠地返回—1的系统调用现在很可能出错, 而返回一个看上去随机的、但仍然是负数的值。避免这个问题的最好办法之一是在类或方 法文档中陈述特殊情况的结果。如果文档表示当一个特定的情况发生时将会返回—1这个错 误代码,就应该重新考虑让自己的方法返回同样的值。那么,信息隐藏是怎样影响解决问题的呢?信息隐藏的原则告诉程序员在编写客户代 码的时候就要把类的实现细节搁在一边。或者更广泛地说,只在编写一个特定类的内部细 节的时候才关注它的实现。把实现细节暂时抛诸脑后,才能消除思维的分心,把注意力集 中在解决当前问题上。 但是,把信息隐藏与问题解决相关联时,我们应该注意它的限制。有时候,实现细节 并不会对客户代码产生影响。在前面的章节中,我们已经看到了一些基于数组的数据结构 和一些基于指针的数据结构的优点和弱点。基于数组的数据结构允许随机访问,但是无法 轻易地增长或收缩。反之,基于指针的数据结构只提供了线性访问,但是在添加或删除其 中的一些元素时并不需要重新创建整个结构。因此,以基于数组的结构为基础所创建的类 的特性与那些以基于指针的结构为基础所创建的类不同。 在计算机科学中,我们常常讨论抽象数据类型的概念,这是最纯粹形式的信息隐藏: 一种数据类型只是由它的操作所定义的。在第4章,我们讨论了堆栈的概念,并描述了程 序的堆栈是一块连续的内存。但是,作为抽象数据类型,堆栈可以是任何能够添加并删除 单独数据项的数据类型,并且这些数据项是按照与添加相反的顺序被删除的。这称为后入 先出的顺序(LIFO)。没有任何硬性规定堆栈必须是一块连续的内存,用链表创建堆栈也是 完全可以的。由于连续的内存和链表具有不同的属性,因此使用某种方法实现的堆栈可能 与使用其他方法实现的堆栈具有不同的属性,也许会对使用堆栈的客户产生巨大的差别。

名人推荐

本书所提供的习题类似于我在接受Google和Facebook的软件工程师面试时所遇到的问题,因此对于打算通过面试寻找新工作的专业程序员,本书是极好的复习材料。——Ariane Coffin,Wired网站的GeekM om作者在向初学者阐述难懂的概念方面具有广博的知识和丰富的经验。本书显示了他脚踏实地、一丝不苟却又令人愉悦的写作风格。——Adrian Woodhead,Slashdot这是我阅读后收获最大的书籍之一,因为它指导我们设计一个属于自己的系统,而不是把思维固化为只能采取一种正确的方法才能达到目的。——Lucas Westermann,Full Circle杂志如果你能够认真研读本书,我保证它可以极大地拓展你的思维。——David Bolton,About网 C/C++/C#不管使用什么教材向新学生讲授编程和程序逻辑,我都建议一定要把本书作为重要的参考书。——Joe Saur,The ACM's Software Engineering Notes杂志作者所提供的建议简单、直观并且实用。本书的阅读是一个既轻松又极有价值的过程。——James Powell,Enterprise Systems对于所有想要培养创造性的解决问题能力的人以及已经学习了编程但觉得没有完全理解概念的人,我向他们强烈推荐本书。——Robert Perkins,Game Vortex如果我教其他人学习编程,这肯定是我要选择的教材。——Stephen Chapman,Ask Felgall

内容概要

作者:(美国)V.Anton Spraul 译者:徐波V.Anton Spraul,讲授入门级编程和计算机科学已经超过15年。本书凝聚了他在多年的开发经历中所提炼的经验和技巧,并在面向许多遭遇瓶颈的程序员的一对一指导中收到了良好的效果。他还是《Computer Science Made Simple》(Broadway)的作者。徐波,浙江宁波人,熟悉C和C++、Java等编程语言。2002年开始从事计算机技术图书翻译。徐波技术视野广阔,翻译文笔优美。译著有《C专家编程》、《C和指针》等。

书籍目录

目 录 第1章 解决问题的策略 1 1.1 经典难题 2 1.1.1 狐狸、鹅和玉米 3 1.1.2 瓷砖滑块问题 7 1.1.3 数独 11 1.1.4 Quarrasi锁 13 1.2 基本的问题解决技巧 16 1.2.1 总是要制订计划 16 1.2.2 重新陈述问题 17 1.2.3 划分问题 18 1.2.4 从自己所知的开始 19 1.2.5 削减问题 20 1.2.6 寻找类比 21 1.2.7 试验 21 1.2.8 避免陷入挫折感 22 1.3 习题 23 第2章 纯粹的难题 25 2.1 本章所使用的C++简述 25 2.2 输出图案 26 2.3 输入处理 31 2.4 追踪状态 42 2.5 结论 55 2.6 习题 55 第3章 用数组解决问题 59 3.1 数组基础知识概述 60 3.2 用数组解决问题 66 3.3 固定数据的数组 71 3.4 非标量数组 73 3.5 多维数组 75 3.6 决定什么时候使用数组 78 3.7 习题 82 第4章 用指针和动态内存解决问题 85 4.1 指针基础知识回顾 86 4.2 指针的优点 87 4.2.1 运行时确定长度的数据结构 87 4.2.2 可改变长度的数据结构 87 4.2.3 内存共享 88 4.3 什么时候使用指针 89 4.4 内存细节 90 4.4.1 堆栈和堆 90 4.4.2 内存的大小 93 4.4.3 生命期 94 4.5 解决指针问题 95 4.5.1 可变长度的字符串 95 4.5.2 链表 105 4.6 结论和未来的步骤 113 4.7 习题 114 第5章 用类解决问题 117 5.1 类的基础知识回顾 118 5.2 使用类的目的 119 5.2.1 封装 120 5.2.2 代码的复用 120 5.2.3 问题的细分 121 5.2.4 信息隐藏 121 5.2.5 可读性 123 5.2.6 表达能力 123 5.3 创建一个简单的类 124 5.3.1 问题:班级花名册 124 5.3.2 基本的类框架 125 5.3.3 支持方法 129 5.4 具有动态数据的类 132 5.5 需要避免的错误 147 5.5.1 假类 147 5.5.2 单功能 148 5.6 习题 148 第6章 用递归解决问题 151 6.1 递归基础知识回顾 151 6.2 头递归和尾递归 152 6.3 大递归思路 160 6.4 常见的错误 163 6.4.1 过多的参数 164 6.4.2 全局变量 165 6.5 把递归应用于动态数据结构 166 6.5.1 递归和链表 167 6.5.2 递归和二叉树 169 6.6 包装器函数 172 6.7 什么时候选择递归 175 6.8 习题 179 第7章 通过代码复用解决问题 181 7.1 良好的复用和不良的复用 182 7.2 组件基础知识回顾 183 7.3 创建组件的基础知识 186 7.3.1 探索式学习 186 7.3.2 根据需要学习 190 7.4 选择组件类型 198 7.5 习题 204 第8章 培养程序员的思维 207 8.1 创建自己的总体计划 207 8.1.1 扬长避短 208 8.1.2 制订总体计划 214 8.2 处理任何问题 215 8.2.1 问题:绞型者作弊程序 216 8.2.2 寻找作弊方法 217 8.2.3 绞型者作弊所需要的操作 218 8.2.4 初始设计 220 8.2.5 开始编写化码 221 8.2.6 对初始结果的分析 229 8.2.7 解决问题的艺术 230 8.3 学习新的编程技能 231 8.3.1 新语言 231 8.3.2 已经熟悉的语言的新技巧 234 8.3.3 新代码库 235 8.3.4 上课 235 8.4 结论 236 8.5 习题 237

编辑推荐

《像程序员一样思考》编辑推荐:学会像程序员一样思考,构建创新性问题解决方案。《像程序员一样思考》习题极其类似Google和Facebook的面试题,对于软件工程师面试有非常大的参考价值。《像程序员一样思考》选取的话题切中程序员的痛点,针对他们最容易陷入挣扎的领域展开讨论,引发思考。每章后面都给出一些编程习题,使得读者能够应用该章所讨论的概念,训练和提升问题解决的能力。《像程序员一样思考》适合初级到中级的程序员用来提升自己的问题解决能力和应用编程技能的能力,也适合计算机相关专业的学生作为参考书阅读。

作者简介

编程的真正挑战不是学习一种语言的语法,而是学习创造性地解决问题,从而构建美妙的应用。《像程序员一样思考》分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序员一样思考。全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际编写C++代码来解决几个简单的问题,从而让读者进一步体会到问题解决的思路和应用。第3到7章是书中的主体部分,分别探讨了用数组、指针和动态内存、类、递归和代码复用来解决问题的途径和实际应用。最后,第8章从培养程序员思维的角度,进行了总结和概括,告诉读者如何才能像程序员一样思考。


 像程序员一样思考下载 更多精彩书评



发布书评

 
 


精彩书评 (总计3条)

  •     “一旦我们能够像程序员一样思考,就要为自己的技能感到自豪。如果有人叫你码农而不是程序员,奚落你说一只受过良好训练的鸟也能啄出到没,你可以反驳说自己并不仅仅是编写代码的,而是用代码来解决问题。当你坐在面试桌前面接受未来雇主或客户的面试是,你要相信不管自己所面试的工作需要什么,你都能够满足其要求。”这是这本书的最后一段话,不知道为什么,现在程序员的自豪感越来越弱,或许正是因为没有良好的解决问题思维导致大部分程序员(包括我自己)都还停留在东拼西凑、复制张贴、出错改错、不出错拍手的层次。是啊,这个层次哪来的自豪感,不自卑就不错了。真的打算在这个领域发展的话培养程序员的思维是很必要的,看了这本书我突然有点后悔完了三年才看到,才明白原来我这三四年跌跌撞撞明白的这些思维方式原来都可以在这本书上面很好的找到。明锐、好奇心、坚韧、开放、奉献都是程序员所必须的。新手看这本书可能会让有些思维模式在自己的脑海里有个影响,以后的某天突然想起“这个问题可以用这种方式来解决”;而一个老手的话看这本书的话可能会让自己琢磨用到的某些方法有一个跟为系统的说明,“啊,其实我上一个项目里面就是用的这种模式,只是现在才知道这种模式叫xxx”。最后给我们这个群体鼓鼓气,你看看你周围那么多东西上面都跑着Code,作为Coder的我们不应该自豪一把吗?
  •     偶然的机会看到这本书,“思考”这个字眼深深吸引了我,本以为是一本“技术论述”偏少的书,然后作者一直围绕“如何用编程来解决问题”来展开。每一个问题都具体分析,辅以具体的例子和代码,让人读起来头脑非常清晰。本书其实一直想传达给大家的是,“如何像一个好的程序员一样优雅有效地解决实际问题”。第一章引入“问题”以及“如何解决问题”,之后的第二章引入“基础语言”,说了C++的基本使用,从而使得后续的章节阅读代码不会有障碍。第三章的“数组”和第四章的“指针”,其实非常值得回顾,但是总体而言讲得比较基础,浓缩成一道直接的题目也许也就说明了问题了。第五章“从过程编程过渡到面向对象编程”,开始“用类解决问题”。第六章“比较透彻”地分析了递归的思想,每一个程序员都应该对“函数调用”,“系统堆栈”,“活动记录”有一个清醒的认识。第七章“讨论了代码复用”,是实话这是一个十分巨大而复杂的话题,软件工程这么多年,着力解决的核心问题不就是“如何复用已有代码和组件”吗?第八章“总结如何培养程序员的思维”,有一定的借鉴意义。总的来讲,本书的主旨大意是十分棒的,在纯碎技术讨论之外,跟大家分享思维方法,这在编程领域是比较匮乏的。整本书阅读基本上是在地铁上阅读完成的,建议大家也用些琐碎时间读读罢了。思维的养成还是需要在解决实际问题的时候慢慢体会:-)
  •     转:http://www.linuxjournal.com/content/book-review-think-programmer“Rewire your Brain”. The quote from the back of this book couldn’t have said it any better. I acquired this book to add to my every growing list of programming and scripting books in hopes that I can work through some of the ‘humps’ in my troubleshooting skills. Before I get started in this quick review I’ll give you a little background.I started out dabbling in programming with Basic, utilizing QuickBasic back in the early 90’s, from there I self-taught myself C and Java programming but quickly forgot everything I learned. Fast forward 10+ years to where I spend a majority of my time scripting in Bash, Perl, and Powershell, with minor dabbling in C (mainly patching Linux, reading other’s code, or AVR programming). So when I saw this book I figured ‘hey, the back of the book says I don’t necessarily need C++ programming, this just might be up my alley’.Okay, let's get that one thing out of the way before I start my review. Just because the back of the book says, and I quote “Just because the books examples are written in C++, the creative problem-solving concepts they illustrate go beyond any particular languages....”, if you don't know any of the fundamentals of C++, be it classes, arrays, memory allocation, etc then in all honesty you either need to pull out your C++ fundamentals books (like I had to) and brush up on your C++ or read the book for some of the really good problem solving examples. I would say 90% of this book deals with C++ examples and problem solving that has to do with C++ coding examplesWill this book make you a better programmer? Will it teach you to write better code, better syntax? No. However, this book will teach you what you are doing wrong in your code, how to streamline your code, and how to step back, take a breather and re-evaluate it for better or worse. Though I haven’t touched a line of C++ code in over a decade I was able to read this book (and even take some of the examples, turning them into C) and learn some of the mistakes I have made over the years. There were many times where I had been frustrated writing a program or a script, and in my frustration I turned out convoluted, obscure code that made absolutely no sense yet it ran in some twisted, duct tape and twine way. Had I read this book previously, taken a step back and utilized the steps illustrated in the book to properly evaluate what my end goal was then my end results would be the same (code runs) yet with fewer problems along the way.So onto a quick look at the book. The first few chapters go over problem solving skills outside of the programming environment, like puzzles and day-to-day problem solving- utilizing critical thinking and analytical thinking to solve real world problems before you jump into your programming environment. From there the author goes into the skills necessary to problem solve in a programming environment, and then immediately jumps into the C++ examples.Each example is broken down by chapter with each chapter guiding the reader in the ‘best practice’ scenarios for effective problem solving. Concluding each chapter is a list of programming exercises that the reader can complete, of which I highly recommend.At the end of the book is a concluding chapter on problem solving that wraps up everything the reader has read on the examples and exercises outlined in the book.My thoughts? If you have no C++ background I would honestly look elsewhere unless you want to pick up the book for the 2 or so chapters on ‘non C++’ problem solving guides. However if you are a student learning C++ or a veteran C++ programmer, I highly recommend adding this book to your ever growing bookshelf. You just may change the way you re-evaluate writing your code. I know I did; after reading this book I started going through scripts and code I have written in the last 15+ years and shaking my head in disbelief. Time to pick up my notebook and problem solve old scripts.

精彩短评 (总计36条)

  •     只看了递归一个章节, 一开始觉得概念不算, 细想后, 也就那么回事~...
  •     只有第一章可以给不懂程序的人看,后面的全都涉及编程基础。
  •     是我想要看的内容
  •     不知道是原文就写的比较花俏还是翻译的问题,前一阵子读的一本不是很讲技术的一本书是《程序员的职业素养》感觉那本书写的句子很通俗易懂,我觉得作为一本程序员的书籍,用词应该简约简单,不应该写冗长的许多修饰词的句子,让人看一遍没看懂还要回头看,这是让人感觉很累的事情。但是不得不说,书的内容还是很好的,很值得一看,书的结构也很好,对于刚入门或者初级程序员启发还是比较大的... 阅读更多
  •     比较简单,常用技巧,适用于初学者,主要介绍数据结构,用c c++距离讲解数组、链表、类、递归等
  •     怎么说呢,还是有有意思的小段落,不过程序员要思考的可比书里写得要多多了。而且感觉是写给有编程经验的不会编程的人 ...
  •     这个系列的书真的不错,感谢人民邮电出版社引进这个系列,翻译的也不错,最最重要的是:AMAZON.CN价格太给]力了,促销力度最大,宣传力度最小,真是低调呀.
  •     很好 包装差了点 很喜欢这本书
  •     過於簡單了
  •     大多数人评论的时候总是说纸张什么的,很缺乏实际的东西,这本书内容确实很不错,提供程序员对事务分析的方法,确实对提高事务分析能力很有帮助!
  •     过年回家那几天边晒太阳边看,在我回来前的那天看完了。
  •     大学时读这本书最合适了,现在读这本书真是相见恨晚。递归那章尤其透彻。
  •     很好看,看了很受用,买的很值
  •     非常基本的指导。对于入门应该还好。对于我真正有用的是第一章讲解基本的解决问题方法。
  •     思维方式很重要,你学编程应该掌握编程的思维方式。你学艺术应该让自己思维沉浸在艺术中,你学文学应该去培养想象力等等。我始终相信一般人学什么都可以成功的,但是首先要掌握学这门东西的技巧,其中思维方式就是核心一块。
  •     写得非常好, 尤其对初学者, 主要讲了解决问题的思路和方法, 这样无论你遇到什么问题都可以通过其中的方法从各个方面和角度去克服
  •     也……也还好啦。
  •     没有做到让人学会思考的程度
  •     暗时间里说思维的书很重要,思维方式影响着方方面面,就像看完七周七语言的感受。如果只学过c++/java(不用其动态特性),就不知道原来编程可以这么编,prolog的声明式编程真的好特别,数据即代码的思想也是 #参coolshell中的元驱动编程模式跟冒号课堂的元编程范式 #好像都跟书本身的内容无关= =
  •     内容没有看,但是纸张确实不怎么好
  •     对编程思维方式的入门讨论
  •     由于不懂c++语言,读起来有一定难度,但是整体的逻辑思维,解决问题的方式值得细细推敲
  •     我还不知道自己怎么思考的
  •     这本书对于我,或者说对于初级的程序员很好,强力推荐。
  •     本书着重讲解了如何通过编程解决某些实际问题,是将编程知识概况成方法的一本书。将问题分解,使它们更容易被解决;函数、库、类实现复用;挑选合适的数据结构。
  •     写的超级棒!
  •     避免陷入挫折感,關注計劃和目標,而不要陷入問題中,出去走走,或者運動下。
  •     读了之后才发现我不想当程序员
  •     有些东西可能只有你开始做项目了,才慢慢发现这本书的技巧,思维都是那么的恰到好处,
  •     推荐,难得的好书,一般来说,计算机技术专业书,讲具体编程的书多,讲解决问题思路的书少,本书以思路为主,具体代码为辅,算是少有的精品为什么说讲具体编程方法技巧的书多,而讲问题解决思路的书少? 其实原因很简单,前者内容具体,好写好讲,后者就有些抽象,基本属于方法论,难写难讲. 阅读更多
  •     他比较满意 应该还行吧
  •     编程的真正挑战不是学习一种语言的语法,而是学习创造性的解决问题,从而构建美妙的应用。
  •     不适合作为基础编程入门书,倒是合适学过编程之后的人回过头来梳理一下自己的思维,不管是思维定势,还是某些思维还不太成熟,这本书的某些点上可能真的是你的知识盲点,然而就整本书而言,感觉trick多于solid knowledge。
  •     读了前面,后来没时间了,以后还得回来再重读
  •     前面两章还有点意思。但是后面说的感觉很没含量。解决问题的技巧,1 看清问题,2 划分问题,3 从自己所知开始,4 类比 5 不行就尝试减少问题。用递归解决问题这里有点意思。头递归和尾递归。头递归传递的东西多,一般使用尾递归。
  •     作用一般,还是买本编程思想什么的看看吧。
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024