# Transitioning from mathematics to computer science

I'm a mathematics undergraduate interested in theoretical computer science, machine learning, and neuroscience. I wish to pursue graduate studies in computer science but I fear I might not be able to since I haven't and won't be allowed to take any computer science courses for the rest of my undergraduate years. My curriculum is made up of the traditional pure and applied mathematics courses (analysis, algebra, topology, differential equations, vectors and tensors, probability, etc.) without emphasis on computer science.

My question is, would I be able to apply, generally, for graduate studies in computer science with my degree only as a starting point? I am also taking classical courses in computer science (data structures, algorithms, etc.) online (e.g. Coursera) and I'm very good in programming. Would these add to my chances of being considered for the admissions? In all, if there are any ideas of what I could do, I'd love to hear it.

Thanks.

I think you should take some time after you graduate, and study some selected topics. I think you should necessarily know:

• Some foundations: basic logic, automata and grammars, structural induction on lists and trees and recursion.
• Some algorithm theory, which you can learn from the Cormen Leiserson Rivest Stein book. In particular focus on sorting, searches, basic data structures like linked lists, trees graphs and hash tables, graph algorithms, greedy algorithms and dynamic programming.
• Some computability and complexity. You should develop an intuition for the complexity of algorithms (which you can also get from CLRS), and know about Turing Machines, the Lambda Calculus, some notions of computability (Halting problem, Rice's theorem) and some basic knowledge of complexity classes (P, NP,...)
• C programming; you should be able to reason with pointers and to implement data structures. "The C programming language" by Kernighan and Ritchie is a good reference.
• Some OOP and Functional programming. I suggest Java and OCaml. In particular you should focus on types, inheritance and polymorphism. Check if there is a course about this in the curriculum you want to apply to; If so, don't go too much into the details. You should stop reading about a subject as soon as you read "Category Theory".
• Some concurrent and parallel methods (locks, condition variables, semaphores...), and in general how various programming languages implement synchronization mechanisms. You should be able to write multi-process and multi-threaded programs in C, and multi-threaded applications in Java. Here too, don't delve too much into the details, or you'll never finish. Just try to have an intuition for this, before you start taking more advances courses.
• If you're into AI, you should read something about some advanced graph algorithms (the so called "informed" search algorithms), something about SAT-solvers and some selected machine learning techniques (polynomial fitting, K-NN...) but you're probably not required to know these to be accepted. Considering your background, you will likely have no problems learning even more advanced topics like backpropagation.

You may also be required to know some database theory, software engineering and networks. If you manage to, read something about these topics, but I'd say, for theoretical CS with a mathematical background, the above are more important. Good luck :)

• Alright cool. Will online courses such as courses on Coursera be enough?
– user164461
Commented Nov 29, 2023 at 7:51
• I've never heard of those, so I can't say whether they're enough. I mainly suggest you to study from books, and a few online resources like MIT opencourseware. The lectures by Eric Demaine on algorithms and complexity are particularly good. You will surely find whole courses online (and for free!) about all subjects I listed Commented Nov 29, 2023 at 10:08
• Cool. Thanks man.
– user164461
Commented Dec 1, 2023 at 21:47

I did so and I had no problems. But of course it all depends on the level of the master degree you are transitioning.

I had some basics of Computer Science both from school (I did an IT school) and from my Bachelor, where I studied automatas, regular languages and grammars, C programming, a basic Algorithm and Data Dtructures course (sorting, searching, basic to medium data structures like heaps, graphs, skip lists, etc, routing algorithms, computational complexity and similar stuff), operational research (linear (integer) programming, algorithms on graphs (flows, routing, etc), simplex algorithm, relaxations, NP problems and approximations (greedy, heuristics,...), etc), OOP, compilers, a glimpse on functional programming and numerical analysis (both theoretical and practical). I didn't study deeply these topics on my bachelor but the ideas and way of thinking needed in Computer Science were enough for me.

Of course it depends on the Master degree you are aiming at, if the level is very high and the courses are really deep and requires a very well knowledge of CS basics it is hard to do it without fundations. But for a mid-level CS Master degree I think having some introductory courses on Coursera and a bit of practicality with the subject is enough

• Alright. Thanks for the advice @SilvioM. Appreciate it.
– user164461
Commented Nov 29, 2023 at 7:50

Actually 💯 you can study computer science and mathematics All you have to do is search for institution that offers computer science and statistics. Or if that will not help you can learn Data analyst Data science Machine learning And many other thou these are short courses, they are heckit i would advice just try to advance you mathematics too in other institution's