Here’s a great blog post from Adrienne Fairhall @ U Washington on this exact thing.
I agree with most of her points (and when I choose students for my lab at York, I think of it much like she does. I am always looking for new lab members, so reach out to me if interested in hearing more…):
1\ Be an expert in either a set of methods (Applied Math / Dynamical Systems; Machine Learning; Applied Statistics, etc.) or a set of neurobiology topics (Retinal motion processing; Visual cortex color processing; Motor cortex motor control, etc.).
2\ Be well acquainted (e.g., able to use ideas or methods from) the “other” side of things. So if you are machine learning expert, learn enough sensory neuro that you can put your ML skills to good use in neuro. Or, if you are motor control neuro expert, learn enough dynamical systems tools that you can use those tools confidently in your research.
That’s about it.
To your questions,
1\ I would suggest learning Python in addition to C++. It will get you a lot further in industry applications (if you want a job), and is used a lot in our research communities.
2\ Linear algebra, differential equations, PDEs, some basic probability theory, and multivariable calculus, will all go a long way.
3\ @ UCSD, I’d reach out to Tatyana Sharpee, and her lab (e.g., her student Marvin Thielk, who worked with me when he was an undergrad at Berkeley). They’ll give you advice more tailored to the course offerings at UCSD.
4\ For competitive applicants, what I look for is the folowing (note that my lab does machine learning, neuroscience cross-over type stuff, so these items will vary by researcher):
hands-on research experience in a quantitative area (e.g., a REU or equivalent – these are called USRA’s in Canada, where I work)
some machine learning experience (e.g., a course or research project in the area)
some evidence of neuroscience exposure (e.g., an undergrad course in the area, with the research interest statement from the student being coherent about neuroscience ideas)
medium-high GPA, especially in quantitative and computational courses (A- or above, ideally)
The research interests statement should make some coherent sense about: a) an open neuroscience problem; b) an approach that the student wants to use to address that problem. The approach should actually be feasible for solving the problem, and the student should have demonstrated that, as a result of their training, they can reasonably be expected to quickly learn to implement that approach and be successful at using it to solve the problem they point out.
I realize that these items are a lot to ask of undergrads, but that list is kind of the ideal. Most students do well at 1-2 of these things and less well at others. If you meet all of these, fantastic! Otherwise excelling at a few will help make up for others, and knowing your strengths will help you write your grad school applications in a way that highlights your strengths.
Best of luck!