36

I enrolled at my current MSc in computer science program last year having never completed a single computer science course in college. I decided to apply because 10 years after college I had a fairly successful career as a front-end web developer and figured it would be great to have a degree so as to look like a more legitimate programmer than what my anthropology B.A. degree might imply. I had taken several math and physics courses in college and did well, so I figured a computer science degree could be manageable.

Now, it's been over a year since my program started (I attend part-time). I dropped a core class in basic algorithms in my first semester because I couldn't understand algorithms and decided to enroll in the same course offered this summer. I'd hoped to do well this summer, but it looks like if I pass I'd be just barely scraping by. It feels like everyone is doing much better than me and can solve problems faster and more accurately. If you were me would you quit the program? I'm not sure if it is:

  • a lack of a background in undergraduate computer science
  • the fact that I am an older student who is nearly 40
  • a lack of aptitude for this subject

Any thoughts from others in computer science, engineering, and mathematical sciences would be much appreciated.

EDIT: It's been 7 months since I posted this and I've realized the problem. Front-end web development quite frankly is nothing like computer science. Many concepts in my basic algorithms course requires a good grasp of recursion, which I didn't have before entering the program. All the programming I had done in the past was iterative. Once I was able to understand and (more importantly) correctly apply recursion to everything from Towers of Hanoi to dynamic programming the algorithms course got much easier. To anyone starting graduate school in computer science--never underestimate the importance of recursion! Even if you think you understand it, test yourself with other students to make sure your understanding is solid!

More generally, my advice to anyone starting out in computer science is to figure out what it is you are weak at and work to get stronger in it. That can be hard to do initially if you are overwhelmed by the material and everything just appears really difficult, but talk to your professor and ask him or her to help identify your areas of weakness, never give up, and you will be able to master the material soon.

Btw, I did take a one year Intro to CS course for students without engineering/math backgrounds, but it mostly focused on object-oriented programming and glossed over recursion.

MNRC
  • 470
  • 1
  • 4
  • 9
  • 17
    Did you start out your program by taking undergraduate-level CS courses to bring yourself up to speed, or did you dive straight in to graduate-level coursework? If the latter, then I think that you should first enroll in the necessary undergraduate prerequisite courses. – Mad Jack Aug 07 '14 at 03:41
  • 2
    As an anthro major with no formal CS experience and minimal back-end experience it's not too surprising that algos is a challenge; it's certainly one of the most mathematically intensive core classes in the typical MS path (guessing graphics is an elective). Have you done better in other courses? Perhaps if it's just algos, you need to go to office hours and establish a support group rather than go straight to quit. You never specified what you've tried to do in algos, I guess, is what I'm saying. – rch Aug 07 '14 at 07:29
  • @rch I guess that is what throws me off--I am good at math. I finished multivariable calculus and linear algebra and they weren't any trouble at all. I took discrete math and loved proofs. So, I thought algorithms would be a cinch, but I'm having trouble. We use the Cormen Leiserson Intro to Algorithms book which is really hard to understand, but I haven't found better books than this one. I can't understand recursive equations like how you construct T(n)=log(n)+O(1) from an algorithm. I'm at top 25 U.S. school by the way if that's any indication of level of difficulty. – MNRC Aug 07 '14 at 07:53
  • 37
    "A CS degree makes me (look like) a legitimate programmer" -- that might be the core fallacy right there. CS (the science) and programming (the craft) have little to do with each other (even though either can profit from the other). That said, I'm confused that you have troubles with algorithms; that's typically the topic that comes most easy to programmers (well, sans the formal analysis). What/how did you program? – Raphael Aug 07 '14 at 08:10
  • 1
    @Raphael I mostly programmed in javascript and that might be the reason I'm so bad at this. I have talked to students that said they couldn't pass calculus but had no trouble with algorithm. It's weird. In spite of programming and CS being fairly unrelated, unfortunately, employers care a lot about a CS degree. Many companies won't even look at your resume if you don't have one. – MNRC Aug 07 '14 at 08:15
  • 14
    @user3912481 Undergraduate CS typically consists of ~2 years of rigorous theory and ~6 months of practice. No amount of work experience in any field will force you to acquire the (impractical and almost never applied) theory on your own. Your master's program is a marathon which the other students have been building up to. You won't keep up with any amount of effort unless you build some foundations (and you can do that either by taking the undergrad courses you need, or by buying the best CS theory books out there and pushing yourself independently). – Tim Aug 07 '14 at 08:35
  • 13
    @MR: To be honest when you say "I am good at math/physics" the impression I get is not "I didn't have trouble with linear algebra and multivariable calculus". Those are introductory math courses required for pretty much any major that needs any kind of math whatsoever (including CS); you should do pretty well in them. Have you taken any classes beyond those? For example, have you dealt with functionals, Lagrangian mechanics, and the Euler-Lagrange equation? Or statistical mechanics? Or have you seen Expectation-Maximization in probability/statistics? – user541686 Aug 07 '14 at 10:28
  • 2
    (cont'd)... A lot of concepts in math and science are very relevant to computer science, some in not-so-obvious ways -- for example, "functionals" are more or less the equivalent of "lambdas" in computer science. If you've worked with functionals before, drawing the connection might be feasible. But if all you've done is linear algebra and multivariable calculus, that's not going to make it any easier for you to pick up CS -- those are pretty introductory courses for CS majors too. – user541686 Aug 07 '14 at 10:31
  • 1
    Well, I graduated in law (so no math classes at all). Since I work with computers and had some electronics technical course, I tried a MsC too. Was hard, but got it, improved my knowledge, and now I'm taking a PhD... It takes much more effort than if you were graduated in the area, but it's not impossible. – woliveirajr Aug 07 '14 at 14:30
  • 2
    @Mehrdad There are many levels of "good at math" and one can be "good (enough)" for what they want to do without being the equivalent of a B.S. or higher in Mathematics. Now there are fields that are more and less helpful for the OP, linear algebra and discrete math would help a lot with computer science so the fact that the OP has not struggled with them is a good sign. – kleineg Aug 07 '14 at 16:02
  • 2
    In the classes in systems engineering there are a lot of programmers who are better than me at programming, and I kick butt at the probability and optimization sections. The fact that I am "good at math" does not make me a better programmer (although it helps), and their superior experience programming does not replace the required math skills. – kleineg Aug 07 '14 at 16:08
  • 10
    @kleineg: What I'm trying to say is that in a field like CS, "I am good at math" carries a certain weight and meaning far beyond "I did well in linear algebra and multivariable calculus". Using myself as an example, I'm pretty decent at those topics and I was also decent in math at high school, but I wouldn't say I'm "good at math", because I met people in college (in various STEM fields) who really are "good at math", and they're in a different league from me entirely, so I'd feel embarrassed to try to claim I'm at their level. – user541686 Aug 07 '14 at 16:45
  • 4
    @Tim: "No amount of work experience in any field will force you to acquire the (impractical and almost never applied) theory on your own." - I agree with your main sentence, but disagree with the parentheses: In my experience, many problems can be solved somehow (thus working on them in industry does not force you to look at the theory), but knowing the theory underlying to some of those problems often helps find a better or a cleaner solution, or - if nothing else - at least understand the solution you found better, and thereby also have a better understanding of what other problems ... – O. R. Mapper Aug 07 '14 at 19:36
  • 1
    ... are already covered by that solution. And, I'd argue, that is exactly why "employers care a lot about a CS degree". – O. R. Mapper Aug 07 '14 at 19:36
  • 1
    @O.R.Mapper Oh I absolutely agree that the insights gained from studying CS theory are valuable, and I probably phrased that poorly. I just meant that the actual methods (e.g. prove the regularity of a language using the pumping lemma theorem) are not frequently applied. – Tim Aug 07 '14 at 20:37
  • @Mehrdad: Undergraduate multivariable calculus and linear algebra aren't always required for CS MSc degree programs. They tend to be required only for applicants to doctoral programs. Much of the mathematics you mentioned isn't required of students in my program. – MNRC Aug 08 '14 at 06:47
  • 3
    @MNRC: Only doctoral? They were actually undergraduate (B.S.) CS major requirements for us, taken almost always by freshmen... you can't really do engineering without linear algebra and multivariable calculus, and even CS relies heavily on linear algebra. The rest of the topics I mentioned weren't CS-related, they were math- and physics-related -- I mentioned them as examples of what someone who has a math or physics undergraduate background should know, which is the impression I get of your background in your post. – user541686 Aug 08 '14 at 07:13
  • 1
    @Mehrdad my (US) undergrad CS degree only required Calculus 1/2 (single variable) and either a linear equations or stats class. For linear equations it was a choice between a class apparently intended for non-math majors (couldn't take it if you'd done linear diffeqs) or an upper level undergrad class. For stats it was a choice of classes that were roughly equivalent to intro to stats for scientists/engineers and intro to stats for stats majors. (Several other intro to stats classes were offered but not acceptable as a degree requirement.) – Dan Is Fiddling By Firelight Aug 08 '14 at 14:22
  • @Tim The methods aren't applied, but there is a level of being able to figure out the path from A -> Z that isn't natural to a lot of people. For some, learning mathematical methods helps them think that way. For others, Chess, Go, or other strategy games do the same. This is a long-term unconscious thing, though, and hard to train - the same thing doesn't work for everyone. – Izkata Aug 08 '14 at 15:26
  • 3
    @Mehrdad You are way off topic. That stuff you mentioned (Lagrangian mechanics, Euler-Lagrange equation, etc) is totally irrelevant to being successful in a computer science program. Strong general math skills are probably necessary to be successful, but specific concepts are not crucial to know before enrolling, and the courses you listed are not required for many CS undergrad/masters programs. As an example, I have a BS in CS and I have no idea what a "functional" is but I do know what a lambda is. So your comments are...way off base. – Kyle Aug 08 '14 at 16:47
  • @KyleM: Did you actually read my comment first before telling me those topics are "totally irrelevant to being successful in a computer science program"? Evidently not, because I stated very clearly that those were topics I expected from people claiming they are good at physics and math (like the OP). Nowhere did I suggest those are relevant topics for a CS program to cover. Actually reading the comments you're replying to is usually a good idea. – user541686 Aug 08 '14 at 16:55
  • 3
    @Mehrdad You are very defensive and your posts thus far have been rude. OP's post is about CS and it seems like you are trying to tie math and CS together with comments like "if all you've done is linear algebra and multivariable calculus, that's not going to make it any easier for you to pick up CS" and "A lot of concepts in math and science are very relevant to computer science". But in fact, as my previous comment states, none of those concepts/courses are essential to be successful. – Kyle Aug 08 '14 at 17:03
  • @KyleM: I'm defensive because you're putting words in my mouth! But I don't think I've been rude. Where exactly did I ever say those concepts are essential to being successful in CS? I never did, you're just claiming I did. All I said was that math and physics could make it easier to pick up CS if you actually study them beyond the introductory courses that the OP mentioned (lin alg/multivar calc). I never said that studying them was anything close to essential or necessary, merely that they could be helpful if you studied them. Do you see the difference? – user541686 Aug 08 '14 at 17:06
  • 2
    Please bring extended discussion to [chat]. Additionally, this comment thread has grown contentious; I'm locking the question temporarily to provide a cool-off period. – eykanal Aug 08 '14 at 17:58
  • @Mehrdad "and even CS relies heavily on linear algebra" - I think this is overstating it; while there are areas where linear algebra is necessary, I'm now doing my master's thesis and have yet to encounter any linear algebra beyond Gaussian elimination even though I did do mostly theoretical courses as well as some research into language and game theory. – G. Bach Aug 11 '14 at 03:26
  • 1
    @MNRC "If you were me would you quit the program?" If and only if CS is not what you want to do, period. Otherwise, I would work hard at it until I succeeded. Don't get scared off by math that people think is hard; you have to work hard, obviously, but more importantly: try to understand before trying to follow every last formal detail. Whenever I talk to other CS students, most of them have already forgotten 80% of the math they did in undergrad. – G. Bach Aug 11 '14 at 03:30
  • @G.Bach: I'm not saying it's not possible, but I'm curious how you could avoid linear algebra for so long. How can you do game theory without linear algebra, for example? Aren't payoff matrices and Nash equilibria defined using linear algebra? I feel like even formal language theory uses some linear algebra. Or if you meant natural languages, Markov chains come to mind as excellent examples for that too. – user541686 Aug 11 '14 at 03:47
  • 1
    Have you considered looking for a Masters program in something closer to the work you have done? There are some universities, Columbus State leaps to mind, that have M.S. in Software Engineering that may be more in line with both your experience and your educational and career goals. – Wexxor Aug 07 '14 at 19:05
  • Algorithm is the fundamental part of CS. Also, you are a front-end web developer by profession and in this profession, its advisable to have algorithm as a subject. why don't you go to tuition classes and learn that well, you will enjoy and it will help you too much. – Sweta Katkoria Aug 07 '14 at 17:42
  • @Mehrdad I didn't set out to avoid linalg, it just never popped up beyond solving lin. systems. While Nash equilibria are solutions to lin. systems, calculating them is a simple matter of choosing a subset of alternatives, building the lin. system and then Gaussian elimination; but I haven't encountered anyone calculating Nash equilibria in research (I did something on social choice functions). The formal languages post you linked is also about solving linear systems, but you don't need knowledge of linear algebra for that; you can learn Gaussian elimination in an hour without getting linalg. – G. Bach Aug 11 '14 at 12:16
  • @G.Bach: I guess it depends on what you call "linear algebra"... do you consider least-squares to be linear algebra, for example? If so, have you never had to do it? If not, then what would you call linear algebra? – user541686 Aug 11 '14 at 12:22
  • @Mehrded I never had to do that; but I don't think this is contributing much to the discussion here. – G. Bach Aug 11 '14 at 12:29
  • So, it's been many years, whats the update? – 123movies Mar 24 '20 at 19:28

8 Answers8

50

It sounds like you fell into a couple of common traps at the same time.

Trap 1:

I am good at front-end web development, I am surely good at computer science as well

As you likely learned by now, it is possible (quite common, actually) to be a terrific programmer and still struggle with fundamental CS topics, such as algorithms. There may have been a time when programming was really applied algorithms, but today the skills required to write your average web application is relatively disjoint from what you learn in CS 101.

Trap 2:

I did decent in (undergrad) maths and physics courses, surely those (master) CS courses will be ok.

This is a combination of multiple fallacies I have seen. Firstly, you may have not taken into account that master-level CS courses are, well, for students on master-level. They assume a strong command of the basics, which, by the sound of it, you lack. Further, doing ok in maths and physics is a good indicator that you'll do well in maths and physics, it by no means qualifies you directly for a CS master.

Trap 3:

I know what I need to know, I just applied to the master because I need a better degree.

You say that:

[I] figured it would be great to have a degree so as to look like a more legitimate programmer than what my anthropology B.A. degree might imply

I find this statement very concerning, as it seems you are more interested in getting a degree than in learning CS. If that is the case, you should seriously reconsider whether the degree is actually worth the trouble. Frankly, for most programming houses I am in contact with, 10 years of experience count for more than a master's degree anyway.

Now to answer your concrete question:

If you were me would you quit the program? I'm not sure if it is a lack of a background in undergraduate computer science, the fact that I am an older student who is nearly 40, or a lack of aptitude for this subject.

I would not assume that you are just "not good enough", and the age shouldn't really be an issue either. It definitely sounds like you are lacking background, and the fact that you are doing the master part-time surely isn't helping either. All in all, that does not make for very favorable conditions.

Nobody but you can tell whether you should quit, but given the information, I would re-evaluate whether (a) a master is achievable for you, and (b) whether getting a master's degree is actually worth it for you.

xLeitix
  • 135,037
  • 46
  • 333
  • 493
  • I had heard that CS is mostly math, so was under the (mistaken) impression that doing well in math means doing well in CS. I think I'm going to switch to a master's in math instead. Most students in my incoming class is Chinese or Indian; they don't tend to study for the love of it but to get a good job. The difference is that they can handle the coursework and I can't. I find that international students seem to have higher GRE quantitative scores than American students in my program. All foreign students I talked to scored 90th+ percentile, while American are at 75th percentile. – MNRC Aug 07 '14 at 08:12
  • @user3912481 I think most of the employers who would offer more money to a programmer with a master's in CS would be hesitant to offer the same to a programmer with a master's in math. That may not work out very well. – Tim Aug 07 '14 at 08:27
  • 14
    @user3912481 I'll go out on a limb here and say that the master of maths is also not going to go so well without having a math-heavy undergrad under your belt (or having done some serious self-studying). – xLeitix Aug 07 '14 at 08:28
  • @Tim Yeah, you're right, definitely something else to consider... Think I'm going to try to stick through this program until they kick me out. – MNRC Aug 07 '14 at 08:29
  • 11
    You seem very flip-floppy MNRC. You need to set your mind to something and just get it done, no matter the effort. Your goals also seem to be out of whack, doing it more for the title than for the experience learned. In your shoes I would either stick it through and do my best or forget the masters and just get an undergrad in CS. You have working experience and if you had just an undergrad could very easily find a job, at this point I don't even think a masters would be worth it even if you can stick it through. The difference in $ won't be much by theTimeYouRetireSinceYourAlreadyHalfWayThere – TheOneWhoPrograms Aug 07 '14 at 10:06
  • 7
    @MNRC: A master in math without a bachelor in math, and given that you were not able to complete "algorithms" class? If I know one thing, then that a master in math is much harder than a CS master. It is much more theoretical so your 10 years won't count anything. If you are unable to complete algorithms (which is kinda "math in easy mode"), then you will have a very hard time in the math classes. Doing good in high school math does not mean you can jump into MSc math classes right away... – gexicide Aug 07 '14 at 19:23
  • 1
    "I had heard that CS is mostly math" - what is generally meant by that is that math appears in many parts of CS. For someone who despises math, it definitely feels like "awfully much math", for someone who is ok with math, it may be a "math here and there" feeling (though those people will possibly select the more math-heavy specializations and thus re-establish their - not discontent - impression that CS is mostly math). It certainly does not mean that there is little else beside math, or that understanding math means understanding everything else that is part of CS studies. – O. R. Mapper Aug 07 '14 at 19:42
  • 1
    No, I sat in the graduate linear algebra course at my school and had an easier time understanding it and the textbook than my graduate algorithms course. – MNRC Aug 07 '14 at 22:24
  • 9
    Trap 4 "10 years after college I had a fairly successful career as a front-end web developer and figured it would be great to have a degree so as to look like a more legitimate programmer" – Greg Aug 08 '14 at 01:52
  • I'd like follow up and let readers know that I met a great professor who kindly pulled me aside and told me my weaknesses in CS. I was assigned a tutor who told me that I didn't fully understand recursion and how to apply it correctly. I was solving algorithms like Towers of Hanoi and the Josephus Problem correctly but had trouble translating my thoughts into pseudocode. I worked hard to address these issues with the tutor and have made a lot of progress. Classes are now more manageable and I am looking forward to machine learning next semester. – MNRC Mar 21 '15 at 01:58
45

Survival guide from someone who's been in your situation

I think you're getting many discouraging comments here which doesn't help you a lot. You already know you don't have the best possible qualifications, you don't need people reminding you. The question is, what can you do about it?

I'm a CS major, but I started out as a physics undergrad. I had the kind of courses you're talking about, multivariate calculus etc. This means that when I had my algorithms course (following the same book as your course), I hadn't had any discrete math at all. The discrete math helps you understand the data structures. The data structures are used when implementing the algorithms. Proof techniques from discrete math helps you understand the correctness and runtime complexity of an algorithm.

Even though having a vast knowledge of (discrete) math would aid your understanding of algorithms, it is a great overstatement to imply that you can't get by without it. I picked up all these things during my algorithms course. If I, like you, had asked people whether I should quit because I had zero knowledge of graphs and trees prior to taking the course, I would probably have received discouraging comments as you do now. As it happens, I got a perfect score for the course because I studied hard at exactly what the exam demanded. I rehearsed every single proof in the syllabus (mine was an oral exam). I don't know what type of exam you're up against, but I suggest you narrow down the syllabus as much as possible, and concentrate only on what you're supposed to know that will get you to pass.

'Introduction to algorithms' is a very comprehensive book and there's a lot of stuff in there you don't need. A lot of people here are perfectionists and think you ought to know everything, I've even seen someone here suggesting you should know Lagrangian mechanics, I really don't see the relevance of that at all. This is not a physics course.

Finally I'd like to add a comment about recurrences T(n). This can be hard to understand because the book doesn't give you an exact recipe for this. It's helpful to think of the recurrence relation T(n) as the behavior of the problem. The problem is the input to the algorithm and is expressed in terms of n - the size of the problem.

Example: I assume you're familiar with Mergesort. With the algorithm Mergesort you take the problem n and divide it into two equally large problems (you can tell from looking at the algorithm). These problems are half the size of the original problem, so you get a recurrence that says

T(n) = 2T(n/2) + O(n)

The recurrence basically says that the problem starts out as n and then becomes two problems of half size, which the algorithm is then applied to (hence the T). (You might notice then, that the recurrence relations are only applied to recursive algorithms). The O(n) expresses the linear cost it takes to merge the two problems together once they have been solved (because we know this is performed by the subroutine Merge). This step is not recursive, as it is performed after the problem has "come back" from being recursively solved.

So as you can see, the recurrence relation is gleaned from looking at the algorithm. The relation is then solved by either the master theorem or the substitution method or gleaned from drawing a graph of the recursions (recursion tree) and then proved rigorously with the substitution method. The solution will tell you the nature of the runtime, i.e.: If you increase the size n of the problem, how much do you increase the runtime?

For Mergesort the answer is Theta(n log n) which means that the increase in runtime will be a function of the type f(n) = n log n. You compare runtimes by looking at the steepness of the slopes of these functions. If the runtime is Theta(2^n) then the slope will be extremely steep, and the time it takes to run the algorithm will increase very fast, so the algorithm is said to be very slow. This is the answer you're looking for when you construct the recurrence.

And finally: don't despair, it might seem very difficult at times, but you'll probably be closer to understanding than you think. A very good tool for me was to watch the lectures on algorithms and datastructures from the MIT opencourseware. http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/ and http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/

Good luck!

Lacoppidan
  • 562
  • 4
  • 5
  • 11
    Thank you, your answer has been the most supportive (and realistic) one here! I'm already wavering about whether or not I should stay in the program. Being criticized by some of the commentors here and having my inadequacies pointed out to me isn't doing much to help my self-confidence in a difficult degree program. I wish some people would try to imagine themselves in someone else's shoes first before putting pen to paper (or fingers to keyboard). – MNRC Aug 08 '14 at 06:54
  • 3
    Thanks also for the explanation of recurrence equations--it helped a lot! – MNRC Aug 08 '14 at 06:56
  • 3
    You're very welcome. I don't think people realize how important it is to have self-confidence when trying to achieve something. If they successfully convince you you're not good enough then you definitely will not succeed, regardless of your skills. You have what it takes, you were right in your assumptions that if you can understand math, you can understand computer science. I even see people with very limited math skills pass hard courses. The best approach is to have a study plan with only the essential stuff and not to get overwhelmed by anything else. Then you WILL succeed :-) – Lacoppidan Aug 08 '14 at 13:25
  • 4
    Another thing, people seem to take a swing at you for wanting a Master's diploma. But doesn't everyone go to University for the diploma? I certainly know I do, I could learn every bit of this stuff on my own by just reading the books and looking online. I've aced several classes without even showing up for the lectures. I want the diploma as hard proof of my quantitative skills, and so do you, nothing wrong with that. And you certainly deserve kudos for going back for it, not many people have the courage! I'm sure you won't regret it! – Lacoppidan Aug 08 '14 at 13:32
  • 1
    +1 for discrete math recommendation. Graphs and combinatorics are a cornerstone of CS. – Bitwise Aug 08 '14 at 17:14
  • 8
    But doesn't everyone go to University for the diploma?No, of course not. Some people go to university for the opportunity to learn in a structured enivonment. Others go because they don't know what else to do, or because they don't want ti dissappoint their parents, or because they like the social scene, or because they want ti develop future business connections, or because they're hunting for a spouse. Everyone is different. – JeffE Aug 11 '14 at 03:59
  • 1
    Jeff, you could easily argue that some people go to university just for the cafeteria food or whatever, and I wouldn't be able to say otherwise. Maybe you're right, there may well be people who just see university as some big dating opportunity, but I really think most people are there mainly for the degree. If you don't want to disappoint your parents, well isn't getting a degree a part of that? (I doubt they'd want you just to attend, I think they'd want you to finish - but this is just me guessing again!) There'll be a wealth of secondary reasons also, but that wasn't the point. – Lacoppidan Aug 11 '14 at 21:30
  • @Lacoppidan Just saw the new comments. Yes, definitely true about the self-confidence part. There is a woman who just won the Fields Medal and she said that when she was a child she had no confidence in math and wanted to give up until she found a teacher who believed in her. Self-confidence really makes such a big difference in whether you can succeed in a program or not! – MNRC Aug 26 '14 at 06:39
  • I decided to go back to school for a lot of reasons. The foremost was probably boredom. Frontend web development was not intellectually challenging at my last company. I did some backend programming occasionally, liked it, and thought I'd get a better foundation in computer science. Having a masters in CS also opens doors to jobs that are not available (because some companies don't hire people without at least a B.S. in CS). It doesn't matter how good you may be at algorithms. So, there were definitely many incentives to go back to school... – MNRC Aug 26 '14 at 06:46
14

I think the lack of background is a huge factor.

I already have a master's in mathematics, graduated 14 years ago. I'm certain I couldn't do a master's in mathematics now without going back over undergraduate material first. I'm fairly sure that revisiting that material would take rather more than just the spare time that I have left over after doing a master's in the spare time from my job. Of course mathematics isn't the same as CS, but I think the same consideration would apply.

Doing OK in maths and physics at undergraduate level might have prepared you somewhat for a CS master's (although like everyone says, it's by no means guaranteed to be enough). But 10 years is long enough to forget even what you had, quite aside from the fact that what you had was a few courses rather than the syllabus of a mathematics major. It's not just the content of the course (most of mathematics is irrelevant to CS), it's the mindset of "being a mathematician" and "doing mathematics formally" that's similar to the formality required in your course, but is mostly absent from everyday apps programming. If you're anything like me, you have to some extent forgotten how to operate in the necessary mode, it no longer comes naturally.

As a test, take a look now at the harder mathematics and physics problems from the courses you took. Can you site down and do them now with anything like the ease you did then? Even with an "open book" to look up definitions you don't recall? If not, then you're less prepared for CS now than you were then, and like everyone says you weren't fully prepared then.

I think your best source of information is whoever decided you were qualified for the course. They must have thought you could get up to speed. Check with your professors whether you've done the sorts of things they think you would have to do to prepare, and whether that preparation is feasible on your schedule. Until you deal with the lack of background I don't think there's any way to tell whether you lack aptitude.

Age shouldn't inherently be a problem, since people take degrees in all subjects at all ages. However, your life being full of other stuff is an obstacle to some extent. Part of the reason I was much better at mathematics 15 years ago than I am now, is that 15 years ago I did it every day, usually for several hours. So I was simply in a better position to accept information delivered in a "mathsy" way, which I think CS courses basically are. No doubt there's material out there specifically intended for part-time students, that could help you attain and maintain "the zone".

I can't understand recursive equations like how you construct T(n)=log(n)+O(1) from an algorithm

If explanations that work for your colleagues don't work for you then you might consider one-to-one tutoring. Naturally that's extremely expensive, but if the class hears "and then throw the Master theorem at it" and knows what that means and how to fill in the details, and you don't, then clearly they have background you don't and so you need things filled in that they don't.

If you were me would you quit the program?

If I were you I would probably be asking the university (a) whether there's anything else I can work towards with the course credits I have, (b) whether there's an approved means to take the program more slowly, giving more time to fill in any missing background as I go. I have no idea what the answers would be, but I'd want to know my options before seriously thinking about quitting.

If it's just this one course (admittedly an important one, presumably other courses later require it) then it's entirely possible that you'll crack it eventually. There was one undergraduate course that I repeated (informally: my problems weren't being graded the second time) even after completing it the first time to what would have been a passing standard if my university worked that way (not in the US). It was way easier after that. You've seen some of this course twice, but some of it not at all (since you dropped it the first time and haven't reached the end this time). Personally I wouldn't do anything hasty until I'd at least reached the end of the course once. And if you scrape a pass that doesn't mean you can't visit the tougher material at the end a second time, and the early material a third. Although presumably if you wanted to be re-graded you'd have to formally enroll in the class yet again?

Steve Jessop
  • 2,911
  • 13
  • 19
  • 2
    I found it amusing that you mentioned the Master theorem, given the nature of the question (M.Sc.). – user541686 Aug 08 '14 at 18:34
  • 1
    @Mehrdad: it's entirely possible I wouldn't have thought of that as my example if the question had been about a PhD. – Steve Jessop Aug 08 '14 at 21:03
  • Interesting reflections. I did a PhD in theoretical physics 12 years ago and my experience is a bit mixed. While the skills in doing detailed calculations for sure have almost completely eroded, I feel that my overall level of conceptual thinking has not diminished. Rereading parts of my thesis doesn't feel alien, yet I know that I wouldn't be able to rediscover the formulas on a deserted island. – TemplateRex Sep 01 '14 at 20:01
8

I think first you need to start taking the subject seriously.

I had heard that CS is mostly math, so was under the (mistaken) impression that doing well in math means doing well in CS.

That's like "I had heard that basketball is mostly running, so was under the (mistaken) impression that doing well in running means doing well in basketball".

Yes, you'll need your running. No, it does not at all save you from training like the others. Because everyone knows it to be a prerequisite.

I had a fairly successful career as a front-end web developer and figured it would be great to have a degree so as to look like a more legitimate programmer than what my anthropology B.A. degree might imply.

A front-end web developer qualifies you for a computer science degree like typing 100 words per minute qualifies you for a typewriter mechanic.

If you were me would you quit the program?

Before quitting, it might be worth checking what it would take to start for real. Only then are you in a situation to judge whether the effort is feasible/possible for you and worth it. For a programming job, a CS degree is of somewhat marginal value.

For a programming job in Scheme, I'd probably look and interview carefully before making a decision between someone with a degree in ancient Greek and Arabic or in Computer Science. Chances are that the former is so much better at thinking analytically and out of the box and not being scared of challenges that coming from an entirely different discipline is causing him less trouble than being schooled in a different programming language paradigm does the other.

Seriously. So if you are going to try doing a CS degree, don not make it about getting a degree. It is a completely different and new skill set. If you want to work in your current profession, you might not even be able to put it to much use.

user20464
  • 97
  • 1
7

First, talk to your advisor. He/She would know your situation much better than us.

I would not quit right now if I were you. I think quitting now is a premature decision. I think it is understandable that you cannot catch up very fast especially you attend only part time. You probably should take lower level courses (probably undergrad level) to refresh the knowledge you acquired 10 years ago. If you still cannot do them very well, then consider to quit.

Nobody
  • 13,796
  • 29
  • 57
  • 134
  • I'm a working adult and not a kid anymore, so can't go full-time and ask my parents who are retired to support me through graduate school...Yeah, I'm definitely going to talk to my advisor if I fail this algorithms course... – MNRC Aug 07 '14 at 08:03
  • @MNRC What restrictions on time/grades do you have? I have seen a few programs that say more than 4 years or two grades less than a B and you are out. – kleineg Aug 07 '14 at 15:52
  • I would add that, I am surprised that at least some of this was not already discussed during your enrollment into the Masters program with your advisor. Also ensure you are familiar with resources available for mature students, and don't let your age interfere from working / studying with your class mates when appropriate. Sometimes, being able to doesn't mean you should get a waiver for a prerequisite; if you or your advisor think it will in fact hurt more than help you. In this case of conflicting opinions seeking a second opinion from other facility is acceptable. – mctylr Aug 08 '14 at 17:33
  • 3
    I'm definitely going to talk to my advisor if I fail this algorithms course No, I recommend doing it now, while your are still in good standing in your program. IMHO much of the discussion should of done before taking any classes. – mctylr Aug 08 '14 at 20:09
  • 1
    @MNRC I've never met an MS in CS student in a top 25 program in the US that was supported by his/her parents. I did meet, however, a few that had families (including more than one children to support) and yet were able to study full time, as most get assistantships with stipends. For your case, I think studying part-time makes sense, but I don't think you should attribute other people's ability to study full time to them having parents that help with the costs. – cabad Aug 18 '14 at 15:09
6

At the undergraduate level, "Data Structures and Algorithms" is typically the weed out course for our department. Students take it in their second year after having had intro to programming. The sorts of problems you encounter in that course will help you reason about coding, however it's very possible to work in front end web development without encountering them. Typically, the place where this sort of logic is most useful is in the backend not the display layer.

The graduate version of that course is likely to be the hardest course you have to deal with and the most unfamiliar to your skill set. It's also one of the few places where a firm understanding of discrete math is going to be very helpful. It's very common for Graduate students arriving from other disciplines or universities that did not cover this well to have trouble with this course. Frequently the solution is to have them audit the undergraduate course first.

As for whether you should continue, If you find that after some experience you are interested in "data structures and algorithms" and "formal languages and automata", then a theory focused computer science degree may be interesting to you. If you don't, then focusing on management relevant courses like software engineering may be interesting to you. If you're in this program because you want to learn more for your own sake, that's great you will get out of it what you put into it. If you're in this program for career advancement, this degree might help you land management level positions but will have little or no effect on your ability to find developer level positions for frontend work. It may open up some new opportunities for back-end work, however if that's your interest the certificate route might be a lot cheaper and faster for you. As a developer, your 10 years experience is far more valuable than a masters in cs.

If you have not already, I recommend taking the undergraduate discrete math, undergraduate data structures and algorithms, and undergraduate formal languages courses before continuing with the hard subjects in computer science. If you need to take some graduate level courses at the same time, take some soft subjects like software engineering which will likely be much more familiar to you.

Also, while the coursework for algorithms is fairly well defined, not all books are equal. I recommend http://mitpress.mit.edu/books/introduction-algorithms.

cs_alumnus
  • 379
  • 1
  • 5
  • 4
    "it's very possible to work in front end web development without encountering [data structures and algorithms" -- maybe that's why so many web "applications" are hogging CPU like there's no tomorrow? – Raphael Aug 11 '14 at 07:19
  • It also explains a great deal about the database structures I see in the wild and the foolish enthusiasm for "post" relational databases (shouldn't it be "pre"?). Not to mention the video on youtube in which facebook people congratulate themselves on creating a transaction manager that uses queues to serialise concurrent updates. They don't call it that, because they are completely oblivious of late they are to the party. – Peter Wone Jul 04 '16 at 23:49
5

Had to leave a separate answer because I don't have enough rep to put it as a comment on @Lacoppidan's answer.

First, I salute you on your attempts to become a proper programmer ;)

Second, I want to scotch some of the BS that other's have written:

  1. You do not need an undergrad degree in CS, unless the course says that you do. Many Masters courses are designed to accept cross-discipline students, which yours clearly is, as it wouldn't even have a DS&A module if it weren't!
  2. Age probably isn't a major factor. Yes, neuroplasticity drops as you get older, but all that means is that you need to work harder not that you can't do it. Certainly, I've found that there are things that I can understand intuitively now that I couldn't when I was younger. Also, if you have a settled/stable home life and job, that's going to put you at a massive advantage compared to many, as anxiety is the biggest blocker to learning you can get.

It smells to me like you've got two separate things working against you:

  1. You're doing part-time.
  2. You're worrying about passing; about whether you can do it.

Part-time is ++hard (see what I did there? ;) ) - the most valuable resource you have at university are your peers. I found that just having other people to talk about stuff with helped me enormously both in improving my understanding and consolidating my knowledge as well as building my confidence.

So, my #1 tip to anyone undertaking a university-level course is: find people on your course(s) that you get along with and build relationships with them around the work. Don't worry about 'the age thing', worry about if those people help you understand what's going on or not.

Also, don't worry about asking someone 'super clever' for help - you'll actually be doing them a favour by getting them to explain it to you in a way that you can understand. Sounds strange, I know, but having to explain something to someone (who may or may not be as clever as you), forces you to understand your subject better; to organise your own thoughts. I'm sure you know from your real-world experience, that being 'good' and 'clever' isn't enough - you have to be able to communicate your ideas to others and work collaboratively, because interesting software is non-trivial and non-trivial software is too big & complex for one person to do on their own.

Worrying about succeeding or not will always hold you back. It's something that I've struggled with many times.

One strategy I found works for me, is to just focus on learning stuff; just learn anything that's related to the course. Read for the sheer hell of it! Focus on the stuff that you find interesting. And write lots of code.

By focusing on just learning you'll get much more out of the time you put in and you'll be more satisfied with what you've learnt. True, it may not help you pass your course, but chances are, it will, because when you've got back into the habit of just learning stuff, you'll find it easier to learn the stuff you need to pass.

Another strategy is to write more code. One thing I definitely didn't do enough of as an undergrad, was write enough code. This is particularly important for stuff like DS&A - the only way to get really familiar with an algorithm or with things like pointer manipulation, is to do it. Lots.

If you can do it and can explain how it works, then you understand it.

This should be where your broader experience comes in; you've got 10 years experience of writing code, so you've no doubt picked up lots of techniques and skills that will help you. Use them!

Use things like dry-running (something that I don't think is taught much these days, but it's still a fantastic tool, particularly for learning DS&A) and/or interactive debugging to step through your execution.

The third technique I found really helpful is mind-mapping. I used it as a way to fill the gaps in my knowledge, by breaking a topic into its constituent parts, exploring the things I didn't understand and then return to the parent topic while this new knowledge was fresh in my mind.

For example (sorry, no pictures), the subject of 'linked lists' might decompose into:

  • list
  • pointers
  • head
  • tail
  • dynamic memory allocation

I'd then look at each of these and ask myself "do I know what each of these is?" If the answer is 'yes', then I move on, if 'maybe', I check my knowledge against Google, if 'no', then I create a separate sheet and work on it until I do (decomposing further as necessary). That way, the next time I'm coming to a subject I and I see "linked list", I will either:

  • know what a linked list is and how it works; or
  • have a good set of notes that I can quickly use to refresh my memory

Again, practice, practice, practice. The more code you write and have to debug, the better you'll get to understanding what's going on.

This turned into a much longer answer than I'd intended, but I do hope you find it useful.

3

I am mildly confused about where you started with your Masters? But here's my experience as someone in similar shoes.

I have an undergrad degree in Political Science but wanted to pursue a Master's in CS. In order to do this I had to start from the ground up and delayed my undergrad graduation to take the prereq classes for the Masters. Now here's the thing for anyone: getting into CS late in the game is hard. You have had no experience whereas others have had ample (as so many are coming from either being self taught or seeing it in high school).

Learning CS can be daunting and I would guess from what you said your job is that you don't realize a fundamental thing about programming, and that's to make it easier for other programmers. From what I've seen of many web based programming is that there's a lot of backdoor programming going on. That's not a bad thing but as others have pointed out, programming is different than CS.

To be honest, this sounds like a personal choice and not really heavy on pros and cons that aren't personal. You aren't getting it because you're out of options, because you've always wanted to learn it or because your job demands it. You're going because you think it might help you on paper. i'm not saying that's a bad reason, but it certainlt isn't helpful in the motivation category.

I've known a lot of people getting their BS in CS and they suck at it. They fail at almost every class (or just barely scrap by). But man are they still sticking with it (for better or worse, who really knows). So what I'm saying is, your not alone in finding a CS topic hard or confusing. It's more, is it really worth the effort for you at the end of the day?

Oh, one last thing, are you afraid to ask questions being a more senior member of the class? Do you just sit there hopelessly but afraid that everyone knows more than you? If so, stop that. They don't know more than you and quite possibly don't get it even worse. Go back to 20 year old you in undergrad, what would you do then? You would talk to your classmates and teacher to get a better understanding. If you do this already then good for you, but if not, you might just be surprised about where you actually stand in the class. (I've had classes where just scrapping by is considered an achievment as there is a tramendious failure rate)

Jen
  • 1,109
  • 8
  • 8