I am often asked ‘What advice do you have for those interested in numerical methods?’
The key to computation is visualization. Every step of computation can be accelerated and showcased better with strong graphics and visualization skills.
The lag between your initial thought and the data visualized makes it difficult for our brains to see trends, recognize patterns, and identify problems. Tools like MATLAB are awesome environments for learning numerical methods because it is very easy to visualize data and prototype algorithms. The drawback of those tools is that they may not produce the best graphics and will usually be slower and less efficient than other platforms. This is not a problem at all until you become more advanced.
Formulation and Implementation
Understand the difference between formulation and implementation. The formulation is where you work on paper to derive all the equations you will need to implement in a computer code. The algorithm for the computer code is completely different than the steps you follow for the formulation. Do not confuse the two.
Implementation in a computer code is often extremely simple and easy if you do a good job in the formulation. Always have a nicely formatted and detailed formulation document to go along with your computer code.
Do not be paranoid about identifying the absolute best method for a particular application. In most circumstances, several different approaches will get you the answer you seek. Start simple and work up to the more complicated. You can use the simple algorithms to test and benchmark your more advanced algorithms as you attempt to get them working.
I do not describe finite-difference frequency-domain (FDFD) as the best numerical method, but I do think it may be the best first numerical method for computational electromagnetics. Finite-difference time-domain (FDTD) is a very close second-best method. I have a student right now who is helping a team develop a very advanced time-domain finite element analysis. He is constantly writing small FDFD and FDTD programs to test and benchmark the FEM code. This is the power of FDFD and FDTD.
When you write your codes, be sure your code is clean and well-commented from the very start. Do not get it working and then clean it up because you will lose many of the benefits of clean code. Test your code every few lines as you write it. Visualize and think about everything. Do not write an entire program before you run it for the first time. You will have a much more difficult time finding the bugs.