View Full Version : Quotes from the Chief Engineer and I
King Nerd III
25-02-2015, 12:05
(warning: the following story is about matrices.)
Today in AP Computer Science my teacher was lecturing us about how when creating a matrix, for example Matrix[3][3], the first set of brackets is rows and the second is columns. While this is usually convention, it is not actually how a matrix will work as the way we draw arrays, like the one above:
[0,0][0,1][0,2]
[1,0][1,1][1,2]
[2,0][2,1][2,2]
Is just a way for us to visualize, and not how they are actually created in the computer, as my teacher so believes. That is why I could draw the above like this:
[0,0][1,0][2,0][0,1][1,1][2,1][0,2][1,2][2,2]
or even this:
[0,0][0,1][0,2]
/////////////////[1,0][1,1][1,2]
//////////////////////////////////[2,0][2,1][2,2]
or even if I so choose I could draw it like this:
[0,0][1,0][2,2]
[0,1][1,1][2,1]
[0,2][1,2][2,2]
After a heated debate with my teacher over whether or not a computer actually builds out an array in the ordered fashion like this:
[0,0][0,1][0,2]
[1,0][1,1][1,2]
[2,0][2,1][2,2]
We decided to just dropped it. But now to the point of the post. My Chief Engineer and I were discussing the above designs and how all of them will work because you're drawing an imaginary things and it doesn't matter if you draw the cells as gummi bears it will work when I turn to him and say "People don't care about convention so long as you comment it enough!" (-Lord Supreme Programmer Isaac and Chief Enginerr Robert, 2/25/15)
So if there is a lesson to be learned it is comment your code, kids. Even though good code should speak for itself.
wireties
25-02-2015, 12:18
How members of an array are stored and accessed is a function of the programming language. It is not something one should worry or argue about since the language will reference and de-reference everything for you. "Row" and "Column" mean nothing to the compiler. Notation has nothing to do with the physical location since memory is laid out so one accesses word-sized elements in sequence. In C and C++ matrices and arrays are really done with pointer arithmetic - google it.
King Nerd III
25-02-2015, 12:24
How members of an array are stored and accessed is a function of the programming language. It is not something one should worry or argue about since the language will reference and de-reference everything for you. "Row" and "Column" mean nothing to the compiler. Notation has nothing to do with the physical location since memory is laid out so one accesses word-sized elements in sequence. In C and C++ it is really done with pointer arithmetic.
That is exactly what we said! We were trying to convince our teacher that you don't actually store these numbers in little ordered cells! We could say that when you create a Matrix[][] the first brackets are potatoes and the second are tomatoes and it would still work. It really frustrates me that my so called AP Computer Science teacher hasn't taught this since haskell, had to learn Java over the summer (he pronounces it as Jaiva, it can get irritating), and said, and I quote, "Java is the most popular programming language because three billion devices sounds like a lot". He just makes me want to smash my head into a wall. At least he got us 4 megabyte jumpdrives!
At least he got us 4 megabyte jumpdrives!
It sounds like your teacher is a bit behind the times...
King Nerd III
25-02-2015, 13:05
It sounds like your teacher is a bit behind the times...
Don't worry, they will actually hold a surprising amount of documents. For just some simple Java programs they would work pretty well, but thankfully they were 4gb.
wireties
25-02-2015, 13:21
I think you mean "Pascal". And C/C++ (counted together) is far and away the most popular programming language.
cadandcookies
25-02-2015, 13:27
Paskell sounds like an odd mix of Pascal and Haskell. That could be interesting...
King Nerd III
25-02-2015, 13:29
I think you mean "Pascal". And C/C++ (counted together) is far and away the most popular programming language.
Sorry, typo. I meant Haskell. Only other language he knows. And the quote about Java was from him, probably one of the funniest things he's said as it reminded me of the quote from the Java install.
King Nerd III
25-02-2015, 13:31
Paskell sounds like an odd mix of Pascal and Haskell. That could be interesting...
That would be weird. Have you ever used Chicken or LOLCODE? They look really ridiculous.
At least he got us 4 megabyte jumpdrives!
Wait. They still make them that size?!? Seriously, google doesn't show up when I search that size.
I remember winning a 64mb drive in college for a CAD competition about 9 years ago. THAT was a big deal.
King Nerd III
25-02-2015, 13:45
Wait. They still make them that size?!? Seriously, google doesn't show up when I search that size.
I remember winning a 64mb drive in college for a CAD competition about 9 years ago. THAT was a big deal.
Well here was the order of events:
1. He asks if they still make firesticks
2. I explain to the class what a firestick is
3. He asks if they would be useful or if we would prefer storing them in the "Lightning Cloud"
4. He says that we will buy 4mb firesticks from Circuit City.
5. He shows up with 4gb jumpdrives he bought for $25 a piece. 25 dollars. Where did he find them so expensive?????
6. We explain to my teacher how a gigabyte and megabyte are different.
jeremylee
25-02-2015, 22:45
I remember winning a 64mb drive in college for a CAD competition about 9 years ago. THAT was a big deal.
When I was in school, I got a free 32mb with a $1500 dell laptop, score!
OP, it's crazy how quickly people can fall behind the times without even knowing it. Pick your battles in this kind of situation as some will never be won with either knowledge or wisdom. Might as well offer a coffee and talk about the weather instead.
Christopher149
25-02-2015, 22:50
Wait. They still make them that size?!? Seriously, google doesn't show up when I search that size.
I remember winning a 64mb drive in college for a CAD competition about 9 years ago. THAT was a big deal.
I remember buying a 128 MB drive. This was about when they finally became "good", and it was on sale for the same price as a 64 MB version (at least $20).
King Nerd III
25-02-2015, 22:57
When I was in school, I got a free 32mb with a $1500 dell laptop, score!
OP, it's crazy how quickly people can fall behind the times without even knowing it. Pick your battles in this kind of situation as some will never be won with either knowledge or wisdom. Might as well offer a coffee and talk about the weather instead.
It's not like he is behind the times, he has a MacBook Air and a nice desktop for class, but the old desktop plugged into the archaic projector is just hilarious. I don't know what the plug is called, but it is larger than a VGA! God, it looks ridiculous!
It's not like he is behind the times, he has a MacBook Air and a nice desktop for class, but the old desktop plugged into the archaic projector is just hilarious. I don't know what the plug is called, but it is larger than a VGA! God, it looks ridiculous!
Sometimes, the older technology JUST WORKS. And that is what is important in the long run. And it wasn't too long ago that FRC used 37-pin ports (like, last year--and there's still the MXP).
I believe you were looking at some form of serial or parallel port. Probably a many-pin one. VGA, if I'm not mistaken, is another form of serial port. You use serial ports on a near-daily basis if I'm not mistaken--on the Universal Serial Bus (USB).
(Incidentally, I had to boot up a Windows 2000 computer last night. Why, you ask? Because it can run program X. Program X serves a key function in this application. Old technology? Yep. Does it JUST WORK? Yep, unless someone turns it off...)
How members of an array are stored and accessed is a function of the programming language.
True.
It is not something one should worry or argue about...
Unless you're trying to write efficient linear algebra algorithms. Then you better know whether your language is row major or column major.
How members of an array are stored and accessed is a function of the programming language. It is not something one should worry or argue about since the language will reference and de-reference everything for you. "Row" and "Column" mean nothing to the compiler. Notation has nothing to do with the physical location since memory is laid out so one accesses word-sized elements in sequence. In C and C++ matrices and arrays are really done with pointer arithmetic - google it.
I would disagree that you shouldn't care about how elements of a multidimensional array are stored. Knowledge of the underlying structure in physical memory can make a significant difference in performance of code.
Say you have a matrix that you are representing as a 2D array:
|a b c |
|d e f |
|g h i |
C/C++ structures this in row-major order. This means that the elements are physically arranged sequentially in memory in this order:
a, b, c, d, e, f, g, h, i
Fortran structures this in column-major order. Physically, they are represented as:
a, d, g, b, e, h, c, f, i
Each element is at a particular "address" in memory, which is usually expressed as a hexadecimal number. The elements of the array will be stored sequentially. This means that if element 'a' is stored at 0x1AFF3114, then (in C/C++) element 'b' will be stored at 0x1AFF3115, 'c' at 0x1AFF3116, and so on. In Fortran, 'd' would be at 0x1AFF3115, 'g' at 0x1AFF3116, 'b' at '0x1AFF3117' and so on.
Why does this matter? It is much faster to access elements sequentially than nonsequentially for most physical storage media, sometimes even orders of magnitudes faster. It won't make much of a difference for simple problems with 3x3 or other small matrices, but when dealing with very large matrices with thousands or even millions of elements (which appear in many real engineering problems, for example, the matrices created by FEA software-) it becomes very important.
As a result, it is useful to know what order your programming language lays out its multidimensional arrays in memory, and to write your algorithms to access them in sequential order when possible.
King Nerd III
25-02-2015, 23:14
Sometimes, the older technology JUST WORKS. And that is what is important in the long run. And it wasn't too long ago that FRC used 37-pin ports (like, last year--and there's still the MXP).
I believe you were looking at some form of serial or parallel port. Probably a many-pin one. VGA, if I'm not mistaken, is another form of serial port. You use serial ports on a near-daily basis if I'm not mistaken--on the Universal Serial Bus (USB).
(Incidentally, I had to boot up a Windows 2000 computer last night. Why, you ask? Because it can run program X. Program X serves a key function in this application. Old technology? Yep. Does it JUST WORK? Yep, unless someone turns it off...)
There's absolutely nothing wrong with the old tech. I have a computer in the basement that runs Windows ME. Does it function correctly? No. Does it turn on and do funny things? Oh absolutely.
The other day I had to go find an IEEE-1200 to preferably USB or VGA or anything that would work with an old printer. Just imagine the look on the guy at RadioShack's face when I asked for one. He asked me what VGA was!
King Nerd III
25-02-2015, 23:23
I would disagree that you shouldn't care about how elements of a multidimensional array are stored. Knowledge of the underlying structure in physical memory can make a significant difference in performance of code.
Say you have a matrix that you are representing as a 2D array:
|a b c |
|d e f |
|g h i |
C/C++ structures this in row-major order. This means that the elements are physically arranged sequentially in memory in this order:
a, b, c, d, e, f, g, h, i
Fortran structures this in column-major order. Physically, they are represented as:
a, d, g, b, e, h, c, f, i
Each element is at a particular "address" in memory, which is usually expressed as a hexadecimal number. The elements of the array will be stored sequentially. This means that if element 'a' is stored at 0x1AFF3114, then (in C/C++) element 'b' will be stored at 0x1AFF3115, 'c' at 0x1AFF3116, and so on. In Fortran, 'd' would be at 0x1AFF3115, 'g' at 0x1AFF3116, 'b' at '0x1AFF3117' and so on.
Why does this matter? It is much faster to access elements sequentially than nonsequentially for most physical storage media, sometimes even orders of magnitudes faster. It won't make much of a difference for simple problems with 3x3 or other small matrices, but when dealing with very large matrices with thousands or even millions of elements (which appear in many real engineering problems, for example, the matrices created by FEA software-) it becomes very important.
As a result, it is useful to know what order your programming language lays out its multidimensional arrays in memory, and to write your algorithms to access them in sequential order when possible.
We were arguing over whether or not the computer stores them right next to each other in the matrix like I laid it out. The question on the quiz he gave was "True or false: The first set of brackets in a two dimensional array are columns, the second two are rows" and he put the answer as false. But that isn't really true, even if it is "convention" as he says. Which is why my Chief Engineer Rob Bob the Corncob and I said "no one cares about convention if you comment it enough" because if you comment it out the wazoo they'll know what you mean!
nighterfighter
25-02-2015, 23:51
Which is why my Chief Engineer Rob Bob the Corncob and I said "no one cares about convention if you comment it enough" because if you comment it out the wazoo they'll know what you mean!
If you have to comment your code out the wazoo, because you are breaking the conventions, you might be doing something wrong...
King Nerd III
26-02-2015, 00:03
If you have to comment your code out the wazoo, because you are breaking the conventions, you might be doing something wrong...
Oh, obviously. Good code should speak for itself! But we were just pointing out if you do something weird there is always the option to comment it!
nighterfighter
26-02-2015, 00:06
Oh, obviously. Good code should speak for itself! But we were just pointing out if you do something weird there is always the option to comment it!
Good code *probably* shouldn't break the conventions, unless it's really necessary. And if it is necessary, maybe reconsider your approach.
And commenting isn't really an option, it's more of a requirement, for anything! Think of it like homework that is assigned, but not collected. Sure, you MIGHT be okay not doing it every now and then, but really, you have to do it.
King Nerd III
26-02-2015, 00:13
Good code *probably* shouldn't break the conventions, unless it's really necessary. And if it is necessary, maybe reconsider your approach.
And commenting isn't really an option, it's more of a requirement, for anything! Think of it like homework that is assigned, but not collected. Sure, you MIGHT be okay not doing it every now and then, but really, you have to do it.
Usually my commenting system is describe variables, say what functions do, and explain certain things. But I went through a phase where I was super commenter, commenting every line! I think I was so tired once I commented a curly bracket. I think it said something like "I don't know why this is here, but I think it ends a function"
Turns out it ended an if statement. Boy was I tired.
wireties
26-02-2015, 00:44
Usually my commenting system is describe variables, say what functions do, and explain certain things. But I went through a phase where I was super commenter, commenting every line! I think I was so tired once I commented a curly bracket. I think it said something like "I don't know why this is here, but I think it ends a function"
Turns out it ended an if statement. Boy was I tired.
Too many comments is as bad as too few. Use descriptive variables, function names and constants then comment on the algorithm.
wireties
26-02-2015, 00:51
I would disagree that you shouldn't care about how elements of a multidimensional array are stored. Knowledge of the underlying structure in physical memory can make a significant difference in performance of code.
I didn't say that you should not care but that you should not argue about it. As Ether commented knowledge of the underlying structure can help with certain kinds of algorithms.
Each element is at a particular "address" in memory, which is usually expressed as a hexadecimal number. The elements of the array will be stored sequentially. This means that if element 'a' is stored at 0x1AFF3114, then (in C/C++) element 'b' will be stored at 0x1AFF3115, 'c' at 0x1AFF3116, and so on. In Fortran, 'd' would be at 0x1AFF3115, 'g' at 0x1AFF3116, 'b' at '0x1AFF3117' and so on.
The addresses increment by the size of the elements, not one at a time unless the elements are characters or unsigned characters in C/C++.
Why does this matter? It is much faster to access elements sequentially than nonsequentially for most physical storage media, sometimes even orders of magnitudes faster. It won't make much of a difference for simple problems with 3x3 or other small matrices, but when dealing with very large matrices with thousands or even millions of elements (which appear in many real engineering problems, for example, the matrices created by FEA software-) it becomes very important.
Storage in memory and storage on "physical storage media" are very different problem domains.
As a result, it is useful to know what order your programming language lays out its multidimensional arrays in memory, and to write your algorithms to access them in sequential order when possible.
Agreed but that is not at all what the OP was talking about.
King Nerd III
26-02-2015, 00:51
Too many comments is as bad as too few. Use descriptive variables, function names and constants then comment on the algorithm.
I think it really depends on who's going to be reading it. I usually comment as much as I can for teaching examples. But for personal projects I usually write the code and then go back and comment. If what I did doesn't make sense to me I will probably try to rewrite it in a less confusing manner, but if that isn't possible I'll comment it. I try to do this because if it doesn't make sense to me, the author, then it won't make sense to anyone!
wireties
26-02-2015, 00:57
Unless you're trying to write efficient linear algebra algorithms. Then you better know whether your language is row major or column major.
The OP was talking of basic concepts, not efficient linear algebra algorithms.
wireties
26-02-2015, 01:02
I think it really depends on who's going to be reading it. I usually comment as much as I can for teaching examples. But for personal projects I usually write the code and then go back and comment. If what I did doesn't make sense to me I will probably try to rewrite it in a less confusing manner, but if that isn't possible I'll comment it. I try to do this because if it doesn't make sense to me, the author, then it won't make sense to anyone!
Express your solution in a diagram or notation of some sort (UML or simple flow diagrams and so on) first. When you start coding, comment first and fill in the code afterwards. If your style is good, the code is readable and the comments explain the algorithm. Little else is really necessary no matter the audience.
King Nerd III
26-02-2015, 01:12
Express your solution in a diagram or notation of some sort (UML or simple flow diagrams and so on) first. When you start coding, comment first and fill in the code afterwards. If your style is good, the code is readable and the comments explain the algorithm. Little else is really necessary no matter the audience.
I've started to draw out the code before hand, but never thought of the comment first. I think I'll stick to a bunch of comments for examples, though, at least for the first few programs with teaching kids. So far it's been really helpful to be able to say here's a program to look at, the comments should explain what's happening, as usually in the first few weeks we have too many programmers at different levels to teach all at once.
Since I guess no one else has mentioned it, the only reason OP is "correct" is because in Java "2d" arrays neither row-major nor column-major. Java arrays aren't truly multidimensional (all data contiguously stored in rm or cm order) they're just arrays of arrays.
King Nerd III
26-02-2015, 01:26
Since I guess no one else has mentioned it, the only reason OP is "correct" is because in Java "2d" arrays neither row-major nor column-major. Java arrays aren't truly multidimensional (all data contiguously stored in rm or cm order) they're just arrays of arrays.
That's almost exactly how we were trying to explain it to the teacher. I've always visualized a 2d array as an array of arrays, and a so called 3d as an array of those arrays of arrays. And so forth and so on. I don't really like how my teacher draws them like:
[][][]
[][][]
[][][]
Because while it may be all nice and cool to look at it's not how I've always understood them to be.
mathking
26-02-2015, 09:30
One thing to remember is that conventions exist for a reason. It is for some purposes important to know whether a computer stores:
a b c
d e f
g h i
as: a b c d e f g h i
or: a d g b e h c f i
It is also sometimes important to know if your language interprets a two dimensional array as an array of arrays or as one array. (This usually determines where the data are actually stored.) As has been said, it can be important to know how your language, or more properly how your compiler, does storage to make certain processes faster.
But in most cases if you are trying to understand a two dimensional matrix as a linear thing you are missing the point. If you had data that was appropriately thought of as linear you should use a one dimensional array. The convention exists in order to make it easier conceptually to understand the relationship between the pieces of data. I have an old boss who would probably say something like "Yes, you can conceptualize this as column, row and comment it and the code will work. But you won't. At least here."
You should use a matrix when you have data that is being referenced according to two different indices or categories. Consider an example. Imagine you are storing data for one of three different starting orientations for your robot and five different initial positions. This is a case where there is no obvious reason to make one the row and one the column. When you are designing the program, if you create a 3 row by 5 column table your coding standards should absolutely dictate how that will be coded. It should not be up the whim of one individual programmer.
The row major convention was most likely chosen because a majority of the people who developed the programming languages we now use read and write in a left to right, top down (in other words row major) language like English.
virtuald
26-02-2015, 11:24
Express your solution in a diagram or notation of some sort (UML or simple flow diagrams and so on) first. When you start coding, comment first and fill in the code afterwards. If your style is good, the code is readable and the comments explain the algorithm. Little else is really necessary no matter the audience.
+1 on this. Write your comments first to express your algorithm, then fill in the code. Saves effort.
The OP was talking of basic concepts, not efficient linear algebra algorithms.
Understood. My post was mostly for the benefit of other readers, particularly high school students, who may have been left with the impression that row-major vs column-major storage never makes a difference.
techhelpbb
26-02-2015, 12:25
http://zone.ni.com/reference/en-XX/help/371361J-01/lvconcepts/using_matrices/
Matrices a la LabView.
http://www.mathworks.com/help/matlab/learn_matlab/matrices-and-arrays.html
Matrices a la MatLab.
Sometimes arguing about the visual representation of data is basically a course in UI and graphics arts.
You can spend literally your entire life arguing which view is the best one. Like any communications - the 'right' one is that one that manages to deliver the right messsage as fast as possible to the audience to which it was intended.
You can spend literally your entire life arguing which view is the best one. Like any communications - the 'right' one is that one that manages to deliver the right messsage as fast as possible to the audience to which it was intended.
Since your post is linked to mine I'll assume that was the intended context, since no other context was given.
I'll try to be clearer:
My post had nothing to do with "arguing which view is the best one". It was simply pointing out that there are domains in which a knowledge of how your programming language stores matrix elements is important.
techhelpbb
26-02-2015, 12:43
Since your post is linked to mine I'll assume that was the intended context, since no other context was given.
I'll try to be clearer:
My post had nothing to do with "arguing which view is the best one". It was simply pointing out that there are domains in which a knowledge of how your programming language stores matrix elements is important.
It's no problem, I did not intend for my post to be linked to yours at all.
I intended to address the topic in general.
However to go back to your point, if you consider the computers 'view' of the data you are absolutely correct.
Just as it wouldn't make sense to fight little-endian / big-endian it doesn't make any sense to fight the way your language works.
http://en.wikipedia.org/wiki/Endianness
Danny Cohen's "On Holy Wars and a Plea for Peace" published in 1980[7] ends with: "Swift's point is that the difference between breaking the egg at the little-end and breaking it at the big-end is trivial. Therefore, he suggests, that everyone does it in his own preferred way. We agree that the difference between sending eggs with the little- or the big-end first is trivial, but we insist that everyone must do it in the same way, to avoid anarchy. Since the difference is trivial we may choose either way, but a decision must be made."
SousVide
26-02-2015, 13:20
Don't forget that OP is in a AP CS course. Java is a tool to teach basic concepts in CS, not just programming, not just a specific language.
It's basically beginning course, in which you are learning the basic building blocks, vocabulary, and conventions. This is how people in the trade communicate with each other.
MatthewC529
26-02-2015, 15:39
I mean it does not matter, but the JVM does attempt to store one-dimensional arrays contiguously, especially for primitives. Though there is, of course, no guarantee.
It is just much easier to imagine a matrix with 0,0 at the top left since this is how so many things in Java are represented. The only time I was able to use a non-standard matrix was in LibGDX where it represents it's display with 0,0 at the bottom (though you can flip it).
Of course you are right though, I can represent a Matrix as a NxM length single-dimensional array if I wanted to.
It really frustrates me that my so called AP Computer Science teacher hasn't taught this since haskell, had to learn Java over the summer (he pronounces it as Jaiva, it can get irritating), and said, and I quote, "Java is the most popular programming language because three billion devices sounds like a lot". He just makes me want to smash my head into a wall. At least he got us 4 megabyte jumpdrives!
Keep in mind that many schools don't have any CS classes, let alone AP.
Take this as training for dealing with a boss that annoys you, or motivation to start your own company so that you can be that annoying boss.;)
King Nerd III
26-02-2015, 19:38
Keep in mind that many schools don't have any CS classes, let alone AP.
Take this as training for dealing with a boss that annoys you, or motivation to start your own company so that you can be that annoying boss.;)
At this point I would rather not have the class and do what they had done the past few years and done the class as an independent study. Half the class has no idea what a primitive is because he taught that all variables are objects, even ints and chars and the such. I think no class would be better than a class that is almost guaranteeing that you learn the wrong thing. I get your point about being grateful to have a class, but sometimes no class is better than a horrible one.
nighterfighter
26-02-2015, 22:26
At this point I would rather not have the class and do what they had done the past few years and done the class as an independent study. Half the class has no idea what a primitive is because he taught that all variables are objects, even ints and chars and the such. I think no class would be better than a class that is almost guaranteeing that you learn the wrong thing. I get your point about being grateful to have a class, but sometimes no class is better than a horrible one.
Is it possible the confusion on primitives vs objects comes from the way the Java language handles things?
While "int" and "char" ARE primitives in Java, there are also "Integer" and "Character" objects in Java, that have one field, either a int or char, respectively.
While that probably isn't the case, just thought I would check.
I'd also like to point out something else: AP Computer Science is a GREAT course. It was my favorite course when I was in high school. However, I also had a GREAT teacher (Shoutout to my former teacher, Mr. Mike Reilly (http://www.chiefdelphi.com/forums/member.php?u=26254)). The teacher can really make or break the class.
If you feel so strongly that your current teacher is wrong on multiple accounts, I suggest you do the following:
1) Document these instances. Write down what he said/assigned on the quiz, and what your answer was, and what the teacher said the correct answer was.
2) For every instance of incorrect teaching, RESEARCH and be able to prove that these instances are incorrect. This means doing lots of research, such as reading the Java documentations, and maybe create example programs to show the difference between what the correct answer is vs what your teacher says the correct answer is.
3): After doing this research, write everything into a Word document, with both the inaccurate information and the correct information, including your source. Respectfully talk to your teacher, and ask him about all these points.
If that doesn't change anything, you might consider talking to your school's administration. I would first write another paper, but a bit more formally, with a list of things that were taught or graded inaccurately, perhaps like this:
Discrepancy One: Mr. TeacherName gave a quiz with the following question: "The moon is a square, True or False". Mr. TeacherName graded the quizzes, with the correct answer being "True".
However, the answer is actually "False", which can be verified here: "http://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html".
Obviously you would change the questions to be based on what you have said. And for any research you do, do NOT cite Wikipedia as a source, (or ChiefDelphi), try to keep it to the java documentation, or maybe some universities webpages, if you can find information there.
Include an introduction, with a brief history of what is going on with the class. After you have written the paper, see if one of your English teachers will help you proofread it, and ask for their opinion on the formatting.
Once the paper is finalized, ask to talk to your principal about the matter. Bring a copy of the paper with you. When talking to your principal, it is EXTREMELY important that you remain respectful, but also bring up the fact that your teacher is not adequately preparing the student for the AP exams, and is potentially teaching incorrect information. (Also remember this: APCS is not a subject many will be familiar with, so try to not get TOO technical when explaining any incorrect information.) Remember, your goal is to create a better class for future students, which in turn will raise the average AP scores for the class, which in turn makes the school look better.
It should also be noted that talking to any administration should be your last resort, it is almost akin to the "nuclear option". And also, do remember that during this whole process, it is important to not be combative, but rather try and be seen as a student who deeply cares about the subject and is trying to learn more.
Hopefully just talking to your teacher, with the correct information documented, will be enough. Most teachers genuinely care and want to help you succeed. While it may be too late for this year's class, maybe next year will be better for your fellow students.
Edit: This is coming from what I would do, and is similar to what I did when I had a very bad experience with a teacher my senior year. Before doing anything, I would first: Talk to your parents about this, and second: Talk to a trusted teacher you have about what the best protocol would be in this situation, (But please make 100% sure you are correct and can prove it, before talking to another teacher about this.)
King Nerd III
26-02-2015, 23:43
Is it possible the confusion on primitives vs objects comes from the way the Java language handles things?
While "int" and "char" ARE primitives in Java, there are also "Integer" and "Character" objects in Java, that have one field, either a int or char, respectively.
While that probably isn't the case, just thought I would check.
I'd also like to point out something else: AP Computer Science is a GREAT course. It was my favorite course when I was in high school. However, I also had a GREAT teacher (Shoutout to my former teacher, Mr. Mike Reilly (http://www.chiefdelphi.com/forums/member.php?u=26254)). The teacher can really make or break the class.
If you feel so strongly that your current teacher is wrong on multiple accounts, I suggest you do the following:
1) Document these instances. Write down what he said/assigned on the quiz, and what your answer was, and what the teacher said the correct answer was.
2) For every instance of incorrect teaching, RESEARCH and be able to prove that these instances are incorrect. This means doing lots of research, such as reading the Java documentations, and maybe create example programs to show the difference between what the correct answer is vs what your teacher says the correct answer is.
3): After doing this research, write everything into a Word document, with both the inaccurate information and the correct information, including your source. Respectfully talk to your teacher, and ask him about all these points.
If that doesn't change anything, you might consider talking to your school's administration. I would first write another paper, but a bit more formally, with a list of things that were taught or graded inaccurately, perhaps like this:
Discrepancy One: Mr. TeacherName gave a quiz with the following question: "The moon is a square, True or False". Mr. TeacherName graded the quizzes, with the correct answer being "True".
However, the answer is actually "False", which can be verified here: "http://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html".
Obviously you would change the questions to be based on what you have said. And for any research you do, do NOT cite Wikipedia as a source, (or ChiefDelphi), try to keep it to the java documentation, or maybe some universities webpages, if you can find information there.
Include an introduction, with a brief history of what is going on with the class. After you have written the paper, see if one of your English teachers will help you proofread it, and ask for their opinion on the formatting.
Once the paper is finalized, ask to talk to your principal about the matter. Bring a copy of the paper with you. When talking to your principal, it is EXTREMELY important that you remain respectful, but also bring up the fact that your teacher is not adequately preparing the student for the AP exams, and is potentially teaching incorrect information. (Also remember this: APCS is not a subject many will be familiar with, so try to not get TOO technical when explaining any incorrect information.) Remember, your goal is to create a better class for future students, which in turn will raise the average AP scores for the class, which in turn makes the school look better.
It should also be noted that talking to any administration should be your last resort, it is almost akin to the "nuclear option". And also, do remember that during this whole process, it is important to not be combative, but rather try and be seen as a student who deeply cares about the subject and is trying to learn more.
Hopefully just talking to your teacher, with the correct information documented, will be enough. Most teachers genuinely care and want to help you succeed. While it may be too late for this year's class, maybe next year will be better for your fellow students.
Edit: This is coming from what I would do, and is similar to what I did when I had a very bad experience with a teacher my senior year. Before doing anything, I would first: Talk to your parents about this, and second: Talk to a trusted teacher you have about what the best protocol would be in this situation, (But please make 100% sure you are correct and can prove it, before talking to another teacher about this.)
I think I'll start to do this, thank you. My school can't have more students attempt to take the AP test with the teacher giving them wrong information. Currently I'm talking with the AP Assistant Principle about replacing this teacher with a different one, preferably an in house solution. As for the rest of the year, the kids in the class that actually care about it (some were put in for lack of space in any other class) are probably going to buy a textbook and teach ourselves from it. We just need to find one. Any ideas?
nighterfighter
26-02-2015, 23:58
I think I'll start to do this, thank you. My school can't have more students attempt to take the AP test with the teacher giving them wrong information. Currently I'm talking with the AP Assistant Principle about replacing this teacher with a different one, preferably an in house solution. As for the rest of the year, the kids in the class that actually care about it (some were put in for lack of space in any other class) are probably going to buy a textbook and teach ourselves from it. We just need to find one. Any ideas?
That's good to see you are actively working on a solution.
I'm surprised that students were simply "placed" into a AP course, much less a CS course. When I was in high school it was an elective, with a decent amount of prerequisites.
As for what text book to use? No idea. I don't remember what book we used when I took the test, that was in 2010.
Does your school not provide any textbook at all for the course?
King Nerd III
27-02-2015, 00:03
That's good to see you are actively working on a solution.
I'm surprised that students were simply "placed" into a AP course, much less a CS course. When I was in high school it was an elective, with a decent amount of prerequisites.
As for what text book to use? No idea. I don't remember what book we used when I took the test, that was in 2010.
Does your school not provide any textbook at all for the course?
Picking the textbook is up to the teacher, so therefore he decided that the class did not need one as he would teach it in class. Currently we are learning by doing type and runs, it's effective to some extent, but we are only learning syntax, nothing else.
The kids were placed in because we needed more kids for it to be a class, they get math credit, and the school gets money for each kid that takes AP Computer Science.
nighterfighter
27-02-2015, 00:04
While this is now going off-topic:
Have you learned anything specific to the AP test? I know when I took the test, something like 40% of the questions involved Gridworld.
You will need to know more than just syntax for the test.
King Nerd III
27-02-2015, 00:07
While this is now going off-topic:
Have you learned anything specific to the AP test? I know when I took the test, something like 40% of the questions involved Gridworld.
You will need to know more than just syntax for the test.
We learned that strings are immutable. That's about it. The one thing I know is that iterators are a big part of the test, but we're still stuck on our 9th program on arrays.
nighterfighter
27-02-2015, 00:14
We learned that strings are immutable. That's about it. The one thing I know is that iterators are a big part of the test, but we're still stuck on our 9th program on arrays.
This page (http://apcentral.collegeboard.com/apc/public/courses/teachers_corner/4483.html) might be useful, for both you and your teacher.
While students can't access the practice exams, your teacher can sign-in and access them.
Those might be a good indicator of how much more you should be doing.
King Nerd III
27-02-2015, 00:17
This page (http://apcentral.collegeboard.com/apc/public/courses/teachers_corner/4483.html) might be useful, for both you and your teacher.
While students can't access the practice exams, your teacher can sign-in and access them.
Those might be a good indicator of how much more you should be doing.
I'll look into that, thanks. Hopefully I will be able to learn the things on my own if that doesn't pan out. Does anyone know the social and ethical implications of using computers?? It's one of the learning goals!
How members of an array are stored and accessed is a function of the programming language. It is not something one should worry or argue about since the language will reference and de-reference everything for you. "Row" and "Column" mean nothing to the compiler. Notation has nothing to do with the physical location since memory is laid out so one accesses word-sized elements in sequence. In C and C++ matrices and arrays are really done with pointer arithmetic - google it.
I disagree. You should always know how your data structures work. If you do not know how they are stored and accessed, you won't be able to determine if it is the best data structure for you (big O, etc.). There is a difference between a linked list, double linked list, array, matrix, etc. that you should know in order to use them correctly.
the kids in the class that actually care about it (some were put in for lack of space in any other class) are probably going to buy a textbook and teach ourselves from it. We just need to find one. Any ideas?
MIT has free courses available online. This one (http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-092-introduction-to-programming-in-java-january-iap-2010/) looks relevant.
King Nerd III
27-02-2015, 13:59
MIT has free courses available online. This one (http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-092-introduction-to-programming-in-java-january-iap-2010/) looks relevant.
I think I will save those for next year. I am doing an independent study in CS and need to save all the material I can for that. But thank you so much!
King Nerd III
02-03-2015, 11:14
Alright, here's a question for you guys: Would you rather have a teacher who has some past experience in Computer Science but teaches it badly and sometimes incorrectly, or a teacher who has very little CS experience, but is willing to learn how to teach the class and would accept student input?
techhelpbb
02-03-2015, 12:50
Alright, here's a question for you guys: Would you rather have a teacher who has some past experience in Computer Science but teaches it badly and sometimes incorrectly, or a teacher who has very little CS experience, but is willing to learn how to teach the class and would accept student input?
I've had both. I think student input is very important in the context of teaching that student or class. However I wonder if the input delivered is best suited to forming a curriculum and style.
Particularly I find being extremely critical either way is often counter to the goal. Sometimes one can get more from the act of discussion than the act of critique. Especially if it crosses into the confrontational. Once it becomes confrontational the opportunity for either participant to learn is lost in playing defense.
King Nerd III
02-03-2015, 12:58
I've had both. I think student input is very important in the context of teaching that student or class. However I wonder if the input delivered is best suited to forming a curriculum and style.
Particularly I find being extremely critical either way is often counter to the goal. Sometimes one can get more from the act of discussion than the act of critique. Especially if it crosses into the confrontational. Once it becomes confrontational the opportunity for either participant to learn is lost in playing defense.
The reason I ask this is my assistant principle is asking me the same thing. For next year we can either have the teacher we have now, or a math/physics teacher who understands come of the concepts of Computer Science to help guide, but not teach. This new teacher is willing to make the class more student led, as most of the kids going into the class know a lot about the subject, they would just need a teacher to guide them through the class, and he seems to be the guy to do this. Do you think this could work?
techhelpbb
02-03-2015, 13:45
Do you think this could work?
For me, I guess it depends on how long it takes to build momentum after the change.
King Nerd III
02-03-2015, 14:26
For me, I guess it depends on how long it takes to build momentum after the change.
This would be a new school year. I think I may tell my principle that a class like that would be better. Kids may understand it better if they're helping each other rather than a teacher who teaches it wrong. I think there may definitely be some problems, but only 10 kids will be there next year so taking their time is an option.
Alan Anderson
02-03-2015, 16:03
Alright, here's a question for you guys: Would you rather have a teacher who has some past experience in Computer Science but teaches it badly and sometimes incorrectly, or a teacher who has very little CS experience, but is willing to learn how to teach the class and would accept student input?
I think that is a badly presented choice. A poor teacher giving wrong information is not preferable, but by adding "and would accept student input" you have left out another valid option: currently inexperienced but willing to learn, with student input not necessary.
King Nerd III
02-03-2015, 16:18
I think that is a badly presented choice. A poor teacher giving wrong information is not preferable, but by adding "and would accept student input" you have left out another valid option: currently inexperienced but willing to learn, with student input not necessary.
The student input was because some of the kids in the class have read the AP CS textbook and taken classes at the local college before they offered the class here. The teacher was willing to let those students help to teach the class, and to help teach him things he will need for next year, when they aren't there. Yes, the option you present is always available, but the way this other teacher would teach his class is the option I highlighted. We have had multiple classes here excel with the teachers there to guide, but the students figuring out how to learn and teaching each other. It is how we do Independent Studies, just this way you have other students instead of just you and a teacher. I actually prefer the classes I've taken that are student led, as the teacher is more there to give us subjects and to help when needed, but the students are the ones who present all the information. I have usually excelled in these classes as they are more open, and we usually don't spend time on topics that we already know. A good example is the scientific method. Every year in science we learn this, even though we should know this from the last year, right? Now in these classes that are student led we have 3 extra weeks a year to learn anything we want! You'd be surprised by how much those 3 extra weeks make a difference.
wireties
02-03-2015, 16:38
The student input was because some of the kids in the class have read the AP CS textbook and taken classes at the local college before they offered the class here. The teacher was willing to let those students help to teach the class, and to help teach him things he will need for next year, when they aren't there.
Better training for the teachers is the preferred option. Teaching is not solely about mastering content. Plus students tend to think they are further along than is true. Java/C/C++/C# or any other language is like a fancy hammer. The languages are used as tools to solve problems. We encounter lots of students who don't get that. With respect, you are a good example. Many of your comments and "solutions" in the CD fora are very clever and I would say you have great potential. But many of your comments and "solutions" are without merit.
King Nerd III
02-03-2015, 16:56
Better training for the teachers is the preferred option. Teaching is not solely about mastering content. Plus students tend to think they are further along than is true. Java/C/C++/C# or any other language is like a fancy hammer. The languages are used as tools to solve problems. We encounter lots of students who don't get that. With respect, you are a good example. Many of your comments and "solutions" in the CD fora are very clever and I would say you have great potential. But many of your comments and "solutions" are without merit.
That's not to say that this teacher with less experience wouldn't have any computer science knowledge. He has done a bit of it in college, and I think is currently doing the training for the AP CS course. He is also by far a better teacher overall, not just subject wise. I would very much prefer him as the teacher of the class, if only to get to test out this format for the class. I understand kids can get arrogant at times, but that's why we always have to have a teacher advisor there. For example if we set up the AP CS class it would probably work like this: Teacher presents topic to study, let's use arrays for the example. Students would probably talk about what they already know, teacher would most likely present practice problems from the AP test to see how much we already know. We would probably then spend some time looking up the topic, and the teacher would probably recommend resources. Later we would probably have a test based off of what both the students and teacher have learned.
I think if we did this format it would probably only last one year. After that year the teacher would probably have learned enough to make a curriculum to teach, but even then I think most of the research would be student led.
Also, would you happen to know a Laurie Buchanan? She was one of my favorite teachers last year, and I noticed you guys have the same last name. Just wondering.
vBulletin® v3.6.4, Copyright ©2000-2017, Jelsoft Enterprises Ltd.