具体描述
编程的真正挑战不是学习一种语言的语法,而是学习创造性地解决问鲤.从而构建美妙的应用。本书分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序一样思考。
全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际编写C++代码来解决几个简单的问题,从而让读者进一步体会到问题解决的思路和应用。第3到7章是本书的主体部分,分别探讨了用数组、指针和动态内存,类、递归和代码复用来解决问题的途径和实际应用。最后,第8章从培养程序员思维的角度,进行了总结和概括,告诉读者如何才能像程序员一样思考。
本书选取的话题切中程序员的痛点,针对他们最容易陷入挣扎的领域展开讨论,引发思考。每章后面都给出一些编程习题,使得读者能够应用该章所讨论的概念,训练和提升问题解决的能力。
本书适合初级到中级的程序员用来提升自己的问题解决能力和应用编程技能的能力,也适合计算机相关专业的学生作为参考书阅读。
作者简介
V. Anton Spraul讲授入门级编程和计算机科学已经超过15年。本书凝聚了他在多年的开发经历中所提炼的经验和技巧,并在面向许多遭遇瓶颈的程序员的一对一指导中收到了良好的效果。他还是《Computer Science Made Simple》(Broadway)的作者。
徐波,浙江宁波人,熟悉C和C++、Java等语言。2002年开始从事计算机技术图书翻译。徐波技术视野广阔,翻译文笔优美。翻译有《C专家编程》、《C和指针》等。
目录信息
1.1 经典难题
1.1.1 狐狸、鹅和玉米
1.1.2 瓷砖滑块问题
1.1.3 数独
1.1.4 Quarrasi锁
1.2 基本的问题解决技巧
1.2.1 总是要制订计划
1.2.2 重新陈述问题
1.2.3 划分问题
1.2.4 从自己所知的开始
1.2.5 削减问题
1.2.6 寻找类比
1.2.7 试验
1.2.8 避免陷入挫折感
1.3 习题
第2章 纯粹的难题
2.1 本章所使用的C++简述
2.2 输出图案
2.3 输入处理
2.4 追踪状态
2.5 结论
2.6 习题
第3章 用数组解决问题
3.1 数组基础知识概述
3.2 用数组解决问题
3.3 固定数据的数组
3.4 非标量数组
3.5 多维数组
3.6 决定什么时候使用数组
3.7 习题
第4章 用指针和动态内存解决问题
4.1 指针基础知识回顾
4.2 指针的优点
4.2.1 运行时确定长度的数据结构
4.2.2 可改变长度的数据结构
4.2.3 内存共享
4.3 什么时候使用指针
4.4 内存细节
4.4.1 堆栈和堆
4.4.2 内存的大小
4.4.3 生命期
4.5 解决指针问题
4.5.1 可变长度的字符串
4.5.2 链表
4.6 结论和未来的步骤
4.7 习题
第5章 用类解决问题
5.1 类的基础知识回顾
5.2 使用类的目的
5.2.1 封装
5.2.2 代码的复用
5.2.3 问题的细分
5.2.4 信息隐藏
5.2.5 可读性
5.2.6 表达能力
5.3 创建一个简单的类
5.3.1 问题:班级花名册
5.3.2 基本的类框架
5.3.3 支持方法
5.4 具有动态数据的类
5.5 需要避免的错误
5.5.1 假类
5.5.2 单功能
5.6 习题
第6章 用递归解决问题
6.1 递归基础知识回顾
6.2 头递归和尾递归
6.3 大递归思路
6.4 常见的错误
6.4.1 过多的参数
6.4.2 全局变量
6.5 把递归应用于动态数据结构
6.5.1 递归和链表
6.5.2 递归和二叉树
6.6 包装器函数
6.7 什么时候选择递归
6.8 习题
第7章 通过代码复用解决问题
7.1 良好的复用和不良的复用
7.2 组件基础知识回顾
7.3 创建组件的基础知识
7.3.1 探索式学习
7.3.2 根据需要学习
7.4 选择组件类型
7.5 习题
第8章 培养程序员的思维
8.1 创建自己的总体计划
8.1.1 扬长避短
8.1.2 制订总体计划
8.2 处理任何问题
8.2.1 问题:绞型者作弊程序
8.2.2 寻找作弊方法
8.2.3 绞型者作弊所需要的操作
8.2.4 初始设计
8.2.5 开始编写化码
8.2.6 对初始结果的分析
8.2.7 解决问题的艺术
8.3 学习新的编程技能
8.3.1 新语言
8.3.2 已经熟悉的语言的新技巧
8.3.3 新代码库
8.3.4 上课
8.4 结论
8.5 习题
· · · · · · (收起)
读后感
偶然的机会看到这本书,“思考”这个字眼深深吸引了我,本以为是一本“技术论述”偏少的书,然后作者一直围绕“如何用编程来解决问题”来展开。每一个问题都具体分析,辅以具体的例子和代码,让人读起来头脑非常清晰。 本书其实一直想传达给大家的是,“如何像一个好的程序员...
“一旦我们能够像程序员一样思考,就要为自己的技能感到自豪。如果有人叫你码农而不是程序员,奚落你说一只受过良好训练的鸟也能啄出到没,你可以反驳说自己并不仅仅是编写代码的,而是用代码来解决问题。当你坐在面试桌前面接受未来雇主或客户的面试是,你要相信不管自己所面...
转: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 h...
“一旦我们能够像程序员一样思考,就要为自己的技能感到自豪。如果有人叫你码农而不是程序员,奚落你说一只受过良好训练的鸟也能啄出到没,你可以反驳说自己并不仅仅是编写代码的,而是用代码来解决问题。当你坐在面试桌前面接受未来雇主或客户的面试是,你要相信不管自己所面...
转: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 h...
用户评价
坦白讲,这本书的阅读体验是充满挫败感的,但这挫败感却是极具价值的。它不像市面上那些成功学书籍,给你一个速成的幻觉;相反,它毫不留情地撕开了我们思维中的惰性与盲点。我花了大约两周时间才读完前三分之一,原因在于,每一页文字都像是一块思想的垫脚石,你不能直接跳过去。它要求你对那些看似简单、人人都懂的概念,进行一次彻底的重新审视。举个例子,关于“边界条件”的探讨,作者没有停留在教科书式的定义上,而是将其提升到了一个类似“世界观设定”的高度——你如何定义你的系统与其他世界的交界点,决定了你系统的稳定性和可扩展性。这种宏大的视角,让我重新审视了自己过去那些粗糙的API设计。这本书的行文风格非常冷静、严谨,几乎没有情绪化的表达,全篇充斥着严密的逻辑链条。你无法通过快速扫描来获取信息,你必须跟随作者的思路,一步步走过他的论证过程。这对于习惯了碎片化阅读的我来说,是一个巨大的挑战,但最终的回报是思维清晰度的显著提高,感觉像给大脑做了一次深度碎片整理。
我拿到这本书的时候,正是处于职业生涯的一个平台期,感觉自己写出来的代码越来越流程化,缺乏那种让人眼前一亮的创新和优化。这本书的出现,恰逢其时,但它的冲击力远超我的预期。它没有直接给我任何新的框架或库的知识,而是把焦点完全放在了“调试思维”上。我以前总以为调试就是找Bug,但书里提出了一个非常颠覆性的观点:调试的最高境界,是预测和预防Bug的发生,这需要一种近乎于“逆向工程”的思维模式,去推演一个系统在所有极端条件下的表现。书中的案例分析,虽然没有直接引用任何流行的编程语言,但那种对系统行为的深入洞察,却是通用的。我尤其欣赏作者对“副作用”和“意外连锁反应”的讨论。通常我们只关注主流程,但这本书却花了大篇幅去剖析那些被忽略的、微小的、看似无关紧要的假设是如何最终导致系统崩溃的。读完这部分,我开始在自己的日常工作中,强迫自己多问一个“如果……会怎样?”的问题,这极大地提升了我对代码鲁棒性的关注度。与其说这是一本编程读物,不如说它是一本关于“系统性思维”的哲学导论,只是它的应用场景恰好聚焦于构建数字世界。
这本书的深度,使得它脱离了任何特定的技术领域限制,成为一本真正跨界的思维训练手册。我将它推荐给不同背景的同事——包括产品经理和项目主管——他们反馈都非常积极,尽管他们并非一线开发者。原因在于,书中关于信息不对称、资源分配优化以及复杂系统演化的讨论,完全可以映射到管理和决策制定中。例如,书中对“局部最优解”的警示,完美解释了为什么一个团队在短期内表现出色,但长期来看却陷入技术债务泥潭。作者展现出的那种近乎于工程师般的严谨态度,体现在对每一个论断的论据支撑上,丝毫没有含糊不清的措辞。它教导我们,在提出任何方案之前,必须先建立一个清晰、无歧义的“问题模型”。这本书没有提供任何现成的模板,它的目的似乎是摧毁你既有的、未经检验的思维习惯,然后在你建立起更坚固的地基时,提供最顶级的建筑蓝图——虽然你必须自己去砌砖。对于任何希望提升自己解决复杂问题能力的人来说,这无疑是一笔非常值得投入的时间投资。
这本厚重的书摆在我桌上,名字确实挺吸引人的,但翻开扉页,我立刻意识到这可能不是我预想中的那种“手把手教你写代码”的指南。与其说它是一本技术手册,不如说它是一本关于“心智模式”的深度解析。阅读的过程,感觉就像是进行了一次长时间的、高强度的思维体操训练。作者似乎有一种魔力,能把那些隐藏在编程、工程乃至日常决策背后的逻辑结构,一层层剥开,让你直面事物运转的本质。比如,它深入探讨了抽象化的力量,这不是指OOP里的抽象,而是更底层的那种,关于如何从复杂信息中提炼出可操作模型的能力。我记得有一章详细对比了两种不同的问题分解策略,一个偏向于自顶向下,另一个则是自底向上,两者在面对不确定性时的优劣分析极其透彻。阅读时,我常常需要停下来,对照自己过去处理某些复杂项目时的经验,然后猛然醒悟:“原来我当时效率低,是因为我没有建立起正确的‘心智视图’。”这本书的难点在于,它要求读者不只是被动接受信息,而是必须主动参与到构建思维框架的过程中去。它不会直接给你答案,而是给你一套工具,让你自己去解构你遇到的任何挑战。对于那些习惯于“搜索-复制-粘贴”式学习的人来说,这本书可能会显得晦涩难懂,因为它在训练的,是你大脑的CPU,而不是你的肌肉记忆。
这本书的价值,在于它提供了一种全新的“元认知”视角。我过去总认为,解决问题的关键在于掌握更多工具和知识,但这本书告诉我,真正的杠杆点在于你“如何看待问题”的视角。它像一个高级的过滤器,让你过滤掉噪音,聚焦于核心的结构性矛盾。书中对“黑箱操作”的批判尤为深刻,作者指出,当我们将复杂性外部化,仅仅依赖于某个工具或框架时,我们实际上就放弃了对系统深层行为的控制权。我印象最深的是关于“可解释性”的章节,这不仅关乎代码的可读性,更关乎人类心智对自动化决策过程的理解程度。这本书迫使我反思,在追求效率和自动化的同时,我们是否牺牲了必要的透明度和可控性。它的语言充满了精确的术语,但这些术语并非生硬的行话,而是作者精心设计的概念载体,用来承载复杂的思想单元。阅读它就像是学习一门新的数学语言,初期需要适应其符号系统,一旦掌握,便能以前所未有的精度来描述和解决问题。它不是关于“做什么”,而是关于“如何思考如何做”的终极指南。
看着书名以为是写给非程序员的科普知识,还想通过本书了解下程序员到底是怎么思考人生的,看了前两张有点失落啊,程序员老年还是别用这本书来凑年度阅读计划了。确实是写给“非”程序员的,但不是科普,更像是入门教程。
通过程序解决问题。
看着书名以为是写给非程序员的科普知识,还想通过本书了解下程序员到底是怎么思考人生的,看了前两张有点失落啊,程序员老年还是别用这本书来凑年度阅读计划了。确实是写给“非”程序员的,但不是科普,更像是入门教程。
看着书名以为是写给非程序员的科普知识,还想通过本书了解下程序员到底是怎么思考人生的,看了前两张有点失落啊,程序员老年还是别用这本书来凑年度阅读计划了。确实是写给“非”程序员的,但不是科普,更像是入门教程。
通过程序解决问题。