PDA

View Full Version : I know I should give up...but I'll try one more time (Vent thread!)




chrono1081
Sep 26, 2010, 06:42 PM
So, I have this friend who decided to go back to school for computer programming. I am tutoring him because honestly if he fails out of school this time he will be so far in debt there will be no hope for him ever going back.

Anyway he keeps whining because he can't remember all of the different things he learned. I tried telling him not only does he have to practice what he is taught in class (he doesn't) but I also tried telling him in programming its not possible to memorize everything, hence tons of programming reference manuals, documentation etc.

Well, whoever his professor is told him I was wrong and that programmers memorize all of their stuff and didn't know what I was talking about. (What!??) Now this is making my tutoring that much harder because its my word against his professor. I'm a hobbyist game developer who has been programming since the sweet old age of 15 (I am now 28).

Anyway, this professor was supposedly a professional programmer but honestly, I don't see how he can be if he is saying things like this. He also said no one uses the MSDN documentation in real life.

Now instead of concentrating on learning things like classes, pointers, etc, I'm stuck reteaching things like various string functions just so he can memorize them. What a waste of time :/

Anyway I tried showing him how useful documentation is by showing him some Cocoa programming (wow was that a mistake) it only confused him more because he has only been exposed to C++.

I know I should just give up and let him dig his own hole by wasting his time memorizing things he will rarely use instead of important core concepts but I feel bad if I do that.

How do prove to him his professor is wrong?



MorphingDragon
Sep 26, 2010, 07:00 PM
I tried telling him not only does he have to practice what he is taught in class (he doesn't)

I'm going to stop you right here.

He's not going to memorize or learn anything just with theory and no practice/application.

I'm don't know exactly his situation or how many hours a week you've been tutoring him but this is what I suggest.

Meet 3 times a week.

The first session go over the theory of what hes been doing in class.
Try visual aids (pretend he is a primary school child learning english or maths)

The second session do the practical/applications side of the theory from the first session.

The third session do useful things like programming concepts. (Pointers, classes etc)

An hour -> 2 hours a session will suffice, but its up to how fast hes going.

If he starts whining, tell him in your own way to S-T-F-U and that whining doesn't get him his degree/certificate (I'm tempted to stop sugar coating things). Just remember the professor gives him his grades, doesn't matter if hes out of touch with reality.

Rodimus Prime
Sep 26, 2010, 07:23 PM
I will say in someways both you and professor are right on the memorizing and not memorizing things.

The stuff he should be learning in class is lower level programing stuff. That is stuff he should memorize.
This like how to write methods, classes, overloading methods and constructors. Different types of loop ect.

Basically the stuff he is learning is stuff he should have memorized and understand as everything else in programing builds on that. The fact that he is refusing to really put much effort in it speaks volumes. Programing is not something you can just learned with out trying. It takes a little work to understand it.

Right now I am in school getting my second degree which is CS. Right now I am in the lower level classes but I am using a lot of my knowledge from other programing I have had over the past 10 years so I am pulling on that but I am still learning a lot of new things every day that I have never seen before.

For example i++, i--, i+= ect. Are things that I did not know before. Never had used them and I was jumping around.

lee1210
Sep 26, 2010, 07:36 PM
First: "Never memorize something you can look up." -Albert Einstein
If you use something frequently enough that it's worth memorizing, you will memorize it through use. Memorizing for its own sake is a waste of time. You already know this, but your friend and his prof. don't.

I'm sure an informal poll here can reaffirm your belief that programmers use documentation religiously.

Now here's the tough reality: the prof that's wrong still gives the grades. Since they think this way, they may very well test closed-book, closed-notes and require pen-and-paper coding that requires recall of functions from memory. If this is the case, your friend just has to learn what the prof requires. You don't have to, it's not your grade, and it's not real life.

-Lee

MorphingDragon
Sep 26, 2010, 10:52 PM
I'm sure an informal poll here can reaffirm your belief that programmers use documentation religiously.


I read somewhere that Bjarne Stroustrup still needs to look at his C++ docu occasionally.

foidulus
Sep 26, 2010, 11:10 PM
I read somewhere that Bjarne Stroustrup still needs to look at his C++ docu occasionally.

Dude, it's c++, if he DIDN'T have to look at it he would be as insane as the language he created(can you tell I'm not a fan:P)

xStep
Sep 26, 2010, 11:42 PM
So, I have this friend who decided to go back to school for computer programming. I am tutoring him because honestly if he fails out of school this time he will be so far in debt there will be no hope for him ever going back.

Anyway he keeps whining because he can't remember all of the different things he learned. I tried telling him not only does he have to practice what he is taught in class (he doesn't)...

I'll be blunt.

If your friend isn't practicing, then you shouldn't be tutoring him. Your time is going into a black hole.

I would have your friend bring you a few questions where he is confused and respond to those. This gives him some time to do his own research and think about them, but also gives you a chance to evaluate his commitment.

One thing to teach your friend is how to research his problems and how to properly post questions when he hits a dead end. This skill is handy for more than just programmers.


As far as the prof goes, if he really said that about memorizing everything, I'd say he is wrong. Most people simply can't accomplish that. I wouldn't be surprised to find the prof was talking about memorizing the C++ language, not the add-ons such as all of the math functions or GUI frameworks. If you know the core and how to find the answers to the rest, you can become a productive programmer over time as you do memorize the common things that you use.

chrono1081
Sep 26, 2010, 11:45 PM
Dude, it's c++, if he DIDN'T have to look at it he would be as insane as the language he created(can you tell I'm not a fan:P)

Exactly! This is what I am trying to tell my friend. I've programmed C++ for years and still can't escape it. (I'm a college student again and I use it all the time in class).

Thank you everyone for the suggestions :) The stuff he is memorizing is stuff that they are already done using in class, so it shouldn't appear on any more tests. I forget the exact syntax of what he was memorizing but it was basically the string manipulation tools and formatting operators and such to make your console output look nice. I don't remember any of that stuff (I deal mostly in graphics) and always have to look it up.

I think the next time I tutor him I'll simply tell him he has to learn my way or I'm done tutoring. He could be lightyears ahead in his class right now if he would listen to me. For example, the last project he had to make could have been done in around 50 lines of code, very elegantly and easy to read.

But since the professor didn't teach loops yet ( ! ) my friend didn't want to use loops. I was floored that 4 weeks into class they did not learn loops.

His project, without loops, was around 1000 lines of code and barely worked. It was a nightmare to read and I had a hard time understanding what on earth it was doing. You had to quit the program every time you wanted to do another option. Sure, maybe the professor wanted them to "think outside the box" but there is thinking outside the box and there is stupidity. This program fell under stupidity.

I'm thinking in the end this will be a lost cause anyway. My friend thinks his school will teach him everything he needs to know to be prepared when he graduates. Um...no. College doesn't work that way, at least in the U.S. (I'm on my third one I should know!)

Anyway, thanks for all of the advice guys :) I'm done wasting my time on people who are refusing my help after asking for it.

As far as the prof goes, if he really said that about memorizing everything, I'd say he is wrong. Most people simply can't accomplish that. I wouldn't be surprised to find the prof was talking about memorizing the C++ language, not the add-ons such as all of the math functions or GUI frameworks. If you know the core and how to find the answers to the rest, you can become a productive programmer over time as you do memorize the common things that you use.

I'm really thinking the professor doesn't know much. I saw some of my friends assignment papers and at the top was this: (Mind you, this is C++)

#include <iostream.h>

using namespace std;

void main()
{
}

Um...no no no. Maybe this was acceptable before C++ was standardized but not now. OLD C++ programming books (pre-1999) use this type of syntax. Even though it still works on some compilers its not considered acceptable.

(For those unfamiliar with C++, it should look like this:)

#include <iostream>

using namespace std;

int main()
{

return 0;
}

lee1210
Sep 27, 2010, 12:13 AM
#include <iostream>

using namespace std;

int main(int argc, char *argv) {

}


is what I'd say. =)

You are kind to want to help, but you're not a compensated TA, and not the instructor. Answering specific questions instead of endlessly working through things leaving you both frustrated seems better. Teaching your friend to find answers is sound advice, too (teach a man to fish...). Teach them basics of using GDB. Show them man pages. You can't teach them C++ as you'd like because it's not your course they have to pass. Act as a curator to resources and a sounding board, not a second instructor. Your opinions and methodologies may be better for real life, but that may not help pass this course.

-Lee

MorphingDragon
Sep 27, 2010, 02:20 AM
Dude, it's c++, if he DIDN'T have to look at it he would be as insane as the language he created(can you tell I'm not a fan:P)

Eh, C++ leaves a lukewarm feeling.

chrono1081
Sep 27, 2010, 02:47 AM
#include <iostream>

using namespace std;

int main(int argc, char *argv) {

}


is what I'd say. =)



lol I was waiting for someone to post on that. THats usually how I write it too but for some reason beginner books never put that in there. I'm not sure why though.

foidulus
Sep 27, 2010, 03:07 AM
Eh, C++ leaves a lukewarm feeling.

It has some stuff going for it, but the problem is that it feels very much like a language designed by committee, instead of taking a focused approach on how to develop the language they just took the union of all features and through them all together(sort of like CORBA)

The result is a confusing, often seemingly contradictory language that could have been much cleaner.

Fortunately Google's Go seems to be something that can fill the niche between C and higher level languages, but time will tell.

saltyzoo
Sep 27, 2010, 04:08 AM
There's actually people that need a tutor for programming classes? Man I'm getting old. In my day if you didn't "get it" you just switched majors to Business Administration or Communications and left the programming to the geeks. ;)

Guess I better get prepared for the legions of applicants without a clue....

chrono1081
Sep 27, 2010, 05:37 AM
There's actually people that need a tutor for programming classes? Man I'm getting old. In my day if you didn't "get it" you just switched majors to Business Administration or Communications and left the programming to the geeks. ;)

Guess I better get prepared for the legions of applicants without a clue....

Im pretty sure this is where this kid is heading. He also cant pass one of his "weeding out" classes. It's his first weeding out class too.

gnasher729
Sep 27, 2010, 09:17 AM
Well, whoever his professor is told him I was wrong and that programmers memorize all of their stuff and didn't know what I was talking about. (What!??) Now this is making my tutoring that much harder because its my word against his professor. I'm a hobbyist game developer who has been programming since the sweet old age of 15 (I am now 28).

What that professor says is ********. You can remember small sets of information (like the complete definition of the C or Objective-C language), once you get into libraries it's game over. That's for libraries that you use every day; but as a serious developer you have to cope with new stuff - and by definition, you haven't even seen it yet.

But most importantly, your brain power is a sparse resource and needs to be used as efficiently as possible. Learning huge amounts of library functions by heart is a huge waste of your brain power, it is much better spent on communication, problem solving, and keeping some left as reserve for the next forty years of your life.

That said, it could be that the good professor actually knows everything that he or she uses - the difference being that in real life, this will be swamped by a factor of ten or more. Same what happened when I wrote my first real application; I think it was 70,000 lines written over two years, and I knew every detail exactly. But for a big application, it doesn't work.

AlmostThere
Sep 27, 2010, 02:20 PM
For the course at hand, especially at the pre-iteration stage, memorizing everything may be important. If the course is going to use a common set of string functions, that shouldn't need to be explained every time they are used, then memorizing them is a reasonable expectation. That allows the teacher to focus on other issues, like pointers.

I can't imagine it is especially helpful to get input from experienced programmers, many of whom may think they can teach, telling novices what corners can be cut (... once you have been programming for 10 years). By all means help, but do respect the right of the teacher to run their class as they see fit. It isn't going to help to confuse matters and undermine them and start some sort of proxy flame war. Some simplifications need to be made when teaching programming, even if they are not true in the wider setting (or as parents say, "you'll understand when you get older").

Likewise, the iostream.h issue might just be because the school is running on older computers and for the maximum flexibility with older compilers, or simply *just not matter* at this stage.

Lastly, if someone was interviewing for a C programming job and, at the very least, couldn't describe the functions defined in stdlib.h or string.h from their names, I would worry. Ideally, they would have recall, not just recognition. I don't think this level of memorization is at all unreasonable.

Otherwise, agree with all the API points. There is a happy medium in here, though.

Rodimus Prime
Sep 27, 2010, 08:24 PM
Exactly! This is what I am trying to tell my friend. I've programmed C++ for years and still can't escape it. (I'm a college student again and I use it all the time in class).

Thank you everyone for the suggestions :) The stuff he is memorizing is stuff that they are already done using in class, so it shouldn't appear on any more tests. I forget the exact syntax of what he was memorizing but it was basically the string manipulation tools and formatting operators and such to make your console output look nice. I don't remember any of that stuff (I deal mostly in graphics) and always have to look it up.

I think the next time I tutor him I'll simply tell him he has to learn my way or I'm done tutoring. He could be lightyears ahead in his class right now if he would listen to me. For example, the last project he had to make could have been done in around 50 lines of code, very elegantly and easy to read.

But since the professor didn't teach loops yet ( ! ) my friend didn't want to use loops. I was floored that 4 weeks into class they did not learn loops.

His project, without loops, was around 1000 lines of code and barely worked. It was a nightmare to read and I had a hard time understanding what on earth it was doing. You had to quit the program every time you wanted to do another option. Sure, maybe the professor wanted them to "think outside the box" but there is thinking outside the box and there is stupidity. This program fell under stupidity.

I'm thinking in the end this will be a lost cause anyway. My friend thinks his school will teach him everything he needs to know to be prepared when he graduates. Um...no. College doesn't work that way, at least in the U.S. (I'm on my third one I should know!)

Anyway, thanks for all of the advice guys :) I'm done wasting my time on people who are refusing my help after asking for it.



I'm really thinking the professor doesn't know much. I saw some of my friends assignment papers and at the top was this: (Mind you, this is C++)

#include <iostream.h>

using namespace std;

void main()
{
}

Um...no no no. Maybe this was acceptable before C++ was standardized but not now. OLD C++ programming books (pre-1999) use this type of syntax. Even though it still works on some compilers its not considered acceptable.

(For those unfamiliar with C++, it should look like this:)

#include <iostream>

using namespace std;

int main()
{

return 0;
}

see I see nothing wrong with the void main() over the int main ().

All compilers out their will treat them the same. Now if you do not tell it a return type some will assume int.

Now I am still in school and currently in C++ but my first class was in Java. In java your main has to be Static void main (){} it will not run if the main is anything but a static void.

Now I tend to write void main but that is a carry over from Java which is what I know the most about.


Both forms are correct. Personally I like the void main over the int main.

lloyddean
Sep 27, 2010, 08:48 PM
From the ISO Standard document titled "iso14882-C++98" page 43 section 3.6.1 "Main function" paragraph 2:

"An implementation shall not predefine the 'main' function. This function shall not be overloaded. It shall have a return type of 'int', but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of 'main':

int main() { /* ... */ }

and

int main(int argc, char* argv[]) { /* ... */ }

In the later form 'argc' shall be the number of arguments passed to the program from the environment in whoch the program is run. If 'argc' is non zero these arguments shall be supplied in 'argv[0]' through 'argv[argc-1]' as pointers to the initial characters of NULL-terminated multibyte strings (NTMBSs) (17.3.2.1.3.2) and 'argv[0]' shall be the pointer to the initial character of a NTMBS that represents the name used to invoke the program or "". The value of 'argc' shall be nonnegative. The value of 'argv[argc]' shall be zero. [Note: it is not recommended that any further (optional) parameters be added after argv.]"


Edit:

Note the "Note: it is not recommended that any further (optional) parameters be added after argv."

While not strictly conforming, BSD based systems, such as Mac OS, do pass an additional parameter no matter what you specify of the form:

int main(int argc, char *argv[], char *envp[]) { /* */ }

Where 'char *envp[]' provides an NULL terminated array of pointers to environment variables as they existed at the time the program was invoked.

zippyfly
Sep 28, 2010, 12:42 AM
My "sanity check" question is, maybe this guy needs to change classes/professors/school?

Or it feels like he's not really into programming, if he's not practicing.

It doesn't matter what it is. Music. Tennis. Golf. Running. Programming. Art. Writing. Whatever.

You need to practice.

And I am writing this after having read many (recent; just the past decade) cutting edge brain/learning research studies.