What's discussed there is quite relevant here; poor engineering or attempting to overextend what may have originally been a good design appropriate to simpler tasks will result in terrible software problems - security holes, safety hazards and the like.
Also recommended is the book Computer Related Risks by Risks Forum moderator Peter Neumann (ISBN 020155805X). It draws on material from the forum but discusses it in greater detail.
Perhaps a small tidbit in favor of switching over to Linux for your project would be that the Navy is using Windows NT as the shipboard OS for its warships, and it therefore must be certified as you mention.
But after a sailor entered a zero into a data entry field aboard the Yorktown, the whole ship's NT network went down and our nation's proud vessel had to be towed into port, as seen here.
Of course there's no guarantee that this wouldn't happen with Linux too, but what would make a lot of sense is to use it's open-source nature to create a military distribution, which has been audited for both security holes and reliability defects.
I'm sure many of the distribution vendors would be happy to do that for a price, but I suggest the military do it for yourselves - but remember the GPL!
He presented a keynote talk for the April 2000 NATO Symposium "The
Potentials of Open-Box Source Code in Developing Robust Systems". At the NATO Symposium he handed out a preprinted entitled "Robust Nonproprietary Software" which is available in PDF format.
I suggest you drop Dr. Neumann a Line.
Read the Software Conspiracy; Navy Ships Run NT
on
NYT On Open Source
·
· Score: 4
There are no significant bugs in our released software that any significant
number of users want fixed... The reason we come up with new versions is not to
fix bugs. It's absolutely not. It's the stupidest reason to buy a new version I
ever heard... And so, in no sense, is stability a reason to move to a new version.
It's never a reason.
While Slashdot discussed the government's reluctance to accept Open Source in Linux -- Government Acceptance vs. Actual Use, apparently our Nation's proud warriors have no problem putting our nation at risk at the hands of a closed-source operating system as evidenced in USS Yorktown dead in water after divide by zero. The mighty Yorktown had to be towed back into port after its NT network crashed when a sailor entered a "0" into a data entry field.
I haven't read it yet, but by the looks of the web page The Software Conspiracy looks pretty worthwhile too:
There are no significant bugs in our released software that any significant
number of users want fixed... The reason we come up with new versions is not to
fix bugs. It's absolutely not. It's the stupidest reason to buy a new version I
ever heard... And so, in no sense, is stability a reason to move to a new version.
It's never a reason.
-- Bill Gates
While it is indeed true that it is difficult or impossible to get all the bugs out of a system, the situation can be much better than it is (do you use a memory debugger like Spotlight, BoundsChecker, Purify or Bounded Pointers for GCC?).
Until the public wakes up and realizes they're being ripped off the situation will continue.
For us developers, this is a matter of taking responsibility for our work. For the public (and us developers when we purchase software) it is a matter of demanding that the vendors take responsibility: refuse to purchase software whose End User License Agreement disclaims a warranty, and demand of your legislators that the government enforce minimum quality standards on software and quality products.
At the very least you should be able to get your money back on a defective product, even if the manufacturer disclaims responsibility. And if there are real costs associated with the failure, as when a friend of mine bounced a $4000 check because of a bug in Microsoft Excel, the injured party should be able to sue for damages.
The mentioned article on Apple's FTP site doesn't appear to be there anymore, but doing an FTP search on lycos revealed that there's a lot of INSLAW stuff at the Electronic Frontier Foundation. You can repeat the search yourself with this link.
While you're there, why don't you stop in and Join the EFF? It will only take you a few minutes, cost a few bucks (you can give what you're comfortable with) and it will help with the DVD case as well as bringing justice to bear on the folks that stole and hacked the Promis code.
I should say, it is worthwhile to learn how to use some tool and platform well, particularly when you're starting out. Being good with your tools will make you more productive.
But what I meant in my post was that you shouldn't get bought into a particular platform to the exclusion of others, and invest all your time in learning the intricacies of some API or toolset that's likely to be obsolete in a few years.
It has the added disadvantage that when you've invested so much in getting good at an API, you're hesitant to move to a new one. (I helped a friend of mine who was out of work for a year get his first QA job. He'd often said he wanted to do programming, but after getting good at QA, when I urged him to continue into software engineering, he protested that he was "trained in quality assurance", and thereby permanently prevented his own advancement by trying to wring new value out of old skills.)
But fundamental programming skills you can take with you, and they make it easier to pick up any new API. And knowing more than one tool and more than one language gives you greater insight and makes you better at whatever language and tool you are using at a given moment.
JARED BOBROW (Bar No. 133712)
CHRISTOPHER J. COX (Bar No. 151650)
WEIL, GOTSHAL & MANGES LLP
Silicon Valley Office
2882 Sand Hill Road, Suite 280
Menlo Park, CA 94025-7022
Telephone: (650) 926-6200
Facsimile: (650) 854-3713
ROBERT G. SUGARMAN
JEFFREY L. KESSLER
EDWARD J. BURKE (Bar No. 103414)
JONATHAN S. SHAPIRO
WEIL, GOTSHAL & MANGES LLP
767 Fifth Avenue
NewYork,NY 10153
Telephone: (212) 310-8000
Facsimile: (212) 310-8007
Drop 'em a line why don't you. The country code for the US is 1.
You know, I usually do try to write good posts on Slashdot (with occassional blatantly off-topic posts when I've got some political point to make - but I post under my own name and not anonymously), and my Karma has been good lately, but what really makes me feel good is when someone actually goes to the effort to say "moderate this up" in response to one of my posts, and then a moderator does.
One thing I try hard to do is put good hyperlinks in my posts. Sometimes I have to hit the search engines to compose a post, so it will sometimes take me quite a while to write one up. If I mention a book I usually link to it on fatbrain or amazon or something or at least give the ISBN.
(This, BTW, is how you can get good karma. You don't have to just parrot the party line as the trolls like to say. Actually be informative or insightful, and if you provide hyperlinks then you multiply the value of your post because you take the reader on a tour of the Internet quite outside the slashdot discussion itself. And because these discussions are archived, all these hyperlinks and comments are of immense value for people doing research at a later date.)
BTW - If you think you'll be done with your education when you're done with college, or maybe after a year or two of on-the-job training, guess again! I set into my program of going back to the basics after thirteen years of professional work experience as a programmer. My first full-time programming job was in 1987.
I feel like I'm only beginning to get a grasp of "how to really program." But then I remember I've felt that way several times in the past. What's really going on though is that one enters plateaus in ability, coasts for a while, becomes dissatisfied, enters the "larval phase" again, and eventually reaches a new plateau.
Or maybe not. Many people get proficient enough that they make a living they're comfortable with, and then they stop learning, or at best learn only the minimum needed to keep up with the job market. I pray I will never become one of those people.
When I was a teaching assistant for Computational Physics at CalTech (an introductory numerical analysis course), we allowed the students a choice of languages - C, Fortran, Basic and Pascal.
They were expected to have the programs run on the lab computers where the class was taught (IBM PC/XT's - this was in the early 80's) but if the student wanted to run their code on a Vax and transfer it over somehow we weren't stopping them.
This worked in part because what we were teaching was the algorithms - first and second order approximations, the Runge-Kutta method and so on. The student was expected to know and demonstrate the algorithm, not a particular language.
BTW, the class was not a programming course, but the students were not expected to know how to program when they started the class. There were texts on programming languages made available, and they were just expected to pick up the language as they went along. Learning a language in this course was a required skill but not the objective taught in the class, much like learning how to use the editors on the lab machines.
BTW - looking at the web page now it looks like the class has advanced considerably since I taught it (they use Maple and Mathematica) but it looks like you don't get a choice of programming language anymore.
This won't really work because Codewarrior for Linux is just the IDE, it's not the Codewarrior compiler, headers or libraries - it uses the gcc and GNU headers and libraries that come stock on a Unix system. The IDE just launces gcc as a subprocess (this is also how the BeIDE, originally CodeWarrior for BeOS, works to compile Pentium code on the BeOS with gcc).
Thus you'll still have to deal with compiler dependencies. In components like the STL and the names of header files, there are considerable differences between gcc/Linux and Codewarrior for Windows.
I know this to be true because I wrote a magazine article (finished, but as yet unpublished) on cross-platform development. I advised the reader to test their code out for cross-platform correctness by building under two compilers for Linux - by using Codewarrior.
Thanks be to the higher powers that I carefully checked all my facts before sending the article in to the magazine editors.
It might be useful to some extent to do this, though to help in getting the code to build. I'm not sure if the Linux version supports it, but on Mac and Windows you can export your project as an XML file, and import it again. This makes for a nice way to handle the binary IDE project in CVS and such (the XML is text, not binary).
What you may be able to do is create a project on Linux, get your code working, send the project and source over to Windows and get it working there too.
This will only work well if you can create a Windows target under Codewarrior for Linux; I don't think it's very easy to add a target for a different platform to an existing project, something I'd really like to be able to do (for example, to copy a Mac-only project over to a Windows machine, then add a Windows target to it).
I'd further like to say that I think everyone should spend less time concentrating on learning specific API's in great detail, and instead focus on improving your core skills and fundamental understanding of programming.
I used to spend a lot of time learning API's (bought every volume of Inside Macintosh as they came out, and when I was just starting out and broke and hungry, used to read them in the bookstore before I could afford to buy them).
I prided myself on knowing all the little bugs and intricacies of the MacOS so I could just know to code around an OS bug without having to research why my code didn't work. I got so good that I was hired as an OS engineer at Apple where I concentrated on debugging the MacOS system software with MacsBug (a machine level debugger) - I had the MacOS source code at my disposal but that usually didn't help when I was visiting a tester's cubicle to diagnose a machine with a hard-to-reproduce crash.
Then I moved to the BeOS, shipped a product and wrote a lot of code but got fed up with their lack of commitment to their developers. And without getting paid to write BeOS code, I never could keep up with the BeOS API's I wanted to work with, like the new Media Kit (which I do know enough about to say it is pretty cool).
A couple years back I stopped spending much time learning and mostly just cranked out routine code. I felt I didn't want to learn anymore because, as I would sometimes say:
I feel that if I have to learn another API my head will surely explode.
Ever since I read C++ Answers from Bjarne Stroustrup I got the gumption to start learning again. What I decided to do was go back to learning the basics.
I read Scott Meyers' Effective C++ and More Effective C++ and as I read through each item I inspected my program top to bottom and applied the advice to it (thus fixing a lot of bugs).
I started reading the newsgroups comp.lang.c++, comp.lang.c++.moderated and comp.std.c++ and posting questions there - in one case I found a construction on the very edge of the C++ standard and as a result of a compiler bug managed to instantiate an object of an abstract base class - its pure virtual function had a nil pointer in the vtbl and my program would crash when this function was called. An engineer from the compiler vendor read my post on the newsgroup, agreed that it was a bug that his product would compile my code, and logged a bug.
I didn't used to use the Standard Template Library very much at all. I had read too many mailing list and newsgroup postings from people whose code wouldn't compile when they changed platforms.
But I figured that by now compilers must have matured enough I could reasonably start trying out the STL. I bought STL Tutorial and Reference Guide by Musser and Stepanov and actually only read a little bit of it before I realized that the STL is actually really easy to use (the API is very simple and uniform), so if you know only a very little bit you can go a very long way.
In part because of challenging myself I became overwhelmed with programming stuckness as discussed in Overcomming Programmer's Block? (sic) and I suppose grew a little bit by taking a week off without pay to rest, contemplate, study and take a broader view of architectural issues.
These things have all had direct payoff in my code, both in making my code quicker to write, easier to debug, easier to make my classes more reusable within the one program I've been writing the last few months, and I'm pretty sure more likely to make some of the code I've written reusable in most any program in the future.
It's also made it a lot more pleasant.
But don't listen to the headhunters - what they're looking for is "skill sets" and industry buzzwords (COM, COM+, DCOM, TCP/IP, Visual C++, ASP, SQL, device drivers, CORBA, Unix internals, Java, Perl, PHP, JSP) - I get recruiter calls looking for all kinds of acronyms, most of which I don't mention anywhere on my resume.
Even I advise listing every skill keyword you can legimately claim on your online resume in Market Yourself - Tips for High-Tech Consultants - but while listing skillsets may be a valuable jobhunting tool in your resume, acquiring them should not be your focus.
BTW, when someone asks me whether they should learn Java or C++, I usually advise beginners to learn Java as it's easier to get something working reliably without crashing, but emphasize they should learn both languages as well as at least one kind of assembly code. I stress that it's important to learn both C++ and Java well enough to understand the strengths and weaknesses of each (pop quiz - why does Optimizeit claim to remove memory leaks from Java programs, when Java is a garbage collected language?).
Most new programmers these days are most concerned with which language will make them the most money the fastest. I tell them that they won't go anywhere until they can pick up any new programming language as a matter of course and have at least a couple under their belt.
I've got bad news for you neophytes - friends, just knowing a programming language doesn't win you very much in the work world, you have to understand the concepts and how to apply them, and you have to know how to apply them in a production environment, working in a business under pressure, shipping working products and dealing with people who don't understand anything of substance about computers.
Your focus should be on acquiring skills that will be applicable to any program you write. You should just learn enough of a skill or tool to get the job done and then leave it. Take with you what can be applied anywhere.
BTW - learning the fundamentals and not getting too specialized enables you to develop for any platform, as I do - you can see this from my homepage. (Perhaps one reason why I prefer understanding the fundamentals is that my degree is in Physics, and I've always wanted to understand things at a fundamental level - Quantum Mechanics, Particle Physics, Cosmology and so on.)
One final word of advice - read The Forum on Risks to the Public in Computers and Related Systems. It's often entertaining and funny, occassionally tragic, usually insightful and will make you a more responsible programmer and a wiser computer user. You'll certainly learn to avoid using computers for anything of real importance and take extra caution to protect yourself when you choose to do so.
The school should not only allow you to use a different environment - it should require it.
They should offer a choice of several development environments (on a Pentium box, you could use Codewarrior, Microsoft Visual C++, Borland, gcc under Windows with Cygwin or under Linux or BSD, or Solaris with the Sun C++ compiler).
The best thing would be to have machines that have multiple operating systems installed mounting your home directory off a server so you can reboot and try a different compiler.
Not only is it educational to compile under different environments, it helps to keep you from using compiler-specific features that lock your code into a specific platform (you use the pedantic option on gcc and don't use the gcc extensions, do you), but also building your code under multiple compilers will find bugs in syntactically incorrect code that won't compile in one compiler but will compile and run and do who-knows-what under another.
(This is one of the reasons Be, Inc. still supports the BeOS under PowerPC even though Pentium has an overwhelmingly larger customer base - it helps them to validate their code and keeps their code portable. They found lots of bugs when they moved from Codewarrior to gcc on their Pentium version, and so did I in my BeOS products.)
For example, I recently found that using auto_ptr< char > on a character array seems to work just fine under
Codewarrior for Windows.
(I use it because I like the IDE's UI and it's great for cross-platform development - it also works with any text file format (MacOS CR, Unix LF, or or DOS CRLF) so you can easily share source files between any kind of machine, unlike gcc which only accepts Unix newlines).
It is not correct to use auto_ptr on an array because it deletes the pointer it holds with delete, rather than delete [] which is the required operator to delete arrays (this is needed so you can call the destructor separately on each element of the array; it doesn't hurt to fail to call char's destructor because it doesn't have one, but the memory allocation format for an array in C++ is different than in C because the number of elements has to be stored somewhere).
It is no real fault of Codewarrior that it works but I wouldn't expect my code to work if I moved it to a different platform - or worse, got into the habit of managing array pointers this way and maybe wrote a big library full of auto_ptr's of arrays. It would be perfectly within reason for a different development environment to cause my code to crash if I did this.
(My friend Andy Green wrote the cross-platform application framework I'm using, which will be released under the BSD license soon. It also works under BeOS and XWindows/Posix, including Linux).
If you or your TA's wish to discuss this directly with me feel free to email me at crawford@goingware.com
Yes, it's important to be informed, and reading Slashdot helps you get informed. But you cannot effect meaningful change unless you act on your knowledge.
Some people, like Eric Corley, are acting by defying the MPAA and risking financial ruin if they lose the DeCSS case.
Some, like the Electronic Frontier Foundation are working to preserve our rights in the networked era by defending brave folks like Corley.
Even with attorneys working pro-bono, mounting a legal defense is terribly expensive (just think of the cost of long-distance calls and plane fare for the participants). One way you can make a difference is by joining the EFF, which you can do with a credit card at the following link:
If you do nothing else to work for the cause of justice in the DeCSS case, at least join the EFF. It will only take a few minutes, and you can give what you're comfortable with.
It's about your right to say what you want in a free society. Eric Corley is a member of the press, and 2600's web site is his publication. Judge Kaplan has just permanently enjoined Corley from practicing unrestrained journalism.
If you can't provide a mirror for DeCSS yourself, perhaps you could at least show your support by displaying or linking to the DeCSS Support Ribbon. You can display it on your page, served by my server, with the following line of HTML:
<img src="http://goingware.com/decss/DVDRibbon.gif"
alt="DeCSS Support Ribbon" width="85" height="138">
Remember folks, this isn't just about being able to watch movies anywhere you want on any OS you want. It's about being free from official government repression for speaking your mind, and if this case stands our precious freedom will suffer greatly for it - not freedom to consume products, but freedom to live as people with human rights, safe from official retribution for holding an opinion.
While Jack Valenti and the MPAA may be violating antitrust law and established Supreme Court precedents of Fair Use, Judge Kaplan is the far worse offender for having violated his oath to uphold the Constitution of the United States of America.
"One has a moral responsibility to disobey unjust laws." -- Dr. Martin Luther King, Jr.
Thanks for the quote. I added it to the page and added a few words of my own on why I think this is important:
I want to make it clear that while I feel the Content Scrambling System is annoying and a violation of antitrust laws, and the Digital Millenium
Copyright Act is a violation of established Supreme Court precedent of authorizing Fair Use, the reason I have provided this page in protest is
specifically because Judge Kaplan's decission in the
2600 case is a violation of constitutional rights.
While the Motion Picture Association and Jack Valenti are at fault here, the greater fault lies with Judge Kaplan in failing in his sworn duty to
uphold the United States Constitution.
Judge Kaplan's decision represents a far greater danger than the ability to view digital movies where you want on the operating system of your
choice, or even to be able to share them over the Internet. It represents a danger to your security to rest safe in your bed at night, knowing that
you are safe to say what you wish without fear of oppression by your government.
Judge Kaplan, if you are reading this, I want you to understand that America's founding fathers fought and
died in bloody battles to put a stop to men like you.
When a law is unjust, it is just to disobey the law. Also, court judgements can only be made based on actual cases; the U.S. court system does not render "advisory opinions", so if you believe that your rights have been violated by Judge Kaplan's decision, it is your duty to mirror DeCSS too.
What's discussed there is quite relevant here; poor engineering or attempting to overextend what may have originally been a good design appropriate to simpler tasks will result in terrible software problems - security holes, safety hazards and the like.
Also recommended is the book Computer Related Risks by Risks Forum moderator Peter Neumann (ISBN 020155805X). It draws on material from the forum but discusses it in greater detail.
But after a sailor entered a zero into a data entry field aboard the Yorktown, the whole ship's NT network went down and our nation's proud vessel had to be towed into port, as seen here.
Of course there's no guarantee that this wouldn't happen with Linux too, but what would make a lot of sense is to use it's open-source nature to create a military distribution, which has been audited for both security holes and reliability defects.
I'm sure many of the distribution vendors would be happy to do that for a price, but I suggest the military do it for yourselves - but remember the GPL!
For more such informative anecdotes of computer reliability, please read The Forum on Risks to the Public in Computers and Related Systems
Also, the moderator of Risks, Peter G. Neumann is a computer reliability expert that is held in high esteem by the defense establishment - see for example Practical Architectures for Survivable Systems and Networks which he did for the Army Research Lab.
He presented a keynote talk for the April 2000 NATO Symposium "The Potentials of Open-Box Source Code in Developing Robust Systems". At the NATO Symposium he handed out a preprinted entitled "Robust Nonproprietary Software" which is available in PDF format.
I suggest you drop Dr. Neumann a Line.
While Slashdot discussed the government's reluctance to accept Open Source in Linux -- Government Acceptance vs. Actual Use, apparently our Nation's proud warriors have no problem putting our nation at risk at the hands of a closed-source operating system as evidenced in USS Yorktown dead in water after divide by zero. The mighty Yorktown had to be towed back into port after its NT network crashed when a sailor entered a "0" into a data entry field.
I haven't read it yet, but by the looks of the web page The Software Conspiracy looks pretty worthwhile too:
While it is indeed true that it is difficult or impossible to get all the bugs out of a system, the situation can be much better than it is (do you use a memory debugger like Spotlight, BoundsChecker, Purify or Bounded Pointers for GCC?).Until the public wakes up and realizes they're being ripped off the situation will continue.
For us developers, this is a matter of taking responsibility for our work. For the public (and us developers when we purchase software) it is a matter of demanding that the vendors take responsibility: refuse to purchase software whose End User License Agreement disclaims a warranty, and demand of your legislators that the government enforce minimum quality standards on software and quality products.
At the very least you should be able to get your money back on a defective product, even if the manufacturer disclaims responsibility. And if there are real costs associated with the failure, as when a friend of mine bounced a $4000 check because of a bug in Microsoft Excel, the injured party should be able to sue for damages.
Searching for "Promis" yields US Congress Report on INSLAW Case
The mentioned article on Apple's FTP site doesn't appear to be there anymore, but doing an FTP search on lycos revealed that there's a lot of INSLAW stuff at the Electronic Frontier Foundation. You can repeat the search yourself with this link.
While you're there, why don't you stop in and Join the EFF? It will only take you a few minutes, cost a few bucks (you can give what you're comfortable with) and it will help with the DVD case as well as bringing justice to bear on the folks that stole and hacked the Promis code.
But what I meant in my post was that you shouldn't get bought into a particular platform to the exclusion of others, and invest all your time in learning the intricacies of some API or toolset that's likely to be obsolete in a few years.
It has the added disadvantage that when you've invested so much in getting good at an API, you're hesitant to move to a new one. (I helped a friend of mine who was out of work for a year get his first QA job. He'd often said he wanted to do programming, but after getting good at QA, when I urged him to continue into software engineering, he protested that he was "trained in quality assurance", and thereby permanently prevented his own advancement by trying to wring new value out of old skills.)
But fundamental programming skills you can take with you, and they make it easier to pick up any new API. And knowing more than one tool and more than one language gives you greater insight and makes you better at whatever language and tool you are using at a given moment.
JARED BOBROW (Bar No. 133712)
CHRISTOPHER J. COX (Bar No. 151650)
WEIL, GOTSHAL & MANGES LLP
Silicon Valley Office
2882 Sand Hill Road, Suite 280
Menlo Park, CA 94025-7022
Telephone: (650) 926-6200
Facsimile: (650) 854-3713
ROBERT G. SUGARMAN
JEFFREY L. KESSLER
EDWARD J. BURKE (Bar No. 103414)
JONATHAN S. SHAPIRO
WEIL, GOTSHAL & MANGES LLP
767 Fifth Avenue
NewYork,NY 10153
Telephone: (212) 310-8000
Facsimile: (212) 310-8007
Drop 'em a line why don't you. The country code for the US is 1.
If you feel that the page is useful (and I hope it is), please pass the URL to your friends and colleagues and link to it from your own pages.
Other tips on the slowly-growing site are MacsBug Tips and Tricks and Market Yourself - Tips for High-Tech Consultants.
One thing I try hard to do is put good hyperlinks in my posts. Sometimes I have to hit the search engines to compose a post, so it will sometimes take me quite a while to write one up. If I mention a book I usually link to it on fatbrain or amazon or something or at least give the ISBN.
(This, BTW, is how you can get good karma. You don't have to just parrot the party line as the trolls like to say. Actually be informative or insightful, and if you provide hyperlinks then you multiply the value of your post because you take the reader on a tour of the Internet quite outside the slashdot discussion itself. And because these discussions are archived, all these hyperlinks and comments are of immense value for people doing research at a later date.)
BTW - If you think you'll be done with your education when you're done with college, or maybe after a year or two of on-the-job training, guess again! I set into my program of going back to the basics after thirteen years of professional work experience as a programmer. My first full-time programming job was in 1987.
I feel like I'm only beginning to get a grasp of "how to really program." But then I remember I've felt that way several times in the past. What's really going on though is that one enters plateaus in ability, coasts for a while, becomes dissatisfied, enters the "larval phase" again, and eventually reaches a new plateau.
Or maybe not. Many people get proficient enough that they make a living they're comfortable with, and then they stop learning, or at best learn only the minimum needed to keep up with the job market. I pray I will never become one of those people.
They were expected to have the programs run on the lab computers where the class was taught (IBM PC/XT's - this was in the early 80's) but if the student wanted to run their code on a Vax and transfer it over somehow we weren't stopping them.
This worked in part because what we were teaching was the algorithms - first and second order approximations, the Runge-Kutta method and so on. The student was expected to know and demonstrate the algorithm, not a particular language.
BTW, the class was not a programming course, but the students were not expected to know how to program when they started the class. There were texts on programming languages made available, and they were just expected to pick up the language as they went along. Learning a language in this course was a required skill but not the objective taught in the class, much like learning how to use the editors on the lab machines.
BTW - looking at the web page now it looks like the class has advanced considerably since I taught it (they use Maple and Mathematica) but it looks like you don't get a choice of programming language anymore.
Thus you'll still have to deal with compiler dependencies. In components like the STL and the names of header files, there are considerable differences between gcc/Linux and Codewarrior for Windows.
I know this to be true because I wrote a magazine article (finished, but as yet unpublished) on cross-platform development. I advised the reader to test their code out for cross-platform correctness by building under two compilers for Linux - by using Codewarrior.
Thanks be to the higher powers that I carefully checked all my facts before sending the article in to the magazine editors.
It might be useful to some extent to do this, though to help in getting the code to build. I'm not sure if the Linux version supports it, but on Mac and Windows you can export your project as an XML file, and import it again. This makes for a nice way to handle the binary IDE project in CVS and such (the XML is text, not binary).
What you may be able to do is create a project on Linux, get your code working, send the project and source over to Windows and get it working there too.
This will only work well if you can create a Windows target under Codewarrior for Linux; I don't think it's very easy to add a target for a different platform to an existing project, something I'd really like to be able to do (for example, to copy a Mac-only project over to a Windows machine, then add a Windows target to it).
I'd further like to say that I think everyone should spend less time concentrating on learning specific API's in great detail, and instead focus on improving your core skills and fundamental understanding of programming.
I used to spend a lot of time learning API's (bought every volume of Inside Macintosh as they came out, and when I was just starting out and broke and hungry, used to read them in the bookstore before I could afford to buy them).
I prided myself on knowing all the little bugs and intricacies of the MacOS so I could just know to code around an OS bug without having to research why my code didn't work. I got so good that I was hired as an OS engineer at Apple where I concentrated on debugging the MacOS system software with MacsBug (a machine level debugger) - I had the MacOS source code at my disposal but that usually didn't help when I was visiting a tester's cubicle to diagnose a machine with a hard-to-reproduce crash.
Then I moved to the BeOS, shipped a product and wrote a lot of code but got fed up with their lack of commitment to their developers. And without getting paid to write BeOS code, I never could keep up with the BeOS API's I wanted to work with, like the new Media Kit (which I do know enough about to say it is pretty cool).
A couple years back I stopped spending much time learning and mostly just cranked out routine code. I felt I didn't want to learn anymore because, as I would sometimes say:
Ever since I read C++ Answers from Bjarne Stroustrup I got the gumption to start learning again. What I decided to do was go back to learning the basics.I read Scott Meyers' Effective C++ and More Effective C++ and as I read through each item I inspected my program top to bottom and applied the advice to it (thus fixing a lot of bugs).
I also bought Bjarne Stroustrup's The C++ Programming Language: Special Edition (I recommend the special edition to professional programmers).
I started reading the newsgroups comp.lang.c++, comp.lang.c++.moderated and comp.std.c++ and posting questions there - in one case I found a construction on the very edge of the C++ standard and as a result of a compiler bug managed to instantiate an object of an abstract base class - its pure virtual function had a nil pointer in the vtbl and my program would crash when this function was called. An engineer from the compiler vendor read my post on the newsgroup, agreed that it was a bug that his product would compile my code, and logged a bug.
I didn't used to use the Standard Template Library very much at all. I had read too many mailing list and newsgroup postings from people whose code wouldn't compile when they changed platforms.
But I figured that by now compilers must have matured enough I could reasonably start trying out the STL. I bought STL Tutorial and Reference Guide by Musser and Stepanov and actually only read a little bit of it before I realized that the STL is actually really easy to use (the API is very simple and uniform), so if you know only a very little bit you can go a very long way.
In part because of challenging myself I became overwhelmed with programming stuckness as discussed in Overcomming Programmer's Block? (sic) and I suppose grew a little bit by taking a week off without pay to rest, contemplate, study and take a broader view of architectural issues.
One thing that helped quite a bit was learning about Extreme Programming.
These things have all had direct payoff in my code, both in making my code quicker to write, easier to debug, easier to make my classes more reusable within the one program I've been writing the last few months, and I'm pretty sure more likely to make some of the code I've written reusable in most any program in the future.
It's also made it a lot more pleasant.
But don't listen to the headhunters - what they're looking for is "skill sets" and industry buzzwords (COM, COM+, DCOM, TCP/IP, Visual C++, ASP, SQL, device drivers, CORBA, Unix internals, Java, Perl, PHP, JSP) - I get recruiter calls looking for all kinds of acronyms, most of which I don't mention anywhere on my resume.
Even I advise listing every skill keyword you can legimately claim on your online resume in Market Yourself - Tips for High-Tech Consultants - but while listing skillsets may be a valuable jobhunting tool in your resume, acquiring them should not be your focus.
BTW, when someone asks me whether they should learn Java or C++, I usually advise beginners to learn Java as it's easier to get something working reliably without crashing, but emphasize they should learn both languages as well as at least one kind of assembly code. I stress that it's important to learn both C++ and Java well enough to understand the strengths and weaknesses of each (pop quiz - why does Optimizeit claim to remove memory leaks from Java programs, when Java is a garbage collected language?).
Most new programmers these days are most concerned with which language will make them the most money the fastest. I tell them that they won't go anywhere until they can pick up any new programming language as a matter of course and have at least a couple under their belt.
I've got bad news for you neophytes - friends, just knowing a programming language doesn't win you very much in the work world, you have to understand the concepts and how to apply them, and you have to know how to apply them in a production environment, working in a business under pressure, shipping working products and dealing with people who don't understand anything of substance about computers.
Your focus should be on acquiring skills that will be applicable to any program you write. You should just learn enough of a skill or tool to get the job done and then leave it. Take with you what can be applied anywhere.
BTW - learning the fundamentals and not getting too specialized enables you to develop for any platform, as I do - you can see this from my homepage. (Perhaps one reason why I prefer understanding the fundamentals is that my degree is in Physics, and I've always wanted to understand things at a fundamental level - Quantum Mechanics, Particle Physics, Cosmology and so on.)
One final word of advice - read The Forum on Risks to the Public in Computers and Related Systems. It's often entertaining and funny, occassionally tragic, usually insightful and will make you a more responsible programmer and a wiser computer user. You'll certainly learn to avoid using computers for anything of real importance and take extra caution to protect yourself when you choose to do so.
They should offer a choice of several development environments (on a Pentium box, you could use Codewarrior, Microsoft Visual C++, Borland, gcc under Windows with Cygwin or under Linux or BSD, or Solaris with the Sun C++ compiler).
The best thing would be to have machines that have multiple operating systems installed mounting your home directory off a server so you can reboot and try a different compiler.
Not only is it educational to compile under different environments, it helps to keep you from using compiler-specific features that lock your code into a specific platform (you use the pedantic option on gcc and don't use the gcc extensions, do you), but also building your code under multiple compilers will find bugs in syntactically incorrect code that won't compile in one compiler but will compile and run and do who-knows-what under another.
(This is one of the reasons Be, Inc. still supports the BeOS under PowerPC even though Pentium has an overwhelmingly larger customer base - it helps them to validate their code and keeps their code portable. They found lots of bugs when they moved from Codewarrior to gcc on their Pentium version, and so did I in my BeOS products.)
For example, I recently found that using auto_ptr< char > on a character array seems to work just fine under Codewarrior for Windows.
(I use it because I like the IDE's UI and it's great for cross-platform development - it also works with any text file format (MacOS CR, Unix LF, or or DOS CRLF) so you can easily share source files between any kind of machine, unlike gcc which only accepts Unix newlines).
It is not correct to use auto_ptr on an array because it deletes the pointer it holds with delete, rather than delete [] which is the required operator to delete arrays (this is needed so you can call the destructor separately on each element of the array; it doesn't hurt to fail to call char's destructor because it doesn't have one, but the memory allocation format for an array in C++ is different than in C because the number of elements has to be stored somewhere).
It is no real fault of Codewarrior that it works but I wouldn't expect my code to work if I moved it to a different platform - or worse, got into the habit of managing array pointers this way and maybe wrote a big library full of auto_ptr's of arrays. It would be perfectly within reason for a different development environment to cause my code to crash if I did this.
Take my word for it, I am a professional cross-platform developer with with extensive experience shipping on a variety of platforms including my current project which builds from the same C++ source base for MacOS and Windows.
(My friend Andy Green wrote the cross-platform application framework I'm using, which will be released under the BSD license soon. It also works under BeOS and XWindows/Posix, including Linux).
If you or your TA's wish to discuss this directly with me feel free to email me at crawford@goingware.com
Some people, like Eric Corley, are acting by defying the MPAA and risking financial ruin if they lose the DeCSS case.
Some, like the Electronic Frontier Foundation are working to preserve our rights in the networked era by defending brave folks like Corley.
Even with attorneys working pro-bono, mounting a legal defense is terribly expensive (just think of the cost of long-distance calls and plane fare for the participants). One way you can make a difference is by joining the EFF, which you can do with a credit card at the following link:
https://www.eff.org/support/joineff.html
(You can also mail in a check.)
If you do nothing else to work for the cause of justice in the DeCSS case, at least join the EFF. It will only take a few minutes, and you can give what you're comfortable with.
https://www.eff.org/support/joineff.html
And if you want to read about why this matters, click here:
http://www.goingware.com/decss
It's not about watching movies on Linux anymore.
It's about your right to say what you want in a free society. Eric Corley is a member of the press, and 2600's web site is his publication. Judge Kaplan has just permanently enjoined Corley from practicing unrestrained journalism.
If you can't provide a mirror for DeCSS yourself, perhaps you could at least show your support by displaying or linking to the DeCSS Support Ribbon. You can display it on your page, served by my server, with the following line of HTML:
<img src="http://goingware.com/decss/DVDRibbon.gif" alt="DeCSS Support Ribbon" width="85" height="138">
Remember folks, this isn't just about being able to watch movies anywhere you want on any OS you want. It's about being free from official government repression for speaking your mind, and if this case stands our precious freedom will suffer greatly for it - not freedom to consume products, but freedom to live as people with human rights, safe from official retribution for holding an opinion.
While Jack Valenti and the MPAA may be violating antitrust law and established Supreme Court precedents of Fair Use, Judge Kaplan is the far worse offender for having violated his oath to uphold the Constitution of the United States of America.
Thanks for the quote. I added it to the page and added a few words of my own on why I think this is important:
http://www.goingware.com/decss
When a law is unjust, it is just to disobey the law. Also, court judgements can only be made based on actual cases; the U.S. court system does not render "advisory opinions", so if you believe that your rights have been violated by Judge Kaplan's decision, it is your duty to mirror DeCSS too.
Read the page, pass on the URL, and link to it from your own pages.
And yes I know there's a broken link on the page, I've got the correct one but haven't had a chance to update it yet.
http://www.goingware.com/decss
We now return you to your program.
http://www.goingware.com/decss
We now return you to your program.
http://www.goingware.com/decss
We now return you to your program.
http://www.goingware.com/decss
We now return you to your program.
http://www.goingware.com/decss
We now return you to your program.
http://www.goingware.com/decss
We now return you to your program.