Hiya,
I wouldn't really say that this is an actual problem as more of an inquiry in to people's experiences and such. I have personally been interested in Computer Science since high school and have always wanted to work in the field as my major and such and have learned Java, HTML, and am currently learning Python as well when I have time, but I have trouble with some of the simplest coding problems/concepts and I am not the best at it at all by any means. Sometimes I will sit for hours staring at and working on some code literally all day and will get no closer to finding a solution or getting it to work. Sometimes I completely rely on the TAs and the professor in helping me with the assignments and such and it is usually something that I could never have figured out on my own. Example: I am currently taking computer science 2 right now and the current programming assignment is a Sudoku solver that takes a file inputted by the user, reads the data in to a Sudoku object which puts in to a 2D array and then you can call methods on it to solve using a simple Backtracking algorithm. But I have honestly been working on it for a week now and am nowhere near completing it at all. I have already sent a couple of emails to the TAs and I sometimes feel completely helpless in the subject and the programming. But I still love the major and the aspects of it and still want to do well in it. Is this a normal thing for people? Have any of ya felt this same way that I do? And how do you overcome it and persevere with it?
Programming requires lot of practice , the more you struggle , the more you put effort the more you learn .
I have not experienced what you described, but I have several friends who had some sort of problem or another of that kind. I had one who was really struggling, when he asked me about some problem he was trying to solve. I asked him why he didn't just figure out what the code does, by simulating it in his head or on paper. Later, he told me it was really easy once he did that... I was really mystified, because, well, how else would he fix his broken code? Amazingly, he quickly became a good programmer after that incident.
In general there is the question of what you are not doing, that others are doing, that makes them good at solving problems and you bad at it. Based on your Sudoku post, you seem to be not even reading the code you've written, with any attention to detail. How could you pass the wrong scanner and not notice that? Didn't you, when your code didn't run as expected, read through your code line by line, word by word, character by character, and double check that it made sense? Didn't you imagine what the program would do, when running?
And then let's look at your attempt at a for loop. Did you simulate how the code would operate in your head or on paper? Because if you did, it would be obvious that the code is wrong. Why did you even write that code in the first place? What was it that made you think you were writing correct code?
Or did you write code that you didn't even know was correct? Why would you even do such a thing? The only reason to do such a thing would be to experiment with some functions whose behavior is poorly documented, so that you could figure out how they worked and then write correct code using that knowledge. You weren't.
There's something really messed up with your mentality if you're writing code without understanding what your code actually does. (Or, if you think you are understanding what your code does, you have the problem of having accepted into your arena of facts things (about how Java operates) which are not facts.)
That's the problem you need to fix.
And you know, obviously, you can't just say, "okay, think differently" -- it takes some practice, and some self-awareness -- I mean, the difficulty of writing code depends on how you write it, and you could benefit from observing what makes something easy or difficult to reason about.
Programming requires lot of practice , the more you struggle , the more you put effort the more you learn .
If you're struggling while learning, you're learning wrong.
>I am not the best at it at all by any means
Nobody started out knowing what to do and how to do it. We all needed to learn how to solve problems effectively and efficiently. Unfortunately, there's really no shortcut. Mistakes, as they say, become experience.
>Is this a normal thing for people?
Yes. Despite what people trying to sell you something will say, programming is hard. Not only is it hard while learning, it remains hard throughout your career (though the hardness changes as you improve).
>Have any of ya felt this same way that I do?
I like to describe myself as the result of untalented hard work. I don't have any natural talent for programming, so yes, I've felt the same way you do.
>And how do you overcome it and persevere with it?
I relied on the high of finally solving a problem. When you reach that point, it feels so good that you forget about all of the pain you went through to get there. More recently I've learned to take pleasure in aspects of the journey as well as the solution.
>If you're struggling while learning, you're learning wrong.
If you're not struggling while learning, you're not pushing yourself hard enough.
In general there is the question of what you are not doing, that others are doing, that makes them good at solving problems and you bad at it.
..
And you know, obviously, you can't just say, "okay, think differently" -- it takes some practice, and some self-awareness -- I mean, the difficulty of writing code depends on how you write it, and you could benefit from observing what makes something easy or difficult to reason about.
If you're struggling while learning, you're learning wrong.
I think you drive a good point. Often times, it isn't enough to just simply accept that it "just is" and give up when presented with a problem.
In spite of what Narue said, programming isn't hard by itself. I honestly believe that it's essentially the same as writing, once you begin to understand it. Just like how the original poster had managed to formulate English sentences to ask others for help, programming works in much the same way. Except, in theory, programming is easier than English because there's no ambiguity. But, that's probably what makes it hard for most people.
Programming forces you to explain things in such a detailed way, that a computer could understand it. Which can get difficult, since they understand so very little. But, mastering this allows one to develop an intuitive sense of developing algorithms, which is why they teach you this so early on in your computer science college career.
However, getting better at programming is much like getting better at sports. If no one ever teaches you to throw a basketball, then you're going to have a very hard time in learning how to play. Likewise, programming requires that you learn what's needed to actually begin to get better.
On the other hand, even when someone teaches all that can be taught, you still can't learn without practice. Like, you can't go pro in basketball if all that ever happens is that someone explains to you how to throw, shoot, dribble, etc. and you never actually play the game. The same also applies to programming, as real world situations involve unpredictable scenarios in which only experience will prepare one for.
However, if there are underlying psychological causes behind your problem, then really the focus should be in getting treatment for them. I bring this up, because I went through such an ordeal. I couldn't pay attention in class and help from outside of class wasn't very helpful either, but determined to learn I taught myself.
I did learn to program at some point, to some degree. But, computer science isn't entirely about programming, and the courses which still involve programming often involve harder material. Eventually, I was diagnosed with having AD/HD, and received treatment, but it all could've come at a sooner time.
I honestly believe that I know the material which I've studied pretty well. But, I worry about how do I handle the gpa issue. My plan, however, is that if I can't graduate because of gpa then I'll just take the csci courses anyways and try to apply for a job afterwards. At some later time, I can come back and get my degree proper.
I realize that this is kind of personal information that I revealed to a bunch of strangers on here, but I hope that it does help some people. It's probably not smart to assume that you could have AD/HD just because you're having a hard time, by the way. But, on the other hand, hesitation could affect your gpa. So, it doesn't hurt to try to find out.
>In spite of what Narue said, programming isn't hard by itself.
You could only have that opinion if by "programming" you mean "typing code". People who say that programming isn't hard are either too inexperienced to know, or flat out lying.
>I honestly believe that it's essentially the same
>as writing, once you begin to understand it.
The writing part is relatively simple because there are rules and plenty of examples to follow. Of course you also have to come up with a compelling story, interesting characters and character development within the story, a plot suitable for at least one self-contained book, subplots to keep the reader interested, and fast enough progression to hook readers but slow enough to tell the whole story without losing depth.
On top of the story and characters you often need to build the world around them such that it seems realistic enough to draw readers in. This could go as far as creating complete languages and the history of the universe (à la Tolkien), or it could be as simple as enough history to give the world depth even though you couldn't possibly write enough books to cover everything (such as McCaffrey's Pern). Failure to do this usually results in a flat and boring world, and the story ends up being flat and boring as well.
You have to maintain continuity throughout the development and writing process, and watch out for errors of all kinds (both writing and story telling errors are easy to make). You have to be careful to follow the rules of writing (and know where they can be broken for better effect). You have to remember that just following the rules doesn't mean you have a good writing style, and readers will viciously critique your style even if your grammar, spelling, and construction are flawless.
Oh, and let's not forget the nightmare of getting published.
Programming is indeed a lot like writing. And like writing, most of the work doesn't involve typing code. Why do you think "code monkey" is a derogatory name?
Mistakes, as they say, become experience.
An expert is a person who has made all the mistakes...
>In spite of what Narue said, programming isn't hard by itself.
You could only have that opinion if by "programming" you mean "typing code". People who say that programming isn't hard are either too inexperienced to know, or flat out lying.>I honestly believe that it's essentially the same
>as writing, once you begin to understand it.
The writing part is relatively simple because there are rules and plenty of examples to follow. Of course you also have to come up with a compelling story, interesting characters and character development within the story, a plot suitable for at least one self-contained book, subplots to keep the reader interested, and fast enough progression to hook readers but slow enough to tell the whole story without losing depth.On top of the story and characters you often need to build the world around them such that it seems realistic enough to draw readers in. This could go as far as creating complete languages and the history of the universe (à la Tolkien), or it could be as simple as enough history to give the world depth even though you couldn't possibly write enough books to cover everything (such as McCaffrey's Pern). Failure to do this usually results in a flat and boring world, and the story ends up being flat and boring as well.
You have to maintain continuity throughout the development and writing process, and watch out for errors of all kinds (both writing and story telling errors are easy to make). You have to be careful to follow the rules of writing (and know where they can be broken for better effect). You have to remember that just following the rules doesn't mean you have a good writing style, and readers will viciously critique your style even if your grammar, spelling, and construction are flawless.
Oh, and let's not forget the nightmare of getting published.
Programming is indeed a lot like writing. And like writing, most of the work doesn't involve typing code. Why do you think "code monkey" is a derogatory name?
Or, they could have a different meaning of "programming" than what you are using. Just knowing how to write code, I still argue, isn't itself hard. However, I do agree with what you said. I think I meant to say in my last post that there is a difference in knowing how to program and doing it well, but I may have forgotten to mention it.
Yet, in spite of what I was arguing in my last post, there is still a level of thinking one has to apply in order to be any good at it. Likewise, writing for the sole purpose of communication isn't hard, but very few people can actually be any "good" at it. I guess that's what you're trying to say with programming.
But, for me, I just wouldn't want to go around telling people programming is hard, because I wouldn't want people to become discouraged over it just because they're not learning right. I think that many people who don't pick up on it right away are just trying to program by context without knowing the meaning of their code.
It's similar to people using words without knowing what their definitions are, but are using them because they think that they might've guessed the correct context people are using them in. This approach to language is probably acceptable in one's own native tongue, but if you've tried to learn a completely new language (especially one with a completely different sentence structure and grammar) then you'll likely find it impossible to learn this way.
If you're going to learn a new language, you have to actually sit down and read the definition of those words and examine how the sentences of those languages are structured to be able to communicate with it. I think many possible up-and-coming programmers don't realize the same would apply with learning programming languages and it is for that reason that they struggle. Notice how many who start out learning Java never really look up the Java API, so that they will know the purpose of the classes and methods that they are attempting to use.
There are, however, those who have a difficult time in developing solutions to problems. That aspect of programming probably relates more to software development, which involves more than programming. This is why software engineers go through so much planning before any actual code is written. Text books on software engineering describe the coding phase of software development to be the shortest and "easiest" phase of a creating a program.
And, even that aspect of "programming" might not be due to a person's lack of intelligence or that they simply "think differently". We all know how to problem solve, but some aren't used to thinking about it so concretely as subtercosm had recommended to the original poster to do. Sometimes those who struggle with it weren't taught correctly, it isn't necessarily so that they're unable to think rationally but aren't used to not having to go into so much detail.
The notion that programming isn't hard, is something that my computer science professors have tried to stress to me. The idea is, that it isn't the programming itself that makes the field of computer science hard, but, rather, it's everything else in computer science that makes it hard. Programming kind of just prepares you for those topics in computer science, because programming can help one develop a sense of algorithmic thinking.
>I wouldn't want people to become discouraged over it just because they're not learning right.
As opposed to becoming discouraged because somebody told you it was easy and now you feel stupid? When you know programming is hard, you can expect the difficulties and understand that it's not you. And let's be honest with ourselves: if you become discouraged simply from being told that programming is hard, you're not likely to persevere and become any good at it in the first place.
>The idea is, that it isn't the programming itself that makes the field of computer science
>hard, but, rather, it's everything else in computer science that makes it hard.
Driving a car isn't hard, it's all of those other cars and obstacles around you that make it seem hard. :icon_rolleyes: Let's continue to be honest with ourselves: programming is all of that stuff applied to the real world.
Saying that programming is easy is another way of saying that you've never worked with code written by other people.
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.