Hi, I'm interested in pursuing a career in computational science and numerical computing and so on. I'm looking for some fairly general advice on how to direct my studies. I started learning programming in java, which I very much prefer to program in these days, having had some exposure to Fortran (yuck) and C (yuckety yuck yuck). You would expect that as compilers and hardware gets better that managed and high-level languages will become more viable for high-performance codes. But my question would be, as it stands now do computational scientists still have to worry about low-level matters. Are programs still targeted at specific hardware, do I need to be learning about caches and assembly code and so on. Googling about on the question of Java's viability is a bit tricky. Everyone wants to remind you that there are lies, damn lies and benchmarks, you can get buried under language flame wars and a lot of information might be out of date. For example I came across this quite interesting article written by a group called the Java Grande forum: http://www.research.ibm.com/journal/sj/391/moreira.html This outlines a number of reasons for Java's unsuitability for HPC. Are these criticisms still relevant? Another question would be whether people see java having a more prominent role when 'grid computing' starts to take off? Also, I'd like to know what people think of the D programming language. Info here: http://www.digitalmars.com/d/overview.html At first reading I like the design and philosophy very much. And I wonder if it is a better solution to the dilemma the java grande forum people are trying to solve.