Skip to content

Latest commit

 

History

History
265 lines (187 loc) · 11.9 KB

#cs-foundations.md

File metadata and controls

265 lines (187 loc) · 11.9 KB

CS Foundations Resources

CS Overview

Books

  • Computer Science: An Overview (13th, 2018) by Glenn Brookshear and Dennis Brylow

Courses

Mathematics

  • Discrete mathematics and its applications (7th, 2011) by Kenneth H·Rosen
  • Introduction to Graph Theory (2nd, 2017) by Douglas B. West
  • Introductory Combinatorics (5th, 2017) by Richard A.Brualdi
  • A Friendly Introduction to Number Theory (4th, 2017) by Joseph H.Silverman
  • Numerical Recipes (3rd, 2007) by William H. Press
  • Concrete Mathematics: Foundation for Computer Science (2nd, 1994) by Ronald L. Graham, Donald E. Knuth and Oren Patashnik
    ACM竞赛必读书之一,几乎包含了所有计算机科学里涉及到的数学问题,里面有众多的经典问题与经典解法,对开拓人的数学思路有极大的帮助。

C/C++

Must Read

  • The C Programming Language (2nd, 1988) by Brian W. Kernighan, Denis M. Ritchie (TCPL)
  • Pointers on C (1997) by Kenneth A·Reek
  • Expert C Programming: Deep C Secrets (1994) by Peter van der Linden
  • C Traps and Pitfalls (1989) by Andrew Koenig
  • C++ Primer (5th, 2012) by Josée Lajoie and Stanley B. Lippman
  • The C++ Programming Language (4th, 2013) by Bjarne Stroustrup
  • The C++ Standard Library (2nd, 2012) by Nikolai Josuttis
  • Effective C++ (3rd, 2005) by Scott Meyers

Some More

  • Effective Modern C++ (2014) by Scott Meyers
  • More Effective C++ (1996) by Scott Meyers
  • Effective STL (2001) by Scott Meyers
  • Large-Scale C++ Software Design (1996) by John Lakos
  • Inside the C++ Object Model (1996) by Stanley B·Lippman

Algorithms

Prime

  • Algorithms (4th, 2011) by Robert Sedgewick
  • Data Structures and Algorithm Analysis in C (2nd, 1996) by Mark Allen Weiss
  • Data Structures and Algorithm Analysis in Java (3rd, 2011) by Mark A. Weiss
  • Data Structures and Algorithm Analysis in C++ (3rd, 2011) by Clifford A. Shaffer

Advanced

  • Algorithm Design (2005) by Jon Kleinberg, Éva Tardos
  • The Algorithm Design Manual (2010) by Steven S Skiena
  • Introduction to Algorithms (3rd, 2009) by Charles E. Leiserson, Clifford Stein, Ronald Rivest, and Thomas H. Cormen (CLRS: authors abbreviation)
  • Algorithms (2006) by Sanjoy Dasgupta

Some More

  • The Art of Computer Programming Volumes 1-4 by Donald.E.Knuth (TAOCP)
  • Programming Pearls (2nd, 1999) by Jon Bentley

For Interview

  • 剑指Offer (2012) by 何海涛
  • 编程之美 (2008) by 《编程之美》小组
  • 程序员代码面试指南:IT名企算法与数据结构题目最优解 (2015) by 左程云
  • Cracking the Coding Interview: 189 Programming Questions and Solutions (2015) by Gayle Laakmann McDowell 程序员面试金典

For ACM

  • 挑战程序设计竞赛 (2013) by 秋叶拓哉
  • 算法竞赛入门经典(2nd, 2014)by 刘汝佳
  • 信息学奥赛一本通 (2013) by 董永建

Courses

Tutorials

Computer Architecture

Must Read

  • Computer Organization and Design: the Hardware/Software Interface (5th, 2013) by David A Patterson John L Hennessy and John L. Hennessy
  • Computer Architecture: A Quantitative Approach (6th, 2017) by David A Patterson John L Hennessy and John L. Hennessy
  • Computer Systems: A Programmer‘s Perspective (3rd, 2015) by Randal E.Bryant, David O'Hallaron (CSAPP)

Some More

  • Computer Organization and Architecture: Designing for Performance (9th, 2012) by William Stallings
  • Structured Computer Organization (6th, 2012) by Andrew S. Tanenbaum, Todd Austin

Digital Circuits

  • Digital Fundamentals (9th, 2005) by Thomas L. Floyd
  • Digital Integrated Circuits: A Design Perspective (2016) by Jan M. Rabaey

Assembly Language

  • 汇编语言 (2003) by 王爽
  • Professional Assembly Language (2005) by Richard Blum
  • Assembly Language for Intel-Based Computers (1998) by Kip Irvine

Compiler

  • Code: The Hidden Language of Computer Hardware and Software (1999) by Charles Petzold
  • Structure and Interpretation of Computer Programs (2nd, 1996) by Harold Abelson (SICP)
  • Essentials of Programming Languages (2001) by Daniel P. Friedman, Mitchell Wand
  • Compilers: Principles, Techniques, and Tools (1986) by Alfred V. Aho and Monica S. Lam (龙书)
  • Modern Compiler Implementation in C (2004) by Andrew W. Appel (虎书)
  • Advanced Compiler Design and Implementation (1997) by Steven Muchnick (鲸书)
  • Engineering a Compiler (2003) by Keith Cooper and Linda Torczon
  • Parsing Techniques (2008) by Dick Grune, Ceriel J.H. Jacobs
  • 程序员的自我修养 (2009) by 俞甲子, 石凡, 潘爱民
  • The Elements of Computing Systems: Building a Modern Computer from First Principles (2005) by Noam Nisan, Shimon Schocken

Operating System

Must Read

  • Operating Systems: Three Easy Pieces (2015) by Andrea C. Arpaci-Dusseau and Remzi H. Arpaci-Dusseau
  • Operating System Concepts (10th, 2018) by Abraham Silberschatz, Peter B. Galvin, Greg Gagne
  • Operating Systems (3rd, 2003) by Harvey Deitel, Paul Deitel, David R. Choffnes
  • Modern Operating Systems (4th, 2014) by Andrew S. Tanenbaum

Some More

  • Operating Systems Design and Implementation (3rd, 2006) by Andrew S. Tanenbaum, Albert S. Woodhull
  • Systems Performance (2013) by Brendan Gregg
  • Orange'S:一个操作系统的实现 (2009) by 于渊
  • 操作系统真象还原 (2016) by 郑钢
  • 一个64位操作系统的设计与实现 (2018) by 田宇

For Programming

  • Linux Kernel Development (3rd, 2010) by Robert Love
  • Advanced Programming in the UNIX Environment (3rd, 2013) by W. Richard Stevens (APUE)
  • The Art of Unix Programming (2003) by Eric S. Raymond
  • The Linux Programming Interface (2010) by Michael Kerrisk
  • UNIX Systems for Modern Architectures (1994) by Schimmel.
  • Windows Internals (7th, 2017) by Russinovich and Solomon
  • Programming Windows (5th, 1998) by Charles Petzold
  • Programming Applications for Microsoft Windows (1999) by Jeffrey Richter

Computer Network

Must Read

  • Computer Networking: A Top Down Approach (7th, 2016) by Kurose, Ross
    Best for a beginner. You will fall in love with this book once you get hold of it :P. No prerequisites required. It is written marvelously for anyone to get interested in networking)
  • Computer Networks (5th, 2010) by Andrew S. Tanenbaum and David J. Wetherall Good but dry. Well formed contents, should have some basic understanding of data communications before reading this book)
  • TCP/IP illustrated Vol 1 (1st, 1994) (2th, 2011) by Richard Stevens

Some More

  • Data Communications and Networking by Behrouz A. Forouzan
  • Computer Networks: A System Approach Larry L. Peterson and Bruce S. Davie
  • Data and Computer Communications by William Stallings
  • RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
  • HTTP: The Definitive Guide (2002) by David Gourley, Brian Totty, Marjorie Sayer, Anshu Aggarwal, Sailu Reddy
  • Learning Http/2: A Practical Guide for Beginners (2017) by Stephen Ludin, Javier Garza
  • Wireshark网络分析就这么简单 by 林沛满
  • wireshark网络分析的艺术 by 林沛满

For programming

  • Unix Network Programming Vol 1 (3rd, 2003) Sockets API - Richard Stevens
  • Unix Network Programming Vol 2 (2nd, 1998) Inter process Communication - Richard Stevens

Databases

Must Read

  • Database System Concepts (6th, 2010) by Sudarshan, Korth
  • Fundamentals of Database System (7th, 2017) by Ramez Elmasri, Shamkant B. Navathe
  • Database System Implementation by Hector Garcia-Molina, Jeffrey D.Ullman and Jennifer Widom

Some More

  • MySQL技术内幕 by 姜承尧
  • Redis设计与实现 by 黄健宏
  • Database Management System by Raghu Ramakrishnan, Johannes Gehrke
  • Fundamentals of Relational Database Management Systems by S. Sumathi, S. Esakkirajan
  • Database Systems concepts, languages & architectures by Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone
  • Database Systems: A Practical Approach to Design, Implementation, and Management by THOMAS M. CONNOLLY, CAROLYN E. BEGG
  • Database Modeling & Design: Logical Design by TOBY TEOREY, SAM LIGHTSTONE, TOM NADEAU

Programming

Parallel Programming

  • An Introduction to Parallel Programming by Peter Pacheco
  • Is Parallel Programming Hard, And, If So, What Can You Do About It? by Paul E. McKenney

Garbage Collection

  • The Garbage Collection Handbook by Richard Jones, Eliot Moss, Antony Hosking
  • 垃圾回收的算法与实现 by 中村成洋, 相川光

Security & Cryptography

Must Read

  • The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography (2000) by Simon Singh
  • Understanding Cryptography: A Textbook for Students and Practitioners (2010) by Christof Paar, Jan Pelzl
  • Applied Cryptography: Protocols, Algorithms, and Source Code in C (2015) by Bruce Schneier

Some More

  • Cryptography Engineering: Design Principles and Practical Applications by Niels Ferguson, Bruce Schneier, Tadayoshi Kohno
  • Introduction to Modern Cryptography, Second Edition (Chapman & Hall/CRC Cryptography and Network Security Series) by Jonathan Katz
  • Serious Cryptography: A Practical Introduction to Modern Encryption by Jean-Philippe Aumasson
  • Practical Cryptography by Niels Ferguson, Bruce Schneier
  • Cryptography and Network Security: Principles and Practice by William Stallings

Design Patterns

  • Design Patterns: Elements of Reusable Object-Oriented Software (1994) by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  • Head First Design Patterns (2004) by Elisabeth Freeman
  • Head First Object-Oriented Analysis and Design (2006) by Brett D. McLaughlin

Code

  • The Pragmatic Programmer by Andrew Hunt, David Thomas
  • The Clean Coder:A Code of Conduct for Professional Programmers by Robert C. Martin
  • Clean Code : A Handbook of Agile Software Craftsmanship (2008) by Robert C. Martin, Prentice Hall
  • Clean Architecture by Robert C. Martin
  • Code Complete (2nd, 2004) by Steve McConnell
  • Refactoring : Improving the Design of Existing Code (2nd, 2018) by Martin Fowler, Kent Beck
  • Test Driven Development: By Example (2002) by Kent Beck
  • Effective Unit Testing by Lasse Koskela

Team & Agile

  • Extreme Programming Explained
  • The Mythical Man-Month: Essays on Software Engineering by Jr·Frederick P·Brooks
  • Scrum and XP from the Trenches by Henrik Kniberg
  • The Art of Agile Development by James Shore, Shane Warden
  • Learning Agile by Andrew Stellman

Some More

  • Agile Retrospectives:Making Good Teams Great by Esther Derby , Diana Larsen,Ken Schwaber
  • Coaching Agile Teams: A Companion for ScrumMasters,Agile Coaches, and Project Managers in Transition by Lyssa Adkins
  • Agile Project Management with Scrum by Ken Schwaber
  • Succeeding with Agile:Software development using Scrum by Mike Cohn
  • Agile Estimating and Planning by Mike Cohn
  • Lean thinking banish waste and creat wealth in your corporation by James P.Womack
  • Kanban: Successful Evolutionary Change for Your Technology Business by David J.Anderson
  • User Stories Applied:For Agile Software Development by Mike Cohn
  • User Story Mapping Building Better Products using Agile Software Design by Jeff Patton