As students, scientists, and professors we have our whole lives to learn. There is always something that we don't know, and once we figure out a complicated solution we could probably redo the procedure in one eighth of the time as when we first approached the research problem without expending much effort thinking about it. But when we were first presented with the problem, we maybe didn't know where to even begin or the tools that we should use so we did literature reviews of how scientists solved similar problems in and out of our field, talked to colleagues in the field, and listened to presentations. So what I'm proposing is that the way that we think now is based on how we used the skills that we had been taught to discover methods that we didn't know existed or that we needed to know them.
For example, I'm a senior biochemistry student and to be honest the whole academic curriculum in my program and probably in other university programs in the field doesn't focus on using computers to predict the physical properties of molecules or the energies of reactions, and the motions through time. I was taught to isolate chemicals, synthesize chemicals, know the chambers of the human body, and fit models to experiments with controlled variables. But somehow I found myself doing a computationally intensive research project starting with no programming knowledge at all, and before this happened I was taught like the majority of students to click and use highly advanced programs to generate solutions (because why reinvent the wheel?). But I realized that I needed to change the way that I thought entirely when I obviously couldn't click through a graphical user interface 1000 times in virtually the same way each time. So, this necessitated the need for loops, but the loops needed breakpoints and re-continue points, and loops within loops. In retrospect, loops are pretty simple procedures, but not when you are considering loops within loops. For some problems in genomics and proteonomics, you can't look at all the information in bulk, you pass an algorithm to it, and tell your program to skip over all the stuff that you don't need to know and aggregate the information. So what I learned the most from my schooling is that I can use brute force analysis.
In terms of undergraduate courses that helped me deal with my little combinatorial explosion I would say was an introductory computer science course, and applied bioinformatics, a statistics course. Even though I read a lot of programming books on my own when I started the project, having structured computational courses has really helped me use computer functions like standard laboratory instruments, and not just know a lot of facts.
So my question for you is if we today are just products of our experiences, then what undergraduate courses had the greatest impression on the way that you thought about science, or igniting your passion to enter a particular scientific field? I think that people usually decide that they want to become a scientist early in life before they start their PhD. So when students are undergraduates I think they start to make their impressions about what their long term goals are in life.