In this paper, we give algorithms and methods of construction of self-dual codes over finite fields using orthogonal matrices. Randomization in the orthogonal group, code extension and projection over a self-dual basis are the main tools. Some optimal, almost MDS, and MDS self-dual codes over both small and large finite fields are constructed. Moreover, over fifty MDS codes with new parameters are constructed. Comparisons with classical constructions are made. (C) 2018 Elsevier Inc. All rights reserved.