What courses or activities at SFU would you recommend to maximize my experience and become a better software engineer (applications) and computing scientist (knowledge)?

This is actually a tough question. However, at least you've thought ahead and want to avoid the pitfalls that most grads face, which already makes you more employable.

I don't think CMPT 373 is restricted to SoSy majors, but it is a mandatory course for the major and has only 32 seats per year. It's unfortunate that Computing Science majors have to take a course as shitty as CMPT 275 when there's a much better course in CMPT 276-373. At any rate, if you can get into 373, do it, and teach yourself the subject matter in CMPT 383/384. Otherwise, take 383.

As for fourth year courses, and math and statistics courses, it depends on what you want to do.

If you want to study Big Data as a part of research, you have a few choices available.

  • Course-based: CMPT 405, 413, 419, 741; plus CMPT 415 and/or 416 with any of the following supervisors: Sarkar, Mori, Popowich, Ester, Pei, Wang, Schulte, Shriraman, Fedorova. I would also take an optimization course and MATH 251. Note that 419 is a HARD course. Result: 18-24 credits depending on if you already have MATH 251 credit, and whether you want to do two research projects or one.

  • Self-study based: This Reddit post is a good jumpoff point. You should take STAT 302 as well, and teach yourself R and linear programming. Get in touch with the Database and Data Mining Lab at SFU, and any of the faculty names I mentioned above. Results: 3 credits, and a lot of self-discipline.

The self-study track will give you room to take a distributed systems course, which ties into Big Data. What do you prefer? Distributed computing is about distributing tasks to a cluster of computers; parallel computing relates to optimizing processes/threads across CPUs. If you can take 431 in Burnaby with Fedorova and 479 in Surrey with Arrvindh, that would be best. The two topics connect.

I wouldn't bother with algebra, number theory or graph theory unless you want to do research in theoretical AI. Also, formal languages and automata theory are useful for a computing scientist to know, as are knowledge representation, NLP and intelligent systems. However, I'd only recommend you take NLP as a course out of all of these; you can teach yourself the rest easily.

One course I would recommend (and one that you missed) is CMPT 471 in Surrey, if you like internet architecture and protocols.

If you just need a rudimentary knowledge of statistical analysis, you can get by with STAT 270 and 302. (though someone may want to correct me on that.) MATH 308 or 309 would be good for mathematical or scientific programming.

I'd recommend doing all the extracurriculars you mentioned. You will learn a lot in ACM, and getting involved with CSSS and meetup groups will be good for job networking. If you get involved with FOSS, you can win a SFU award. And web services/mobile development is the future of software development in Vancouver.

/r/simonfraser Thread