每次关机,debian都会将UTC时间保存在BIOS里,这样在windows系统里,时间就落后8小时。
解决办法:编辑/etc/default/rcS,修改UTC=yes为UTC=no。
Every hacker should have a good solid dead tree library to draw ideas from and use as reference material. This list has a bit of everything - textbooks you will encounter at top tier computer science universities, books giving insight into the industry, and references you shouldn’t be caught without. It is a list of hackers’ classics.
The Mythical Man Month: Essays on Software Engineering - Anniversary Edition
by Fredrick P. Brooks
This is a classic on the human elements of software engineering first published in 1975. The technology has changed a lot in this time, but the human elements of software engineering have remained the same. It is a wealth of insight, often quoted, and very well known in the industry. “The Mythical Man Month” describes many commonly occurring problems in large and mid-scale development projects and breaks them down. Here are a two of the book’s important principles:
The Mythical Man-Month: Adding manpower to a late software project makes it later.
No silver bullet: There is not a single strategy, technique, or trick that can exponentially raise the productivity of programmers.
I recommend this book not only for programmers, but for anyone managing a software project. Project managers and programmers alike will appreciate Brooks’ clear, well-thought out points.
The C Programming Language (2nd Edition)
by Brian W. Kernighan and Dennis M. Ritchie
Commonly referred to as just K&R, this is the canonical C reference book. It’s to the point without being too terse; its detailed enough for a beginner to understand without being bloated. K&R tells you exactly what you need. Nothing more, nothing less. At 274 pages this is one of the most compact languages references you will find. I dare a Java author to come up with something so sweetly concise.
This book is recommended for anyone learning C, and for anyone looking for a C reference book. K&R is a must read for anyone who is writing a language reference or technical literature.
If you have never programmed before, K&R might not be the best place to start out, but still doable if you are motivated. Beginners might also consider getting a copy of “The C Answer Book,” which gives detailed explanations of solutions to the K&R exercises.
Structure and Interpretation of Computer Programs (2nd Edition)
by Harold Abelson and Gerald Jay Sussman
SICP is used in entry level computer science classes at many top tier universities including the University of California - Berkeley and the Massachusetts Institute of Technology. It uses the Scheme language to introduce many powerful paradigms like recursion, lambda notation, abstraction, and interpreted languages.
I found this book incredibly dense when I first read it for an introductory CS class, and there was still much to learn from a reread several years later after I had a better grasp of the ideas presented here.
If you didn’t have the opportunity to use this book in the classroom, I would recommend picking it up to see what you missed, especially if you haven’t used any of the Lisp dialects extensively.
Code Complete 2: A Practical Handbook of Software Construction
by Steve McConnell
“Code Complete 2″ is a highly regarded book about software construction, where McConnell defines construction as mainly programming and debugging, along with some elements of construction planning, detailed design, unit testing, integration, and integration testing.
The book’s focus is on writing better code. McConnell touches on a wide variety of topics including managing complexity, refactoring, coding style, and writing good comments.
This book is recommended for anyone who wants to write good solid code. It will save beginners time when learning good coding practices, and is a great refresher for programmers with years of experience who may find that over time they have developed habits that are holding them back.
by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein
This is another textbook. “Introduction to Algorithms,” is probably the most popular university-level text for algorithms classes. It also serves as an excellent reference book.
Even though practically speaking most programmers shouldn’t be writing their own implementation of, say, quicksort, in a production environment, algorithms knowledge is essential for understanding what kind of asymptotic performance you can expect from libraries and your own code.
“Introduction to Algorithms,” is recommended as a reference for any developer looking to brush up on their algorithm skills. It is also recommended if you are interested in topics like NP-Completeness , randomized algorithms, or Fast Fourier Transformation. Good math skills are essential if you want to grok all parts of this book.
Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides
This is a catalog of different object-oriented design patterns. For each of the 23 patterns that are presented, the authors give an in-depth analysis including a motivating example for the pattern, common pitfalls and trade-offs, related patterns, and sample code in either C++ or Smalltalk. Some of the patterns covered are Singleton, Observer, Template Method, Iterator, and Proxy.
This book is a must read for intermediate or advanced developers
working on object-oriented code. Coders that are new to object-oriented
design would be best served by mastering the basics of an
object-oriented language and digging in to non-trivial project before
attempting to learn all of the patterns presented here, otherwise the
patterns aren’t likely to “stick.”
Programming Pearls (2nd Edition)
by Jon Bentley
This is a great book for learning how to approach problems. Each of the 15 chapters presents a different task, such as sorting phone numbers, creating anagrams, or doing text searches. The problem is defined, and then Bentley walks through different solutions, providing a discussion and clear analysis of each solution, with a breakdown of programming principles at the end.
“Programming Pearls,” contains some very clever ideas, and would be of some use as an algorithm reference for a small class of problems, but the take away of the book is something much bigger and more general: how to approach and solve problems from the perspective of an engineer.
I recommend this book to anyone who enjoys working though programming brain teasers.
Compilers: Principles, Techniques, and Tools
by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman
“Compilers: Principles, Techniques, and Tools,” is commonly known simply as the “dragon book.” This is the standard textbook in a theoretical compilers class. It covers everything you would expect to find in a compilers text: language syntax, parsers, lexical analysis, grammars, intermediate code generation, runtime environments, optimization, etc. If you haven’t done a lot of work with these topics, be prepared to learn a whole slew of new termonolgy and concepts: deterministic finite automata, finite state automata, LR parsing, and more.
I particularily enjoyed parts of the dragon book that get down and dirty into the mathematical notation and theory - and this is large theme throughout the book. If you find regular expressions and state machines facinating you will really enjoy the book. On the other hand, if you are looking for a text that will introduce modern, practical compiler implementation details you may find the dragon book a bit lacking. In those respects the dragon book is starting to show its age (this version was copyrighted in 1986).

Unix Power Tools, Third Edition
by Shelley Powers, Jerry Peek, Tim O’Reilly, and Mike Loukides
This is one of the many great books from the O’Reilly collection. “Unix Power Tools,” weighs in at a hefty 1200 pages, and is full of descriptions of Unix command line tools, usage cases, and shell script syntax examples for all of the major shells.
“Unix Power Tools,” is a great reference book and is fairly well organized into self-contained chapters. If you find yourself reading this book from cover to cover you are an amazing specimen of geekdom.
Much of the information contained within this book can be found more quickly with a Google search, but sometimes its nice to have a dead tree reference as well.
This is one of the few books that is valuable for beginners and experts alike. Everyone from a complete Unix newbie to a seasoned Systems Administrator has something to gain from “Unix Power Tools.”
The Ultimate Hitchhiker’s Guide: Five Complete Novels and One Story
by Douglas Adams
Well this book isn’t technically about hacking, but your geek card is hereby revoked if you haven’t at least read this “increasingly inaccurately named,” Hitchhiker’s Trilogy. It contains all 5 books in the Trilogy: “The Hitchhiker’s Guide to the Galaxy,” “The Restaurant at the End of the Universe,” “Life, The Universe and Everything,” “So Long, and Thanks for All the Fish,” and “Mostly Harmless,” plus the short “Young Zaphod Plays it Safe.”
Be entertained. Discover the answer to life, the universe, and everything. Learn how to make a Pan Galactic Gargle Blaster. And most of all don’t panic!
This edition is bound in beautiful black leather and has a silk ribbon bookmark sewn into it. It’s like reading a very nice Bible, only more believable. (Mandatory disclaimer before any trolls find me: That was a joke.)
That’s it for my top 9½. What would you put in yours?
[Update: Have a look at the follow-up list, 5½ more books in a hacker’s bookshelf.]
This is a follow up to the list of recommended books for a hacker’s bookshelf that was posted a few months ago. Here are 5½ more essential books for a hacker’s bookshelf. This list is based on reader suggestions, and like the previous list of recommended programming books, it contains a nice mix of computer science texts, developer references, and books giving insight into the programming industry. This is another list of hackers’ classics.
by Andrew Hunt and David Thomas
The “Pragmatic Programmer” is a high level overview of a wide range of practical topics in software development. It covers just about every aspect of software development including working in teams, source control, writing bullet-proof code, thinking critically, remembering the big picture, the benefits of knowing your tools, effective communication…and the list goes on.
“The Pragmatic Programmer” is organized around a series of practical tips for becoming a better software developer. Many of the tips are immediately implementable, and each tip is explained in a logical way and supported by entertaining anecdotes and quotes. The book contains a handy tear-out card that lists all of the tips.
This book is recommended for anyone who wants to be a better coder. It is probably best suited to beginner and intermediate developers, but advanced developers may find it a fun and worthwhile read as well.
Also recommended by Florian Potschka and Jason.
by Donald E. Knuth
According to The New Hacker’s Dictionary, a safe answer when you don’t know something is always: “I think you can find that in Knuth.” The Art of Computer Programming (TAOCP) is a probably the definitive computer science text. This boxed set contains the first 3 volumes of a planned 7 volume set. Volume 4 is unfinished, and is currently being published as a set of smaller books called fascicles. The 3 volumes included here are: “Fundamental Algorithms,” “Seminumerical Algorithms,” and “Sorting and Searching.”
I’m a bit embarrassed to say that I haven’t read TAOCP - I’ve always found it a bit hard to justify spending $190 on a set of books, even if they are masterpieces. (Update: Amazon currently has the set marked down to $153.) I would recommend TAOCP to anyone who wants to fill in any gaps in their computer science knowledge, and who has a lot of pocket change laying around.
Also recommended by seb and Dennis Grooves.
by Eric S. Raymond
This book does a great job of explaining the old “hacker ethic” and explaining why *nix is the way it is. “The Art of UNIX Programming,” contains case studies and commentary from many of the big names in the *nix culture: Ken Thompson, Steve Johnson, Brian Kernighan, David Korn, and others.
This book really covers a lot of ground. The first part of the book is an introduction to the *nix history, culture, and philosophy. The main points brought up in the introduction are then well-illustrated by case studies. The book goes on to talk about the various tools that are available in the *nix ecosystem, and how to be a successful participant in the FOSS community.
This book is recommended for anyone who has an interest in operating systems history, the open source culture and philosophy, or just learning about different tools and techniques that will help in becoming a better coder.
Also recommended by jason and Tet.
by Daniel P. Friedman and Matthias Felleisen
“The Little Schemer” (editions 1-3 were called the “Little Lisper”) uses a unique question and answer technique to create a dialog that really draws you into the book. It starts from first principles and gradually works up to more advanced topics like the halting problem and writing a Scheme interpreter.
Despite the title, this book isn’t really about Scheme; it covers only the basic features of the language, and doesn’t even introduce local variables. However, a more thorough treatment of Scheme is given in the next book in the serious, “The Seasoned Schemer.” What “The Little Schemer,” does do well is teach recursion and the art of “thinking in Lisp.” Recursion is a recurring theme that is continually expanded upon throughout the book.
This book is recommended for anyone looking for a mind-expanding treatment of recursion and the art of thinking like a lisper.
Also recommended by landon dyer.
by Tom DeMarco and Timothy Lister
“Peopleware” focuses on the sociological aspects of software development. The authors state that for the overwhelming majority of failed software projects, the failure was due to sociological, not technical, problems.
This book is very well regarded in the industry, and I think a large reason for that is the underlying theme of Peopleware: developers, when given the chance, will do the right thing. Furthering this idea, a manger’s job is not to make people work, but to give people the ability to work. This means (among other things) private offices with closing doors for developers, and coders who are given intellectual responsibility over their jobs. The points are backed up by statistical evidence and often humorous anecdotes.
This book is recommended for anyone who manages software development projects, or aspires to lead a team of developers. Buying one for management could just convince them to ditch the cubicle idea.
Also recommended by Florian Potschka.
by Neal Stephenson
“Snow Crash” is the obligatory science fiction book in the list. This book is one of the defining books in the cyberpunk genre, right along with Bruce Sterling’s work. “Snow Crash” is the story of Hiro Protagonist, last of the freelance hackers and the greatest sword fighter in the world, who delivers pizzas for a Mafia-controlled pizza franchise. He teams up with Y.T., a spunky young female skateboard courier in order to help his friend Da5id who was the victim of a computer virus with biological effects.
This book ties together ancient Sumerian myths, post-modern computer viruses, and biological hacking. The result is an almost matrix-esque hacker world view. For the most part, the book moves along very quickly from one surreal action sequence to another. My only complaint was that the section on Sumerian culture really bogged down the pace of the book.
“Snow Crash” is a must read for anyone who enjoys the cyberpunk genre and/or fast-paced, action-packed fiction.