I'm a CS Masters student and I suck horribly at logic/math

A place to discuss the implementation and style of computer programs.

Moderators: phlip, Moderators General, Prelates

CptSupermrkt
Posts: 2
Joined: Tue Jul 29, 2014 6:24 pm UTC

I'm a CS Masters student and I suck horribly at logic/math

Postby CptSupermrkt » Tue Jul 29, 2014 6:52 pm UTC

I have no idea how I got here. I didn't get a degree in CS as an undergraduate. A few years ago landed a "helpdesk" style job. In my downtime at the job, I picked up the "SQL for Dummies" book we had lying around. A co-worker introduced me to .NET at the same time. I put the two together and ended up creating the company intranet site for things like vacation day management, employee info, etc. It was horribly newbish, but it got the job done, and I learned a lot.

Fast forward a few years and I've somehow landed a job with double the salary of the previous, as Linux Systems Administrator (despite having no experience with Linux), along with a free tuition ride through grad school for CS. For what it's worth, I'm a straight-A student at the moment.

There's just one problem --- I feel like a complete fraud because I am absolutely incapable of logical and analytical thinking. I make the grades because I absolutely bust my ass memorizing specific sections of code, because I under no circumstances can "visualize" the problem and logically "work it out" by remembering and applying concepts. In a course that covered algorithms, I just had to memorize the code for each kind of search. I made an A because I have a decent memory, not because I actually understand the algorithms. If I made an A, surely that means I understand algorithms, right? No, I, for a short span of time, had dozens of lines of code dedicated to memory for the test. That test came and went, and now I remember nothing, except that "sorting and searching is kind of a big deal."

My fundamental problem I think goes all the way back to memories I have in elementary school, when I would go to my father for help with math word problems, which I just could not wrap my head around. I have so many memories of frustration --- slamming the book, throwing the pencil, etc. --- all because I just could not understand how my father was able to so clearly sort out the components of the problem and use them to form a solution.

I think if I continue to bust ass, I will graduate with a decent GPA. But I'm considering dropping out, because I feel very much like I just don't belong to the programming world. I can't decide whether that is the wrong choice (i.e. "being a quitter and giving up") or the right choice (i.e. "knowing when something is not your thing").

User avatar
Xanthir
My HERO!!!
Posts: 5281
Joined: Tue Feb 20, 2007 12:49 am UTC
Location: The Googleplex
Contact:

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby Xanthir » Wed Jul 30, 2014 5:33 am UTC

If you think you're getting any value out of it, keep at it. If you think you're not (because all you're doing is memorizing for assignments and then immediately forgetting), then don't.
(defun fibs (n &optional (a 1) (b 1)) (take n (unfold '+ a b)))

douglasm
Posts: 630
Joined: Mon Apr 21, 2008 4:53 am UTC

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby douglasm » Wed Jul 30, 2014 7:56 am UTC

I have difficulty imagining how memorization alone could get anyone, no matter how good their memory, as far as you've described. You might indeed be unsuited to computer science, but another possibility may be that you just need the concepts presented in a different way (less formal logic, more real world analogy, maybe?), or that focusing on developing foundational understanding could give you something to build on for greater gains.

Those elementary school math word problems, do you still have trouble with that sort of thing now? It sounds like your father tried to help by showing you the steps to the answer, and either failing or not trying to adequately explain the crucial element of figuring out what those steps are.

KnightExemplar
Posts: 5493
Joined: Sun Dec 26, 2010 1:58 pm UTC

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby KnightExemplar » Wed Jul 30, 2014 4:42 pm UTC

Sounds like a classic case of Impostor Syndrome. Its very common among coders.

Good news is, you're probably a good coder. Bad news is, you're gonna feel like shit because you have a psychological difficulty towards internalizing your accomplishments. Relax a bit, its a known problem. You're probably stressed at the moment.

Take charge of your syndrome, it will make you a strong, competent worker. But remember that you've got this issue. Just like a student with ADD will have to learn to just deal with their issues with attention span, you will have to deal with constant depression and an overly aggressive internal criticism of yourself.

Realistically... something outside of classes is stressing you out right now. Try to figure out the stress and deal with it. Family issues, relationship issues, an overbearing boss... it sounds cheesy but something along those lines is likely giving you stress. Actually, a common one is when you're unproductive at work due to external circumstances. You feel unaccomplished (because you honestly haven't done anything), but you can't do anything about it because of... some reason. (its unique to each situation... but maybe your team is waiting for another team and you can't work until they're done. But you're forced to come in each day and waste time due to company culture. )
Last edited by KnightExemplar on Wed Jul 30, 2014 4:56 pm UTC, edited 1 time in total.
First Strike +1/+1 and Indestructible.

EvanED
Posts: 4330
Joined: Mon Aug 07, 2006 6:28 am UTC
Location: Madison, WI
Contact:

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby EvanED » Wed Jul 30, 2014 4:55 pm UTC

KnightExemplar wrote:Sounds like a classic case of Impostor Syndrome. Its very common among coders.
I think it's also a requirement for admission to grad school. :wink:

KnightExemplar
Posts: 5493
Joined: Sun Dec 26, 2010 1:58 pm UTC

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby KnightExemplar » Wed Jul 30, 2014 5:03 pm UTC

EvanED wrote:
KnightExemplar wrote:Sounds like a classic case of Impostor Syndrome. Its very common among coders.
I think it's also a requirement for admission to grad school. :wink:


Fair enough. Grad School is apparently more stressful overall.

I never went to Grad School, but in my case, whenever my guild started losing in a online-game that I played back in College... I would get impostor syndrome. Stress can strike you anywhere man.
First Strike +1/+1 and Indestructible.

User avatar
WarDaft
Posts: 1583
Joined: Thu Jul 30, 2009 3:16 pm UTC

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby WarDaft » Thu Jul 31, 2014 2:30 am UTC

Pick a language with an interpreter.

Play with it.

Literally. Play. With. Code.

Try different things, asking yourself "what will this do? what about that?" Read full natural language descriptions of algorithms and then hack at them until it works. It doesn't have to be correct right now, just work. Then start over with another one. You have to get used to solving simpler problems before you know those tricks well enough to solve more complicated problems. If I ask you to invent an efficient comparison sort, it sounds like you probably don't know how to do what I'm asking, because you don't know what constitutes an efficient sort, or how they really work. It would be like trying to learn English by picking up War and Peace - with enough effort, you can memorize and repeat, but that's not going to help you understand.
All Shadow priest spells that deal Fire damage now appear green.
Big freaky cereal boxes of death.

heatsink
Posts: 86
Joined: Fri Jun 30, 2006 8:58 am UTC

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby heatsink » Fri Aug 01, 2014 3:26 pm UTC

If you can put together a database-backed website and make it work, you probably can think logically. Logical thinking takes a certain approach that’s hard to teach, and the usual teaching method seems to be exposing students to the mechanics over and over until they figure out the methods.

It’s pretty much worthless to tell someone that they have impostor syndrome. That leads to the obvious question, “What makes you think I’m actually competent? You don’t know what I can and can’t do.” I can point out a few things that have worked for me to calibrate my own self-evaluation.

  • Notice when you overestimate other people’s knowledge. People generally don’t actually tell you when this happens; you have to infer it. For instance, a while ago, Jplus accused me of boasting and self-aggrandizement when I pointed out some programming concepts that I thought were common knowledge. That rude and hostile confrontation told me that I know more than I thought I did.
  • Notice when people appreciate what you do. The web development you did is an example of that. Often, it means that you can do things other people can’t.

Understanding an abstract concept is not knowing "what it is," but knowing everything you can do with it. To quote von Neumann, "in mathematics you don't understand things. You just get used to them." Classes underemphasize this when they present a concept by telling you what it is. There are a couple things you can do to help with understanding.

  • Study with other people. The value is that you are explaining things and asking questions. These force you to transform concepts, instead of just reiterating the description you were given.
  • Read researchy blog posts about programming. Good blogs discuss programming concepts, rather than just presenting them: methodically explaining concepts, discussing theoretical consequences, discussing applications, discussing actual consequences when an experimental idea gets applied. I suggest John Regehr’s blog posts on undefined behavior in C.
  • Continue writing code in domains that partly overlap with what you know. For example, I wrote a ray tracer (which is a pretty common toy project). It applied my knowledge of math (vectors), data structures (bounding volume hierarchies), and paper-reading (turning equations from a paper into working code). This is powered-up homework: you have to teach yourself how to use those algorithms you studied in class. It gets you closer to the underlying logic and math.

These all require a significant investment of time. I’m guessing you spent many hours writing and debugging the company intranet. That’s unavoidable, because you’re developing skills you didn’t have before. Realistically, you’re unlikely to invest that time unless you can find an activity that interests you.

User avatar
Izawwlgood
WINNING
Posts: 18686
Joined: Mon Nov 19, 2007 3:55 pm UTC
Location: There may be lovelier lovelies...

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby Izawwlgood » Fri Aug 01, 2014 3:42 pm UTC

I'd also like to point out there's nothing wrong with making a lateral step into a different field/line of work. You are certainly picking up specific skills and knowledge, but you are also learning logic/math, problem solving, how to work on large projects, etc. These are all skills that transfer to other lines of work, and your credentials can act as leverage getting you there.
... with gigantic melancholies and gigantic mirth, to tread the jeweled thrones of the Earth under his sandalled feet.

KnightExemplar
Posts: 5493
Joined: Sun Dec 26, 2010 1:58 pm UTC

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby KnightExemplar » Fri Aug 01, 2014 4:23 pm UTC

heatsink wrote:It’s pretty much worthless to tell someone that they have impostor syndrome. That leads to the obvious question, “What makes you think I’m actually competent? You don’t know what I can and can’t do.”


Yeah, except I'm not really trying to get rid of Impostor Syndrome for him. A low outlook of your own abilities generally leads you to work harder. It feels like shit, but you work harder because of the low opinion you have of yourself.

If you want my "proof" for why he's qualified... its because he's a Straight A student with practical work experience, and was able to pick up SQL on his own from a crappy "for dummies" book. Seriously, that series is poorly edited bullshit filled with bad advice... and anyone who can do anything useful from such a crappy book is clearly underestimating their abilities.

That said, I agree with you in that joining a study group is the proper response. If he really is "suck horribly" at this subject, reaching out to other students is the best approach. It also serves as a good social baseline for where other students are, and mitigates Impostor Syndrome somewhat.

The fact of the matter is, he has practical experience and with it... he is able to see through academic bullshit. He gets straight A's but fully understands that it isn't enough. That puts him significantly ahead of other students, and he is now able to hone his *actual* skills. He shouldn't be aiming to get "good grades", he should trust in his experience, and try to become a practical worker. He's in the best position possible to benefit from Grad School.

As Mark Twain said, "Never let formal education get in the way of your learning".
First Strike +1/+1 and Indestructible.

CptSupermrkt
Posts: 2
Joined: Tue Jul 29, 2014 6:24 pm UTC

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby CptSupermrkt » Mon Aug 04, 2014 1:00 pm UTC

KnightExemplar wrote:Sounds like a classic case of Impostor Syndrome. Its very common among coders.


Holy. Shit. I can't believe that's a real thing. That explains like everything I feel about my life as a whole --- I basically suck balls at everything, have ridiculous standards for myself, and am constantly in fear that I'll be "found out". The fear holds me back from a lot of things. Like right now we're working on a group coding project for one of my classes right now, and I chose the role which I know the most about, and have basically done the absolute bare minimum to fulfill my requirements, because I'm really afraid that if I start trying to learn/experiment with things I don't know, it will expose me to the rest of the group as a total fraud.

User avatar
Yakk
Poster with most posts but no title.
Posts: 11077
Joined: Sat Jan 27, 2007 7:27 pm UTC
Location: E pur si muove

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby Yakk » Wed Aug 06, 2014 2:42 pm UTC

Doing anything at the edge of your ability consists of "I have no clue what I'm doing, durr".

The first time you do something at the edge of your abilities, odds are you won't understand how or why it worked. Maybe the second time as well.

Going back and seeing "can I solve those word problems", or looking at your old code and saying "well, that was stupid", or seeing how hard it would be to write a searching algorithm from a natural language description now that you have forgotten the memorized algorithms can help you understand if you are actually learning.

When you are taught something like a sorting algorithm, you are often taught the distilled result of decades of refinement on top of an algorithm written by someone who was a world wide expert in the subject when they wrote the first version. Saying "I don't instinctively grasp what and why they are doing that" is not a sign of incompetence.

Now, what can happen is after you have played with, implemented, torn apart, analyzed and monkey-written a few dozen of said algorithms, you internalize the patterns that they represent, and you start being able to use them "instinctively" (aka, you don't remember you are doing monkey-see monkey-do anymore).

Eventually you can reach the point where "divide and conquer" becomes a meta-pattern (which you learned from repeatedly playing with algorithms that apply it) which you can use to author "new" algorithms or "understand" old ones (aka, pattern match). But you typically don't pick it up the first time you see your first divide and conquer algorithm.

Master chess players don't have ridiculously better memories than others. Instead, they have learned patterns that occur on chess boards as a result of a game being played, and they can compress the chess board with said patterns to require less memory to work with it. Show a master chess player a board with randomly placed pieces and they are no better than other folk at remembering where the pieces are -- show them a board that uses "real game" patterns and they are amazingly better at remembering it.

Those small pieces are picked up through repetition, repetition and more repetition, drilling them into your brain, which lowers your cognitive load required to think about situations that match said patterns, as you can "compress" the situation.

If you are learning stuff that is easy to understand, you are in a sense wasting your time. If you are learning stuff you cannot even grasp, you are also wasting your time. Your ability to memorize the algorithms and repeat them back is a good sign -- actually memorizing it without being able to compress it down would be extremely hard. Which means something in your head is managing to compress the patterns down.

Pull out a wikipedia description of a search or sorting algorithm you once had memorized. Code it. Can you do it? Is it way, way easier to do than you'd imagine it would have been before you "learned" them?

Now try the same with a search or sorting algorithm you have never memorized. It should be harder, but if you are lucky it won't be impossible. (Feel free to fail, and try a different one: real world things like wikipedia articles are not designed to be at the edge of your competence, and may be poorly written to boot).
One of the painful things about our time is that those who feel certainty are stupid, and those with any imagination and understanding are filled with doubt and indecision - BR

Last edited by JHVH on Fri Oct 23, 4004 BCE 6:17 pm, edited 6 times in total.

User avatar
Qaanol
The Cheshirest Catamount
Posts: 3055
Joined: Sat May 09, 2009 11:55 pm UTC

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby Qaanol » Thu Aug 07, 2014 2:21 am UTC

CptSupermrkt wrote:I make the grades because I absolutely bust my ass memorizing specific sections of code, because I under no circumstances can "visualize" the problem and logically "work it out" by remembering and applying concepts. In a course that covered algorithms, I just had to memorize the code for each kind of search. I made an A because I have a decent memory, not because I actually understand the algorithms. If I made an A, surely that means I understand algorithms, right? No, I, for a short span of time, had dozens of lines of code dedicated to memory for the test. That test came and went, and now I remember nothing, except that "sorting and searching is kind of a big deal."

I ended up writing way more than I expected to, so I’m going to break this into sections within spoiler tags. First, a little about me and how I can relate to your situation:

Spoiler:
I had a comparable experience with college chemistry. First-year intro chem, in fact. My background in the subject was essentially nil, and I had no conceptual idea what was going on.

Sure, I could remember the list of strong acids, and the charges of common polyatomic ions, and how to calculate the pH of a buffer solution—all of which I have since forgotten—and I could carry out the steps to balance a chemical equation, but I didn’t really grok the material. About the only thing that made any sense was counting valence electrons to see how many bonds an element would make, and even that was usually done mechanistically with a Lewis diagram.

I remember one question on a test asked what would happen if each of several compounds were dissolved in water. The ones involving strong acids or common ions that I had memorized, I could answer no problem. But then there were some I had never seen before and I remember having no clue where in the chemical formula they would separate, if at all. I did not have the slightest idea what sort of reasoning process could be used to figure it out.

As it turns out, rote memorization was enough to get straight A’s, but I didn’t learned much. The final exam second semester had more conceptual questions that required applying principles to new situations rather than straight calculation, and I did rather atrociously. Luckily, my homework and midterm grades were enough to keep my average up.

That pretty much settled the question of whether I should minor in chemistry or physics. When I took a quantum physics course two semesters later, I finally started to realize what the heck was going on with chemistry. Of course I still didn’t want to *do* chemistry, but at least it began to make a little bit of sense.

Long tangent short, I know exactly how it feels to go through a subject purely on memorization without internalizing any of the concepts. If I had stuck with chemistry I probably would have felt like an impostor myself, at least for a year or so until I started to figure it out for real.

The takeaway here is that my chemistry class presented things in a way that didn’t click for me. When I took quantum physics and got to see things from a different angle, then it made sense. Who knows, maybe things would have been different if I had a chem prof who taught in a way that worked better for me, rather than focusing on calculations.

For your situation, you are clearly quite capable at many things. Even just looking at your first post in this thread, you write well, you express your thoughts cogently, and I’m going to go out on a limb and guess that you didn’t make that post by combining snippets of text that you memorized from elsewhere: you knew what you wanted to say, and you figured out how to say it.


Some thoughts on programming:

Spoiler:
One way to think about programming is that you are talking to the computer, but the computer has a severely limited vocabulary, is extremely stubborn, and always takes everything super literally. That doesn’t really help you solve problems though, just to understand that programming languages really are called “languages” for a reason.

What I find helpful, on the other hand, is to have a mental model for what the computer is doing. That is, what carrying out an algorithm “looks like”. The key here is that it is a model, something you can understand. Don’t try to figure out what the computer is really doing, just relate the top-level goals to something you are familiar with.

My personal model is a bookshelf. Variables are books, and pointers are index cards that specify a spot on the shelf. You can look at a book, take it off the shelf, compare its title to another book’s, and put the one you’re holding in an empty spot on the shelf. You can also make a note on a card to remember where a certain book it.

With this view, let’s look at searching. Suppose you know the title of a book, and you want to find where it is. The books are not organized at all, they are just on a shelf all in a row. How can you go about finding the book you want?

That’s not a trick question, and it really is as simple as it sounds. I want you to pause a moment and think about the answer though. Visualize how you would find a certain book on a shelf that is not organized. Do you have a method in mind?

When you’re ready, highlight to read the answer Qaanol wrote:You can just start at one end and look at each book one after another until you find the one you’re looking for. Conceptually straightforward.


That’s the abstraction level that generally goes into coming up with an algorithm. Implementing it in code is the task of translating the instructions step by step for the obstinate computer, but the idea is at a much higher level.


More about conceptualizing algorithms:

Spoiler:
What if you know the books on a shelf are already alphabetized, and you want to find a certain one? Well, you could still do the same thing as above. After all if it works for arbitrary arrangements of books, it will certainly work for any particular arrangement. But picture yourself in front of a long row of books that are nicely organized in alphabetical order. You know the name of the book you want, now how do you go about finding it? Again, pause and think about it.

When you’re ready, highlight to read the answer Qaanol wrote:You’ll probably look at a book in the middle, to find out which side your book is on. That way you only need to deal with half the shelf, and you can do the same thing again: look at a book in the middle of that half, and then you know which quarter of the shelf your book’s in. A couple more times like that and there will only be a handful of books remaining to look at.


As before, coding that in any given language requires some memorization, but with the overall idea in mind I think you’ll be able to write at least pseudo-code pretty easily.

That’s well and good, but what about sorting? You’ve got a shelf of books that unruly patrons left in random order, and you want to get them organized. What can you do? What would you do?

When you’re ready, highlight to read the answer Qaanol wrote:A simple strategy is to start at one end and work your way along book by book. Take the second book, see if it goes before or after the first, and put it there. Then take the third book and see if it goes before or after the first. If it goes before, put it there; if it goes after, compare it to the second book and place it accordingly. The fourth book is treated the same: find where it belongs among the three you’ve already sorted and put it there. You can just keep doing the same thing for the rest of the books, adding one book at a time to the section you have sorted.


Do you see how you can use the searching algorithm above to more quickly find where each book needs to go?


A childhood anecdote:

Spoiler:
I assume you’ve seen the previous three algorithms before, and you’ve probably seen the next one as well. It’s one of my favorites, mostly because I came up with it as a kid. I used to collect Magic cards, and had a whole box of them. I kept them meticulously organized, each color alphabetized separately. When I got new cards it was easy enough to flip through and add them to the right spot. But one time I knocked the box off the table and all the cards went scattering across the floor. I scooped them up onto the table, but I still needed to put them back in order. What was a kid to do?

Well the first thing I did was separate them by color. I didn’t worry about alphabetizing at first, just went through card by card making a pile for each color. Then I had to sort each pile. Could I use the same strategy again, even though each pile was a single color?

When you’re ready, highlight to read the answer Qaanol wrote:Yep, I sure could. I made sub-piles by sections of the alphabet. One color at a time I put cards starting with A-M in one pile, and N-Z in another. Then I took one of those and did the same type of thing, A-G and H-M, then A-C and D-G, and so forth until I had just the ‘A’ cards of that color. That was a pretty short stack, so I sorted it card by card. Then I did the ‘B’ cards, and each letter in turn as I got to it. Boom, one color sorted, on to the next.


Now, to prove that this method is faster than the other requires a bit of theory, but for a kid sorting Magic cards it is pretty obvious once you actually start doing it. If you have to seek through an already-sorted stack to find where each card goes, that takes a lot of time. But if you can instantly put each card in one of two piles at a glance, then you zip right through them.

Actually, I left out a detail: my sister offered to help me sort the cards after I spilled them. So rather than just one pile for each color we had two, and so on the rest of the way. Then when we got to combining our sorted stacks, that part was actually super easy: like a zipper running down one stack then the other, back and forth as necessary. Can you picture how that goes?


I hope that gives some degree of conceptual insight for thinking about algorithms. Instead of worrying about how to code something, or what the computer is actually doing, try to think more about the problem you need to solve and how you would approach the real-world version with physical objects.
wee free kings

User avatar
Jplus
Posts: 1709
Joined: Wed Apr 21, 2010 12:29 pm UTC
Location: Netherlands

Re: I'm a CS Masters student and I suck horribly at logic/ma

Postby Jplus » Sat Aug 09, 2014 7:37 pm UTC

Qaanol wrote:For your situation, you are clearly quite capable at many things. Even just looking at your first post in this thread, you write well, you express your thoughts cogently, and I’m going to go out on a limb and guess that you didn’t make that post by combining snippets of text that you memorized from elsewhere: you knew what you wanted to say, and you figured out how to say it.

This reminds me of the adagium that good writing and good programming have many underlying skills in common. Yes, the OP is a positive first sign of competence indeed.
"There are only two hard problems in computer science: cache coherence, naming things, and off-by-one errors." (Phil Karlton and Leon Bambrick)

coding and xkcd combined

(Julian/Julian's)


Return to “Coding”

Who is online

Users browsing this forum: No registered users and 7 guests