Reading
I aim to be good at what I do, namely, software engineering.
Given that I have no formal education in computer science, this is challenging. However, I do have a few things going for me that are results of my formal education. I studied philosophy and political science, so I'm passionate about logic and arguments (not the angry kind). Oh, and it helps that I've been immersed in technology for as long as I can remember, and that I consider learning about it to be absolutely vital to my existence as a happy and prosperous person.
OK, so with that being said, I'm in the process of developing a self-education plan. I buy and borrow books, read them, look things up online, write programs, break them, rewrite or fix them, talk about them with other people, and so on. It's just like being at a university, but more free! (That's free as in speech AND beer.)
In the Spolsky spirit, I'm trying to be smart and get things done.
Though my professional programming experience has revolved around construction, I am educating myself in all major areas of software engineering. Perhaps soon I will find an area in which to specialize, but for now the goal is to build a solid general knowledge base.
Following are my specific short-term goals:
- Master C/C++
- Familiarize myself with the basics of all major software engineering knowledge areas
- Pay particular attention to software construction
- detailed design
- construction planning
- coding and debugging
- unit testing
- integration
- integration testing
- Pay particular attention to software security
This is my reading plan for the next several months:
July 2010
- Accelerated C++: Practical Programming by Example (C++ In-Depth Series)
- C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (C++ In-Depth Series)
- The Pragmatic Programmer: From Journeyman to Master
- Code Complete: A Practical Handbook of Software Construction
- Building Secure Software: How to Avoid Security Problems the Right Way (Addison-Wesley Professional Computing Series)
August 2010
- C++ Templates: The Complete Guide
- C++ Common Knowledge: Essential Intermediate Programming
- Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition) (Addison-Wesley Professional Computing Series)
- More Effective C++: 35 New Ways to Improve Your Programs and Designs (Addison-Wesley Professional Computing Series)
- The C++ Standard Library: A Tutorial and Reference
- Programming Pearls (2nd Edition) (ACM Press)
- Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition)
September 2010
- Unix Network Programming, Volume 1: The Sockets Networking API (3rd Edition) (Addison-Wesley Professional Computing Series)
- Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions (C++ In-Depth Series)
- Modern C++ Design: Generic Programming and Design Patterns Applied (C++ In-Depth Series)
- C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (C++ In-Depth Series)
- The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)
October 2010
- Head First Java, 2nd Edition
- Head First Design Patterns
- Introduction to Computing Systems: From bits & gates to C & beyond
- Conceptual Blockbusting: A Guide to Better Ideas
- Software Creativity 2.0
November 2010
- Modern Operating Systems (3rd Edition) (GOAL Series)
- Introduction to the Theory of Computation, Second Edition
- Rapid Development: Taming Wild Software Schedules
- Software Project Survival Guide (Pro -- Best Practices)
- UML Distilled: A Brief Guide to the Standard Object Modeling Language (3rd Edition) (Addison-Wesley Object Technology Series)
Other Books I Would Like to Read
- Security Engineering: A Guide to Building Dependable Distributed Systems
- Software Security: Building Security In (Addison-Wesley Software Security Series)
- Exploiting Software: How to Break Code (Addison-Wesley Software Security Series)
- Writing Secure Code, Second Edition
- Secure Coding: Principles and Practices
- Rootkits: Subverting the Windows Kernel (Addison-Wesley Software Security Series)
- 19 Deadly Sins of Software Security (Security One-off)
- The Art of Computer Virus Research and Defense (Symantec Press)
- Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition
- Handbook of Applied Cryptography (Discrete Mathematics and Its Applications)
- Reversing: Secrets of Reverse Engineering
- Hacking: The Art of Exploitation, 2nd Edition
- The Shellcoder's Handbook: Discovering and Exploiting Security Holes
- The IDA Pro Book: The Unofficial Guide to the World's Most Popular Disassembler
- Write Portable Code: An Introduction to Developing Software for Multiple Platforms
- Write Great Code: Volume 1: Understanding the Machine
- Write Great Code, Volume 2: Thinking Low-Level, Writing High-Level
- Fuzzing: Brute Force Vulnerability Discovery
- The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities
- The Art of Software Security Testing: Identifying Software Security Flaws (Symantec Press)
>
- Secure Programming with Static Analysis (Addison-Wesley Software Security Series)
- Refactoring: Improving the Design of Existing Code (Addison-Wesley Object Technology Series)
- Head First Object-Oriented Analysis and Design
- Domain-Driven Design: Tackling Complexity in the Heart of Software
- Agile Software Development, Principles, Patterns, and Practices (Alan Apt Series)
- Learning Python, 3rd Edition
- Programming Python
- Advanced Programming in the UNIX(R) Environment (2nd Edition) (Addison-Wesley Professional Computing Series)
- Advanced UNIX Programming (2nd Edition) (Addison-Wesley Professional Computing Series)
- Understanding the Linux Kernel, Third Edition
- UNIX Network Programming, Volume 2: Interprocess Communications (2nd Edition) (The Unix Networking Reference Series , Vol 2)
- Programming with POSIX(R) Threads (Addison-Wesley Professional Computing Series)
- Computer Architecture, Fourth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)
- Computer Organization and Design: The Hardware/Software Interface, Third Edition (The Morgan Kaufmann Series in Computer Architecture and Design)
- The C++ Programming Language: Special Edition (3rd Edition)
- Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series)
Last modified: April 11 2009
Email: firstname@firstnamelastname.com
©
2008-10 Joshua Rieken | Original design by Andreas Viklund
