Basic combinatorial and algebraic methods: counting, recursions, finite fields. Error-correcting codes. Error-detecting codes. Codes for list decoding. Codes for bursts. Covering codes. Codes for multiple access. Separating codes. Codes for adder channel. Codes for write-once memories. Codes for memory defects. Sequences for memory applications: restricted runs and low running digital sums. Codes for flash memories. Arithmetic codes. Codes for synchronization. Codes for quantum computing. Sequences with low autocorrelation. Sequences with low PAPR. Sequences for cryptographic applications, bent functions.