Codes C 1 , . . . , C M of length n over F q and an M × N matrix A over F q define a matrix-product codeWe study matrix-product codes using Linear Algebra. This provides a basis for a unified analysis of |C|, d(C), the minimum Hamming distance of C, and C ⊥ . It also reveals an interesting connection with MDS codes. We determine |C| when A is non-singular. To underbound d(C), we need A to be 'non-singular by columns (NSC)'. We investigate NSC matrices. We show that Generalized Reed-Muller codes are iterative NSC matrix-product codes, generalizing the construction of Reed-Muller codes, as are the ternary 'Main Sequence codes'. We obtain a simpler proof of the minimum Hamming distance of such families of codes. If A is square and NSC, C ⊥ can be described using C ⊥ 1 , . . . , C ⊥ M and a transformation of A. This yields d(C ⊥ ). Finally we show that an NSC matrix-product code is a generalized concatenated code.