I would double check about OpenLDAP and chaining... I'm pretty sure it's at least on the development plan.
A much larger problem with OpenLDAP is scalability. OpenLDAP will not handle a large number of entries (+100k). OpenLDAP is a reference implementation of the LDAP RFCs and I don't think Kurt plans to complicate the implementation with what's required for scalability (connection pooling etc.).
The only usuable X.500 compatible directories other than OpenLDAP are all closed-source. Many are free though. I'd recommend taking a look at IBM Directory and Novell's eDirectory. There is much more involved in getting a directory environment going and having worked on Linux directories for IBM, I would of course recommend that out-source to experts to get things going;-)
Presumably, Apple isn't really "porting" to x86. OS X is based on FreeBSD which was developed for x86. I seriously doubt that they made many assembly level changes that required serious parellel development.
If one thinks about it, maintaining a version of OS X on multiple platforms makes sense. It helps catch bugs since undefined behavior can be more volitale on certain platforms (and hence, easier to catch). One of the best ways to squash bugs out of a program is to have it run on a variety of platforms.
I wouldn't be suprised is OS X ran on a whole bunch of platforms... Of course, that doesn't mean that 1) Apple has any plans to release ports or 2) that there is decent hardware support on any other architectures.
I'm sorry, but your rant represents a lot that is wrong with mankind. A passive approach to living that can barely be called living.
Thoreau wrote:
It is remarkable that there is little or nothing to be remembered written on the subject of getting a living; how to make getting a living not merely honest and honorable, but altogether inviting and glorious; for if getting a living is not so, then living is not.
Why must we take this "If you have the talent to work on class projects, then fine. If you don't, then just let it go." Bull shit. Why not just extend that to, "If you have no talent, just kill yourself right now."
I say, instead of just refusing to work 60 hours, go find a job where you'll demand to work 80 hours. Live life for god sakes.
Do not ever justify just working 40 hours a week because other things are important. If they are so important, then why are you working those 40 hours to begin with? Are your material possessions truely that necessary?
That task would either have to be performed by the original coder, or by someone else.
The code I used in the example was a quick snippet to illustrate a point. In this circumstance, I would have to say that implementing error checking would have been as difficult as writing the TODO comment. I have been known to use TODO comments though and I agree that they are useful.
Assume that the list is unique.
Well, that would be a good thing to document, now, wouldn't it?
Well, that documentation would be at the class level, not at the usage level. Notice I didn't include the class. API references are much different than the kind of documentation discussed in this thread IMHO.
I agree with another poster that you could potentially overload each function that takes a string to take both a string and a wstring, for instance, in order to handle Unicode input.
Unicode and ASCII aren't the only types of character sets... For most applications, that doesn't matter though. It definitely is outside the scope of this program (and most programs for that matter).
Actually, I would argue that your function should return either a "const std::string&" or a "const std::wstring&",
boost::call_traits::param_type
Much more portable (and accurate in the long term) since you can change the behavior on a per-type level throughout your program (if for some instance, you have a class where a function that should be const isn't, that you can't modify, you can specialize call_traits to return just a reference).
call_traits will likely end up in the next standard too.
Doing away with comments doesn't magically make existing code better.
So, I assume we've all had the project managers or have been in the code review where some entry-level person starts complaining because in college, pseudo-code was included with the regular code. Stuff like.
int iIterator = 0;// initialize iIterator const int LOOP_LENGTH = 10;// loop length constant// write Hello World ten times to the screen for (iIterator = 0; iIterator Who reserves them? Oh, you do. What about every other coder who'll have to look at your code? Do they get reserved variables, too?
They're not officially reserved. It's just the common variables that anyone who's done software developer for any length of time is used to. I don't think I have to explain myself here.
Good code is a journey, not a destination.
It's amazing, and I'm saying a prayer for the desperate heart tonight;-) Sorry, couldn't resist.
Well, WHICH IS IT? That code was either SUPPOSED to crash,
Perhaps like a map, if the item isn't found, an element is created and a reference is returned (with a default name derived from what's being searched for). There's no reason to assume the function could fail or even that the results are undefined in the event that the person couldn't be found.
Granted, I'm expecting a certain level of maturity in the people writing the comments, but your assertion seems to be that the code is somehow BETTER if you intentionally REMOVE intelligent comments.
Not at all, but rather that I believe it is harder to write and maintain good comments than to write and maintain good code. Far to much emphasis is put on commenting and documentation IMHO and not enough on coding style itself. Just look at the typical new-hire. They tend to lack any kind of useful design skill or coding style but have been engrained with this over commenting nonsense as if it was necessary to have detailed psuedo-code with all code that is written.
IMVHO, a software project is more maintainable is strict design reviews are enforced along with strict style guides than if strict comment guides are enforced. In fact, I have not found that strict commenting guides have helped make any project I've worked on more maintainable.
In fact, they have typically done the opposite which of course resulted in my writing nice little scripts to s/\/\/*^//. I'm sure you have experienced this. Header files that are 70% comments of which, nothing is particular useful ("This file implements the MyClass class" type things).
I can't tell what your code should do if it can't find a person named Harry.
Good point. The code was a quick example. It likely would have expanded to included error checking if the item wasn't found.
I can't tell what your code should do if it finds multiple people named Harry.
Assume that the list is unique.
I can't tell how to use your code to find a person whose name requires Unicode to represent it.
And indeed your shouldn't know how. I don't see how commenting would help this situation. If the code snippet supported Unicode, then there would be special Unicode handling classes that likely would be explanatory.
I can't tell if.name returns a char * that I'm supposed to free or delete [], if it returns a const char *, if it returns a string that I can modify but won't modify the original Person, if it returns a string reference which I can use to modify the original Person's name, if it returns a wstring reference which I can use to modify the original Person's name, if it returns a const string reference, or if it returns a const wstring reference, or if it uses some other string representation like a Qt one, or some custom one - heck, it could even use an MFC-style CString.
Of course, this is C++ and therefore would return a std::string as all C++ programs should.
I don't like that the function you've called is named "findPerson" - wouldn't it be far better to call it something like "findPersonByFirstName"? Or "findFirstPersonWithFirstName"? For that matter, why am I calling "Person::findPerson"? Isn't that slightly redundant? Wouldn't "Person::find" be just as clear, and less verbose? Therefore, the function should be something like "Person::findFirstWithFirstName". Wouldn't that be much more highly documented than what you've got?
Again though, how would commenting help this? This only goes to prove my point that properly written code doesn't need commenting. It also reenforces the idea that commenting may lead to laziness on the part of symbol naming.
While we're on it, if it is returning the "first", by which method is it sorted? Shouldn't I be able to pass in a parameter which describes the order in which I want the results returned? And shouldn't you get an iterator instead of a reference, anyway?
Your assuming that the container is not unique. That is a bad assumption.
I don't like that your code uses a hard coded-value, "Harry".
Life's a bitch. Constants are only good if they are going to be used multiple times and represent some abstract concept. To have a constant HARRY or something similiar would be silly.
I don't like that your code has the variable "p". Granted, you've got a pretty amazingly short scope in your example, but code tends to grow. It would be better if the variable had a slightly longer name.
There are a certain set of variables reserved for local semi-anonymous operations. For me, these are things like ptr, i, p, j, etc. It makes more sense to an experienced programmer to use variables like this since it is obvious that the variable isn't important.
There are all sorts of things to nit-pick about, that a new coder could be confused about, or bugs which might be on the verge of instantiation, even in code as simple as yours.
Why must we always write code to be indestructable by a "new coder"?
If I've just walked in to your code, I don't know what behavior it's SUPPOSED to have, since you haven't documented that. All I can tell is what it DOES do. And since code changes over time, it's impossible for me to distinguish between the two, unless you document it.
The code is the behavior its SUPPOSED to have. The maintainability nightmare arrises when there are two sources of behavior (i.e. a comment says code should be doing one thing was the code is doing something else). The code is always describing what the programs doing whereas noone really knows what the comments mean or were meant to mean.
Comments are inferior to code because 1) they are not syntatically verified by a compiler 2) are not tested in anyway 3) and have no effect on runtime behavior.
The real problem isn't that experience programmers don't comment well enough, its that beginner programmers expect comments to allow them to not learn the underlying language. A new-hire programmer is going to learn more (and be less productive in the short term) by reading code without any comments. In the long term, this translates to higher-productivity. The question is are we going to make this investment in our industry?
If your code requires massive documentation within the code to make it understandable, then your code likely needs to be rewritten.
With most languages, the code itself is ample documentation. For instance:
Person &p = Person::findPerson("Harry");
cout p.name() endl;
Is pretty self-explanatory. Anyone can tell the output of this code. It's not that programmers need more documentation, rather they need better abstraction and encapsulation (insert your favorite argument for object oriented programming here).
You pointed out developerWorks, but missed the project that really mattered: Eclispe.
When IBM wanted to build a community around the Eclipse IDE, how did they do it? They Open Source'd it of course.
Of course, if your trying to sell a developer environment, than you need to demonstrate to me (someone who listens to no marketing stuff at all) why I will be so much more productive using your environment than Emacs that makes me dump all the time I've invested in Emacs.
You either need a super fast, super standards compliant compiler, or some AI in your editor that's so darn good that it thinks for me. Otherwise, I'm just fine with Emacs thank you.
If a professor just takes code from paper and then puts it into a compiler and just checks the output, then that surely is unfair.
But if a professor takes the handwritten code and merely reads it, he then gains a valuable insight into the skill level of the student.
If a student struggles with all sorts of compile errors but finally gets a piece of code to work, while another student generates the code very quickly, who has learned more? Who deserves the better grade? Who will be more productive in the real world?
Having a compiler is like having training wheels on a bicycle. After a certain point, one shouldn't need either.
World Cup? That must be why Google has a goofy soccer logo on there site..
Yup, noone in the US gives to shits about soccer. In fact, a lot of folks here, well, kind of consider soccer to be a homosexual sport. There's just something really gay about running around in short shorts.
Civil disobedience is when you break a rule, then proclaim, "I have broken this rule, and I have broken it to show you all how unfair the rule is! I dare you to punish me!" then wait for the world to notice. Then you make more noise.
Nope. That is not civil disobedience. See my response a little above in this thread for clarification on what constitutes civil disobedience. Publicility surely doesn't constitute civil disobedience (considering Thoreau, who coined the term more or less, was incredibly silent about his disobedience).
Your confusing civil disobedience with modern protest or Ghandi's satyagraha.
I believe it was Therou (sp?) who talked about if the people did not agree with the laws, they should protest and not follow such a law. But the only reason to do so was if you truly felt the law was wrong, not just because it was an inconvenience.
Oh your killing me with that one. That would be Henry David Thoreau and I believe you are referring to his essay "On the Duty of Civil Disobedience" which inspired both Ghandi and King. Perhaps the most definitive quote from the essay follows:
If the injustice is part of the necessary friction of the machine of government let it go, let it go; perchance it will wear smooth, certainly the machine will wear out. If the injustice has a spring or a pulley or a crank or a rope exclusively for itself, the perhaps you may consider whether the rememedy is worse than the evil.
But if it is of such a nature that it requires you to be the agent of injustice to another, then I say break the law. Let your life be a counter-friction to stop the machine. What I must do, is to see, at any rate, that I do not lend myself to the wrong which I condemn.
I find it hard to believe that any University Honor Code would cause one to be "an agent of injustice to another" in the manner Thoreau was proposing. Indeed, this would certainly be a "necessary friction."
In all actuality, since there isn't a social contract between a University and the students (instead a more formal contract), civil disobedience is entirely irrevalant.
However, there are many people in my class whom it is painful to watch attempting to write this basic sort. They spend 10 minutes trying to figure out what I have just coded in as many seconds.
The question is: are these individuals allowed to use books to solve the problem? If so, then how is a published sorting algorithm any different from an algorithm written by another student?
Are you really suggesting that these people are so incompetent that they can not look at a book, yet are able to comprehend someone else's code enough such that they are able to reproduce the algorithm without copying it verbatim? If so, then our public school systems really do suck:)
I'm not saying that during a test or something when someone is put on the spot, it is ethical to "share" code. What I am saying that it is silly to allow a text book to be a resource while not allowing another student to be a resource especially with something like coding where there is rarely a single correct solution.
Just because I put a notice on the top of my code saying "I can distribute this any way I see fit" doesn't mean that I can.
The GPL says more than that. The GPL also says that, "You must clearly mark if you have used any of this code in your code."
I relate it to a bibiliographical requirement for papers. If you incorporate another source in your paper, than you are required to cite it properly. The GPL makes this explicit such that a person would have to clearly state that they got this code from someone else. This allows a professor to use their digression to determine whether or not the incorporated code was relavant to the assignment at hand.
Rubbish. If you have been asked to work independantly, then the work had best be yours. If you are caught distributing solutions to assignments YOU ARE JUST AS GUILTY as those who use them.
Keep the integrity of University education intact.
Open information is very much part of the integrity of a University. If a professor assigns a paper about a certain topic, would it be ethical to show another student your paper in order to inspire them? Obviously, as long as the student didn't paraphrase or quote without giving proper credit, this would be entirely ethical. It is also very pratical (in fact, my English professors encouraged this).
Writing a program is more like writing a paper than solving a math problem. There isn't simply one solution. It's much more of an art form. Explicitly licensing a piece of software thereby making it clear that the software isn't to be paraphrased or quoted without due credit being given should, by all accounts, be ethical (and good for the learning environment).
The fact that *you* licenced it GPL, does not prevent *you* from licencing it in another way. It just prevents someone else from doing so.
Very good point, I had not thought of that. I think I'm going to discuss this with one of my professors because I do believe this is ethical but perhaps my I am not as protected as I thought I was...
However, in an introductory course, sometimes seeing a solution once avoids enough work for me to consider that cheating.
Well that's just silly. If the solution can only be derived in one way, then obviously the book (or professor) is already going to have published that method. There are very few problems that have a single solution.
There's a difference between sharing and cheating. Would you show someone a paper from an English class in order to help them find inspiration for their own paper? Of course. They just cannot copy any of it or that's cheating. There is a great deal of value in seeing someone else's solution.
Now, if as a condition, the student has to include a notice that an idea was taken from another students work, then it is up to the teachers disgression to decide whether or not that is cheating. Let's say that someone borrows a little snippet of code that does something extra for an assignment that has nothing to do with the assignment. I doubt a professor would have a problem with it as long as it was clearly marked.
It's like quoting someone else in a paper. Obviously, you cannot write a paper based on quotes, but sometimes, including someone else's words make your words sound that much better.
You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
You have to specifically mark any modifications along with dates as well as perserving the copyright notice (which will always contain a name and date along with the warranty declaration).
All the software I wr[oi]te at my school includes the GPL copyright notice. The nice thing about the GPL is that you can share with fellow students to your hearts content but if the students use any of your code, they have to clearly mark that it is your code if they use it.
As far as I can tell, this protects me in the event that a student is accused of cheating while still allowing me to show anyone my code. I personally think that software licensing should be a part of every CS program and the GPL should be encouraged to be used for all assignments.
Check out IBM's Extreme Blue Internship program. It's a great program and it gives students a chance to work with Linux and other Open Source technologies (as you can probably tell, I am participating in this program this summer so I am evanglizing a bit;-))
I would double check about OpenLDAP and chaining... I'm pretty sure it's at least on the development plan.
;-)
A much larger problem with OpenLDAP is scalability. OpenLDAP will not handle a large number of entries (+100k). OpenLDAP is a reference implementation of the LDAP RFCs and I don't think Kurt plans to complicate the implementation with what's required for scalability (connection pooling etc.).
The only usuable X.500 compatible directories other than OpenLDAP are all closed-source. Many are free though. I'd recommend taking a look at IBM Directory and Novell's eDirectory. There is much more involved in getting a directory environment going and having worked on Linux directories for IBM, I would of course recommend that out-source to experts to get things going
Presumably, Apple isn't really "porting" to x86. OS X is based on FreeBSD which was developed for x86. I seriously doubt that they made many assembly level changes that required serious parellel development.
If one thinks about it, maintaining a version of OS X on multiple platforms makes sense. It helps catch bugs since undefined behavior can be more volitale on certain platforms (and hence, easier to catch). One of the best ways to squash bugs out of a program is to have it run on a variety of platforms.
I wouldn't be suprised is OS X ran on a whole bunch of platforms... Of course, that doesn't mean that 1) Apple has any plans to release ports or 2) that there is decent hardware support on any other architectures.
I'm sorry, but your rant represents a lot that is wrong with mankind. A passive approach to living that can barely be called living.
Thoreau wrote:
It is remarkable that there is little or nothing to be remembered written on the subject of getting a living; how to make getting a living not merely honest and honorable, but altogether inviting and glorious; for if getting a living is not so, then living is not.
Why must we take this "If you have the talent to work on class projects, then fine. If you don't, then just let it go." Bull shit. Why not just extend that to, "If you have no talent, just kill yourself right now."
I say, instead of just refusing to work 60 hours, go find a job where you'll demand to work 80 hours. Live life for god sakes.
Do not ever justify just working 40 hours a week because other things are important. If they are so important, then why are you working those 40 hours to begin with? Are your material possessions truely that necessary?
Please, don't preach passivism. It's morally revolting.
That task would either have to be performed by the original coder, or by someone else.
// initialize iIterator // loop length constant // write Hello World ten times to the screen
;-) Sorry, couldn't resist.
The code I used in the example was a quick snippet to illustrate a point. In this circumstance, I would have to say that implementing error checking would have been as difficult as writing the TODO comment. I have been known to use TODO comments though and I agree that they are useful.
Assume that the list is unique.
Well, that would be a good thing to document, now, wouldn't it?
Well, that documentation would be at the class level, not at the usage level. Notice I didn't include the class. API references are much different than the kind of documentation discussed in this thread IMHO.
I agree with another poster that you could potentially overload each function that takes a string to take both a string and a wstring, for instance, in order to handle Unicode input.
Unicode and ASCII aren't the only types of character sets... For most applications, that doesn't matter though. It definitely is outside the scope of this program (and most programs for that matter).
Actually, I would argue that your function should return either a "const std::string&" or a "const std::wstring&",
boost::call_traits::param_type
Much more portable (and accurate in the long term) since you can change the behavior on a per-type level throughout your program (if for some instance, you have a class where a function that should be const isn't, that you can't modify, you can specialize call_traits to return just a reference).
call_traits will likely end up in the next standard too.
Doing away with comments doesn't magically make existing code better.
So, I assume we've all had the project managers or have been in the code review where some entry-level person starts complaining because in college, pseudo-code was included with the regular code. Stuff like.
int iIterator = 0;
const int LOOP_LENGTH = 10;
for (iIterator = 0; iIterator Who reserves them? Oh, you do. What about every other coder who'll have to look at your code? Do they get reserved variables, too?
They're not officially reserved. It's just the common variables that anyone who's done software developer for any length of time is used to. I don't think I have to explain myself here.
Good code is a journey, not a destination.
It's amazing, and I'm saying a prayer for the desperate heart tonight
Well, WHICH IS IT? That code was either SUPPOSED to crash,
Perhaps like a map, if the item isn't found, an element is created and a reference is returned (with a default name derived from what's being searched for). There's no reason to assume the function could fail or even that the results are undefined in the event that the person couldn't be found.
Granted, I'm expecting a certain level of maturity in the people writing the comments, but your assertion seems to be that the code is somehow BETTER if you intentionally REMOVE intelligent comments.
Not at all, but rather that I believe it is harder to write and maintain good comments than to write and maintain good code. Far to much emphasis is put on commenting and documentation IMHO and not enough on coding style itself. Just look at the typical new-hire. They tend to lack any kind of useful design skill or coding style but have been engrained with this over commenting nonsense as if it was necessary to have detailed psuedo-code with all code that is written.
IMVHO, a software project is more maintainable is strict design reviews are enforced along with strict style guides than if strict comment guides are enforced. In fact, I have not found that strict commenting guides have helped make any project I've worked on more maintainable.
In fact, they have typically done the opposite which of course resulted in my writing nice little scripts to s/\/\/*^//. I'm sure you have experienced this. Header files that are 70% comments of which, nothing is particular useful ("This file implements the MyClass class" type things).
I can't tell what your code should do if it can't find a person named Harry.
.name returns a char * that I'm supposed to free or delete [], if it returns a const char *, if it returns a string that I can modify but won't modify the original Person, if it returns a string reference which I can use to modify the original Person's name, if it returns a wstring reference which I can use to modify the original Person's name, if it returns a const string reference, or if it returns a const wstring reference, or if it uses some other string representation like a Qt one, or some custom one - heck, it could even use an MFC-style CString.
Good point. The code was a quick example. It likely would have expanded to included error checking if the item wasn't found.
I can't tell what your code should do if it finds multiple people named Harry.
Assume that the list is unique.
I can't tell how to use your code to find a person whose name requires Unicode to represent it.
And indeed your shouldn't know how. I don't see how commenting would help this situation. If the code snippet supported Unicode, then there would be special Unicode handling classes that likely would be explanatory.
I can't tell if
Of course, this is C++ and therefore would return a std::string as all C++ programs should.
I don't like that the function you've called is named "findPerson" - wouldn't it be far better to call it something like "findPersonByFirstName"? Or "findFirstPersonWithFirstName"? For that matter, why am I calling "Person::findPerson"? Isn't that slightly redundant? Wouldn't "Person::find" be just as clear, and less verbose? Therefore, the function should be something like "Person::findFirstWithFirstName". Wouldn't that be much more highly documented than what you've got?
Again though, how would commenting help this? This only goes to prove my point that properly written code doesn't need commenting. It also reenforces the idea that commenting may lead to laziness on the part of symbol naming.
While we're on it, if it is returning the "first", by which method is it sorted? Shouldn't I be able to pass in a parameter which describes the order in which I want the results returned? And shouldn't you get an iterator instead of a reference, anyway?
Your assuming that the container is not unique. That is a bad assumption.
I don't like that your code uses a hard coded-value, "Harry".
Life's a bitch. Constants are only good if they are going to be used multiple times and represent some abstract concept. To have a constant HARRY or something similiar would be silly.
I don't like that your code has the variable "p". Granted, you've got a pretty amazingly short scope in your example, but code tends to grow. It would be better if the variable had a slightly longer name.
There are a certain set of variables reserved for local semi-anonymous operations. For me, these are things like ptr, i, p, j, etc. It makes more sense to an experienced programmer to use variables like this since it is obvious that the variable isn't important.
There are all sorts of things to nit-pick about, that a new coder could be confused about, or bugs which might be on the verge of instantiation, even in code as simple as yours.
Why must we always write code to be indestructable by a "new coder"?
If I've just walked in to your code, I don't know what behavior it's SUPPOSED to have, since you haven't documented that. All I can tell is what it DOES do. And since code changes over time, it's impossible for me to distinguish between the two, unless you document it.
The code is the behavior its SUPPOSED to have. The maintainability nightmare arrises when there are two sources of behavior (i.e. a comment says code should be doing one thing was the code is doing something else). The code is always describing what the programs doing whereas noone really knows what the comments mean or were meant to mean.
Comments are inferior to code because 1) they are not syntatically verified by a compiler 2) are not tested in anyway 3) and have no effect on runtime behavior.
The real problem isn't that experience programmers don't comment well enough, its that beginner programmers expect comments to allow them to not learn the underlying language. A new-hire programmer is going to learn more (and be less productive in the short term) by reading code without any comments. In the long term, this translates to higher-productivity. The question is are we going to make this investment in our industry?
yeah, there should be two sets of insertation operators (<<). Stupid /.
If your code requires massive documentation within the code to make it understandable, then your code likely needs to be rewritten.
With most languages, the code itself is ample documentation. For instance:
Person &p = Person::findPerson("Harry");
cout p.name() endl;
Is pretty self-explanatory. Anyone can tell the output of this code. It's not that programmers need more documentation, rather they need better abstraction and encapsulation (insert your favorite argument for object oriented programming here).
You pointed out developerWorks, but missed the project that really mattered: Eclispe.
When IBM wanted to build a community around the Eclipse IDE, how did they do it? They Open Source'd it of course.
Of course, if your trying to sell a developer environment, than you need to demonstrate to me (someone who listens to no marketing stuff at all) why I will be so much more productive using your environment than Emacs that makes me dump all the time I've invested in Emacs.
You either need a super fast, super standards compliant compiler, or some AI in your editor that's so darn good that it thinks for me. Otherwise, I'm just fine with Emacs thank you.
If your asking about politics and how you should behave then your already half-way to failure.
What's great about Open Source? Its all for fun. Don't worry about anything. Write code, release it, and do what you want.
It's really that simple. That's why people like Linus so much, he's all about having a good time. That's the only thing that matters.
IBM ships their xSeries, pSeries, iSeries, zSeries all with Linux installed.
Check out IBM's Linux page.
"He, O' Men, is wisest who, like Socrates, knows his wisdom has no value."
-- Socrates
Just get a p-series and run a bunch of instances of Linux. Cheaper, more reliable, and you get a wicked fast machine.
If a professor just takes code from paper and then puts it into a compiler and just checks the output, then that surely is unfair.
But if a professor takes the handwritten code and merely reads it, he then gains a valuable insight into the skill level of the student.
If a student struggles with all sorts of compile errors but finally gets a piece of code to work, while another student generates the code very quickly, who has learned more? Who deserves the better grade? Who will be more productive in the real world?
Having a compiler is like having training wheels on a bicycle. After a certain point, one shouldn't need either.
Now CANADIANS, they are fun to stereotype, just because you really can't. :)
If you want some good-ole canadian bashing, just watch the South Park movie. "Blame Canada, Blame Canada"
World Cup? That must be why Google has a goofy soccer logo on there site..
Yup, noone in the US gives to shits about soccer. In fact, a lot of folks here, well, kind of consider soccer to be a homosexual sport. There's just something really gay about running around in short shorts.
Civil disobedience is when you break a rule, then proclaim, "I have broken this rule, and I have broken it to show you all how unfair the rule is! I dare you to punish me!" then wait for the world to notice. Then you make more noise.
Nope. That is not civil disobedience. See my response a little above in this thread for clarification on what constitutes civil disobedience. Publicility surely doesn't constitute civil disobedience (considering Thoreau, who coined the term more or less, was incredibly silent about his disobedience).
Your confusing civil disobedience with modern protest or Ghandi's satyagraha.
Oh your killing me with that one. That would be Henry David Thoreau and I believe you are referring to his essay "On the Duty of Civil Disobedience" which inspired both Ghandi and King. Perhaps the most definitive quote from the essay follows:I find it hard to believe that any University Honor Code would cause one to be "an agent of injustice to another" in the manner Thoreau was proposing. Indeed, this would certainly be a "necessary friction."
In all actuality, since there isn't a social contract between a University and the students (instead a more formal contract), civil disobedience is entirely irrevalant.
I still can't believe you mispelled Thoreau...
However, there are many people in my class whom it is painful to watch attempting to write this basic sort. They spend 10 minutes trying to figure out what I have just coded in as many seconds.
:)
The question is: are these individuals allowed to use books to solve the problem? If so, then how is a published sorting algorithm any different from an algorithm written by another student?
Are you really suggesting that these people are so incompetent that they can not look at a book, yet are able to comprehend someone else's code enough such that they are able to reproduce the algorithm without copying it verbatim? If so, then our public school systems really do suck
I'm not saying that during a test or something when someone is put on the spot, it is ethical to "share" code. What I am saying that it is silly to allow a text book to be a resource while not allowing another student to be a resource especially with something like coding where there is rarely a single correct solution.
Just because I put a notice on the top of my code saying "I can distribute this any way I see fit" doesn't mean that I can.
The GPL says more than that. The GPL also says that, "You must clearly mark if you have used any of this code in your code."
I relate it to a bibiliographical requirement for papers. If you incorporate another source in your paper, than you are required to cite it properly. The GPL makes this explicit such that a person would have to clearly state that they got this code from someone else. This allows a professor to use their digression to determine whether or not the incorporated code was relavant to the assignment at hand.
Rubbish.
If you have been asked to work independantly, then the work had best be yours. If you are caught distributing solutions to assignments YOU ARE JUST AS GUILTY as those who use them.
Keep the integrity of University education intact.
Open information is very much part of the integrity of a University. If a professor assigns a paper about a certain topic, would it be ethical to show another student your paper in order to inspire them? Obviously, as long as the student didn't paraphrase or quote without giving proper credit, this would be entirely ethical. It is also very pratical (in fact, my English professors encouraged this).
Writing a program is more like writing a paper than solving a math problem. There isn't simply one solution. It's much more of an art form. Explicitly licensing a piece of software thereby making it clear that the software isn't to be paraphrased or quoted without due credit being given should, by all accounts, be ethical (and good for the learning environment).
The fact that *you* licenced it GPL, does not prevent *you* from licencing it in another way. It just prevents someone else from doing so.
Very good point, I had not thought of that. I think I'm going to discuss this with one of my professors because I do believe this is ethical but perhaps my I am not as protected as I thought I was...
However, in an introductory course, sometimes seeing a solution once avoids enough work for me to consider that cheating.
Well that's just silly. If the solution can only be derived in one way, then obviously the book (or professor) is already going to have published that method. There are very few problems that have a single solution.
There's a difference between sharing and cheating. Would you show someone a paper from an English class in order to help them find inspiration for their own paper? Of course. They just cannot copy any of it or that's cheating. There is a great deal of value in seeing someone else's solution.
Now, if as a condition, the student has to include a notice that an idea was taken from another students work, then it is up to the teachers disgression to decide whether or not that is cheating. Let's say that someone borrows a little snippet of code that does something extra for an assignment that has nothing to do with the assignment. I doubt a professor would have a problem with it as long as it was clearly marked.
It's like quoting someone else in a paper. Obviously, you cannot write a paper based on quotes, but sometimes, including someone else's words make your words sound that much better.
Section 2.a of the GPL states:
You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
You have to specifically mark any modifications along with dates as well as perserving the copyright notice (which will always contain a name and date along with the warranty declaration).
All the software I wr[oi]te at my school includes the GPL copyright notice. The nice thing about the GPL is that you can share with fellow students to your hearts content but if the students use any of your code, they have to clearly mark that it is your code if they use it.
As far as I can tell, this protects me in the event that a student is accused of cheating while still allowing me to show anyone my code. I personally think that software licensing should be a part of every CS program and the GPL should be encouraged to be used for all assignments.
Check out IBM's Extreme Blue Internship program. It's a great program and it gives students a chance to work with Linux and other Open Source technologies (as you can probably tell, I am participating in this program this summer so I am evanglizing a bit ;-))