高分编程佳作推荐

原创 2017年09月25日 09:09:32

编程方面书籍的Top 10榜单大家可能都已经烂熟于心,TAOCP、GoF、CLRS、SICP、《The C Programming Language》、《Clean Code》、《Refactoring》、《Code Complete》、人月神话、龙书等等,这些都是经过了时间考验、需要反复阅读的经典。本文不谈这些人人皆知的经典著作,而是给大家推荐一下比较新的、网评非常好的“新经典”,如果前面那些都已经读过或者读腻了,不妨来看看这些不错的新书,也许能重新激发你学习的乐趣。

mybooks


1.业余数学

1.1 基本素养

书目:《Mathematics: A Very Short Introduction》、《How to Think Like a Mathematician》、《Concepts of Modern Mathematics》

非常好的三本入门书,都已在读,管中窥豹地了解一下什么是数学、数学家如何思考、现代数学中最火的研究主题,稍后会写一篇文章专门总结一下。

1.2 趣味读物

好的数学科普读物非常多,目前最想读的是《The Man Who Knew Infinity: A Life of the Genius Ramanujan》、《The Man Who Loved Only Numbers: The Story of Paul Erdős and the Search for Mathematical Truth》和Surely You’re Joking, Mr. Feynman!: Adventures of a Curious Character》。费曼先生这本小书被放在了卫生间,每天读一章,还挺有趣的……

1.3 正统教材

书目:《Calculus: An Intuitive and Physical Approach》、《Introduction to Linear Algebra》

正统的数学学习,最想读Spivak的《Calculus》和Strang的《Introduction to Linear Algebra》。可惜这两本都是教材,卖的实在有点贵,有一本评价非常不错的微积分书《Calculus: An Intuitive and Physical Approach》,Dover出版,价格公道、童叟无欺,八百多页只要二十刀。于是已经入手,兴致勃勃准备学习一下。概率论不准备读纯数学类教材了,因为有本概率论与算法分析结合的非常好的教材,具体参见1.2 算法部分。


2.CS理论

2.1 计算理论

书目:《Nature of Computation》

《Nature of Computation》是一本新出的大部头,貌似比传统的《Introduction to the Theory of Computation》要轻松一些。还有一本评价非常高的,著名的物理学家费曼的《Feynman Lecture on Computation》。

2.2 算法

书目:《Probability and Computing: Randomized Algorithms and Probabilistic Analysis》、《From Mathematics to Generic Programming》

所有经典的算法书基本都买全了,TAOCP(《The Art of Computer Programming》)准备打折时收藏一下留作查阅用,但估计没机会读完甚至开始读,有机会能读完第一卷Fundamentals就不错了。到头来还是绕不开CLRS(《Introduction to Algorithm》),准备好好重读一遍,好好做一下习题,也不枉读研时导师讲了那么多相关的内容。其他《Algorithm Design》、《The Algorithm Design Manual》、《Algorithms》、《Programming Pearls》等作为补充,比如DP、Combinatorics。另外,这本强大的UCBerkeley的教材《Probability and Computing》是对CLRS非常好的补充,不仅可以复习概率论的基础知识,同时也是对CLRS中算法分析和随机算法部分的有力补充。

《From Mathematics to Generic Programming》是Alexander A. Stepanov的最新著作,比之前那本所谓的编程的本质《Elements of Programming》要通俗有趣,加入了抽象代码等基础知识的介绍和一些数学史的趣事。从数学或者说科学的角度看编程,这方面Stepanov的书,还有David Gries的《The Science of Programming》都是佳作,也很合本人胃口。

2.3 编程语言理论

书目:《An Introduction to Functional Programming Through Lambda Calculus》、《Types and Programming Languages》

学习编程语言理论,这本TaPL是绕不开的经典著作。读研时上过一门叫做《Principle of Programming Language》的课,导师是一位身宽体胖的老大爷。前两节来上课试听的同学还不少,但等到第二周正式注册时却只剩不到10个人。于是老大爷就感慨,现在的学生都去选更容易(至少听名字更容易)的课了,我想其实大家是想留更多时间刷题找工作。但是他认为,每一个严肃的程序员,都应该学习编程语言理论。他说这话时的认真表情,让我久久无法平静。那门课我一直认真听认真做,却遇到了很少有的编程作业做不出的情况,因为第一次接触确实很难。所以毕业后想花时间好好学学这方面的东西,还梦想着有能力设计一门自己的语言,一门都是自己觉得好的语法和特性组成的语言,应该会很酷!


3.编程实践

3.1 新语言

书目:《Fluent Python》、《Java 8 in Action》

之前Ruby很火,但因为种种原因似乎现在不那么火了。现在“新语言”的典范应该是Python吧,被Google、Amazon以及很多大公司广泛接受。而这本《Fluent Python》在Goodreads上的评分高的吓人,买了一读发现实至名归,阅读体验非常棒!以前一直在找一本Python进阶的书,因为对于一名其他语言熟练的老程序员来说,从头开讲Python的基础语法真的是种折磨,慢慢就失去了学习Python的热情。而这本书则字字珠玑,讲的都是Python之所以出色的特质。

而后一本则是对Java 8中引入的Lambda有不错的讲解。从本科到工作,一直非常热爱Java,6中的各种新语法特性如数家珍,但从Java 7和8开始就渐渐没有关注,等Java 9出来了一定要好好学习一下,重燃热情~(美亚上显示经典的《Effective Java》第三版明年会出,而且会包含Java 9方面的内容,到时一定要入手一本)

3.2 方法论

书目:《Working Effectively with Legacy Code》

在编程方法方面,《Clean Code》、《Refactoring》和《Code Complete》都是永恒的经典,都是要反复读的,在这里推荐另外一本。作为程序员,我们最经常做的就是修改遗留代码,而这方面容易忽略的一本经典著作就是这本《Working Effectively with Legacy Code》。之前看到一本不错的二手版本,都已经下单了,后来不知道怎么想的又取消了,结果现在特别贵,肠子都悔青了,:|

3.3 工具

书目:《Practical Vim: Edit Text at the Speed of Thought》

这本《Practical Vim》在豆瓣评分高达9.1,在Goodread上也有很高的分数,在中外程序员心中都是一部佳作。使用Vim少说也有了五六年了,看到评价这么好的一本书,不免想买来看看还有哪些高级技巧,让自己Vim的水平更上一层楼。


4.系统开发

4.1 分布式系统

书目:《Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems》

分布式系统编程方面一直没有特别好的书,要么就太泛泛,要么就枯燥。而这本《Designing Data-Intensive Applications》在网上的评价几乎是一边倒的好评,十分好奇所以入手备着,准备细细品读,同时对读研时上的《Distributed System》课里学过的知识都梳理一遍。当时最震惊的就是,原来分布式的理论也可以统一地用数学语言去表达甚至证明。之前一直以为自己擅长这方面的东西,其实学得并不扎实,所以抽时间一定要重新学习一遍。

4.2 架构设计

书目:《Clean Architecture: A Craftsman’s Guide to Software Structure and Design》

Bob大叔最新的著作,2017年9月才正式发售,在美亚上还没有几个人评论。口碑如何目前还不够了解,只是简单的看了一下目录。但Bob大叔名声在外,有《Clean Code》和《Clean Coder》珠玉在前,相信这本也差不了。

4.3 运行维护

书目:《Site Reliability Engineering: How Google Runs Production Systems》

Google的运维工程师手册,从方方面面讲述高可用系统的维护,用科学的方法和思维做事。目前在Amazon工作了一小段时间,深感Amazon在系统监控、运维方面的强大。所以对这方面很感兴趣,想看看Google分享的经验。这本书的缺点据说是有点啰嗦,网上有免费的在线版,想节约资金的同学可以直接在线看。


5.其他佳作

5.1 机器学习

书目:《Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems》、《Gödel, Escher, Bach: An Eternal Golden Braid》

机器学习和AI现在非常火,之前一直没有关注因为觉得自己的数学和理论水平不够,学了也只是皮毛。自从开始自学一些数学知识后,对学习AI有了些信心,相信假以时日还是能够学明白的。这本《Hands-On Machine Learning》评价非常不错,比较基础也比较实用,最后部分还讲到了现在最火的深度学习,绝对值得拥有。另外还有一本超高分的MIT的《Deep Learning》,第一部分也有前置知识的铺垫,但后面部分据说太过权威和严谨,所以本人始终没敢挑战,学有余力的同学不妨一读,相信大家的评价是不会错的。

《Gödel, Escher, Bach: An Eternal Golden Braid》大名鼎鼎的旷世奇书GEB,好不容易买到了一本精装版的,准备好好拜读。从编程、音乐、绘画等科学和艺术人文方面开讲,Goodreads上口碑炸裂不可不读,这样的旷世好书可遇不可求。

5.2 休闲读物

书目:《Coders at Work: Reflections on the Craft of Programming》

《Coders at Work》包含了对十五位编程大师的访谈,谈到了他们是如何喜欢上编程,如何学习,对编程的发展又有何看法。虽然还没有读,但对这本书还是很期待的,相信每位大师振聋发聩的言语会对每个人的职业生涯都产生深远的影响。还有一本《Beautiful Code: Leading Programmers Explain How They Think》,中文名《编程之美》。之前在国内买过但没有随身带过来,网上评价一般,可能因为大家觉得内容比较零散,每章的代码片段像拼凑的,但个人觉得有时间不妨一读,可以激发灵感,因为评分不高所以就没放在上面书目中。

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问 http://blog.csdn.net/dc_726

相关文章推荐

Docker_入门?只要这篇就够了!(纯干货适合0基础小白)

与sgy一起开启你的Docker之路 关键词: Docker; mac; Docker中使用gdb无法进入断点,无法调试; 写在前面 这篇博客适合谁? 对于Docker并不了解,只是有一点模糊的...

想要清肠排毒,就喝汁己青汁!

保持肠胃畅通,对于我们的身体是非常重要的。积累毒素会影响我们气色和皮肤。只有身体排毒好了,才能让身体更加轻盈人也更加精神。 日常多加注意一些小细节可帮助你减少毒素积累。 多喝水 早晨最好空腹喝水...

史上最简单的 MySQL 教程(三)「 MySQL 数据库」

MySQL 数据库MySQL 数据库是一种C\S结构的软件,即分为:客户端和服务端。若想访问服务器,必须通过客户端;服务器应该一直运行,客户端则在需要使用的时候运行。

Node.js开发入门—使用对话框ngDialog

做网站经常会遇到弹出对话框获取用户输入或弹出对话框让用户确认某个操作之类的情景,基于AngularJS的扩展模块ngDialog可以帮我们优雅地完成这类事情。
  • foruok
  • foruok
  • 2015-09-06 07:15
  • 13245

ACM竞赛路上亲爱的坑们

写在前边:这些梗都是敝人自己做题和比赛时曾经坑过自己的地方,特别在这里记录一下,所有的链接都是本博客中的题解链接(有大致题意说明和代码),原题请到OJ上自行寻找。目的是提升自身姿势。欢迎大佬们给我提出...

经验分享-前端与后端的接口、HTML分离

在WEB项目中 前后端不分离多人开放效率还不及一个人开发效率来的高,今天分享一个概念

java实现二维码([带]logo)的绘制和解析(zxing by google)

二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础...

Java基础之(三十七)Java多线程编程<二>

控制线程join线程Thread提供了一个线程等待另一个线程完成的方法:join方法。当在某个程序执行流中调用其他线程的join方法,调用join方法的那个线程将被阻塞,直到被join方法加入的joi...

std::map 如何使用结构体作为自定义键值

在使用map时,有时候我们需要自定义键值,才能符合程序的需要。 比如我们需要使用自定义的结构体来作为map的键值.
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)