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.

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 JackAug 7 '14 at 3:41

35

"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?
–
RaphaelAug 7 '14 at 8:10

13

@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).
–
TimAug 7 '14 at 8:35

11

@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?
–
MehrdadAug 7 '14 at 10:28

8

@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.
–
MehrdadAug 7 '14 at 16:45

8 Answers
8

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.

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).
–
MNRCAug 8 '14 at 6:54

2

Thanks also for the explanation of recurrence equations--it helped a lot!
–
MNRCAug 8 '14 at 6: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 :-)
–
LacoppidanAug 8 '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!
–
LacoppidanAug 8 '14 at 13:32

5

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.
–
JeffEAug 11 '14 at 3:59

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.

@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).
–
xLeitixAug 7 '14 at 8:28

10

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
–
TheOneWhoProgramsAug 7 '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...
–
gexicideAug 7 '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. MapperAug 7 '14 at 19:42

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"
–
GregAug 8 '14 at 1:52

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?

I found it amusing that you mentioned the Master theorem, given the nature of the question (M.Sc.).
–
MehrdadAug 8 '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 JessopAug 8 '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.
–
TemplateRexSep 1 '14 at 20:01

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.

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...
–
MNRCAug 7 '14 at 8: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.
–
kleinegAug 7 '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.
–
mctylrAug 8 '14 at 17:33

2

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.
–
mctylrAug 8 '14 at 20:09

@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.
–
cabadAug 18 '14 at 15:09

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.

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.

"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?</snark>
–
RaphaelAug 11 '14 at 7:19

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:

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!

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:

You're doing part-time.

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.

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)