Programming by itself is a good stuff and it is fun (sometimes). This work can make you smarter and even rich. But it also can turns to hell if something going wrong and slow down your best program. In such case we have to optimize its code. I made a collections of links which were helpful for me when I was working on different projects. Hope they will be helpful for you too.
Linux x86-64 ABI
Linux systems now is defacto standard for Insternet services and company servers. Almost all of them use 64-bit Linux systems mainly based on x86 processors. Programing for that systems, most likely, will be a main stream in next few years. And you should be familiar with Application Binary Interface (ABI) which define standard for Linux executable files.
Software optimization resources
Agner Fog, Ph.D. from Denmark created very good and detailed manuals about C/C++, assembly programming and software optimization. They are may be a best handbooks for advanced programmers who cares about efficiency of software products. I strongly reccomend you to read all of them even if you use high level languages as C, C++, Ruby or PHP. The manuals help to understand back side of how CPU and different operation systems work.
The second great book is Hacker's Delight book. It returns me to that old times where real hacker (not software crackers) were writing clear an very fast code, using software tricks. And lot of them worn magical beards :-).
- Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms
- Optimizing subroutines in assembly language: An optimization guide for x86 platforms
- The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers
- Hacker's Delight
Flat Assembler Documentation
Tomasz Grysztar from Poland did a great job and wrote most fast and clear assembly language called FASM (flat assembler). All LinAsm libraries are completely written in this fine language. FASM supports different operation systems: Linux, Window and exotics MenuetOS and KolibriOS. It may generate 32-bits and 64-bits object files. There are links to flat assembler web site and source code examples for x64_86 Linux.
x86 Assembler Documentation
Intel company provides well documented list of x86 instruction set. Intel documentation is split onto 3 big manuals and additional manual about code optimization for different CPU models. If you are looking official Intel documentations it is.
- Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture
- Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z
- Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3 (3A, 3B & 3C): System Programming Guide
- Intel 64 and IA-32 Architectures Optimization Reference Manual
Digital Signal Processing (DSP)
Digital signal processing (DSP) can be so simple and clear if strong mathematical formulas follow with lot of illustrations and examples. Steven W. Smith, Ph.D. wrote very interesting book about how actually DSP works. The book has clean style and holds good examples how computer algorithms do filtering of signals and analyses spectrum of time series. It is a good point to start your experience in DSP.