Advertisement
vinodv

Good books for deep hacks

Jan 1st, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.81 KB | None | 0 0
  1. Taken from:
  2. https://begriffs.com/posts/2017-04-13-longterm-computing-reading.html
  3. Good books for deep hacks
  4. April 13, 2017
  5. Newsletter ↳
  6.  
  7. St. Jerome in his study
  8.  
  9. For the past few months I’ve been compiling a list of books for a deep dive into interesting technical topics. My theory is that working on projects based on these topics will be like strong individual threads I can weave into epic hacks. This list is basically a curriculum for decades of learning about the wonders of computers.
  10.  
  11. What’s exciting about many of these books is how they draw on the good ideas from history. Many of them cover technologies created in the 1990s and earlier, things that we’d do well to understand, even while surpassing them. Much old software has had time to mature, and has been adjusted to be very effective. If there’s a printed book that is old but still accurate this indicates the software it describes is well constructed.
  12.  
  13. I’ve also chosen books that cover alternative ways to do things. For instance learning about document layout engines to compare them with the current DOM/CSS monoculture, or about how various distributed version control systems compare with Git.
  14.  
  15. The books here are emphatically not about “cracking” coding interviews, or any other demonstrative brainteasing. It’s all about intrinsically interesting things. I’ve also omitted the usual suspects like SICP, TAOCP or CLRS – my choice of books are higher-level. They are guides for jumping into fun deep hacks.
  16. Haskell
  17.  
  18. Let’s start here. I want a language to grow with, one with enough depth to offer years of learning. For me that language is Haskell. Depending on the hack, I’ll be using Haskell or C. Why mess with the things in between? (What’s up with everyone nowadays using a misbegotten child of the browser wars as their main language?)
  19.  
  20. Haskell compiles into fast code if you avoid some gotchas, and prevents classes of dumb bugs that nobody should have to worry about.
  21.  
  22. Haskell from First Principles
  23. Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming
  24. Haskell High Performancee Programming
  25. Data 61 Functional Programming Course
  26.  
  27. C
  28.  
  29. Sure, Haskell is great and its abstraction is rewarding but you can’t beat the C language for intrinsic simplicity. The attendant tasks of manual memory management and concurrency may be complex, but there is certainly no hand-waving.
  30.  
  31. The C Programming Language aka K&R
  32. Expert C Programming: Deep C Secrets
  33. The Standard C Library
  34. 21st Century C: C Tips from the New School
  35. C: A Reference Manual
  36. SEI CERT C Coding Standard
  37.  
  38. Profiling
  39.  
  40. Learn the measurements that are relevant to system performance, and how to design rigorous experiments to capture them.
  41.  
  42. Art of Computer Systems Performance Analysis: Techniques for Experimental Design, Measurement, Simulation, and Modeling
  43. Systems Performance: Enterprise and the Cloud
  44.  
  45. Debugging
  46.  
  47. Stop guessing and flailing and instead use a systematic approach for finding bugs.
  48.  
  49. Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems
  50. Why Programs Fail: A Guide to Systematic Debugging
  51. Debug It!: Find, Repair, and Prevent Bugs in Your Code
  52. C language: Debugging with GDB: The GNU Source-Level Debugger
  53. C language: Valgrind 3.3 - Advanced Debugging and Profiling for Gnu/Linux Applications
  54. C language: DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
  55.  
  56. Relational Data Management
  57.  
  58. Talk about mature technology, SQL has evolved for decades as the world’s foremost declarative language. This selection of books covers SQL mastery along with a deep understanding of the problems of transactions and recovery solved by modern RDBMSs.
  59.  
  60. SQL for Smarties: Advanced SQL Programming
  61. Art of SQL
  62. SQL and Relational Theory: How to Write Accurate SQL Code
  63. Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery
  64. New Relational Database Dictionary: Terms, Concepts, and Examples
  65.  
  66. Networking
  67. General Networking
  68.  
  69. These books cover the history and design of TCP/IP and the standard network layers. They talk about design choices, and new developments like IPv6.
  70.  
  71. History: Inventing the Internet
  72. History: Where Wizards Stay Up Late: The Origins of the Internet
  73. TCP/IP Illustrated, Volume 1: The Protocols
  74. TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference
  75. Wireshark Network Analysis: The Official Wireshark Certified Network Analyst Study Guide
  76.  
  77. Wireless Networking
  78.  
  79. The magic of radio… it’s a wonder of nature. From its simple spark gap origins to modern mesh networking, radio offers free lightspeed communication to all.
  80.  
  81. ARRL Ham Radio License Manual
  82. Software Receiver Design
  83. Fundamentals of Mobile Data Networks
  84. History: Wi-Fi and the Bad Boys of Radio: Dawn of a Wireless Technology
  85. 802.11 Wireless Networks: The Definitive Guide
  86. Wireless Mesh Networking
  87.  
  88. Delay-Tolerant Networking
  89.  
  90. Delay-tolerant networked programs are designed to work smoothly under an intermittent network connection. They often use a store-and-forward system in which nodes exchange traffic only when they are able.
  91.  
  92. The old reality of telephone modems and long distance costs made these programs tough and resilient. In today’s always-connected world of pocket surveillance devices it’s nice to have software that works offline.
  93.  
  94. - Email
  95.  
  96. Good old email, the original social network. As a successful interoperable world-wide communications standard that has lasted for decades, it should be a rich and instructive topic.
  97.  
  98. History: X.400 and SMTP: Battle of the E-mail Protocols
  99. Programmer’s Guide to Internet Mail: SMTP, Pop, IMAP, and LDAP
  100. Internet Email Protocols: A Developer’s Guide
  101.  
  102. - UUCP and Usenet
  103.  
  104. These systems allow decentralized propagation of files and messages over several different types of physical connections and link layer protocols.
  105.  
  106. History: Netizens
  107. Using & Managing UUCP
  108. Managing Usenet
  109.  
  110. - Distributed Version Control
  111.  
  112. I’ve been using Git for many years and quite enjoy it, or at least am brainwashed by familiarity. It would be worthwhile to give other systems a try for comparison.
  113.  
  114. Pro Git
  115. git-annex
  116. Mercurial: The Definitive Guide
  117. Darcs Manual | Understanding Darcs
  118. Bazaar User Guide
  119.  
  120. Chat / Instant Messaging
  121.  
  122. Before the proliferation of web-based companies competing to host, hoard, and mine organizations’ chats, there was IRC. Learn how to use it and how to operate a channel. Help keep an open internet alive.
  123.  
  124. For a more person to person chat experience with support for multimedia, there’s XMPP, a well established open standard.
  125.  
  126. Book of IRC
  127. Learn Advanced Internet Relay Chat
  128. XMPP: The Definitive Guide
  129.  
  130. HTTP Reverse Proxy and Caching
  131.  
  132. Reverse proxies and load balancers have come up many times for me when working with web applications. I think it would pay off to learn them thoroughly.
  133.  
  134. Nginx HTTP Server
  135. Load Balancing with HAProxy
  136. Relayd and Httpd Mastery
  137.  
  138. Cryptography
  139.  
  140. Learn the building blocks of cryptography, and how/when to apply them as full cryptosystems. These books go deep but not in an overly proof-heavy way.
  141.  
  142. Practical Cryptography
  143. Understanding Cryptography: A Textbook For Students And Practitioners
  144. Introduction to Public Key Infrastructures
  145. Implementing SSL/TLS Using Cryptography and PKI
  146. SSH, The Secure Shell: The Definitive Guide
  147. OpenPGP Message Format, RFC4880
  148. Digital Watermarking and Steganography
  149. History: PGP: Pretty Good Privacy
  150.  
  151. Privacy
  152.  
  153. Much of the geeky encryption mumbo jumbo is defenseless against the power of law. What are reasonable expectations for privacy, what is the current law, and how should we frame this issue for those unfamiliar with it?
  154.  
  155. Nothing to Hide: The False Tradeoff between Privacy and Security
  156. Obfuscation: A User’s Guide for Privacy and Protest
  157. Privacy, Information, And Technology
  158.  
  159. Dates and Times
  160.  
  161. Whenever a coding task involves date or time processing I always mentally add a big bump to my cost estimation. That’s because we’re hurtling through a cosmos of spinning rocks that are simultaneously free-falling toward each other, whose very measurements of time and distance are a relativistic funhouse mirror. We make feeble calendar simplifications and smirk, “looks like somebody has a case of the Mondays,” while the infinitude of space rolls above.
  162.  
  163. Calendrical Calculations
  164. Time: From Earth Rotation to Atomic Physics
  165. vCalendar Specification
  166. iCalendar, RFC5545
  167.  
  168. Geographical Information Systems
  169.  
  170. Like measurements of time, measurements of space are complicated. However the payoff appears to be big, with query systems like PostGIS able to plan routes and answer sophisticated spatial queries.
  171.  
  172. GIS Fundamentals: A First Text on Geographic Information Systems
  173. PostGIS in Action
  174.  
  175. Unicode and Fonts
  176.  
  177. Amazingly, people have created a standard that can encode all written human languages. Learning about this should provide an interesting perspective on writing and language itself.
  178.  
  179. Unicode Explained
  180. Unicode Demystified: A Practical Programmer’s Guide to the Encoding Standard
  181. Fonts & Encodings
  182.  
  183. Parsing
  184.  
  185. Being able to parse languages feels like the stuff that wizards do. Those people. Thus far I’m constrained by the syntax devised by others, but creating my own would feel pretty magical.
  186.  
  187. Parsing Techniques: A Practical Guide
  188.  
  189. Garbage Collection
  190.  
  191. Understanding the techniques of automatic memory management allows us to predict and tune this aspect of runtime performance of programs written in high level languages. For instance, Haskell uses a generational garbage collector with tunable parameters. Knowing the theory allows for reasoned tuning.
  192.  
  193. Garbage Collection Handbook: The Art of Automatic Memory Management
  194. Unix
  195.  
  196. The design of the kernel and tools. Plus, how to use OpenBSD, probably the best descendant.
  197.  
  198. Lions’ Commentary on UNIX 6th Edition
  199. Absolute OpenBSD: UNIX for the Practical Paranoid
  200. Advanced Programming in the UNIX Environment
  201. Learning Linux Binary Analysis
  202. X Power Tools
  203. The Book of PF
  204. Backup & Recovery: Inexpensive Backup Solutions for Open Systems
  205. Logging and Log Management
  206.  
  207. Document Layout
  208.  
  209. Document layout engines are designed to specify exactly how a document should look on a fixed size page. There are a number of popular systems and comparing them should be interesting.
  210.  
  211. PostScript Language Tutorial and Cookbook
  212. PostScript Language Reference
  213. Developing with PDF: Dive Into the Portable Document Format
  214. Document Formatting And Typesetting On The Unix System vols I, II
  215. Computers & Typesetting, Volume A: The TeXBook
  216. Presentations with LaTeX: Which package, which command, which syntax? and the Beamer User Guide
  217. Practical UNIX Manuals: mdoc
  218.  
  219. Application Layout
  220.  
  221. Application layout engines deal with organizing graphical user interfaces which must accommodate variable window and display sizes.
  222.  
  223. Seems like everybody’s unreflectively in love with the DOM and CSS. They even use bloatware like Electron in order to bring this beloved layout engine to the desktop. What are the alternatives?
  224.  
  225. Designing Visual Interfaces: Communication Oriented Techniques
  226. Explore these and try them out
  227. Layout Engine | List
  228. Widget Toolkit | List
  229. User Interface Markup Language | List | Comparison
  230.  
  231. Serial Communication
  232.  
  233. What with evil maid attacks and Poisontap, I think it would be good to be educated about how USB really works. Plus it’s the way most devices connect.
  234.  
  235. USB Complete: Everything You Need to Develop Custom USB Peripherals
  236.  
  237. Graphics
  238.  
  239. I would love to make impeccable graphics, choosing raster or vector appropriately, and using the best file format for the job. Really understanding how images are encoded and how to efficiently use open source editing tools would provide a lot of power for designing beautiful and usable documentation and ornamentation.
  240.  
  241. Real World Color Management: Industrial Strength Production Techniques
  242. Book of GIMP: A Complete Guide to Nearly Everything
  243. Compressed Image File Formats: JPEG, PNG, GIF, XBM, BMP
  244. Graphics File Formats: Reference and Guide
  245. SVG Essentials
  246. Book of Inkscape: The Definitive Guide to the Free Graphics Editor
  247. Inkscape Beginner’s Guide
  248.  
  249. Text Editing
  250.  
  251. I’m pretty good with Vim, but my reliance on fancy plugins makes me think there may be basics yet to learn in the core program. Also the Emacs based Org Mode looks like the textual Evernote killer.
  252.  
  253. Learning the vi and Vim Editors
  254. Vim User Manual
  255. Org Mode 9 Reference Manual: Organize Your Life with GNU Emacs
  256.  
  257. Number Representation
  258.  
  259. How do you efficiently and accurately represent the arithmetic of the real numbers in a computer? The IEEE floating point standard has been called “one of the greatest achievements in computing,” so yeah, tell me more!
  260.  
  261. Handbook of Floating-Point Arithmetic
  262. Numerical Computing with IEEE Floating Point Arithmetic
  263. The actual standard
  264.  
  265. The Human Side
  266. Licenses and Law
  267.  
  268. Licenses capture people’s expectations for the behavior, development, and use of programs. Ultimately software exists for human beings, so this topic is very important. It’s also good to understand the implications of the terms and conditions attached to pretty much every commercial program and web site.
  269.  
  270. Software Licensing Handbook
  271. Tech Contracts Handbook
  272. Software Agreements Line by Line
  273. Understanding Open Source and Free Software Licensing
  274. Intellectual Property and Open Source
  275.  
  276. Estimation
  277.  
  278. I suck at estimating software development time! The reassuring thing is most people do. Think what a difference it would make to be able to formulate accurate confidence intervals for development time.
  279.  
  280. Software Estimation: Demystifying the Black Art
  281.  
  282. Code Review
  283.  
  284. I have most experience with code reviews through the Github pull request workflow. However I’ve heard people complain that it is too primitive. Curious to see other approaches and try other programs for the job.
  285.  
  286. Peer Reviews in Software: A Practical Guide
  287. Tools for Code Review
  288.  
  289. Related Posts
  290.  
  291. Choosing 功夫
  292. Going “Write-Only”
  293. Going Write-Only, Halfway Report
  294. Humane Computing and the Eras of Information
  295. Madison Thinkerspace Now Open
  296. Feedback on the “Thinkerspace”
  297. Calm, Simple Things
  298.  
  299. Newsletter
  300.  
  301. Do you like these videos and blog posts? Sign up for the Begriffs Newsletter for notifications of new posts, events, and ideas. (Pretty low-volume, once every few weeks.)
  302. Email *
  303. First name *
  304. Last name *
  305.  
  306. Made with ♥ by Joe "begriffs" Nelson. [email protected]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement