Coding Classes & Required Development Environments?
Sadistic Yoda asks: "I walk into my entry level C++ class and the TA informs us that the code must compile under CodeWarrior for Windows, which is included with the text (Problem Solving with C++: The Object of Programming, Second Edition, by Walter Savitch), to receive passing grades. Personally I would rather use vi and g++ on the department's Debian machines from the shell. Will I run into any problems or do I bite my tongue and make it through class using their program?" I find it disappointing that schools think that "teaching programming" involves locking their students into a specific environment. I know it makes it easy for the teachers and TAs when it comes to technical support, but what about those students who already have a handle on their own system, are willing to learn the language (and its pitfalls in all environments) who can't (or won't) run the required software for whatever reason? Is this limited form of teaching really teaching?
******** After i asked, the teacher had to explain what vi, g++ and linux was to the class. Seems a lot more people are coming into computers for money and not the love of the game. ******** I don't find this statement fair. I'm starting my first year in Comp Eng very soon (this september) and I have a lot of previous knowledge. But I also realise that most other people will not have a clue. That's what they're going there for, to learn. There are no programming/engineering prerequisites to get into the program. They don't expect you to already have knowledge, they will teach you everything you (supposedly) need to know. This is like saying that anyone who doesn't know how to fill a cavity but wants to be a dentist only does it for the love of money.
I long for the days when such intelectual questions eisted for oneself and not the social or work environment of the moment. I wish I were walking into such new territory with my eyes wide open. I am 28, yet feel so old. God, can't I be 19 and a blossoming programmer again? Again you ask? You are not even a programmer now, you are an Internet infrastructure Consultant. Yahoo should have been my idea, or I should have just been a musician. Oh well, next time.
Same issue is happening at my school, to some degree. I don't program anything at all, however both my roomates are taking a Java course at the college here. That's the write once, run anywhere language, right?
I offered to set up a guest account on either my O-BSD or Linux machine for them, however one noted that the teacher specified they use the Windows JDK to write the programs and create the java classes with (or something like that) and they're afraid the differences (if any???) might lower their grade. I'd appreciate it if anyone could tell me if this is a valid concern.
Anyway, this is college we're talking about. The teacher can pretty much demand anything they want, and your only options are to take another section , do it their way, or suffer...
would this be a slashdot story if the course was using a gnu compiler and the student wanted to use visual c++ ?
my school uses unix hardware so we have to submit stuff that can be built on the school machines.
relevance?
Then consider the very real possibility of a contractual arrangement between his school and Micro$oft that prohibits the instructor from mentioning any alternatives to Micro$oft products unless a student asks. That one student's question opened up the door.
If these students are going to be professional programmers, and they're still clicking and drooling in an IDE by the time they graduate, they will be incompetent.
Any CS program that doesn't teach their students how to develop using the command line is incompetent and should not be accredited.
The post never said that you are forbidden to use anything but Codewarrior, it just said that it had to compile under Codewarrior to get credit. Use whatever you want to write and compile it... just make sure when you turn it in it will compile under Codewarrior.
"After i asked, the teacher had to explain what vi, g++ and linux was to the class. Seems a lot more people are coming into computers for money and not the love of the game."
-------------
I don't think this is really a fair statement to make. I have known several people who truly do love computers and coding, yet at the time I met them had a lot of things they needed to learn. Taking a class seems like a logical first step in that direction, and being met by that sort of attitude does not help one bit.
Unfortunately, that doesn't help them much when Jbuilder won't work properly. The current version seems to be largely written in Java, consumes an awesome amount of memory, and is very slow to run. Further, most of the support staff like myself know command line tools perfectly, but are unfamiliar with finding the various settings in the user interface.
It may be unrelated, but one interesting fact is that failure rates have risen considerably in the past 2 years. I don't think it's a coincidence.
We had a similar experience here, but it was "All programs must compile on our gcc boxes running Dec Alpha *nix" (big grin).
We were told, however, that we could develop under whatever operating system or IDE we wished, as long as we could port it to and compile it under the school's system.
Personally I chose vi and gcc because that's what I had on my laptop (well, still do, as a matter of fact), while 3/4 of the class was trying to figure out how to get from VC++ to gcc, and were confused by command lines...
Proof of Sanity Forged Upon Request
Mark Edwards
The choice of language is irrelevant. I would expect any half-decent honours CS program to introduce students to an imperative language, an OO language, and a functional language within the first two years. The purpose is to introduce students to these different styles of programming. Which specific languages are used hardly matters. Most likely they are using Java because it is more appealing to students, simpler than C++ (and therefore easier to teach), and appeals more to the companies that are contributing funding to the university.
University is not about "learning C". In a CS major program, there probably will be courses where you use C (for example, in a course on operating systems). But you absolutely should not be taking a university level course because you want to learn C. In fact, I highly doubt that any respectable university would even offer a course on C or assembly. They will offer courses like "Introduction to Programming", which is entirely different from "Introduction to C". If you just want to learn a specific language, either take a community college course, or buy a book and learn it on your own. Any student in an honours CS program at University should have no trouble learning new languages on their own.
There's little to dispute yet. Why don't you give us some arguments for your claim that Lisp is a worthless language?
It was greatly pleasing to see Philip "If there was any justice in the world, the guys who wrote Perl should go do jail." Greenspun backpedaling.
Yawn... Everybody's wrong now and then. Including you.
My commentary was about limiting the evironment that a person uses to learn. Why is it that for an entry level coding class must it necessary to standardize environments? Sure if you go to class and you want an easy time staying with the professor, then use the same environment that he is using, but ANSI C++ is ANSI C++ and if the professor is not teaching to the standard then that is a problem. ANSI C++ code should compile fine on any compiler from Solaris to BSD to Windows and Macintosh, and if a user has grown up (and maybe fiddled with C++ while in high-school) around an environment, why force him into foreign environment just to teach him a language? Why not give students the tools and knowledge they need to work under any environment?
I hope this clears up any misunderstanding.
CodeWarrior 5 has Perl scripting support on Windows and Mac (dunno about Solaris/Linux).
(Yes, I know this isn't what you were asking about. :-) For most of my projects, it's been the reverse - I've done them in CodeWarrior on a Mac rather than the university's official [pick command-line tool] on Solaris. The number of people who sit and wait for javac to run on an Ultra1 amazes me (jikes, anyone?)... not to mention those who don't use makefiles and other convenience methods, but retype the same commands OVER and OVER again. For me, I hate messing with them, so I just use an IDE for most tasks and plug scripting in when I need it (Perl, AppleScript, etc.)
--
an entry level class is (hopefully) unlikey to do anything windows specific so the TAs probably wouldnt know the difference anyway, but you should still let the teacher know just in case. writing portable code is a good software engineering practice that should be tought from the beginning (unless you work for microsoft)
im sure any good teacher would have no problem with you using vi and gcc unless it was specifically a class on a different developement environment.
ALL computer science classes have this requirement. It is almost always put this way, however: "If your program does not compile on the instructor's environment, it will not be considered complete. The instructor uses the mainframe." In this case, the instructor will be testing using the development package.
Notice the TA said it had to compile/build under the environment--not that you HAVE to use it. They could care less how you type and test it--as long as it compiles under their environment. So just write ANSI C++ and you will be golden. Most of these classes stick to the language, not libraries. So there are very good odds that anything they assign you will be able to be built in a cross-platform fashion.
All of my instructors were very flexible. All they cared about was that the source was readable and that it compiled. I'm sure yours is the same way. It would actually be more useful if they had you using Microsoft VC++. Because as much as I and the rest of you hate it, if there is one development environement you WILL be forced to use in the industry-world, it is that one.
Everyone should just chill and quit pronouncing the death of CS education. Geez. Slashdot as a community needs to take a valium.
"Doubt your doubts and believe your beliefs." -- Switchfoot, Ode to Chin
I had a database class. The teatcher required us to use MS SQL server and VB. I Used PostgreSQL and C with gtk+/gnome. I had a 17/20 grade.
This was made possible since the computers at my university have multiple boot OS's (actually, linux and 2 strains of windows).
If you have no such possibility, see if you can find a friend who can lend you a laptop.
Mos of the time, requirements like those you mentioned are because a) the teatcher does not knoe anything else b) he thinks it's the best relation between ease of use and quality for his begginer students.
My DataBases teatcher told us that the project could be done much easier in VB (and he was right, I had to learn to program in gtk+/gnome, and if it wasn't for glade I'd never finish) but I think that doing it my way was much more rewarding, after all, I am programmer, why should I program in VB when there are real programming languages?
Hugs, rms
I was a TA for a compiler class last year (think really big programs that need to be graded), and we decided we'd only officially support one version of the compiler and library and interpreter (we used Java). This was essentially so that we wouldn't have to deal with incompatabilities between environments, and, in particular, the situation where the code works for the student but we can't get it to work.
It's pretty much impossible to avoid this sort of thing-- otherwise, you make the TAs find a different type of machine to grade some of the projects, which just makes a process that is already very hard and slow even worse.
The choice of official platform is, of course, very important. If some of the students don't have access to the official platform, it's going to be very difficult for them to take the class; while they may not actually have any problems, they can't tell if their program will work for the TAs. We chose a version present on most of the public workstations, because we knew that any student concerned about compatibility issues would be able to try their code on the platform we were using.
Of course, when I took the class, I used the pizza compiler which came with the version of Kaffe I was using, and it worked fine. My group used a bunch of different compilers and make sure they all agreed.
On the other hand, C++ has some specification issues; the language specification actually doesn't say what happens in many situations, and different compilers treat it differently. (xevil, written in C++, actually works differently depending on the compiler used to build it) So be sure that you don't do anything dangerous like that, and make sure you're only doing things actually specified by the language.
The reason I didn't want to use MSVC++ had nothing to do with me feeling or wanting to feel 'better' than any of the other students.
Windows 2000: Designed for the Internet. The Internet: Designed for UNIX.
you should really bring this up with your department head. either that or look for a better teacher or a better school. i'd definitely do the former because it's people like him that produce bad tool dependent programmers rather than real programmers. every programmer should know how to command line compile and link but i know so make that don't know how.
--
And Justice for None
--
And Justice for None
the basics to me is text editor and compiler... NOT gui! it drives me nuts when i have to work with programmers that learned exclusively on gui. they don't seem to realize why he ide is really useful and just think all there is to programming is clicking a component and adding code. they have no idea of how the program is really structured and could read code to get themselves out of a paper bag (or however the saying goes). all beginner courses should be taught at the fundemental level not the superficial one!
--
And Justice for None
--
And Justice for None
hilarious!
--
And Justice for None
--
And Justice for None
well shit, anyone can get a g++ compiler for free on almost any platform! why would they complain?
--
And Justice for None
--
And Justice for None
This happened to me in my first C programming class (c. 1990, ASU), only it was the other way around - I wanted to use Turbo C so I could do it at home, and they wanted us to huddle around old-fashioned green screens, 10 of which were connected to each 286-based Xenix server. And I didn't know vi, and wanted to lynch the TA who suggested that vi was such a wonderful editor we ought to use it to write letters and stuff like that in addition to the classwork. (But those machines were such awful multitaskers, that even vi in all its initial horror as it appears to a newbie, was much much worse... several seconds between you hitting a keystroke and it noticing, in some cases.) How times change, how the mind and the computers both mature...
Fortunately these "servers" had floppies and there was a way to load my code which I had written at home, and merely test it on those beasts.
They even had automated testing tools which provided input to your program and verified the output. Your grade was based on passing those tests.
Yea, we all switched to vim ages ago.
--Dan, religeous user of the 994 editor.
There's little to dispute yet.
Except for my implication that LISP is worthless. Certainly you could have chosen to dispute that.
Why don't you give us some arguments for your claim that Lisp is a worthless language?
I'd be happy to, though my arguments should be obvious. Almost no one is using LISP for anything outside of college classes. Go to monster.com and search for LISP. Then search for C++. Which comes up with more hits? My guess is that you know the answer without having to do the searches.
Everybody's wrong now and then. Including you.
Correct. I am often wrong about things. Guess what? So are you. Nonetheless I don't see how this follows my comment about Phillip Greenspun's backpedaling. Are you suggesting that my Greenspun was not backpedaling, or perhaps that my interpretation was wrong? It doesn't really matter, for the fact remains that despite Phillip's stupid arguments about LISP being "the most powerful and elegant" programming language he still admitted to coding in Perl (despite the fact that it, according to Phillip, has "one onethousandth of the power of FORTRAN"). Perhaps LISP wasn't powerful and elegant enough to handle the job that Perl was obviously better suited for.
If that's not backpedaling, I don't know what is.
I don't make the rules. I just make fun of them.
At my school it seems that there are always people in the class who want to code on different platforms, including Linux. In my data structures class, the professor asked if we all had VC++. Several people said no (becuase they used Borland), and several people, including me, said that they would rather use g++. I was surprised and impressed.
My school holds classes at night and, like me, contains lots of students who are already in the field but wanting to finish their degree. This makes it a much different environment than some other Ivory Tower schools. Professors at my school can't lie to students like they did at Georgia Tech (with lies such as, "If you write your code with a goto statement then you will be fired immediately!"). I think that because there are so many "geeks in the field" in my classes that there are also lots of Linux and BSD users in my classes.
What I think is more ridiculous is that schools teach that worthless language known as LISP. (If you try and dispute this you better be prepared. I have trashed many LISPer's pathetic arguments on this subject. It was greatly pleasing to see Philip "If there was any justice in the world, the guys who wrote Perl should go do jail." Greenspun backpedaling.)
I don't make the rules. I just make fun of them.
Well, the example of BASIC perhaps isn't quite in support of your idea, because there were quite a few differences between different implementations, if you remember. A random BBC Basic program would not work on GWBASIC, or on the Speccy, or on an Apple ][, or on a C64, etc. Even Pascal had quite a few differences between implementations. We are quite lucky that C and C++ are so standardized.
You guys take on such an elitist attitude, it's disgusting. How can you make such a sweeping statement like that? Did you actually talk to your classmates and see the dollar signs in their eyes?
Did it ever occur to you that not everyone is able to afford the time or the finances to program on their own time? Did it ever occur to you that some of these guys may have had to GET A JOB first before being able to go back to school and pursue their dream to work with computers like their uncle, cousin, or whomever they admire does? (I'm not one of these guys, but I know a few who are. Some may not be cut out for it, ultimately, but they will realize this as they go through the steps to finishing their degree.)
Not everyone is in it purely for the money. If they were, then a good portion of them will surely fail before they get there.
I was one of the compiler engineers at Metrowerks with direct responsibility over the x86 compiler used in the CW for Windows product. Both the front end engineer and I had compatability with the ISO C and C++ standards as a major goal. In some cases, we'd liberalize the default settings to help people port code from VC++ and the older Macintosh tools, but we avoided making extensions to the language which weren't already pointed to by the standard or implemented in the competition.
The academic version of CW is fairly cheap ($129 for the full version that generates code for Java, Win32, and MacOS), and Metrowerks now has a Learning Edition for $49 (it will probably lag one version behind CW Professional in the future).
-=-
Use the Z-modem protocol between Information Superhighway routers to compress the plaintext. ~LordOfYourPants
I always find this very comforting.
Ashley Clark
There's problems doing that with C++ - the standard is still fairly new and so there's a fair chance that any given compiler will have problems in at least some areas.
Ahem, speaking as a commercial developer (and you don't get much more commercial than console games), virtually all of our code is developed using command line compilers, and tools. Although it's amusing to note that CodeWarrior is currently the only IDE based development system to support console development (unless you count SN systems hooks into VC6).
Currently we maintain cross platform builds of the non-console specific portions of our engine and all of our tools, allowing us to build and test code in VC6, which has by far the better debugger. It's also usefull to compare the warnings raised by the different compilers, as ee-gcc catches some things VC6 misses, and vice-versa.
Many other PS2 developers use Linux based systems and the command line environment exclusively, as they were initially the only tools available. Or because the team chose to.
But I digress, the important thing is the language, not the environment. Indeed, you should never depend on the availability of a particular development environment, it may not be available for the next platform you develop for...
Hi,
Now that I can decide what projects to take and which I won't, I'm no longer taking projects involving microsoft.
However, during your education, getting to know how to write portable code is really a very important thing.
The only way to learn writing portable code is to port your own code a few times, so that you figure out what constructs are counter-productive, as they don't port easily.
So my recommendation: Write the code on Linux/g++, and then "port" the code to whatever the boss wants.
Roger.
Of course, you could just pick a different section. I know for sure that at least one instructor of several intro CS sections has established accounts for their students on SUN and FreeBSD machines and will allow students to use
Codewarrior or gcc/g++ 2.95.2.
Regardless, you'll probably be asked to use all sorts of compilers and languages that may not be your preference, the newest, the best, etc. during your academic career. That's part of what a CS degree is about, learning how to work within certain arbitrary boundries and conditions.
John Soward...University of Kentucky
At my uni, the 'Computer Programming' course is Java. This is a basic course designed to teach people the principals of computer programming.
:-)
They encouraged people to use their Linux workstations for doing their code, which was a pain for most people in the class because getting the JDK for Windows was a problem.
The assignments said 'you should use java 1.1.7 because that is what we have on the workstations'. I went ahead and did all my development on my own linux box with java 1.2.2, learning it out of a different book than was recommended by the course.
As I came to hand the assignments in, I panicked because I realised I had used classes that hadn't been introduced until java 2.
It all turned out OK though, and I came out with 99% overall.
- doctea
Yup. I didn't have much respect for the tutors though.
:-)
Paid off in the end, but I'll be much more careful in the future.
- doctea
I've used vi over a 2400 baud link before, and it's far more responsive than MS-Word sometimes is on a 300MHz Pentium II. (I say "sometimes", because it truly depends on what (mis)features of Word you're (ab)using.)
--Joe--
Program Intellivision!
I was in exactly the same situation in several of my CS classes before I graduated. I had to make my code work in Visual C++ 6, even though I developed on my Debian/GNU Linux box. This was annoying, but when I think about it now, it actually taught me how to make my code more portable. For example, the actual STL and the STL that is in VC++ were different in many respects, M_PI was not defined in VC++ (if I recall), and for OpenGL there were some differences in how to flush the buffer and have it work on both platforms correctly. So it helped me develop the ability to spot the minor differences between platforms and write code that would take them into account.
I hated it when I had to do it, but it made me a better and more well rounded coder in the end. If codewarrior adheres to any standards it should be a trivial task to write code that works in both environments. A little more effort, but worth every bit of it in the end.
Anyway, I'd suggest just going along with it. Get experience on as many platforms and in as many environments as you can.
The projects were mostly in C or a functional language called Haskell. C++ was avoided for that very reason.
Any sufficiently advanced technology is indistinguishable from a rigged demo
--Andy Finkel (J. Klass?)
I'm assuming this is an introductory computer course. If you already have a compiler preference, then you probably already know everything the course is going to teach. If you really stand to learn something from the course, then you probably don't have a compiler preference.
So let's look at the two choices:
1. Mandate a particular compiler. This irritates people with a compiler preference, but they weren't going to learn anything new anyway; they just want to sail through and get their A. If they have to port all your example code to some other architecture, well, at least they're off doing that rather than asking questions about pipeline optimization when you're trying to talk about what 'for' does.
2. Allow any compiler. Now the geeks take over the class and all you can talk about are portability issues, arcane details of different compilers and libraries, etc. The geeks have a good time (probably at your expense), but the non-geeks--who, remember, are the only ones who stand to gain anything much from the class--are baffled and don't learn anything.
I'd say the choice is obvious.
-Graham
Yeah, if you turn the option on you can't compile any of the headers included by Microsoft, EVEN THEIR IMPLEMENTATION OF THE STL! About the only thing you *can* compile is the above-mentioned example! It's a totally worthless 'tool' that MS only provided so they could claim standards-compliance.
Exactly. If the situation were reversed, and the class forced the students into using only an open source or Linux enviroment, you would all applaud them. However, I happen to agree with you. I feel that in order to have a stable working knowledge, you must start with nothing, and work your way to using tools that write protions of your code for you. It's like teaching math in grade shcool, and handing the kids a calculator, and letting them "learn" on it. They are not learning to solve the problem, they are learning to generate correct answers.
Eagles soar, but Weasels aren't sucked into jet engines.
Why does everybody assume that the purpose of a Computer Science degree program is to teach you how to program? The real purpose is to teach you something about how a computer works -- from both a formal math point of view and a practical point of view. Hence, the reason that most people have to take a courses on computation theory, language theory, compilers, operating systems, etc.
The reason most schools use code warrior is because it has a nice debugger, you can step through code. It dose java, c++, and pascal. Plus, you can compile that code for Windows or MacOS.
.02$
The main reason schools like teaching on windows is because when that blue screen of death pops up, if you know what to read and look at, you can easily tell what data handleing error you got in your f-ed up code.
Now, as a side note, FPC worked great when i was taking computer science using pascal on codewarrior. I even turned in a linux elf binary once or twice .
Personally, I don't see the problem if your like working with standerdized stuff. If your working with MFC shit, your screwed. Standerdized stuff, just use g++ to build it easy.
just my
-LW
If memory serves, Code Warrior for linux uses g++
I havent seen a copy of Code Warrior for linux yet though. One of my friends is saving up to buy a copy because he dosent want to run in windows to work on his stuff for his AP Computer Science class.
Emacs has anything that an IDE does, and so does vi. And as complicated as CVS or Make seems to a beginner, they're worthy tools that offer far more flexibility than a GUI'ed IDE.
Now wait. I never said anything about teaching GUI'd IDEs. Not a damn thing. People assume that when I say IDE, I mean Visual Studio. That's not what I said and that's not what I meant. You have all made an ass out of yourselves and me (to a lesser extent) as the old adage goes.
by Mike Buddha -- Someday the mountain might get him, but the law never will.
Yes, it's called reading the documentation, something Windows users have grown unaccustomed to.
When a student signs up for a C++ programming class, they aren't there to learn the ins and outs of a Unix environment. That would be the exact same burden as requiring them to use a particular IDE, and I assume that the instructor believes it will take less time to teach the students how to use and IDE.
Windows may be easier to learn, but Linux/Unix is far less painful to use.
Again, I don't think Unix is difficult to use, but it can be assumed that the students already know how to use Windows, because of it's marketplace dominance. It's annoying, but it's true.
by Mike Buddha -- Someday the mountain might get him, but the law never will.
--- Never hold a dustbuster and a cat at the same time ---
Setting his threshold to 5, Sparky eliminated most of the trolls on /.
Good luck getting a job outside the university.
----
"Oh, bother," said Pooh, as he hid Piglet's mangled corpse.
You sound like a real bastard to work with. Keep in mind that some of this isn't based in malise or corruption, but simple retardation.
10 years ago, the local University was probably churning out UNIX C programmers. Meanwhile local industry (aka the largest constituant for public universities) was complaining that they couldn't find enough VC++ Windows programmers. Now the tables have turned, but it will take the Uni 10 more years to get the budget/coursework/people switched back to Linux/Java/Web or whatever it is that industry is crying for right now.
--
Business. Numbers. Money. People. Computer World.
I am a TA in Boston College (Which is neither a college nor in Boston... bot that is another story). Anyhow, while we use free platforms (and if anyone asks for Codewarrior code, it is most likely to be Codewarrior for Linux) and require them, the situation is sadly the same: it is quite difficult for a TA and a professor to grade the weekly assignments timely unless the platform is somewhat standardized. Doing otherwise would burden the teaching team with too much work, and even if the prof+TA pair wanted to handle it, students would be damaged by receiving their assignments corrected with higher delays.... which is most positively not good.
What to do ? Well, if the school can afford it, having multiple TAs could help, so that while one TA grades the "standard" platform, the other one goes on to install/get to know the environment the oddball students want to use.
The benefits are however limited, since most of the CS classes are not about the language,its library or its quirks but about "larger" issues (Data structures, OS architecture and so on) than code hacking.
What about a hacker's university ? Oh,well... after all we already have MIT =)
--- "I didn't think anyone would understand it" -Prof. Bob Muller
my college supports the use of the unix environment in most classes. There are VB classes and they choose to teach J++ instead of Java, but thats their problem... they also teach Linux Device drivers and the OS class is in Linux. Most of the teachers have the students SSH into the Computer Science's Linux box and do all their work on there. that way there is no problem with different compilers, people can always SSH.
IMO the schools should be teaching the concept of "portability" every bit as much as "the language". Locking students into a proprietary development environment is the anthesis of this.
no, not a good idea, not in intro classes. before becoming familiar with at least one language, a student doesn't have enough background to form good concept of differences between implementations or dialects. example i encountered recently: consider trying to explain to someone who's currently learning c++, and hasn't taken compilers yet, why msvc++ breaks on code such as:
for (int i = 0 ; i < 1 ; i++ );
for (int i = 0 ; i < 1 ; i++ );
the answer is that msvc++ declares the variable outside of the scope of the loop body and then flags a 'duplicate declaration' error when it gets through the second line - but without more knowledge a student is not going to know what that means.
My other car is a cons.
Yet Another Horror Story About Visual C++. In my 2nd semester C++ class, after having taken 3 other programming-oriented classes previously, I am using vi + gcc. Not because it makes me "l33t", but because it makes me understand what is going on. My classmates, who all use VC++ 5 or 6, and who have all taken the same classes (this is a tech school, like elementary, the people stay in one class and the teachers change), are struggling to understand why class::class(int foo) is needed, and they can't just type class(int foo) and expect it to work. This is *not*, repeat *not* because I am previously experienced, smarter, or inherently gifted. It *is* because they can type:
class a;
a.
and get a list of class member functions, without having to think about where they are coming from. In fact, last night, we were going over how to overload the insertion operator to allow you to use cout with class names, and a common complain was "when I type class& <<(, it doesn't turn blue!" Again, I use vim+syntax highlighting, but to check my syntax, not hold my hand. Anyways, just thought I'd rant a bit a those people saying that using an IDE helps people learn better/faster. No, it doesn't. It *does* help you *write* code faster, and *possibly* better, but if you don't have the foundations, it's a crutch, not a tool.
Write the code using your favourite development environment, then port it to CodeWarrior (it shouldn't be that hard as long as you stick to fairly standard C++).
This gives you the advantage of using your own environment, and still meeting the requirement.
Of course if it _is_ difficult to port, then you've found out something about writing multi-platform code. C++ is notorious with differences between platforms.
Roy Ward.
I was in the opposite situation (before I saw the light ;) ) The school had gcc and I wanted to use gcc for dos because then I could do it from home.
The biggest problem I had was in reading and writing files. I didn't take into account the differences between DOS and Unix text files. That bit me in the ass a few times.
My suggestion would be to crosscheck frequently between g++ and codewarrior. Also, never turn in anything before testing it on the schools platform.
I had this same situation at my university. IMHO it's really not worth the effort. I would suggest simply writing you program with your tools of choice and recompiling under the class-required environment.
At the very worst you are learning two environments.
Ty
I don't know about that... some of my thesis research involved a 3 dimensional hydromagnetic code that was about 100kloc in FORTRAN 77. Never used a debugger for that... Granted, I didn't WRITE most of that, but I probably altered ~20% of that. 20kloc is larger than anything I've ever done before or since.
Eric
Coming from the real world of programming (and interviewing newbies straight from college) I think that the colleges and universities need to be a bit more careful how they choose the development environments they use. Get back to the basics! A student needs to learn and understand concepts. These concepts will carry them throughout their life/career. Learning a proprietary IDE should be the last thing on a student's mind. If given proper instruction, a student can easily teach themselves any IDE if/when they need it. If given a proprietary IDE to learn on, the student is lost when faced with a different one.
More needs to be taught on understanding what "compiling" and "linking" actually is, so that when compile errors occur, it is easier for them to track them down and fix them. The school I attended did almost no teaching on any type of build system (makefiles, etc.) and almost nothing on using any debugger. These are essential tools for the real world, even when using an advanced IDE that does most of the work for you.
If you understand the lowest level, you can most certainly learn/understand higher levels, but not vice versa necessarily. Therefore, stick to the basics, a good command line, with instructions on how to invoke the compiler for that platform, and how to run the program if/when it compiles. I really don't care what OS it is running. It doesn't matter.
When I was teaching a programming course, I told my TAs not to try to make code that didn't compile as submitted compile. This waws done for two reasons. The first is that the TAs have to much work already, and shouldn't be fixing the students code. The second is that the students were told how their code would be evaluated. If the code didn't compile because they couldn't follow directions, they were penalized.
If you go on the job and tell your emplyer that you don't like the tools they are using, you had better have a very good reason, or a current CV for when you get sacked.
Before you jump to conclusions, you know 1. The size of the class 2. The complexity of the program. Can you imagine the problems grading if everyone were to choose their "own" platform ? While Linux is reasonably popular, nothing prevents the use of more exoteric operating systems. The moral of this story is that the work was given with certain requirements and he did not satisfy them. He failed to satisfy the requirements and his grades reflect this, his behaviour is akin to submitting a handwritten term paper or a printed code listing.
Woe be on to them, all who rise against poor people, shall perish in a the end. Buju Banton
Speaking from the other side of the fence--- when I taught a C++ course two summers ago (at Stanford), I didn't care what people used for developing and debugging their code, but I did require that it compile under g++ and run under Solaris. This environment was available to everyone signed up for the course, and simplified the amount of work I and my TA had to do to test everyone's assignment. It also made it easier to provide code to the students for use in their assignments.
The Winter section of the same course offered more variety of platforms (Visual C++, CodeWarrior on Macintosh, and g++ on Solaris), but they had more manpower--- and more experience with the other platforms.
I didn't have any obvious problems with somebody not testing their code under g++
Oh--- and a single platform also makes it easier to have lab hours. Otherwise the TA has to split his time among several buildings...
> The problem is really cross-platform/compiler compatibility.
IMO the schools should be teaching the concept of "portability" every bit as much as "the language". Locking students into a proprietary development environment is the anthesis of this.
--
Sheesh, evil *and* a jerk. -- Jade
That's ironic. I actually had Walter Savitch as a professor, and we did everything in Solaris.
For my intro C++ class, you didn't get any credit if the app didn't compile and run in the specified environment. The specified environment happened to be G++ on the Sun server on campus. Bottom line is, in order to run the class, they (the instructors) MUST be able to grade your work. If for whatever reason you compile and run the application on your platform (whatever it might be) and it doesn't work on THEIR platform (whatever it might be) they don't have neither the time nor the inclination to set up another compiler and test in your environment.
Code in G++. Use Emacs. Do whatever makes you happy. Just make sure it compiles and works in the specified environment. When you get out into the world, the boss isn't going to care what tools you use to write the code, but he's also not going to be very interested in hearing "Well, it worked fine on my machine!"
Why yes, I AM a rocket scientist!
the moral of the story is, yes there are valid reasons for a class to require a consistent work environment. This is a prime example
Sounds like the moral of your story is not to late until the last minute to do your final.
DrLunch.com The site that tells you what's for lunch!
I know of no commercial developers who use IDE's to develop on.
John Carmack does all his development with Visual Studio, ever heard of him?
DrLunch.com The site that tells you what's for lunch!
Not to sound like an old codger (OK, well, just a little) but when I was taking college programming courses we didn't even have that kind of choice. My first class was FORTRAN and we wrote our programs on punch cards and submitted them to the operator, who ran them, and handed back our printouts. Yes really. After that I was programming on TI 990s in Pascal. My assembly language class used a simulator written by a former grad student as his PhD project. Just so you are clear, none of these later environments were graphical -- strictly character-cell full-screen was the state of the art. So kwitcherbellyachin' and get to coding.
Well, maybe not for an intro course, they shouldn't. Lots of non-CS types will be taking the course too.
I can remember when I was doing programming classes at university. We had to learn programming concepts using Pascal. And then from everything onwards was done on *nix (mostly ultrix and SunOS).
Which meant, gcc, vi and emacs, dbx or gdb. And it also meant that the lecturer could compile it on any of the 4 or 5 types of unix we had in the department.
darkewolf
"That is not dead which can eternal lie...."
Nimheil
I teach at at a few schools, and the adminsitration(s) constantly think that teaching "program X" will give the students the knowedge to be "professionals" - since "program X" is what "professionals" are using to to their "professional stuff" (or so says the marketing department at X-SoftwareCompany).
I find this negligent. the computer tech landscape changes so fast that tying students to any one program or any one platform or any one way of doing things puts them at a disadvantage later on. new versions come out, new technologies come, old ones go.
I always push my students to understand the underlying concepts and mechanism and to understand WHY this or that, and to grasp some theory and histroy behind things - otherwise their knowedge is superficial. I also tell them to try all the available programs for the task at hand, spend time with all of them and choose the one they feel the most comfortable with. Yeah, so what if students are using GoLive in my Dreamweaver class, Freehand in my Illustrator class...
You can train a monkey to press the right buttons at the right time - and that isn't knowedge or learning or thought. If students understand the hidden mechanisms behind their task, they can adapt that knowedge to any program, any interface, any technology... and then they are truly knowedgible professionals, not just trained monkeys.
Even worse is when the school is sponsored / affiliated / accredited by some software company, and so the students learn to be professional microsoft trained monkeys, or professional macromedia trained monkeys, or professional linux trained monkeys, for that matter.
adrien cater
boring.ch
Point and Grunt
I don't see the problem of having a standardized environment, and they should probably standardize on something everyone can get. If the book comes with codewarior, then everyone has it, and most everyone will probably have access to a windows machine to run it.
And no sane people really want to code with in vi anymore...
ReadThe ReflectionEngine, a cyberpunk style n
1) You need to learn how to LEARN TO USE new tools. If you think what you have is bad, I took a course that required all programs to be written using MFC and Visual C++.
Don't give me nightmares, again. I tried to write a program once that integrated MFC code with pure win32... If I had to do it over again... I probably would just have used the MFC socket stuff. MFC is most insainly laid out API I've ever seen.
What I really like are the Java class libs, those things make so much sense an they are the same on every machine that, in and of itself, kicks ass...
ReadThe ReflectionEngine, a cyberpunk style n
why the hell would you want to take a COBOL class? Do you enjoy the rigors of spending hours trying to figure out how to exspress negative numbers? Sheesh. y2k is no longer an issue, the world needs not anymore cobol programs.
ReadThe ReflectionEngine, a cyberpunk style n
Yeh, I can see why you wouldn't that, I mean, Java programmers only make like %40 more then C++ coders on average, who needs that?
...
Btw, java code on Windows == Java code on Linux == Java code on Solaris ==
ReadThe ReflectionEngine, a cyberpunk style n
Good point(s). However, perhaps at 27, I'm an old fogie, but I was always under the impression that universities were institutions of higher thought and learning. It seems that the original poster actually went beyond the requirements and had a novel, if only partial, solution to the problem.
Unfortunately, thought is no more required in school, and it seems that most schools are no more than a Lincoln Tech (tech school for cars, AC, etc.) for computers.
Jesus was all right but his disciples were thick and ordinary. -John Lennon
paranoid mode on
My thoughts were
1) Is this another way for MS to gain student mindshare?
2) Why were they forced to buy a product for a single use in a class?
3) Are universities being co-opted to provide MS based programming tools instead of other alternatives? Eg. Linux/Gcc/as/Qt/Gnome?
make Linux, not Microsoft. sin(beast) = -0.809016994374947424102293417182819
I completely agree. Work with the constraints of the problem before you. There a few more good reasons to consider:
1) In this field, you have chosen to be a problem solver. Part of the requirements for solving various problems are the tools you have available to solve them. In the professional world there are such constraints on your designs.
2) Learning various environments helps you appreciate not only the specific differences, but also appreciate whats kinds of things can be different across several platforms. It is these sorts of experiences that help us learn to appreciate standards and openness. That is, it is the very existence of some arbitrary rules that provide a context for us to encourage consistency, and standardization.
Remember you are learning more than programming, you are learning more than Computer Science, you are learning more than Algorithms and a specific language. You are learning to work in an situation which is not entirely in your control. You will always have external influences that affect the choices available to you. Embrace these challenges and learn from them.
I took a class that also used Savitch's book (first edition). The class taught me nothing, but I was able to go through the book on my own and finally get a handle on things like classes, objects, pointers, and memory management. And I did it at home with GCC (actually DJGPP).
That book took me from simply knowing the basics of C syntax to actually being able to write complete C++ programs. I can't recommend it highly enough.
1.) I hate codewarrior. I think its a crappy IDE, and that's a personal preference.
2.) I like CL tools.
3.) Most of what you'll do in a basic C++ or OOP class should move between them with no problem, so just do a check before you turn it in.
4.) Unfortunately, the choice of compiler is typically not up to the developer. Most companies (at least, all the one's i've worked for) will let you use anything you want as an IDE, but you have to use the compiler they've standardized on. there's nothing wrong with that, its a business decision.
5.) It won't kill anyone to learn to use another IDE. At the very least, its something you can put as a keyword on a resume for the text scanners to pick up. Even if it is a crappy IDE.
-----------
"You can't shake the Devil's hand and say you're only kidding."
I do some grading for my school's intro and 2nd level programming classes. We're using Java as the language of choice, so we don't have the platform issues that this person has. The lab machines are NT 4 running Codewarrior but all the grading is done on my or my professor's Debian boxes.
The text the professor settled on is another by Savitch; i forget the title. But I do know that Savitch did include a wrapper around System.in and out in Java so perhaps he has included something similar in his C++ book. In any case, unless you are doing GUI work, you shouldn't have that much trouble making things portable. Just don't use any "special features".
I had to deal with the same damn thing two years ago. I'd say 95% of the code is completely portable but g++ works 100x better. There was only an issue with one of the getline()ish functions. They impliment it wrong so you have to correct the function in that it returns EOF one pass later than any other compiler i've ever seen in my life. Other than that it should be compatible
My first programming class was in Pascal in high school Computer Science AP. We learned on early-model Macintoshes. And yes, I'm referring to those really small boxes with black and white screens that are generally confused with paperweights (even in 1991).
Why would my school teach programming on these boxes? Quite simply because that is what my school had to work with.
Did it affect my ability to learn Pascal? Not really because I was learning introductory Pascal. The fact that it was on a Mac was irrelevant.
The argument regarding compiler differences is relatively minor. We're talking about an entry-level course. They're not going to be using pthreads or the Windows GDI or wacky permutations of templates. Entry-level courses in C++ include such advanced topics as cout, variable declaration anywhere prior to use, function overloading and basic class definitions. These are highly portable constructs. You'd have to go to an old HP-UX box to have these exhibit conflicting behavior with g++ or Visual C++.
The sticking point is whether or not the teacher is encouraging the use of platform-specific additions to the language (such as Microsoft's DWORD -- and yes I know it's just a #define) or non-standard libraries. If this is the case, it doesn't matter even if g++ is being used; the learning experience with regards to programming is diminished.
On the other hand, if the instructor is making a concerted effort to follow the dictates of the language and, even better, teaches the principles behind the language, it shouldn't matter the platform. Once out of school, very few of us actually get to work in our ideal environment. Better to learn the ability to adapt earlier rather than later.
And last, but definitely important despite the fact that it hasn't been brought up yet is the skill level of the teacher. If a teacher knows g++, CodeWarrior, Visual C++ and Billy Bo Bob's C++ compiler, all of these compilers are resonably close to the ISO C++ spec and knows Billy Bo Bob's C++ compiler much better than the others, that teacher *should* teach via BBB's C++ compiler as long as the coursework follows the ISO standard.
If the student wants to use g++, fine. Great! Stupendous! Code them in g++ and then make sure they compile on BBB's C++ compiler. 99% of the time in an entry-level class, they will compile in both with no modifications. In the event they don't, it will give good insight into the differences between compilers.
Many times I have found that when I switched between two compilers, the errors that came up were not the fault of one of the compilers. Rather it was my code that was making assumptions about the presence of a quirk in the other compiler.
Being mindful of free software and standards is important. Being close-minded to alternatives, free or no, is a death-knell to the learning process.
My $0.02
- I don't need to go outside, my CRT tan'll do me just fine.
Yup, they usually change into management at that point.... or the new IT/IS majors (shudder).
--
"It's tough to be bilingual when you get hit in the head."
Same way at RPI, CMU... any good school...
--
"It's tough to be bilingual when you get hit in the head."
The management *major*... (most schools probably call it business...). They don't suddenly get pointy haired... that comes in time.
--
"It's tough to be bilingual when you get hit in the head."
If we were all teaching the class, that after the first few semesters of letting everyone use whatever we want, we would standardize as well, relearning a lesson that those teachers may already know. And end up, for good or bad making OUR lives easier. What are the benifits to a prof. having the whole class using the same tools? Do these out weigh the nobility of choice? Does anyone else here believe that if you learn ANYTHING as far as tools go, and learn it well, that you then can move on to other tools and learn them quicker?
a man, a plan, a canal, panama
It's a pain to have to port the thing, but the point here is to learn about programming so I don't see a major problem here.
Of course, if the thing is written well then it should be pretty portable anyway.
If the assignment was to develop something large and complex then there would be more of a problem.
For the most part you should be ok. Realize the *only* really ISO C++ compilers I know are BC++ 5.5 and g++. All the other compilers suck and may not handle the code you give them (though for an entry level C++ class that may not be an issue).
Other things to watch out for:
- Each compiler will have things it's lax in and some ISO C++ stuff is a little ambiguous... like BC++ 5.5 stricter on the friend statement than all the other compilers and g++ treats casting operators different (arguably stricter) based on the const'ness of the object.
- Visual C++ likes to put an '_' in front of all the standard POSIX functions unless you define something
- I don't know much about CodeWarrior except that I really didn't like their development environment
- Pretty much all compilers have extensions to the ANSI C libraries that are non-portable
- Visual C++ only does for loop variable scoping right if you turn off Microsoft extensions but the Win32 headers use anonymous unions so you can't compile them with the extensions off
- Visual C++ has serious problems with inline functions in headers
- Watcom C++ tries to emulate Visual C++ but there is no way to get proper for loop scoping in it
Brian Macy
I've had classes where our programs had to compile and run correctly on a couple of platforms, notably Solaris + Sparc and Ultrix + Alpha. No 32/64 bit assumptions allows. I think these requirements taught portability and discipline.
Ryan
I'm helping out a friend who is learning programming by correspondence. As a professional programmer I am amazed by the fact the lecturer is teaching some incredibly bad programming practices, and requires all programs to be either DOS executables or EasyWin (Win16) executables compiled with Turbo C++ 4.x!!
If you have difficulty believing that an "educational" institution could be inflicting the horrors of 16 bit DOS/Windows programming on people who are just learning to code then check out their web site: http://www.infocom.cqu.edu.au/Un its/win2000/85102/
Some things I should point out:
If there's anything looking back at my own education and looking at what is happening to others has taught me, it is that Universities exist (in Australia at least) largely for their own purposes and not for the education of students. I learned more about programming and computers in my first four weeks of work than I ever did in five years, one honours degree, and one bachelor's degree of University. All those five years seem to be good for is to get my resume past the HR departments and into the interviews.
John Wiltshire
Fear: When you see B8 00 4C CD 21 and know what it means
I suppose this question would seem very different if the students were required to use emacs/vi, gcc, make, etc. on a unix shell and one of the students insisted that he would learn the same material if he used Microsoft Visual Studio. Then the debate here wouldnt be how "unfair" the policy is, it would be about how people cannot learn true code development if they are dependent on a GUI.
The college's issue here is that its a burden to have one student using a completely different set of tools since it will be difficult for him to participate with everyone else in exercises and help sessions. If he is so ahead of the material that he definitely wont need any help then he maybe should try to test out of the course. It also would be better for him to use the GUI tools just for the learning experience, to get a compare/contrast of the two different design platforms, since there are advantages to each.
I agree that its good to be able to switch enviornments. I also agree that its easier to teach when everybody uses the same tools. Lets just not call the class CS 101: C programming. Rather lets still have CS 101: C programming and rename the other classes to CS 101.1 VS ide, CS 101.2 CW ide, etc...
The ide is *not* the programming language and shouldn't be taught or tested over *as* the programming language.
I have to agree that he didn't meet the stated requirements. And as long as the class was titled "learning to use [brandname] IDE" i have to agree with you. But if the class was titled C programming then the *requirements* were inappropriate.
schools are no more than a Lincoln Tech (tech school for cars, AC, etc.) for computers.
Which is why computer science (as it is taught) is often not considered science by the sciences.
I'm in a first year college programming class and have definately noticed the same problem. Sure I am learning how to program in COBOL... There seems to be a different COBOL, not just for each platform but for each complier. Sadly though, there is no gnuCOBOL or any open source compiler (that will compile my HW) so I am forced to use the school's (at the school) because I do not have Windows even installed on my home computer. The funny thing is that when I ask the teachers about support for other platforms they kind of laugh and tell me not to forget "windows". They then basically blow me off. How fair is that. The only thing that makes me able to sleep at night is the fact that most of these students/teachers have to take/teach a UNIX class on linux. I hope that helps them to realize that Windows is not the only way.
http://www.metrowerks.com/desktop/linux/
Note that one of the benefits is:
*CodeWarrior project files are freely interchangeable between platforms, making it easier for multi-platform development teams to share files and work together
Another reason why the TA will want you to stick to a given environement is: automated tests.
:)
To correct an assignement it's fairly common to have some scripts to do the compiles and testing of the binaries in one shot. You run that on a batch of assignements, it sorts for you the assignements in two kinds: those that pass the tests without raising a flag, and the assignements that need more attention.
Also TA for programming classes is quite some work (often unpaid), there is a lot to correct to do the job right. The last thing the TA wants to have to deal with is some "non-standard" (for the course that is) compiler environement.
And being exposed to several compilers is a good thing anyway
Use whatever program you want for the intitial development. Then upload to the final enviroment that the teacher is expecting. If you have written the program correctly, it should run with no modifications or a few compile errors. I had the same problems with my Intro to C++ class. I ended up writing my programs under Codewarrior for Mac and uploading to a VMS machine. Out of 2 semesters worth of programs, I had problems with exactly 1 program. This is an excellent time to learn the differences between the different types of compilers out there. For example, Codewarrior can do a setw() on just about anything but other compilers will only do that on numbers. Besides in an intro class you are not going to be delving into anything platform specific anyway, just files, in and out, arrays and program control, nothing beyond Main() and a few function calls.
Sorry, slashdot mangled the comparison.
I had a similar experience in an electical engineering class.
However... The class required OrCAD 8 but not one computer on campus had it installed or could it be installed on. The previous version was installed on 6 computers but the functionality of it was not even similar, so all the training on the program was useless.
My point is that if the school is going to require a specific peice of software they better at least provide access to the software on their computers. But I totally agree with requiring specific tools to ease in grading for the TAs.
if you are familiar and comfortable with vi and g++ why are you in a entry level C++ class?
My high school AP comp science class, didn't care what we used(there were two of us in the class) as long as every week or some we showed him some code.
I am in the same boat, freshman taking entry-level c++. I had experience through high school taking Computer Science AP classes, so I know what I am doing. In our class, we have to be able to make our program computer under OSF/1 or HP-UX, using g++. I do have to say; using g++ makes me feel so much more at home.
Now on to the point. You have to keep in mind college classes. I don't know the full setup of your college, but as with mine, my CS228 class is a lecture. Meaning, there is a shit load of programs turned in. I don't know how many classes the instructor for the class actually teaches. Also with the department getting a budget cut, we currently have no TA's to help out. You also have to keep in mind, when you start getting into pointer manipulation or anything beyond basic C, you can run into small variations in the compiler or in the libraries. I wrote and compiled a program using Visual C++, and then moved the code to my Slackware box, and then tried to compile it with g++, I got an error in the passing of a variable. After a little tweaking of the code, I got it to work. But imagine if the instructor had to do this for 300 people. If he was getting code that would not compile, I don't think that teacher would want to check the code to see if it's some strange error. As they do here, if a program does not compile, you will automatically get a 0 for that program.
I truthfully think that the compiler is not that big of a deal, unless you are being taught API, or GUI programming. I am not sure of other colleges too, but as far as I know with 2 of the colleges that I have information on their Computer Science major, they focus more on theory of programming then actually programming. Learning and language and the commands for that language are not truly as important as learning the theory behind programming. You can work with C++ your entire college life, and when you go out into the real world and get a job, you could be programming Java. You have to spend a few weeks to learn the general syntax for that language, but as you start learning you will be like, "WOW, I remember this stuff from when I was programming C++". Then you just have to apply the theory of programming to the current compiler you are using to make it work.
Its not what it is, its something else.
Its not what it is, its something else.
I was a Lab Assistant for our 'serious' comp sci lab in my college. (Vax/VMS) At the time our language of choice was (no language holy wars please, I'm a firm beliver that the basics of Comp Sci can be taught in any language at all so long as they are taught correctly) Pascal.
:).
:)... Got it back with an A+, a comment that it ran, the teacher wasn't sure how, but if I ever did it again I was getting an F- for giving the teacher a migrane :))
On our VAXCluster we had the system compiler and a fancy smancy text based IDE called DR Pascal.
The marking policy was that if you wrote reasonably standard pascal we didn't care what you churned it out in, but in case of a dispute, tie went to ethier of our 'offical' compilers. In general assignments were marked from source code, not object code, anyways. Basicly they didn't want to see inline assembler extentions from Turbo Pascal
(Like some gr 12 student I might mention who wrote his hangman program with self modifying inline assembler...
----
Remove the rocks from my head to send email
On the whole, I find that I prefer Slashdot posts to twitter ones because I don't get limited to 140 chars before
At one time I think there were two versions of Codewarrior planned, the GNU editions that everyone knows about using gcc. And a Professionial edition that would use a port of their own compiler. Too bad Metrowerks dumped the Linux version, it had the potential to be a really good ide on Linux.
treke
I don't think the prof. should accept any platform that they can't understand. However, if this is merely a C++ and algorithmic class, it seems that the interface wouldn't matter. However, if the prof. doesn't feel like having to switch around environments, I guess it is their right. I do believe that they should respect a student's wishes to cut their teeth with a different platform. However, I would suggest that for the most part the student should simply find a school that teaches within a certain environment. My school used g++ in HPUX/Linux, later we had the option to use Visual Studio 97 if we wanted, because when making console apps, it really doesn't matter, for the data side or if one uses the ANSI libs.
Hasues
futang futang!
I'll tell you something else that increases productivity: the unix toolset. Grep. Awk. Sed. Vi. FTP. CVS. Diff. Perl. Etc. (well, i've never used the etc command, but I hear it's pretty useful :^)=
I'm lucky enough to be able to use Linux at work, and all of these programs have helped to make me a more efficient programmer. The one thing that I would *love* is a step-through debugger for the PHP code that I'm writing. But unfortunately there is no such tool at this time.
Like it or not, you don't have to have a mouse to increase your productivity.
--Robert
If I had gone were my school or my employer were implicitly pointing me to - I would now be a Cobol or Visual Basic/Access programmer and windows luser. Luckily I spent more energy on Pascal/C/C++/Java, and kind of ignored VB,Access,Dos, etc courses we had at school. Also on my job everyone uses MSVC++ but I use Linux/vi/g++. It just means I am responsible myself for my development environment to work. I think your g++ code is going to be just fine. You will want to compile it under CodeWarrior just to mase sure - and occasionally you'll need to fix little things such as #includes that are one compiler inserts implicitly and the other doesn't, but you are, after all, doing a c++ course, not a 'CodeWarrior tutorial'.
Not to scare you away from g++ (I think you should stick with g++, see my previous post), I just wanted to mention one (the only??) problem I encountered when using g++: (I won't mention all the advantages such as the unix way of life - CLI, and freedom as in (beer|speach), and , yes, being THE STANDARD compiler. uhm, I guess I just did :-)
//(?)
g++ will soon use the new version of the C++ Standard Library (libstdc++-v3), but until then there are some minor incompatibilities, mainly the <sstream> thing which I fix like this in my sources:
//C++ standard defines stringstream in <sstream>.
//g++ defines strstream in <strstream>.
//(will be fixed soon)
#ifdef __GNUC__
#include <strstream>
typedef strstream stringstream;
#else
#include <sstream>
#endif
Great comment! Please moderate #125 up!
assert(expired(knowledge));
Dear Sadistic
I think it would be smarter for you to learn and use CodeWarrior.
The more tools you have learned and used in your course will give you an advantage when it is time to look for a job.
You can also show how really smart you are to your peers by giving everyone an example of how well you can adapt and change to use any environment! (with success)
No one is impressed with a geek who can only code in vi and g++! You have to be multi-skilled in many different environments in order to get any respect!
What I hate the most is linux users who use vi and C, and call windows for dummies. But when time comes for them to code something in windows, they end up being the dummies! Don't fall into the trap.
Also by learning about other environments besides linux, you will be able to maintain outspoken discussions with your peers about what environment is better.
You might also want to mention "if you can work at home, you can free up a lap computer for another student."
:)
Also, don't forgot to do a build on the windows machine to verify that you haven't made any programming assumptions while you are coding on linux. i.e. Basically double-check your code is portable before handing in your assignment
Hi!
:)
I think you try to express something here but with the wrong answer.
>> Which is why I would think that the standard should be ANSI C/C++.
This is THE good idea...
BUT WHEN YOU WROTE....
>> it was good to still know how to use strcpy with char *'s.
excuse me but are you talking about C or C++ ? It's not the same thing you know. For something to be trully C++ (cross platform) compatible you SHOULD NOT USE char* (if we are tlaking about C++ here). Instead use the STRING class wich comes with the C++.
I've seen enough code wich mixes the two (C / C++ coing style). Oh the horror!
I hope I didn't offend you (flames whatever...).
For the novice
I think there is a free C++ book wich theaches the "thinking" of the whole C++ methodology and can give you a start in the field. Don't mix the 2 thinking models.... You can find the book here. Happy reading!
I guess I replied too late to get moderated anyway...
Just another coder...
non-standard implementations of c++
Read: ALL OF THEM. I have never seen two C++ compilers treat the same code in the same manner. Straight C compilers all work the same, within a std. dev. or two.
If you want a better example, think about JAVA compilers and VMs... sure, JAVA is supposed to uniform and platform independant. But, it is none of those things -- things depend heavily on who's compiler is being used and who's VM is being forced to run it on which platform.
NC State University recently added a "webmaster certification" program to their continuing education curriculum. My friend, who is primarily a Macintosh user, has been studying the basics of web design on his own. He's decided this cert will help him get a job (an entirely different discussion) and is signing up for it. He is required to buy a Windows computer because the courses explicitly require you use the apps they've chosen, and they've standardized on Windows. We'll just ignore the amount of web dev apps available for Macintosh, shall we?
Ahhh.. yes... I'm so glad that Linux is so easy to configure... Are you feeling OK??
---- It puts the lotion on its skin or else it gets the hose again. It does this whenever it's told.
Templates.
;-)
In a data structures/basic programming course, if templates are covered, the choice of compiler can be VERY particular. How Visual C++ 5.0 deals with templates seems to differ from how gcc/g++ 2.95 deals with templates which seems to differ from how gcc/g++ 2.7.2 deals with templates and so on.
Let the nightmares begin!
Only the dead have seen the end of war.
if you can code what does it matter if it is paper or a text editor? with the paper tests they test the ideas and concepts and if you have some minor syntax mistakes it really doesn't hurt your grade... at least that is what it is like where i am
I took what appears to be the same class at Carnegie Mellon University when I was in high school, and that book is a joke. It teachs incredibly beginner topics, which although are important, you'll never be writing anything that long for that class.
My point is if you have computers in front of you during the lecture, try and write the programs while he is teaching, they really are that simple. If not, and you can't get into the labs which have codewarrior on them, and you *have* to run some other OS on the computer in your room, use whatever you want, but make sure your code works in codewarrior before you turn it in. The TAs who check your homework (in my school at least) just dragged your assignment into a folder and ran them, and if you have something that doesn't quite work with codewarrior, the TA will consider it wrong and take off lots of points.
That's a bad thing, remember ^_^
The only reason not to use codewarrior is if you are running an OS that doesn't support it (doesn't linux now?)
Of course, the obvious answer is ask your prof. he has control over your final grade, therefore....
Good luck!
JustinC
I've been a TF/TA for several computer science classes and we always required student submissions to compile and run on our primary environment. In our case that was Digital Unix using gcc or the JDK. When you are grading the assignments you have to be able to test them to give a fair assessment. I use Linux on my personal machine so accepting assignments that will only compile under Visual Studio on Win32 isn't a realistic situation. I'm sure /. readers wouldn't have as much problem with requiring Unix, but it's the same principle.
That said, many of my students did they work on Windows using several of the popular IDEs for C, C++, and Java. For intro classes, the focus is generally on the standard language sans platform-specific extensions. Once you've written and tested your code, it's easy to copy it onto the target machine and recompile to make sure it still works. The only problems I encountered were with students who didn't know how to get their source files out of the projects that most IDEs create.
If everyone handed in code that worked perfectly there would be no problem, but unfortunately, grading often means a certain amount of debugging to see how serious the problem really was, and that means the code needs to be in a usable format.
- Russ
I am a developer, at my second job. My previous job involved a very Microsoftish environment with almost no flexibility, and Andersen Consultants everywhere. No need to say, I got fed up rather quickly.
My current job, on the other hand, leaves pretty much freedom to everybody involved: as long as our code interoperates with the rest, nobody cares about how it was developped. Some use Microsoft Visual Studio, others use Linux + Emacs + JDK, others yet Windows + Emacs + Cygnus + JDK, others Windows + their fave Java IDE they had in school. Languages used are Java, C++, Visual C++, bits of Perl and Unix shell scripting. But there really are no restrictions: as long as it helps to get the job done, we're free to use it. Several releases of our product have already been delivered to our customers, this fact tends to prove that our development model does indeed work. We obviously have meetings, but those only take up a very reasonable amount of time. Yes, we occasionnally argue about database schemata too, but we are usually quick to reach a consensus.
Why does this shock you? Just don't teach your students the language constructs that are specific to one environment, but limit yourself to the standard, and you've solved a good part of the problem. You don't even need to mention the word "portable", you should refrain from teaching them anything that doesn't port.
There are some portability issues which cannot be addressed like this, such as endiannes concerns (for example, when piecing an integer together from bytes: Use shift operators rather than casts). However, as this is an introductory class, students probably won't be doing these kinds of operations at all, so no problem here either.
A school worth its salt should not forget to teach the useful skill of writing portable programs.
in my class we use codewarrior as well but my teacher said that as long as we can compile our programs at school with codewarrior there isn't a problem. So what I did was just use notepad for my cpp files and compile em with the borland dos compiler to test. As far as the principle of what the teacher said, yes it is pretty negative to view it that way, but almost anybody who takes c++ to heart and wants to continue learning it will move on to learn other development environments. There's really no point in teaching a class of 20 people to program in the long term with harder methods when only about 3-5 of em are gonna continue programming on their own (unless it's like an employee training kinda thing).
Several years ago, I also was a programming TA. I totally agree with you that someone who wants to use the unix tools will probably be a better student. And I can see your point about a consistent environment making it easier to grade, debug, etc.
However, I also remember when I wrote the first few of my C programs under Borland, and later discovered that all those useful functions I was using were Borland specific... Make sure that the environment you work with isn't the non-standard one that you worry about. And of course, the simplest solution is develop with g++, and when you're done, import it into CodeWarrior. If it works in a standard environment, it should work in another standard environment.
And I imagine any TA worth his/her salt will know g++ and gdb and be willing to help someone else learn a different set of tools. Though I also remember writing some code that made gdb core and I had to load it into Borland's debugger to find out why...
Graders of submitted programming projects simply don't have the time, breadth of knowledge, or obligation to deal with an open-ended variety of student-chosen platforms and configurations. And they can't make an exception for the one or two students in the class that happen to know Linux development. Like it or not, the rule is in place for one reason--consistency for the graders--and you should not try to push for your own platform of preference.
After all, isn't one sign of a truly good developer the ability to jump into any platform, IDE, or debugger and pick it up rather quickly? You complain about being tied to a single platform by the class rule, but it sounds to me like you are already tied to a single platform and now that you're asked to learn another one you would rather whine about it!
- "It's just a matter of opinion!" - PRIMUS
This is something that concerns me too. In September I am starting an HND course in computer studies in the UK, and am hoping that I am not locked in this way. There are such a diverse range of different systems in use around the country/world that I feel it is important for students to be able to use the environment that interests them most. After all it allows individual talents to flourish.
Merlin --- We're an autonomous collective... Help, Help, I'm being oppressed!!
At the end of your post you ask, "Is this teaching?" This type of situation (an imposed development toolset) is very much a reflection of the real working world. If you ultimately take a job with an existing company and become part of a pre-established development team, you will probably not have any say in what compiler or environment is being used.
Learn to view these constraints in a positive way---that is, as a challenge---and you will be much happier. That said, don't hesitate to influence others with your experiences in a friendly manner.
Best of luck on the course.
That's a good point, but I see the situation as a failure of the professor. The ideas of source file, compilation, etc. should be explained in a beginning level course.
Even if that isn't the case, the concept isn't a difficult one to grasp, at least not compared to learning C++ and the basics of programming logic.
Still, it would be an interesting interview question. Arguably even if you weren't formally taught the concept of a source file in class, you should pick it up over 4 years of CS training. I wonder how many applicants would stumble.
I noticed that Sadistic Yoda is from the University of Kentucky. When I took the entry-level CS class, CS115, my instructor was in fact the president of the LUG on campus. Suffice it to say, g++ was fine with him. In fact, we used it on the student machine, a large HPUX box. I did all of my work on my linux box and received an A. That class really doesn't involve much that would vary from compiler to compiler.
Isn't BeOS written in gcc/g++ (and assembler)?
-- Argel
I had this problem last semester. For a File Processing class, we wrote a b-tree using C++. We got some foundation code from the book and had groups add on to it. The foundation code wouldn't compile under Solaris, so we all compiled for Linux machines. Then you tell the TA where to compile it. We told him to compile under Frick/Frack, which are RedHat. He ended up e-mailing me and telling me the code kept crashing. I recompiled and it worked fine. He had actually compiled on a different RedHat machine and the code would core dump on startup, before even reading any files....
I thought I might get on someone's nerves. Just a couple of comments. If the compilers at the school were not available, then how can you have reasonably been expected to complete any assignments. I know some places can be difficult, but... As regards to working at home. If you want to be able to work at home, then fine, use Linux or whatever, but make sure the work you hand in works on the compiler you were supposed to use. The marker should not be able to tell that you used Linux.
;).
As far as `learning a new environment' being `crap' because you already know and hate it (VC++ in this case). Most work requires you to work in an environment you aren't particularly fond of.
It's supposed to be _you_ convicing _them_ to give you a qualification after all.
What I'm really saying is that comp. sci. isn't about what platform you work on. A good developer/programmer/comp. scientist should be able to work with just about any platform (except perhaps the VxWorks NT simulator
Lastly: do you people still use disks? Don't you guys have any networked storage?
I did like the vector class/implementation they included. MSVC was lacking with that. of course i just whipped up my own, but still, it was nice. plus codewarrior's debugger did NOT suck. i liked it.
oh yeah, and standardization for classes is a good idea. although in later classes we just use g++/gcc on solaris for standardization so i guess this is a step in the right direction at least.
That's not the way CS was taught to me. At my school (Harvard) we primary learned computational theory, algorithmic design, and specific issues and concepts related to general fields of research such as AI, computing hardware, computer graphics, and networking. Now in some kinds of classes there were specific tools we used, but the tools were always secondary to the concepts. And they never taught us C, C++, Java or LISP, they expected us to learn them on our own and they simply overviewed them in class.
Actually, one of the reasons you'll see educational places doing this is pressure from above on making curriculum relevant. You teach someone Fortran on a VAX, and the folks handing money to the Higher Ed institution start asking interesting questions like:
As I'm sure you're all aware, Higher Ed is a mainly reactionary force, and they see what the media prints like everyone else - that the Wintel platform has dominated the world, and that's what you'd better code for. Be glad they've gone with MW Codewarrior and not VB and the Microsoft IDE.
I for one am very glad that some institutions are starting to teach how to use an IDE, simply because my own school hasn't for so many years, and I end up being the one who helps bring student employees up to speed with working within a production code environment - cvs, IDE's, etc.
I was in the exact same situation about a year ago. My assignments were going to be graded using CodeWarrior 5 and my box at home was a GNU/Linux setup. Being lazy I didn't want to go to the campus computer labs to do the work so I did it at home and just tested them with CodeWarrior on campus before I submitted the assignments. The only real problems that I ran into were differences in the completness of the implementation of the standard C++ library and template support.
However, my situation was a little different because they didn't give me a free copy of CodeWarrior with the purchase of the text we used. So, if you have access to a Windows box close to you that you could install it on it may be worth the trouble to use Windows to develop for the class, if you aren't too confident in your ability to hunt down these little issues.
I would actually take this is as a blessing in disguise. It'll be a lesson in writing portable code.
When I was at Uni I took a 2nd year programming course on file and data proccessing. The course was taught using C on SunOS 4.5. (This course taught me to love Unix, I'd not used Linux/Unix before then). I didn't have Linux on my Home PC (instead I was running DOS with Quaterdeck's DesqView multitasker). Which incidentally let me run my BBS and still use my system for work. A great program. Much better than Windows. Pity the company disappeared. But I digress.
Getting back on track. Instead of treking to Uni to work in the crowded labs on the black and white X Terminals connected to the Sun's, I instead decided to write all my programs under DOS using Watcom C++ (while my BBS ran in the background). This was a great lesson to me in writing protable code that would run without fault on both DOS and Unix.
Fortunately for me Watcom C++ is 32bit so I didn't have to worry about memory problems (not that the programs I was writing would have allocated more than 640k). And it was ANSI compliant so as long as I stuck to ANSI I was safe.
I suggest you do something similar. Use the Debian boxes (or your own machine) to code your apps and then transfer the code to Code Warrior. The exercise will be beneficial to your overall education.
-- Oliver Jones - Deeper Design Limited
Unfortunately, at the school that I attent (Loyola University Chicago, for those who are interested), the Comp. Sci. Dept. *only* offers java, and stopped offering c and c++ two years ago, as the professors and chair explain, "well, that's the trend now adays. C is out and obsolete, and Java is in." Currently, as a chem major, and interested in pursuing computer science, I find myself in a poisition where I have no interest in learning java, and every interest in learning c, yet paying over 18k per year to not have the option. I know there is not "much" of a difference between the two; however, as java may be the "hottest" thing right now, I still think that I should have the option to learn C and C++ simply because I love linux, and I can't remember when I've ever seen, in the six years that I have been running linux and BSD, any important code written in java that has anything to do with the OS. It seems to me that they have lost touch of the OS and focus only on the industry needs.
And for those who are even slightly interested, they stopped offering assembly at the same time. =(
There are two options available to you. one is to ask the instructor (which is a good skill to learn) if you can do it your way. The other is to LEARN to do it their way. You seem to think that the learning process is only geared to what you want to do. WRONG! It' s to teach you things, it may be good for you to learn how to do it under Windows using Code Warrior. If you can't accept that then quit the class. If you are such a goddamn smarty pants then go get a job and fuck school. If you are there to learn, then shut up and learn. And like I said, learn to talk to your teachers, it will benefit you more than whining on Slashdot so you can start another round of Microsoft bashing.
Hey, you think your house is cool?
Prerequisite for the programming classes. :>
:))
(Hey, it makes sense. How many people have you seen typing with two fingers?
-- Talonius
My reality check bounced.
I haven't gone to a major college (never had a chance really) but the year I went they let me successfully test out of Intro C++, Intro Pascal, and typing [heh, I do roughly 110 wpm when I get going and I'm not using copy]. I paid the fees as if I had taken the classes, talked to the profs, took their exams and answered their [the profs] questions, and went on my merry way as a freshman in college with easy credit.
Schools are amazingly cooperative in this regard.
Now as for the unsupported operating system, geez! What IT person put THAT in place?
-- Talonius
My reality check bounced.
In short: the message which you are sending, Keel, that it's an employer's market and workers must accept what they're given, is absolutely wrong with regard to the valley. Here, at least, it's the other way around.
It's worth pointing out that, most likely, this issue never would have been raised if the course required the program to compile under g++ on the schools mainframes/UNIX boxes.
Personally, all my courses required that I use g++ to test my programs; I hated g++ because to use it I either had to trudge down to a terminal room or use a 2400bps dialup connection. So I built everything in Borland C++ on my DOS box, then 'ported' it over to g++; that took about 10 minutes.
There's nothing wrong with the school's policies, it's just that the tool they're pushing uses an 'uncool' technology, i.e. Windows, so it gets bagged on.
I don't like Anonymous Coward's tone, but I agree that Cliff will be in for a rude awakening when he leaves college and goes to work as a programmer.
I once took a class where the professor required us to use rcs and troff/nroff as part of the project. (To the uninitiated, rcs is a generic UNIX version control system, and troff/nroff is a bare-bones UNIX text formatting system.) He insisted upon the use of troff/nroff, despite the fact that WordPerfect and MS Word were much easier to use. He frankly admitted these were oddball requirements. His goal was to show us a slice of real-life. As any experienced programmer knows, specifications often requires us to do something in a non-optimal (or non-preferential) manner.
The funny part of all this is that my professor must have been prescient. In my current company, we were using rcs up until a couple years ago. The reason? It was free.
Check out Chad's News
when i went to the university of rhode island, i had a savitch java book, and needed to use code warrior. there were 15 windows machines, 4 macs and 2 or 3 linux machines. when i got there, all the windows machines were doubled up, and that left me with a mac. i saw the linux machines, and the attitude around them was that you needed to get explicit permission to use them, needed to ask the professor to add and account for you, you needed to submit your blood for dna testing to ensure you weren't predisposed to ruining these 'sacred elite machines'. they treated it as if the linux machines were on pedestals. now that would surely make it easy for me to start using linux if i were a newbie.
i used the mac for 5 minutes, nothing worked, and asked to do the work on one of my machines in my dorm room. i got denied.
i stayed there for a few more weeks and then left. they need to get with the times.
and then i ruined all that was good to me. i miss her.
Do you see the sig? Do you have it in your sights? Why yes, Miss Moneypenny...
...and they should also accept any number of tabs, vertical tabs and spaces between tokens as well. Welcome to the world of langauges where whitespace is not significant.
That said, M$'s decision to use CR+LF for line endings (instead of just one or the other) the best part of 20 years ago has caused me _so_ many headaches over the years it's untrue. IMO, it's probably the biggest design error they've ever made for something so technically straightforward.
*sigh*
Why doesn't the gene pool have a life guard?
I've spent 3 years at regional campus of Kent State University, and learned my programming on MSVC and Turbo C++. Upon transferring to the Kent campus last year, I got my first taste of programming with g++ and using Unix. In order to enroll into some of the upper-division CS courses, I needed to take an intermediate programming class in C++. What was funny about this was that I already knew about 80% of what was taught in that class, which was the language syntax. The remaining 20% was learning g++, gdb, and learning about the string class.
My point in all of this is that you need to learn how to be adaptable to the various development environments. Upon graduation, I may very well wind up developing with MSVC again.
While TAing courses for the introductory CS sequence at Stanford, I had several students ask me if they could use gcc instead of VC++ or CodeWarrior. Our standard answer was that support was only officiallyoffered for the supported platforms, but that if they were up for the challenge of figuring it out to go for it. Of course, I offered to help whenever I could (and was actually quite happy to be helping someone on Linux instead of Windows and VC++). To be fair, I did ask them to submit code that compiled under one of the supported platforms. Again, I offered my assistance if they ran into any problems "porting" their code between compilers. So, my suggestion is to talk to your TA. More likely than not, he or she will be happy to help you work it out.
Although I'm not a CS major, I've taken 3 CS classes (or classes with a strong CS component) as requirements for my engineering major. I will have take at least three more. I've run into a few issues with the languages I've been taught and the platforms I'm "supposed" to use.
For one of these classes, I was supposed to code in Fortran, using MS Visual Studio. The prof claimed to only care about results...he never asked to see the code itself. I live across campus from the engineering labs, and going back and forth across campus at night was a safety issue for me. Unfortunately, my professor refused to let us use other compilers, and it got to the point where he made us physically demonstate to him that it ran properly in visual studio. So much for my nice, free, open source Fortran compiler!
On the other hand, the next semester, I had a prof who allowed me to use C++ (which I prefer to code in over Fortran) and even Java (which I was teaching myself at the time). He also encouraged the use of whatever compiler we felt comfortable with.
Every situation is different. I've learned that you need to be flexible about it. My summer employer was extremely stringent upon using only MS systems for every computing purpose in the company. I certainly couldn't put up a fight and insist upon using what I wanted to use...I would have been reprimanded and possibly fired.
Similarly, had I argued with that first professor, I would have found my grade in danger (it happened to a classmate). I got lucky that one time in that the prof didn't care what platform or compiler or even what language I was using.
I guess you've just got to go with it...don't try to force a change that will result in problems with the prof, it just isn't worth the hassle. Besides, you need to be able to use any platform, and any development tool or compiler out there. It will only increase your own skills and flexibility.
Katie
"The future belongs to those who can look at a challenge and see an opportunity."
You thus immediately marked yourself as a nerd and teacher's pet to the rest of the class! :)
Last night I shot an elephant in my pajamas. How he got in my pajamas I'll never know.
Yes, this was the major debate between me and my AP CS teacher. I could cite the quotes from The Annotated C++ Reference Manual, yet the broken Codewarrior stuff was all that mattered. And they are producers of quite strange software - I have helped developers using this product, and in some releases, they mixed up the macro values for TRUE and FALSE... Donno, seems like a topic just to complain - no real answer or change can be enacted with this...
"Hex, Bugs, and Rockn'Roll"
I'm certain that I remember seeing Codewarrior for Linux ads at the top of Slashdot not too long ago. I'm equally sure that I've actually seen CodeWarrior for Linux being sold in my local CompUSA.
Hmm... Two semesters ago the intro class I was in used Karel the Robot. Basically pascal to move a little robot with only a few commands around an environment consisting of walls and beepers. We had a GUI for it, but I'm guessing it's just an adaptation on your text mazes thing.
Most people took the example environment to use to code their robot to avoid obstacles. I'd start by making the environment as complex as possible and making it work there. I'd send my environments in with my program and once the prof decided to "test" programs in class in that environment (the real grading I'm guessing was done with the original). Only did a couple - some worked OK, others were pretty bad.
Whenever someone asked for advice on how to do a project I'd email them the environment and say "make it work on this"... hehe...
Easy. Just email BackOrifice to everyone on campus. Any machines that don't show up must not be running Windows.
IMHO code quality is a shining goal; coders are a dime a dozen now so we may as well only pass the best...
;)
If they can't write code stringently compliant w/all the relevant buzzwords (ansi-compliancy comes to mind) then why should they pass?
Excepting, of course, those weird glibc bugs that pop up from time to time...
Out of the five or six coder i work with, only one of them claims to be in computing because they enjoy it. The others are in it for the money, and just do it for a job. Strange, but true.
Syllable : It's an Operating System
I understand your problems with having to use codewarrior, it is the only development environment that we are given for free at my school. Though you should have little worries, as long as you are using the standard libraries, compiling under debian should be no problem. I've been doing my development on windows and codewarrior for 2 years now, and I've been able to compile under redhat 5.2 and 6, as well as under cygwin every time without problem. Good luck,
Granted, there are a few STL ports available, but we've experienced headaches getting them to go on some embedded systems compilers, leaving us to come up with our own pure ansi standard library which we use religiously on mac, linux and win32 dev (as well as palm, wince, etc.).
I've seen similar problems when using Borland C++. One of my friends came to me to ask for help on a C++ assignment so we loaded it up on my Linux box and tinkered with it and got it compiling and stuff and wrote a ton of code over the course of a few days. Sure enough when they loaded it up on their computers at school to compile, it wouldn't work and we spent several hours tweaking it and dealing with Borlands incompatibilies (like their stupid String class that doesn't seem to have any nice operator overloads).
I just wish that a C++ compiler was a C++ compiler and each of their libraries (namely STL) were compatible so we wouldn't have to deal with these problems.
Things you think are in the Constitution, but are not.
--Fesh
"Citizens have rights. Consumers only have wallets." - gilroy
--Fesh
Kill -9 'em all, let root@localhost sort 'em out.
When I got to school last year, the same problem awaited me. I tried working around it by getting codewarrior for linux but I didn't feel it was superior to KDevelop (the environment I use even now). So, in the end, I wrote everything in KDevelop and simply compiled on a friend's machine. In short, I didn't even ask and there were no problems about it.
?/o
If it makes ya feel any better my OpenGL programming class at Kansas State University requires we use OpenGL, Linux, and the g++ compiler. This is the first class I've encountered that doesn't give me the choice of working in whatever environment I want. Fortunately our university decided it was easier to teach all driver and OS classes as well as this graphics class in Linux.
try unix2dos and dos2unix , they come along with most Linux/BSD distros.
Cheers
KdenLive/PIAVE - non-linear video editing
Why is it everytime someone is asked to do anything on a windows platform it becomes a huge problem? To say this limits you is not realistic. If anything it will help you in your career. Do you think *nix systems run completely autonomous from the rest of the world? Are you above developing on a windows platform?
The point is - Most Enterprise systems are comprised of multiple systems using different OS's. Before anyone would even think of giving you the alpha geek title you have to master development across all major platforms with more than just one language/environment. You have to know the in's and out's of every system. Every drawback, every advantage. No system is perfect. None. People need to get off their high horses and get in touch with reality.
Do I develop on *nix. Yes. Do I develop on Windows, yes. Do I prefer one over the other? Of course. But that is MY preference, and sometimes it does not sync with the real world. I don't throw a fit. I learn. I adapt. So basically - deal with it. It certainly couldn't hurt to learn something. It isn't ideals 101. It's reality 101.
At the University of Science, Malaysia (where I am studying computer science), we were introduced to Linux and gcc and vi :)
Guess we were lucky, huh?
"Backups are for wimps. Real men upload their data to an FTP site and have everyone else mirror it." -- Linus Torvalds
I thought that Java would compile on either Windows or something else, what does it matter if they developed it under Linux; surely it will still compile and run under Windows as well ^_^
Personally though, students ought to be able to experiment using their home system after class. Java is supposed to support concepts like this.
-- Cisk for the Cisk God
Theres more to it than that! Politics play a big part in it too--or at least, they do here.
.gcc revealed that to me quickly. (can we say includes, anyone?)
:o)
I'm a junior in computer engineering at the U of Washington in Seattle, WA. A year ago I took the same class as the original poster, and honestly, the department here crams Visual Studio down the throats of every comp sci/eng major. Although AIX plays a prominent part in our server architecture here at the U (like, dang near all of it), the programming school of thought is pretty much "churn workers out for microsoft."
As an institution, it would certainly make sense to not alienate your strongest sponser. Its more of a partnership: In our department, we dont have to pay for any software from the Gates boys, it just shows up free when we click 'submit' on a web page. I'm not sure if this is unilateral among schools, but I bet not.
Many of us here--including myself--run linux and love it, but as of yet in my experience so far I have heard of no programming/logic classes at this U using c/c++ that were taught in anything but VS, which is a BAD THING. I am of the opinion that VS pads code and covers a sloppy programmer's rear waaaaaaaaaaaaaaay too much. .
Your department made its compiler choice based on maximum compatibility. They chose ours based on proximity to where the money is. You tell me which is a better reason.
-s
- - - - - - - -
Don't worry, being eaten by a crocodile is just like going to sleep in a giant blender.
Anyway, there are some actual syntax problems. In my class, for instance, the problem (simulate memory caching) was most properly solved with arrays if instances of class objects. No problem: under g++ syntax similar to the following worked:
array_name[index](init_params);
But when the people dealing with Macs in the adjacent computer lab tried that syntax, CodeWarrior barfed all over them and they had to set up a lame, complicated loop. Go g++!
So even though there ought to be some ANSII standard c++ which is implemented perfectly in every compiler, the truth is that the language does vary from compiler to compiler. Think if I had coded in g++, but it was supposed to compile for CodeWarrior/Mac!
Regardless, I question any computer science department which makes students code for Windows. If you're a newbie, you should be using a Mac (easier) and if you know half a crap about computers, you ought to be using Linux or something as powerful. Windows is a useless platform.
peace
MyopicProwls
MyopicProwls
My homepage
>>you'd still spend huge amounts of time in design meetings
:-)
True Story: Our (USAF) customer gave us some work at the beginning of FY 1999 (Sept. 98) that ended up being just another Y2K fix. After the mandatory 3 months of managerial beating the project got, I started on it in Jan. 99 with one other person. We produced reams of documents, had project reviews, technical meetings, the whole works. All told, I spent a few weeks perusing the source code, and about 2 days in June modifying and debugging code (turned out to be about 20 or so lines needed to be added/changed). We tested the program off-site in July, produced more documents, and delivered the final, upgraded, Y2K compliant software in Sept. 1999 -- just after the final delivery of a fancy new Windows program (produced by another vendor under contract to a totally different unit) that effectively replaced it. That's your government dollars at work
Do not teach Confucius to write Characters
Today's Sesame Street was brought to you by the number e.
I agree with you completely. It's probably in the best interest of the average student to "deal" with the situation, whatever it may be. They may even glean some new understanding from it. However, there could be a different way of doing things in CS departments, at least in a some areas, that could be beneficial.
What about setting up one or more "business environments" where students can interact with other students in a production-style programming environment. Set up some kind of source control, have work directories, etc. Have the instructor take a few weeks during the summer and set up a shell of a production-style program (especially for "internet programming" classes). Something web-based and fairly simple to work with. Assign each student a few enhancements to the product for each assignment, with larger ones for the midterm and final. This could teach many skills, including dealing with other peoples coding styles, working together, and the production cycle, among many others. If the prof played it right s/he may even be able to work a semi-usable application out of the set of classes for the year and keep on using the product until it is usable.
Overall, what I'm saying is, I agree with the posts here more often than not-- Don't try to push back, you could learn something. The purpose of you taking theses Csci classes is to some day get a job doing it, and no matter how slick you are with linux, or windows, or operating system X and compiler Y, or IDE Z, inevitably your employer may use version A B C of all of these and you're up the crick. Variety is the spice of life. Deal with it:)
~melf
I think the key is to not be limited by any Development Enviornments. Each of the known development enviornments, implement a different subset of the ANSI. You will run into snags if you use a different compiler than the rest of the class. Some of these differences are minor e.g. library files are different (which should be an easy fix) , other differences can be a real pain to track down.
My college uses CodeWarrior for windows in most classes. I personally think it does a decent job of implementing the ANSI of c++ and it also allows for quick and easy way to develop larger programs.
I personally use g++.
I dont think you should be limited by the tool avaliable to you. Once you know how to right clean and proper code, it doesnt require a genius to use a different tool ( i mean commmmmmmeeeee how difficult can it be).
I wouldn't want to work with anyone who would only work in vi with g++ (especially if they wouldn't even try other environments).
speak it, brother. there is no perfect world except the one we imagine...
Steve O.
Steve O.
I am really, really exhausted.
Universities suffer many of the same problems as companies..they have a stuck-up punk who's using what he knows and insists on using the free box of NT server that was donated by Microsoft...at the University near me, the IT director didn't even go to that college...he was a recent MCSE and that piece of paper made him all-knowing :(
If you're not a Liberal in your 20's, then you have no heart.If you're still a Liberal in your 30's you have no brain.
About 2 years ago, I took a class on C++ to learn Programming theory..I've been programming in various languages for years, but I knew my programming theory was lacking, and I always hit a wall. No school had ANY class on programming theory, or it was a level 400 class. I just wanted to take 1 class! So, after getting the refresher course on C++, I was pretty much in the same boat I was before. I know C++ really well now, but STILL with no concept of theory....
If you're not a Liberal in your 20's, then you have no heart.If you're still a Liberal in your 30's you have no brain.
Atleast that's what Microsoft says Windows 2000 is based on.
Now think about something, you are an instructor, be it a professor or a TA at a university, and you have a class full of incoming freshman, most of which had never programmed before. Now, do you want to take the time to teach all of the different platforms and options out there or do you choose one to focus on, because that makes your life either. And if some of your students are familiar with programming on a different enviroment, hopefully they are competent enough to learn another environment.
All my professor required was a windows executable and a copy of the source. The windows executable is understandable, because she ran windows, but she wouldn't stop anyone from coding in linux, just so long as you show up with something she can run on her computer and the source.
Louis Wu
"Where do you want to go ...
That's a wonderful ideal, but I can tell you from practical experience that it just isn't feasible. I was a TA for an introductory programming course at Carnegie Mellon during my last semester. This was a course targeted at non-CS majors; the development environment was CodeWarrior on Win32. I saw enough student problems with one development environment to know that "officially" offering alternatives was out of the question.
The primary goal of an introductory course, IMO, is for students to gain a basic understanding of programming concepts and usually a particular language (in this case C++), and issues with devlopment environments are obstacles to, and distractions from, meeting that goal. Portability isn't an important concept to non-majors, and even majors shouldn't have to worry about it until getting into upper-level courses.
As a side note, one of the other benefits of supporting only one specific development environment is that the course staff can provide libraries built under/for that environment. For example, we had a prebuilt graphics library written by someone in the department to do some simple shape-drawing. Adding a graphical element to some assignments helps to make the course more interesting for students.
I am studying stage 1 Java, and we are told that all assignments must compile and run correctly in the laboratory environment. Our lab consists of an array of Macintosh computers (running MacOS 9), with the CodeWarrior IDE. Being Java, usually there are no problems when I submit my assignments - platform independent, etc. However, occasionally people do run into problems. The CS Department tend to be reasonably lenient about it, and provided you haven't modified the file (verified by matching it to an electronic receipt issued on submission) and can prove it compiles on whatever platform it was written under, it is fine.
Of course, C++ is different and so are the Universities, my point is that having a 'standard' IDE that the code must compile in is not a unique thing, and that CS departments are not nazis.
Good luck,
- Desi
Good luck,
- Desi
I can understand that it might be a little annoying, but most programming jobs are going to set your environment for you anyway, especially if you'll be working with a team. It's a good chance to learn to write easily portable code anyway, and if it's an intro class you probably won't be dealing with any compiler or platform-specific code. Probably wouldn't have to make any changes in porting it anyway.
--
Programming is not about c, c++, pascal etc etc. Everybody who is teaching the basics of programming should stay away from GUI's. Even 'print' and 'read' statements should be avoided.
The first thing they teached me was predicate calculus. Don't underestimate the importance of Predicate Calculus. The programs we had to write were in GCL (Guarded Command Language). Nobody was talking about compiling them (I don't even know if there exists a compiler) My teacher didn't look at my algorithm, he looked at my proof/derivation of it. We had a basic rule:
if (derivation == correct) -> program = correct
Programming is more than putting statements in a special order, check if it compiles and try a few times to see if the results it produces are correct. Everybody who disagrees should start writing a efficient program for a NP-Complete problem and not stop until he/she finished it. (and just in case, I'm not going to prove P == NP)
It wouldn't kill you to do the stuff with gcc, and then try then 'port' them to the Code Warrior environment. You will learn more then the rest of the students!
Good luck.
love is just extroverted narcissism
When I took his class, there was no mention of anything other than gcc/sun cc (as the labs were [back then] mostly sunstations). The previous version of his textbook was not tied specifically to any compiler or IDE.
I wonder, then, for the change to codewarrior. Who benefits from a deal like this? The company, by having their IDE pushed into the malleable minds of 1st-year CSE students? Does the professor/university receive some sort of kickback?
Mayhap I'll head over to AP&M and ask the Man himself.
use pico =). vi: i type in your code i move cursor around pico: type in code...good to go.
I think it is pretty frightening that they are practically forcing these students to run windows on their computers. What if your box wont run windows or you simply refuse to pay for that crappy pile of malplaced ones and zeros? Sheez, I am glad that we get Solaris as a first choise and only get windows if we have an extremely good reason for locking onto that platform.
Daniel
CS dept. Aalborg University, Denmark.
During my univeristy years, I still had a non intel system at home (Commodore Amiga FYI) and there was no budget to get myself an Intel system. Not even that I wanted to do that, because I backed myself with the principle that it had to be possible. So I was not only on a quest to complete my assignments at home, but also how I could do them at home. And so I've graduated. When I look back at it, it made me only a better student.
Linux is for Windows Haters, BSD is for Unix lovers
As a freshman I wrote, compiled, and debugged my programs using gcc on my Linux box. Logging in from the lab. The TA saw what I was doing and said, "Hey, that's cool."
N4st0r, trixx0r h0bb1tz0rz! Th3y st0l3 0ur pr3c10uzz!
This is a major problem for me, because I have a very full schedule, and even my lunch is already taken up by other activities. I think that schools shouldn't expect students to have to go inordinately out of their way to simply write code for a class. Of course, my school doesn't start for another 5 days, so I _may_ be able to use g++ or MSVC++, but from what I've heard from asking my friends who already took the course, you have to use the teacher-specified compiler.
It's rediculous. Why should we have to go so far out of our way to do things, when we're the ones who are paying _them_! [Rant].
- W
Jake
Dating: while( 1 ){ call_girl(); get_rejected(); drink_40(); } return 0;
You express them like this: -1 :)
Hard huh? COBOL is still one of the most widely-used and highly-paid skills in computing - your bank statement and electricity bills are probably produced by COBOL programs. Not that I'm defending it totally - after 10 years of badly-written megasystems I need a career change
My intro class had us using CodeWarrior on the Macintosh. It was pretty messed up if you ask me. But later on when I was doing networking stuff and had to be on the Sparc machines, I was thankful that the intro people were not competing for the limited number of computers in our labs. You have to look at the goals of an intro class, and really learning on CodeWarrior didn't hurt me later on. All this talk of compilers is silly, intro classes are not doing hard core programming.
I go to Georgia Tech, and we don't waste time teaching languages here. Here, we're expected to learn (by ourselves) whatever language the class happens to use. This allows a true computer science curriculum where the focus is algorithms, theory, software engineering, etc. instead of Java, C++, C, etc.
Some of our classes here even allow you to program in any language you want (so long as a TA or prof can grade it) because the focus of a CS curriculum is recognizedly not learning programming languages. Learning programming languages is recognized as an easy teach-yourself topic.
most professors don't care as long as you get the job done, write clean code, & don't make a nuisance of yourself in class.if you make a compelling enough argument ("I don't run window$ at home") they're usually reasonable.in the rare case you're stuck with a M$ zealot, find yourself a different section or teach yourself in half the time :-)
After all, the TA probably wouldn't know how to compile something from the command line. It sounds like you're not locked into actually using it for anything but a quick run-through at the end to make sure it compiles right. (This is nothing compared to what my friends have to put up with at my school -- all Windows, all Java ... they might as well call the CS degree the Programming in Java degree. One of the many reasons why I wouldn't go anywhere near that program.)
Of course, much of this has to do with the well-known fact that 99% of people teaching in 'higher education' are complete idiots. At least, it's well-known to me; don't know about anyone else. So this and worse should come as no surprise to anyone.
How can we continue to believe in a just universe and freedom to eat crackers if we have no ale?
The TA will never know what environment you wrote your code in, don't worry about it. The TA has to demand a single environment or else he/she would be spending all of their time setting up different environments just to grade a program. Since it is an intro class, you will probably only use a basic subset of c++ (which _should_ behave the same across platforms). Develop your code however you want to, just make sure it compiles and runs with the TA's system.
Anonymous posts are filtered.
Right on. I should have read this before I posted.
Anonymous posts are filtered.
Cliff, you can't back out of this one.
If you are seasoned, then you know you
can use whatever environment you want.
You just need to make sure it compiles &
runs with the TA's environment.
Do you really expect the TA to set up all
of the possible environments that a student
might use? Just to grade a program?
By the way, "ANSI C++" is a relatively new
standard, and not everything will transfer
cleanly from compiler to compiler (not
to mention os to os).
I can't believe you are that naive.
Anonymous posts are filtered.
To say that a program must compile under Environment A isn't to say that it must be developed in that same environment. Write (fairly) Standard C++ and it will compile under a wide range of environments, wherever you choose to develop it. I would prefer to require that students' code should compile on all of: g++, Codewarrior, BCB, SGI Mipspro, Comeau C++ (though I realize that checking that would be impractical). That would ensure that students learn the very useful skill of learning the difference between portable code and platform-specific extensions. This still wouldn't say which environment they had to use to develop the code, and might give some useful feel for to what extent it is possible (or impossible) to write portable code.
I've used MSVC, CodeWarrior, Borland C++ (1.0 - 3.0) and several other development environments. The ONLY differences are their requirements of ANSI compliance and their project file layout. If your developing a Windows program, you have to include the windows libraries that your programs use... WOOO hard stuff. The best advice I can give is to declare your functions before you define them (at the top of the program) and then at the bottom of the MAIN loop you have the code for the functions. And stay away from anything that is not ANSI compliant.
witty sig goes here
My department at the University of Washington is really cool about letting you develop however you want. It's mostly rooted in the fact that the TA staff is a bunch of OS snobs and refuses to correct platfrom dependant work. In the pre-major courses all hand-out code is platform independant, including a large graphics package that runs in X, Mac and Windows,
"After all, we managed to switch to what we think is a far superior solution." THINK is correct. Some people don't think it is, or don't know, or don't care. If you want to switch and use it then go ahead, but don't bitch and moan when you have to use Windows for just a couple minutes.
It's like driving on the wrong side of the road. You may think driving on the left is the best way, but if you don't move back to the right when you have to then you must face the consequences.
(This is in the EEE dept, Auckland Uni)
I've taught from the first edition of the text and have had to make the same sort of decision. We ended up using ecgs for the grading compiler, simply because Codewarrior didn't run on the Alpha. I prefer Codewarrior because it is a good deal more standard-compliant than the current ecgs. That means you'll probably be OK going from ecgs to CW, but you _will_ need to check things at the end.
Last year in my 1st year Foundations of Programming course we had a semester on the functional language Gofer. Of course every time you walked into the lab all you could hear was 'pointless....when am I ever going to need...why?....what is this recursion bs?' Now in second year it made the recursion part of this years course a thousand times easier than it would have been if all we had done last year was java (the other lang we did that year). Of course now that we must use linix this year the same people a grumbling again about that:) so....what can one say?
// It had been Fat's delusion for years that he could help people. --Philip K. Dick, Valis
Depending on how advanced the assignment was, this may not work. For a beginning course, probably fine. It doesn't work very well in multithreaded programming. printfs / streams change where race conditions occur.
Although I admit I've never tried developing a major project, I've never had any compatability problems between this Wintel machine, my Linux box, and the Linux machines at uni.
For my introductory C++ unit (no, I don't show up half the time), the development environment is tcsh, the project manager is GNU Make, the compiler g++, and the only supported (ie, the tutor will give you help with it) editor is vi, although a few people use emacs or Midnight Commander. I'd say come study here but we don't have enough lab machines as it is!
The idea is that we have to write the code to run perfectly the first time, as opposed to writing, compiling, debugging until it works.. anyone could hand in an A+ solution if they had the ability to try it before submitting it (why do you think most CS assignments attribute so little of the marking to the code itself?)
Now the only machines in the building running Windows are the one lab used for word processing tutorials, and the labs used by the School of Maths (who rely on a few proprietary maths applications).
Most people I know on my OO course had absolutely no experience with C++ at all, they were too concerned with learning the basics of the language to care what compiler/IDE they were using(VC++). My university is much keener on MS products though, they only run Linux on the oldest machines, doesn't portray it in a particularly good light. As far as they're concerned its the MS way or the highway... Give me Borland C++ Builder any day...
Here's an example:
I went to school at the University of Waterloo (Waterloo, Ont, CA) and they have a diverse computing environment. They had Sun machines, MIPS machines, DEC machines, HP machines - all running slightly different environments. Most ran gcc/g++, but even then there were differences in the system calls on each box. The environment allows seemless logins to any of these machines, but the profs always said "Your submissions will be graded on the Sun machines - please make sure it works there."
They didn't care where you did your work as long as it ran in the test environment specified.
What am I saying?
- Develop on whatever platform you want - the prof isn't going to sit behind you and watch you work.
- Make sure that the program compiles and runs in the specified environment.
Whining isn't going to solve all life's problems so learn to handle these minor roadblocks. Do you honestly think that in the future you will always be able to dictate the programming environment you work in? It's great if you have that kind of control but don't count on it."You need a license to buy a gun, but they'll sell anyone a stamp." - Red Green
In order to study a language, one needs to have a stable development environment. For instance, it could happen that hte combined difficulty of learning linux basics, vi and then g++ would be too difficult for students with no previous experience.
A good course under Windows can help the students jump to Linux later on. For example, I started GUI programming with C under Windows, and since I used C library functions (malloc() rather than GlobalAlloc() etc.), it was quite easy for me to apply my knowledge to UN*X platforms. In fact, this helped me see the true beauty of Linux.
Unfortunately, many kinds of courses teach only the parts of a language that one can use immediately. For example, there are C++ courses where people are tought to use MFC (using Microsoft's fill-in-the-form-pseudo-programming a.k.a "wizards"), more than C++'s standard features (like STL). So while using an IDE (even MS's) is not necessarily bad, a good basic C++ course should never contain MFC.
...is getting used to sub-optimal coding environments. Or languages. Quit whining or drop out of school, like I did.
I actually lost some sleep last night thinking about this one. True, things have changed since I was in college (86-90) - for example, then, nobody had a PC in their room (let alone internet access), C++ and OO were just emerging, and almost everyone at school (Purdue) were given userid's on common Unix systems (we're still earlier than X-windows here too!) My personal feeling is that there is a short list of "vital" things that should be the focus of programming education: - C, RCS, and makefiles - so much programming is dependent upon knowing the "basics" of how to program, and how to build, and how to share with others and not lose things - C++ - Once you know the basics, you have to learn OO. - Algorithms - again, more of the basics - quicksort, Dijkstra, etc. - Data structures - hash tables, lists, trees, queues, and the whole lot Maybe I'm tainted by my own "graphics-less" college education, but at the bottom of this short list of mine, I'd put GUI programming. GUI is nice and flashy, and the final interface between the program and the user, but the real heart of any program is what goes on under-the covers. My last point gets me to issues like a professor forcing some particular IDE on the students. Deep down inside, the "core" of programming is totally independent of the IDE you are using. What an IDE locks you into more than anything is one particular GUI interface/API. Given that, then until the focus becomes the UI of the programs under development, then who cares what IDE is being used by everyone? What unnerves me, however, is that when the focus moves from the "core" programming the the UI, much of what is happening is highly masked by the IDE. As an example, I just developed an app using VC++ - and I could not even begin to guess as to what is going on under the covers with all the resource files and ba-zillion other miscellaneous files that are generated by VC++. The same app, simply using gcc, make, gtk/gnome, and VSlickEdit, is all layed out for me to see - I know everything that is happening in the program becuase I *wrote* everything (well, ok, glade helped - but I can read the source!). So I say to the professors out there: keep it to the basics. That's what's important to make fast, readable, efficient code. Once you teach that, the language you use (C, C++, Java, whatever) and the GUI you use (VC++, Qt, Gtk, motif, etc.) are nearly irrelevant.
There are computer schools popping up everywhere around where I live, and MOST of the people going there don't know much about computers, let alone coding.
/.
The truth is, alot of these people are getting into it NOW, because they think they can make alot of money at it.
The schools here are flooding the market with Construction-Worker-Types that don't know diddly about computers; giving them intro courses to coding (C, C++, COBOL, etc) and they actually they can go out into the world and keep a job as a programmer!!!
Boggles the mind!
Joe
--
Just think... with a hydro-pneumatic, 120% capacity cold fusion
perpetual motion flywheel array in my laptop... Quake 3 would
FLY!!!!! -- Mathonwy on
In our department, we dont have to pay for any software from the Gates boys, it just shows up free when we click 'submit' on a web page. I'm not sure if this is unilateral among schools, but I bet not.
Why give something away free when they can Charge for it???
Michael Tandy
...another comment from Michael Tandy.
"Goodness me, how unlike the FBI to abuse the trust of the American public." -- The Onion
>If you have an alternative policy that is even >slightly practical for a class with 800-odd >students, > I'd sure like to hear it! It's not quite a policy, but as a TA in charge of projects I had the students submit their code through e-mail (via a Perl script). The e-mail recipient was a dummy account which test-compiled the project and sent back a "compile success" or "compile failed" (with error messages, of course). This alleviated most of the Visual C++/gcc conflicts for a smaller (150 student) class.
how very true, in the real world, you can very very rarely choose you environment.
While I totally understand your wanting to use vi/g++ for your work, in a real-world job, you'll probably be required to use some sort of IDE running under windows.
Where I work we've managed to change over most of our development boxes to either FreeBSD or Linux without the boss realizing it on most of them. (of course this is the guy who is convinced that BSD is some kind of programming language and that SQL is spelled "sequel"...)
As long as the product works at the end of the day, everybody is happy
So be nice to the windoze (C++) compilers, the compiler may or may not stink, but (as much as I hate it) the standard library for that windoze compiler is almost certainly much more complete then the one on your (and my) Unix box.
apt-get install redhat please god - Me (take it easy, I love Debian)
If you only want to do what you already know how will you learn?
As a real programmer of many years I know that I am often locked in to tool sets I don't know and don't want to know. You have to work on things other people wrote some time ago. And the tools used may not be the coolest compiler or my favorite platform, but I must overcome! I am able to work in hostile environments and it makes me valuable.
Check your typing... Aside from leaving out your test operator I have to say that anyone who writes like this (defining the same variable name repeatedly in the same procedure) is just trying to write obfuscated code. And employers will not thank you for it... Of course if you don't want a job go right ahead and write with the worst possible style in the most unreadable ways. You name will be cursed long after you have been let go.
That's not a practical solution when you are overloaded with classwork and are struggling to get projects turned in on time.
-John
Georgia Tech's official environment is a big central server called Acme (actually it's a pool of 3 big Sun servers). Most classes require all projects to work on Acme, and there's a system for submitting assignments directly from there. In a recent class, it became apparent that a large number of people were using Linux at home, simply because it's faster, not resource metered, and easier to customize locally. With this realization, the administration of the class has switched to Red Hat 6.2 as the official environment.
As much as a Windows environment would suck, it's pretty much necessary to pick one supported configuration and enforce it to the letter. If you don't, students will blame everything on incompatibilities, and the bitching factor will be much higher. Even the Solaris versus Linux difference broke a few of my assignments (I coded on Linux and tested on Acme). However, if I were a TA I wouldn't want to have to deal with this stuff while grading, as it would take at least twice as long.
-John
In my school's c++ classes we use codewarrior on macs, and I also have it installed at home on a windoze box. It's worked fine for me, but if it crashes when you try and run a program, try compiling it (ctrl + F7) before you run it. That's the only problem I've ever experianced while using it, and I think it's actualy a pretty good compiler... it's also easy to distribute your programs that you make... when you run it, a file called noname.exe appears in the folder that the project is in (on macs it's a file called a.out [i think]), and you can just rename it and then upload your programs on the web :)
So quick with fear you tiny fools!
Ok let me start with the beginning statement
"entry level c++"
Everything that I can see being taught in this class are inherently portable (control structures, variables, basic classes, etc etc)
Anything used here _should_ be just fine to develop one place, swap the code over, and recompile (i don't forsee any problems)
higher level classes (such as ones that concentrate on user interfaces, operating systems, etc.. would have a problem, however, at that stage in the game
(approx junior/senior level) a major lesson to be learned is the ability to have any operating system/development tools/programming language dumped on you work your way through it(IMHO)..
feel free to flame me if I'm being really short sighted on this matter
(define the-question (or (* 2 b) (not (* 2 b))))
Collage carrier! HA HA HA !! That is one of the funniest mis-spellings I've ever seen on slashdot. You may be a college student, but you sure aren't very well educated. (Collage carrier! That sounds like a special rack designed for carrying miniature flower bouquets).
All is Number -Pythagoras.
That is an interesting observation that you made about education level correlating with the use of "HA HA HA." As it happens, I have a Ph.D., so I guess I must be an outlier in your study.
All is Number -Pythagoras.
Sadistic Yoda: Go ahead and do the work with whatever compiler and whatever environment you like. Then, when you're done, go and test it with CodeWarrior for Windows. You alone are responsible for your assignment, and no amount of "but some guys on the Internet *said* it would work" will persuade a reasonable instructor if it doesn't work. I'm sure the TA doesn't give a rat's ass what development environment you use, as long as the code you turn in works on the chosen compiler, and it's entirely up to you to see that that happens.
This brings up another issue. Many companies may not port to other products such as Linux because they can't find the people to support them in general. Do you see a cycle here?
If schools support other products other than MS, one such reason being costs, this would produce more employees to support companies moving in that direction.
It may take some time, but it will happen unless things change. (Until then, research by a student in their own time outside of class to cover these areas will provide great benefits now or later.)
The drop out rate for Freshman CS students seems high everywhere.
If the same people are management for the company you work for, you are working for the wrong company!
I think there is CodeWarrior for Linux out (I was offered a copy over the summer by a colleague). If the version that came with the book is windows only and if you can not get access to a windows machine to install it and use, you could probably contact CodeWarrior and ask if you could swap the windows version for the linux port. Most likely they should let you, for either a low or no price at all. I still remember the age where you could trade in your set of 3.5" floppies for a 5.25" set for free (or s+h). This 'de-facto standard' may still apply today. Of course, CodeWarrior for Linux is a little messy - since they try to integrate it with all the gnu tools - so the same compiler differences might still crop up. At least you can still say "I did compile it on CodeWarrior"
Almost the same for me, except although they (DePaul) strongly encouraged VC++, it was not required. Wha I found odd was that almost nobody in the class had ever used anything else except another guy and myself. We both were using COdeWarrior. He used it for Palm dev, while I use it because it allows me to take projects across Win/Mac. I think you're right, people are gettting into programming for the money, which is bad for development in the long wrong.
"My break dancing days are over, but there's always the Funky Chicken" --The Full Monty
As in the real world, there are a lot of possible reactions by your instructor and TAs. A boss might be delighted that you're thinking for your self or looking to improve the system, or they might feel like you're threatening their authority. That's just the way people are (in any context), and it's not gonna change. If they say "no", the best thing you can do is try understand why. Maybe it's not an arbitrary decision, and maybe there are some very sound technical reasons. Maybe not. Either way, you'll learn something by figuring out why things are they way that they are, rather than assuming that someone just went down to CompUSA and stocked up on whatever was on the shelves.
The hard question to ask yourself: is this really a technical issue for you? Or is it a way to indicate to your instructor(s) that "I already know a lot about programming?" The best way to differentiate yourself is to write really good code, and the worst way to learn is to start out assuming that you're smarter than the people you're learning from. Maybe it's true, but save that assessment for the end of the semester.
From another former TA:
We run automated test cases for a portion of your marks on your assignments. That means if it doesn't compile on our compilers (which is the same compiler available to the undergraduate students on Solaris), you get no marks. No exceptions. We make this clear on the first day of class. So if you want to code in Windoze, fine, but it must compile, and the student is responsible for testing it.
Sure, we may be lazy. I only want to have to write one set of test cases. But also note that as a TA, I only had an iMac and an x-term at my disposal. I didn't even HAVE a Windoze account at school, and like hell I was going to purchase and install a Windoze compiler for my home machine. You think there's a budget for that (esp. at Canadian universities?)
So sometimes we make rules for a reason. It has to do with resource restrictions. I get paid for a fixed number of hours and my time and computer resources are limitied. I think it is a small price for students to pay to learn to develop in a new environment. After all, they are there to learn, right? ;)
If you truely like to program in C++, you may look at the unfortunate situation as an advantage. When you are making your programs in Windows under Visual C++ 6 or Borland C++ or Code Warrior, you are learning ONE METHOD that you may have to use in the future. However, you should also do the extra work, if you have the time, in the programming environment of your own choice. You can find many interesting differences between Windows 9X programming and Linux programming. You should take the time and energy to investigate these differences for yourself. If you make programs in BOTH environments, you will be a better programmer than 95% of the field. And there is always the possiblilty that you could learn to write emulators and such to get Windows and Linux to work together someday...
cd
A number of people have already said that choosing one platform only for a class makes a lot of sense, because otherwise testing is a nightmare, and TA's may have difficulty if asked to help people with a whole bunch of environments. I agree completely, but further, I think that using MS Windows for an introductory level course makes a lot of sense. Many of the people in your class won't have seen a unix system before. Since programming concepts are emphasized over environments or languages, this is a way of easing them in when everything else is new. I'm not sure if this second point applies to you (it didn't to me, but my first courses were on Solaris gcc anyway), but some introductory courses can have a mix of people in them, sometimes as broad as computer science, through physical science, and even some of the more technical other programs, like business. Probably not all that range in one course, but still. The first types will almost certainly use unix systems later in their education, but a business major isn't likely to. They might have a lot of difficulty learning to use a unix system, for no great end.
If you are modding me down because you disagree with me, use the "Flamebait" category, not the "Troll" one.
What I always thought was good about our classes was that they made us compile our programs on many different compilers to show that we had clean portable code. The assignments were never too machine specific and every once in a while a certain amount of points were taken off if the code didn't compile cleanly with cc, lcc, gcc and Visual Studio with all warnings and pedantic options turned on. Alot of thimes they'd even run our code through lint for kicks. Let me tell you, even the beginners learned to write clean code quickly. And as a bonus we had to learn our way around Visual Studio (which is a skill in itself). Now as most of our programming was done on Solaris machines to begin with, I never had any problem with being forced into an environment I didn't like. But it help to be taught to rite clean code and gain experience in other environments.
What a waste it is to lose one's mind. Or not to have a mind is being very wasteful. How true that is.
No brain, no pain!
Would anyone here care if the poster said "Help help! My school requires me to use emacs and g++. Personally I'd rather use MS Visual Studio, what can I do? Slashdot commentary: Excellent point, is this forcing of using the g++ compiler and other open source tools, blah blah blah"
I doubt it.
Secondly, you're at school to learn, not to do things you already know. School is supposed to open you to new things--if you haven't used MS Visual Studio, LEARN it, it'll probably come in handy one day, and heaven forbid, you may even find you like it.
Scott
I largely agree with him on this one. As a fellow Stanford student, I've talked to quite a few students who had serious problems in the advanced C class porting their code from architecture X (usually WINTEL) to the platform to be tested on, Sun workstations. There is a large potential for things to go very wrong when trying to port
Issues such as big-endianess versus little-endianess become much less academic issues and things that look like they *should* work stop, it is about the most frustrating experience you can have in Computer Science. My hat goes off to people who work professionally at porting games, but at this early stage of your CS career, the agony isn't worth it.
C++ is one of those portable languages. This means that programmers spend a lot of time porting the code from one machine or Operating System or IDE to another.
I think your entry level C++ class should concentrate on the language first and save the advanced problems of why Jimmy's code won't compile on Tom's computer for another class.
So, that means in an enrty level class you all have to be using the same machine, OS,IDE, Service Pack, Screen Saver, etc..
Keep it Simple.
...if this would have been "newsworthy" here on Slashdot if the school required g++ and the student wanted to use the M$ compiler...
We have more to fear from the bungling of the incompetent than from the machinations of the wicked.
On our first day of C++ class we spent the whole time learning how to use the Visual C++ IDE. Whats more, our text book foucuses mostly on the MFC. I mentioned to my teacher that I liked Cbuilder much better, and that Gcc is available on some of the college servers. She shruged and smiled. I had the last laugh when around 1/3 of the computers kept on getting compiler, and linker runtime errors! Hahaha, Should have gone with a real product :)
I'm just now getting my feet wet with programing. I'm a CS major, but I haven't done any profesional work yet, and I know I have a long road ahead of me. Thanks for taking the time to post your opinion.
The idea that a standardized environment helps the grader is a huge one. I would hate to grade projects submitted on just about any platform. But it's also important for the student. I like the feeling of knowing that if it works on my computer, it will work on my graders machine. You lose all of that with multiple enviroments.
Also, when I was in school I found that most of the porjects i was given could easily be ported. I developed most of my textual projects with Codewarrior, then ported them to UNIX to turn them in.
These are probably not the tools you are going to use in industry and that is fine. We are not teaching you a specific tool as much as how to learn how to use any tool you are given.
In addition to this, the intro classes (106a,b,or x) are very dependant on libraries. If you don't use their environment you're pretty screwed. Also if you expect help from the TAs (which are excellent) you had better be using the environment the class is.
Recently I have been helping some neighbors who are taking intro classes at the University of Utah. The level of help available is pretty shoddy from what I can see and if everyone went off and used a different compiler the class would be unmanagble.
If you already know gcc and such, great for you, you will probably coast through this class anyhow, but insiting on using a different environment is just creating more work for already overworked teachers and TAs.
Lasers Controlled Games!
That's NOT how the world works. Employers, like professors, frequently appreciate innovative/different appoaches to problem solving. Sometimes there are requirements, and sometimes there are suggestions. Find out which your development environment is. At the very least, you can develop in your environment and test in Codewarrior. WTF kind of advice is, "avoid starting any type of confrontation," (read: bend over and take it from the man/professor/employer when you know better)?
All it probably* does is treat both CR and LF as line-ending whitespace (line-ending in order to recognize a trailing backslash character; otherwise the position of whitespace is not that important, as long as various tokens are properly separated), and compile normally.
* Of course, this is all just my best guess, since I haven't taken a real look at the actual code of GCC, nor talked with its designers or implementors. So maybe they actually use some magic formula with an all-powerful AI to recognize CR/LF combos, but I'm probably pretty close with the previous hypothesis. But for all I know, I certainly could be wrong, but I'm pretty sure that CR+LF is a horrible DOS-ism that hearkens back to TeleTYpe days.
Incidentally, interesting looking game(s) you've got there... gawdz I miss Allegro, although right now I'm in between game SDKs (leaning toward SDL, although also wishing that ClanLib would get their act together and "officially" update their docs and API. But I digress... :)
--
while ( !universe->perfect() ) {
hack (reality);
--
while ( !universe->perfect() ) {
hack (reality);
}
I remember a second year course in which we were required to do each assigment in a specified, different language/platform. It wasn't a language course; we had 2 weeks to become proficient enough in the language to complete the task. Why did we have to deal with these obtuse languages! -- The side effect of this was that at the end, you realized that there weren't 'good' or 'bad' languages, just better languages for given applications. When I got my first job, coding standards were imposed upon me. The spacing and casing were all WRONG! -- why did I have to do it their way! Because 80 other engineers were working on the same codebase, and there's nothing worse than having to wade through someone else's "style" when trying to understand a chunk of code. Over the years, you will use many platforms and many languages; the good the bad and the very, very ugly; all for very good reasons at the time. An observation I can make is that none of the platforms I used in first year university exist today. (OK, it appears you will ALWAYS be able to use vi/csh!) Don't be a tool/language/os zealot. Learn early to be flexible. This industry demands it. Use your favorite language/IDE/OS at home when you're hacking around. Your employer or customers will invariably use something different. They probably won't be interested in your opinion. The tools you think are great today will make you laugh 5 years from now.
In C this should work, C99 standard:
void main()
{
int i = 0, a = 0;
for(int i=0;i10;i++)
a++;
}
well it does not, it only works in C++ and not in Visual Studio.
I am also a student at UKY, while CodeWarrior is recommended by the instructor and TAs, it was made perfectly clear to me that HP-UX accounts with gcc/g++ would be available for anyone who wished to use them. With introductory classes with ~300 students, I think it is a smart move recommending a windows development environment, considering a majority of students have probably never used a unix system.
To say that he's a fool is pretty harsh. Maybe 'whiner' would be more generous. And who doesn't like to whine once in a while? Also, some people just like to think that they're better than others. We all need an ego boost sometimes, but using Linux and g++ doesn't make one a programming god, or even a real codegeek. That takes something called skill =)
Portability should theoretically obliviate problems with multi-platform compiles. Write in valid ANSI C++ like you're supposed to, and you should be golden. Otherwise, what the hell good is a standard?! If the guy wants to use platform-specific calls to show off, then I'd call him a fool. I do agree with the other sentiment that having to compile across multiple platforms makes you more sensitive to portability issues. Knowing more than one platform, like being multi-lingual (I mean natural languages), broadens your mind and makes you aware of issues you weren't previously. No dogma.
To be honest, I don't like g++ or Visual C++ all that much (mostly for UI issues or retarded error messages), but that's because I cut my teeth on a compiler with a text-based IDE, Borland C++ 3.1, which I fell in love with. Sometimes I still miss it, but you know, the as long as the code compiles right, I can't complain -- too much.
Knowing how to use vi is a status thing, like being able to code down to the bare metal of the machine, sacrificing a pretty interface with power, making one rely on his skill to not screw up. Why else would anyone bother to learn it? =)
If you are learning C++ I assume you mean to become a programmer one day. Do you think a company or sponsor is going to stop everything and all switch to Vi and G++ because you don't want to use Borland (Which they paid big money for)?
Learn to adapt to your suroundings, the world isn't specifically designed for one persons requirements. Instead of complaining about it, do the opposite and master it, I have 4 C++ compilers on my machine and have programmed in all of them. You never know when you might be forced into using a tool so learn them now before it's too late.
---------- Kieran Farrell
..529th post?
Platform requirements are good. In the real world, you'll probably not be shipping a product on Linux, at least, not as the target platform (a port would be likely, though). Cross platform code is important, and this will force you to learn how to write it. Requirements for the platform are also good in that the majority of the class needs to learn to CODE, not learn a new IDE. If the department standardizes on one IDE, professors can teach it as they need to, students don't need to learn a new one each semester, and projects can be graded fairly and consistantly.
On a side note, the required platform for my Operating Systems class at VT is any linux system with kernel 2.2.x. You might find that IDE's are forced on you in the intro level classes, but in the more advanced ones, that will be left open. Someone in my class asked if they can use VC++, and the professor said "well, if you can build a Linux kernel in there, you definately deserve to pass this class... but I wouldn't recommend it..."
--
--
Just lurking, thanks!
I have a copy of Code Warrior for Red Hat Linux (Gnu edition) version 4 right here.
Basically, they ported the editor, and project manager, and use egcs as the backend compiler.
It's decent, but I found myself missing their backend compiler (It kicks serious butt).
They were working on a full port of the entire package (editor, compiler, debugger, etc) to Linux, but I don't know what the status of that it.
--
I didn't make the claim, but yes, I do have a job programming on Linux and FreeBSD with gcc/egcs. I'm a firm believer in having design meetings over pizza and and a few pitchers, which makes them go by much faster, and tends to get everybody involved relaxed enough that it removes a lot of ego from the design.
Not to be rude, but it sounds to me like you need to spend more time looking for a job that suits you well.
----------------------------
Yar, but the printf's are ugly -- you need to either have different debug and release versions (if you use the precompiler to remove them before release), instrument your code manually for testing (ugh!), and furthermore they don't help much if the problem is somewhere other than where you anticipated that it might occur. In my experience, problems are usually where you DON'T expect them to be, and thus where you don't have printf()'s.
Besides, printf-style debugging does you little good when figuring out the error involves stepping into some library call you happen to be using...
I agree, though, that having well-written code helps a great deal.
Trust me, printf statements don't hold a candle to a proper debugger. Learn to use gdb, or ddd (if you like the right-click-to-set-breakpoint thing rather than typing "break somefile:50").
Needing a debugger isn't the same as needing an IDE. You probably don't need an IDE -- but start doing Complex Stuff, and you _will_ need a debugger.
I an the systems administrator for a computing center at a university. The machines are half peecees running some type of Microsoft OS, half SGIs with IRIX. Every single day I fight with the lab manager over her priorities - she seems to favour the Microsoft platform, and I insist repeatedly that Unix is, if not dramatically superior, at least more important for students. The most important thing I've found is to always have answers to "yeah, well, I know how to do 'Z' in $FUCKED_UP_OS, but how the hell do you do it in Unix?" I have answers - viable answers that involve well-known, very usable software - for hundreds of those questions. The lab manager isn't stupid, just too tied to what she already knows, which unfortunately isn't Unix.
I will admit that I'm getting tired of fighting. After a while I do start to wonder whether there's an agenda involved; there have been several well-known incidents in which Microsoft has offered various bribes to schools to get them to teach only on their platforms. Any school that accepts these bribes is doing their students a terrible disservice, of course, but some still do. We aren't involved in such a thing, but I do sometimes wonder just how much pressure Microsoft and certain of their apologists are applying. Don't get me wrong - virtually every vendor offers bribes in the form of educational discounts - but Microsoft seems to be the only one to insist on exclusivity. And they're also the only one known to have offered bribes for favourable mention in papers and classes. This certainly seems contrary to a university's educational mission, but again, most of the higher-ups at a university are completely obsessed with money and have no real concept of education at all. Certainly that's true here, and that's really what makes it so hard to fight them and win. Both technical and educational goals take a back seat to money. It's interesting, then, that telling them about the enormous costs - licensing, maintenance, lost work due to unreliability - associated with the Microsoft platform doesn't seem to have any real effect. So it's hard not to become paranoid and assume that something bigger is afoot.
It's unfortunate that many if not most students enter the computer science field (which, incidentally, has little to do with coding, really) just for the money they can get when they leave. And certainly many of them have the mistaken impression that the Microsoft environments are where the money is. Fortunately, unlike most of the high rollers, the students can be convinced otherwise. I make it a point to mention, for example, that knowing Unix makes it much easier to get a job, and will almost always result in higher pay. Of a completely unscientific survey of several recent graduates I know, the ones doing only Unix work are being paid about $10k a year more than those doing mixed Unix/Microsoft work, and about $20k more than those doing only Microsoft work. It may not be scientific, but it is compelling.
Of course, the key thing in any C++ programming: AVOID PRAGMAS, as this seems to be the largest area of differences between win dev environs.
"Pinky, you've left the lens cap of your mind on again." - P&TB
"I can see my house from here!" - ST:
My father has taught Data Structures, which was also used as an intro to C course. We learned it on Linux boxes using vi or pico. That was the only way he wanted it done.
Is this any worse?
A prof has to grade all of the homework. If your code doesn't quite work, you do want partial credit. By keeping the base for the code the same, it is easier to pickup on student mistakes.
Also, by keeping the base the same, it is easier to pick out those that are cheating, wich is something all too common in the lower level CS classes.
-I just work here... how am I supposed to know?
I agree, and I wrote about it:
Bad Geeks in Information Technology
Wordnik, a dictionary project which aims to collect
That's because you called it t.c and used gcc to compile it, so it was compiled as a C program.
Instead, either call it t.cxx or use g++ to compile it. Treated as a C++ program, it compiles fine.
If you want to use vi/gcc then you should learn how to write portable code which will compile in that environment and the CodeWarrior environment.
I don't understand what the big deal is. You seem to be accusing the TA of trying to lock you into the CodeWarrior environment, but on the other hand the only way you're going to have a problem is if you lock yourself into this gcc environment.
One of my 1st year courses involved programming in Java. I spent a few hours once chasing down a null pointer exception that crashed on my computer, but worked perfectly on the SunOS machines at uni, and the windows machines of the other people in my group.
This was multithreaded code, so I spent some time checking for deadlocks caused by the faster speed of my computer. It eventually turned out that another group member had done:
and this worked perfectly on evryone elses system, except on the linux JDK, which ended up a few lines later with a NullPointerException. I never worked out why it didn't give ArrayOutOfBoundException, but hey... I couldn't get a simple test case either, to report the bug.
Every CS project I've done (I'm in the 2nd semester of 2nd year, doing some 3rd year courses as well) so far has had me finding some bugs in whatever language/compiler/utility library I use. This includes the assembler course, where I managed to get SPIM to misassemble some of the pseudoinstructions.
Just because it works on one computer doesn't mean that it works everywhere - thats why porting software involves more than typing make.
...if you're writing your code portable?
Never use any compiler specific extensions and compile everything with something like
g++ -Wall -pedantic -ansi
As long as the other compiler is ansi compliant you shoulnd't have any problem.
I've done this lots of times. To name a few:
* Using Visual C++ for developing for a HC16 processor (just recompiling with the appropriate compiler later. Created a massive HAL/HEL for that, but since the hardware prototype wasn't done yet I saved the company lots of time by being able to have code up and running before the hardware could even power up.)
* Using g++ for developing windows apps (did the algorithms in g++, doing the hardware specific stuff in VC++)
* UN*X (Solaris actually) programming using VC++. Since it was console only, the only thing I needed to do was recompile the code. No errors, no warnings, and a fully working program.
Unless you have to write platform specific code ofcourse, but if you're set on using g++ as development platform an emulation layer isn't that hard to implement.
I say, try to write code as portable as possible! Don't rely on nonstandard libraries. Unless they're ported already or you want to implement them yourself under the new platform.
We do that too, (heck, I was marking first-year courses when I was in second year), but if you didn't set up automated testing, it would still take them far too long - the supply of undergrads with clue is finite (and doesn't seem to be growing nearly as fast as enrolments in CS subjects).
Particulrly in upper-level subjects and where the enrolment isn't too outrageous, this is quite sensible. Usually, though, we restrict it to "must compile under platform foo".Any sufficiently advanced technology is indistinguishable from a rigged demo
--Andy Finkel (J. Klass?)
One other general point - it's amazing how *hard* it is to write good test drivers, isn't it?
Any sufficiently advanced technology is indistinguishable from a rigged demo
--Andy Finkel (J. Klass?)
Btw, java code on Windows == Java code on Linux == Java code on Solaris ==
In theory this is true. In practice there are many quirks in the various virtual machines that make this a tad more problematic than Sun's marketing people will have you believe.
I prefer java, but I wish to hell they'd open the standard up.
by Mike Buddha -- Someday the mountain might get him, but the law never will.
If you have an alternative policy that is even slightly practical for a class with 800-odd students, I'd sure like to hear it!
Well, here's what I did when I had to write test drivers for an 150-person class: In addition to automated tests for the TA's, I also wrote
. This would remove any object files, try to recompile, make sure that your code provided the right interfaces (it's amazing how many people forget to capitalize function names), and so on.sanity tests that the students could run themselves. In other words, when you thought you had finished problem set 5, you typed:
Later on, your TA would do:
. This would run the same sanity checks, and then perform the tests.After a few iterations, it actually started to work. Students realized that they could avoid pissing off their TA's by running a command line program.
In any case, it's not going to hurt you to be exposed to a different programming environment. At worst, you'll know *why* Windows programming is as horrible as Slashdotters often regard it :)
Agreed.
This is just like anything that you will encounter in the job world. A company wanting you to use a certian product. This is what they use, for some reason or another. So you use it. Don't like using it? Look for another job where they use what you want.
Should you learn differnt enviroments? Yeah. But looking for a school is just like looking for a job. You should have checked to see what they used for their classes. My old college got into bed with Microsoft pretty nicely. Their whole CS program ended up being a glorified MCSE program. So I transfered. Maybe you could do the same.
But my point being. Just use what they have and like it. You're in no real position to really change it. And they really don't care what one guy thinks. If you get enough student support or something to warrent a change then maybe. But here's the big thing alot of people don't understand. The world doesn't revolove around them.
Too many open-source zealots go into places and as soon as they get there babble on to no end about it. And just expect everywhere they go to just to drop whatever they are using now, and use something open source. Yeah, this has being working really well, but this new kid says open source is the way to go, so let's drop what works and do it. It doesn't work that way.
But oh well, this will just be marked flaimbait anyways. Don't even know why I posted it.
Are you a developer? Are you still in school? No offense, but you seem a bit naive. There are no jobs out there where you get to do all the things you want to do, with all the toys you want to play with. Even if you did manage to get a job coding on Linux with gcc/egcs, chances are you'd still spend huge amounts of time in design meetings, and arguing with your team about the new database schema proposal. That's the real world, learn to accept it.
----
"Oh, bother," said Pooh, as he hid Piglet's mangled corpse.
When I was at University I had to walk 10 miles to class uphill both ways, chop wood and haul water before and after class.
To add insult to injury, we had to write our programs on in Pascal on a CDC Cyber-series mainframe.
To make matters worse, the Cyber accounts had accounting enabled on them. You only had so many connect hours and CPU time before your account didn't work at all. This wasn't actually a problem unless you were fairly retarded or got stoned and forgot you were logged in.
Fortunately, the TAs only graded our printed source and the sample output. I wrote most of my programs in Turbo Pascal on an AT. Making it "work" for the TAs was just a matter of avoiding the TurboPascal stuff like strings and doing them the hard way with arrays of char.
Anyway, don't complain, at least you're not solving text mazes with Pascal!
Teaching environment-dependant debugger tricks in a general programming class is a pretty dubious concept. While being able to assume that you have a consistant environment may make things easier for the instructor, it is often doing a disservice to the students, many of which will find that when they get to the real world they will end up working with more than a few different environments in the future. If you are more able to adapt to different environments and aware of pitfalls to avoid when writing code as far as portability goes, I think you are going to be better off in the long run.
Think about it this way, if this is a general college course, you should probably be teaching programming language, concepts, algorithms and problem solving skills rather than teaching how to use a specific tool. It is hard enough to cram enough concepts, algorithms and problem solving skills into a semester without spending time messing with vendor-specific tricks. Teaching how to use a specific tool is probably the place of a vendor sponsored/affiliated training class of some sort, the kind that is 3-5 days and intended for people who already know the base language and generic programming techniques.
Unfortunately, at Drexel University, they crammed CodeWarrior down our throats. In our first C++ class, if we didnt turn in CodeWarrior project files, we would lose 50 points (give or take, it's been a while). And the reason? "It makes it easier for the TA's." Give me a break. I had three programming classes, a physics class, calculus class, and history class that term. I didn't even have a machine that would RUN CodeWarrior for Windows, or Mac for that matter. I used pico/jed/vi and g++ on my dinky 486 linux box. And my code was cleaner, faster, and tighter than any other students' code. I eventually had to go to the professor and DEMAND he regrade my projects, because I was getting shafted out of my points just because I didn't use CW. Of course, he preferred solaris to windows, so that helped.
The moral of the story? Sometimes, even begging wont get the TA's to let you use what you want. You may get stuck with the shitty tools.
"To err is human, to forgive is simply not my policy." --root
Oh, I was using version 2. Had support for C, C++, and PASCAL. Maybe I just never got the hang of it...
Eric
That's great, but in my similar experience, I was told that I would most likely fail the 'lab' section of the course if I didn't use CodeWarrior. I found out later that it was all a crock of shit. The only thing it did was make debugging a bit easier.
;)
Some of the exercises had us put break points into pre-written code to determine how the value of a variable would change. This was easier with the IDE, if you could ever get the hang of it, but I'd rather have just put in statements to print the value of the variable at the right time.
I did all of my projects in vi/g++, and when they were done, made sure that they compiled in CW, because you automatically got a 50 point deduction if it didn't compile there.
Oh, and I've never used it since! It doesn't understand Perl too well
Eric
IN the real world, unless you are programmng solo, or on OSS projects that are almost always unix based.. your company will *TELL* you what the build environment is, and what tools are available.
Will they force you to use CodeWarrior as an editor? No.. but they will not grant you any slack if others can't just fire the code up in codewarrior and do their builds.
And for the purposes of learning to code c++, what difference does it make anyway?
Your teach just said 'When you submit your chit, it must work on this version of Codewarrior here.'.
He doesn't *care* how you develop it, he's saying that your *objective*, your *mission*, is to produce code that he can compile under codewarrior.
How is this 'bad'? or 'narrow minded?'.
When you get your programming job.. and they say 'we use IRIX servers, so your code better work on irix'.. what are you gonna do.. code it for Linux and then say 'but you're being narrow minded?'
The real moral of the story is that your prof was a jackass. You took some code, and made it to compile in another environment? Sounds like a non-trivial task to me, and certainly demonstrated knowledge of the material. Combine this with previous grades, and you certainly should have gotten an A in the class.
Jesus was all right but his disciples were thick and ordinary. -John Lennon
...so I've got some suggestions. (for the freshman, not for the pseudo-intellectual questions that Cliff added)
:-)
I don't know how your school runs the intro C++ classes, but I imagine that because of the large number of students and necessity for individual attention, the TA does quite a bit of the teaching and grading.
The class dictates the use of the single development enviroment and platform because of the necessity of standardization when dealing with such a large group. It's like the regulations in the military - some things just have to be done a certain way in order to effectively manage a group of that size. Imagine how difficult it would be for *you*, if you had to grade 30 different projects, coming from 3 different plaftorms and 6 different development enviroments? Each platform has it's own quirks, and you've generally got to fundamentally think a little differently to put the code into the context of the OS. If the grader has to shift gears with every student's work, he can never get into the groove of grading. Not to mention, most of the time, the majority of TAs/Graders for these intro CS classes leave a little to be desired in the 'clue' department.
It's CodeWarrior on Windows because a) it has to be Windows and b) CodeWarrior is cheaper than Visual Studio. CodeWarrior really sucks on Win32, and it creates a lot of headaches for even the computer-savvy. (we used CodeWarrior, too) Microsoft has started courting colleges in the past few years, offering deals to departments and students if they adopt Visual Studio as their default development enviroment - but that's really irrelevant to the point.
So now, hopefully, you understand why they insist you use the same platform, and why they insist you use CodeWarrior. Now let's talk about exceptions.
It all depends on who grades your work. If your TA does all the work for your section, go to him/her and ask. Most likely, since you've got a clue, he'll be pumped, know he really won't have to baby you through the semester, and will be perfectly happy to let you use g++. But remember, he might be one of those without a clue and deny you the opportunity. If that happens, well, heh, it's still early in the semester, switch sections.
J.J.
Arguably even if you weren't formally taught the concept of a source file in class, you should pick it up over 4 years of CS training. I wonder how many applicants would stumble.
Sadly, I graduate with people who still had trouble with the concept. 8*(
Aah, change is good. -- Rafiki
Yeah, but it ain't easy. -- Simba
5. Ease of interface (why spend time trying to teach kids to use a command-line debugger, a command-line compiler, and vi or emacs--none of which _directly_ contributes to your ability to produce C++ code--when it's easier to spend a day showing people the "new file" and "compile" buttons)
Because the rats will leave the ship without even knowing what a source file is. I completed my undergrad at the Armpit of North Carolina Universities. The had mandatory usage of some crappy M$ DOS IDE. It took forever for the system to come up on the schools network, so I'd just use DOS edit to modify the files. The TA was astounded when I opened one of the source files in a text editor!! He was completely baffled when I showed him that you could call the compiler from the command line and save 5minutes waiting for Windows and then the IDE to come up.
IDE shouldn't be allowed until students know what they are doing with the IDE in the same way that gradeschoolers shouldn't be allowed to use calculators until they know how to add.
Aah, change is good. -- Rafiki
Yeah, but it ain't easy. -- Simba
I don't see why this is a big deal...think of it as training for the real world, where you will not always have a chance to use what YOU want.
Besides, you will a learn a lot this way...everyone at slashdot values cross-platform development right? And what better way to learn than by coding your project in code-warrior, and porting it to g++, or vice-versa?
Instead of making this a religious issue, treat this as a real learning opportunity for yourself. You will become a much better programmer for it!
Here at ASU, we have a very simple answer to this problem. Write the code wherever you want. When you are done, upload it to the schools General server. Compile it there, and make sure it runs there.
Then, use a program in the professor's user directory to submit your code. Now you're done. It standardizes to a particular complier when you are done, but you can use any "environment" to write and test your code.
Got HTML? Want LaTeX? Try html2latex
Unless of course the language is elisp where the language *is* the ide :-)
Oh, like VC++'s own header files? Oh, and I have used the tool.
What school would that be?
VC6 has a number of incompatabilities in the *core* *language*. For example, consider this:
for(int i=0; i10; ++i) {;}
for(int i=0; i10; ++i) {;}
Perfectly legal in The Standard and any other compiler, but it breaks in MSVC because the i isn't part of the for loop scope.
As for the use of console-based editors such as vi and emacs, that's a matter of personal preference. While I'm ready to dive into emacs as needed, today's large class libraries and practicing reuse make it practical to use and IDE that features things like class explorers, and that "Intellisense" feature that tells you what the properties and methods of the object you're using are.
I do agree with your take on the compiler -- as long as you're handing in ANSI C++ (and getting the assignment right, of course), it shouldn't matter which compiler you're using. However, for the beginner, I'd recommend C++Builder over MSVC or vi as the editing environment.
This sounds very much like the DejaGnu:
It's manual can be found at this link. It's interesting that this came up in this thread, though it'll probably be largely ignored considering how deep it is in the thread and how many people have replied to this topic. I've been contemplating trying to get the crew at work to write their code with a number of tools that they're not using right now, such as DejaGnu, Nana (a nice library for assertion checking and logging), Autoconf and Automake, and perhaps even Autogen. I think it would give a good, standardized base from which to work, and force some of these half-assed coworkers to live up to the name "hacker"! Alas, the troubles of trying to convince coworkers of a "better way" is not the topic of this thread, but I thought the mention of the tools would relate well.
*cringe* It sounds like you've enforced some coding style standards upon your students that are not "C-compliant". Yet another topic for discussion, "What stylistic standard is 'right' for C programs? C++ programs?" We've all got our preferences, and were I a student of yours, I'd cringe every time I wrote a capatalized function. *double-cringe*
assert(expired(knowledge));
Not at all. They are teaching you the concept of debugging a running program. They cannot teach you to use every damned debugger on the planet. Once you've learned the concept of break points and such, it's easy to figure out how this works with other environments. As for people working in multiple environments, over time, yes, you'll be exposed to multiple environments, but you generally will not be working with three different IDEs on windows at the same time.
They are teaching you those things. However, they have to do it with a specific tool. There's no way a university can teach dozens of students to use every compiler environment on the planet -- nor do they have the budget to go buy every one of those compilers. In the real world, you have to learn to adapt to the compiler you're forced to use -- and with C++, this is a big issue as they all do things differently.
In order to learn to program, you have to compile your code. The instant you compile your code, you've locked yourself into dealing with that compiler. Trust me on this; I know far too well how non-portable C++ code and compilers are. (Several problems with the DCTI clients were attributed to various C++ compilers -- a few years ago. I've spent several months converting C++ code designed for Sun Workshop 4 to work with MSVC++ -- no template repositories and draconian type casting rules... The Cosm code base is 110% C to avoid all the C++ compiler bullshit.)
> > Your account may be revoked and disciplinary action
> > may be taken if you are running an unsupported OS.
God damned police everywhere. The most insignificant details of one's personal actions constantly monitored like the gold vaults at Fort Knox. Do the school regulations specify which hand you're to use to hold your dick when you take a piss? For all the hot air about "freedom" being a uniquely Amerikan ideal, a panoptic police state fits the TV-watching morons (cf. "Survivor," "Big Brother," "Cops," etc.) who infest this country like a tailored glove.
Just wondering, unless he tells them, how the Hell would those bought-off idiots running "ResNet" at your son's university know that he's running Linux on his computer in his dorm room instead of their beloved Windows?
Yours WDK - WKiernan@concentric.net
You say this as if it was a bad thing. However, in today's hot CS job market, finding a new job is no longer the choire it used to be. I say: go for it. With a little bit of luck and planning, you'll be able to use your favorite environment at your new employer's. You might even get better pay.
At the introductory level? Mind you, teaching non-conformant C++ at the introductory level is as bad of a crime as not teaching them C++, but portability, IMO, shouldn't be the objective of a 100-level class.
Mind you, my views are clouded because it seemed that almost all the departments in my school held their introductory-level courses as a "service" to the other departments. If you really wanted to learn, you continued on to the 200 and 400 level courses (for some reason, the faculty at my uni were too snobby to have 300-level courses). Portability was a requirement when I took the higher-level classes (such as network programming), but at the lower-level, they just told us what environments were available to the TA's (which included AIX, SunOS4, Solaris 2.5, IRIX, and Linux), and told us to develop for those environments.
Mind you, I ended up developing in multitude of environments, and I credit that with my current success in my career.
--
First, an answer to the "Cliff" comment...
Reading through the comments, it's fairly easy to separate those people who have been TA's from those that have only been students. To say that requiring a single development environment is the result of a professor's ignorance or the desire to make a student's life hard is ridiculous. It's not about you. It never was about you. You don't particularly matter that much.
I don't know that Code Warrior is the best learning environment, but reasons to standardize on something, and typically something GUI include...
1. Grading ease
2. Availability of the program on campus
3. Cost of the program
4. Ability of most students to run the program on a home computer
5. Ease of interface (why spend time trying to teach kids to use a command-line debugger, a command-line compiler, and vi or emacs--none of which _directly_ contributes to your ability to produce C++ code--when it's easier to spend a day showing people the "new file" and "compile" buttons)
6. Ease of support (if you leave the option of the environment open, it's likely that someone will use a system that you are unfamiliar with, be it gcc&emacs, Visual Studio, Watcom, etc. To help the most students, you'll need to be able to do it quickly, which is not possible if you have to learn the environment, or several environments, first)
Now, to answer "Sadistic Yoda," you should develop in whatever environment you like, but make sure to save at least a day to compile and run your software on the recommended system. You may learn more about the language this way, as different compilers will support different options, and you may be able to detect more bugs, since different debuggers might find different errors.
At any rate, it shouldn't take that long to test w/ Code Warrior as long as you know and use the intersection of C++ that it and gcc support.
"People can't go around doing things just because their right." -- Officer O'Clancey "Toxic Avenger"
Thus, professors usually have no time for people who are asking for help (or having problems with) technical things that are outside the scope of the class, and outside of the materials said to be supported at the start of the course.
However, if you take the time to make an appointment and go talk to your professor -not after class, not during drop-in times that are supposed to be for people who are having trouble with the actual contents of the course- you'll probably find that your professor is very accomodating and helpful. They're there to help you learn the material, not kick your grade down a couple notches because you have a compiler or OS preference.
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).
-- Could you use my software consulting serv
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.
-- Could you use my software consulting serv
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.
-- Could you use my software consulting serv
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.
-- Could you use my software consulting serv
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.
-- Could you use my software consulting serv
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
-- Could you use my software consulting serv
I really don't see what all the fuss is about. I work on a C++ commercial library and I compile the same code on g++, Visual C++ and C++ Builder. As long as you keep the implementation specific code in different files, your program is just a few #ifdef's away from being portable.
Accusing the TA of "not really teaching" is quite a bit unfair. Asking the TA to be able to replicate any student's programming environment in order to grade code is ridiculous.
Joey has GCC 1.0 on BeOS? gotta get that installer. Susy has egcs on Solaris? gotta get THAT installer. How about Bobby who has Visual Studio 4.56 running on windows 3.1? Better sharpen up those quintuple boot skills. Or figure out how to use use VMware in a hurry. Either way, give the TA an extra semester or two to finish grading.
According to this question the textbook comes with a compiler. This means that lots of the sample code, excercises, and information in the class is geared to work on that particular compiler. Answering questions on why "Foo didn't work for me during the homework assignment" is a waste of class time.
Would this question have been framed so negatively if the class required GCC/Linux?
When I took c++ the instructor told us we could use any compiler we wanted to. The school only offered M$VC++ and Borland C++ on the lab machines, but we were welcome to use whatever we could get our hands on. Of course, he didn't have a TA and he didn't grade us by running our program. We had to hand in hardcopies of our source. He also had a godlike knowledge of c/c++ and had seemingly memorized the standard libraries included with many and various compilers (as in "Yes that will work, but only under M$VC++. To run it in Borland you'll have to change MFoo() to Bfoo(), or you could use SFoo1() with SFoo2() and it will compile under both of those and under Unix as well.").
I wouldn't execpt that level of knopwledge from most instructors (although maybe we should...) and I especially wouldn't expect it from a TA. Just write it in whatever environment you want, save it as a standard text file, and make sure it will compile under whatever they want you to use. Porting is a valuable skill that you will need when you get into the "real world" anyway.
Under capitalism man exploits man. Under communism it's the other way around.
I use three different versions of GCC (for Linux, DOS, and even Windows, and they all accepted the DOS-style CR+LF newlines in my game's source code. Could that be because CR+LF is also the standard in many RFCs?
<O
( \
XGNOME vs. KDE: the game!
Will I retire or break 10K?
In my CS I and II classes, programming in C and C++ respectively, we were supposed to be using Borland's C++Builder. I approached my TA, and asked if we were going to be using ANSI C and C++, nothing more, nothing less. I also asked if I could just use gcc/g++ on my own machine. He said we were, and also said that I could use gcc/g++, but that they wouldn't be able to help me necessarily with any problems I would be having getting it to compile. This was for 350-person classes. I knew other people who were also using gcc/g++ on their own and the school's Sun boxes.
But then again, we also were handing in our assignments on paper, which is worse to me (9 assignments in the semester, each and average of 9 pages- a good 24000 pages of homework over the semester, wasted). I had a little email war with the professor over it (he said electronic submission doesn't work- it worked for my highschool in non-computer related classes!), but was stuck with it. The TAs weren't recompiling out programs, but checking places for a correct algorithm and other specs of the assignment. Frankly, I don't know why this made it onto Slashdot- I would guess that for most simple C/C++ assignments (and some not so simple, provided they're using stdin/out), code that compiled on gcc/g++ probably does CodeWarrior too.
I also had to pay for the computer access fee for the course, which is used towards the development machines and software for the class- which I didn't use all year.
What also bugs me is that this coming year we have to use C++. Hell, I even offered to write Motif wrappers for GNU Smalltalk or Squeak so I didn't have to work with such a primitive language. Not surprisingly, the prof wasn't down with that.
Moral of the story? Try to work something out with the TA, deal with using CodeWarrior, or transfer schools. Probably in that order.
Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
You have to appreciate their p.o.v though, they're going to have hundreds of students handing in code of varying levels of legibility. Trust me, marking that is no easy task. Requiring it to work under a given platform goes a long way towards helping the TA's. ;) (Go Waterloo!)
At my school, for instance, they now use Java for first year programming. They provide an environment, and if you want to code in a different setup they give you the information. Java solves this problem a little, since it's fairly standard.
And once you're halfway through second year, what language you code in is irrelevant. Sometimes they limit you to a collection of 3-4, (C, C++, Modula-3, etc) but by and large you can do what you want.
Of course, every school won't have the resources (and TA's) to do that. But then again, if they did, maybe we'd have more competition in the ACM contest.
Is this limited form of teaching really teaching?
Yes. It teaches you that you can't always have things your way.
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
This may reflect more on the crummy cs program that I was in, but nobody in my classes liked programming with emacs/vi and g++.
We were forced to use a buggy version of ddd, despite the fact that the version that the school used did not work on the public workstation!
IDE's are a good thing for people who are new to an enviroment, especially students. I used an old version of Delphi to automate a couple of menial tasks for our operators, and had a working program written in about 5 hours. If i was using a new language to develop something with just a text editor, I would not have had the time to develop the gui or add extra functionality.
In my view, if it saves my time (and works), it is good. IDE's are good. I could care less about ideology.
Conformity is the jailer of freedom and enemy of growth. -JFK
Codewarrior is actually a pretty awesome development system. It can do things more elegantly than G++ (project coordination comes to mind). These things can be done in G++ but with significant effort. I say bite the bullet and get Codewarrior. You will have other teachers that use G++, and some that use totally other systems. Stick your tongue in your cheek and forget about it.
- I don't care if they globalize against free speech. All my best free thoughts are done in my head.
That sort of questions bombarded our teachers when they taught our class C/C++ last semester (note - only DOS apps...no windows ones).
They first gave the class Visual C++ installed on computers, and taught them how to "create a new project", etc. etc. Then they happened to install Turbo C++. Students didn't use it - We have learnt Visual C++, not Turbo C++. Then some students attempted Turbo C++ - and were suprized to find it was similar to Visual C++. "They have copied it from Microsoft...", I heard. Then some students became proficient in using the Turbo environment and forgot about Visual one. Now - "I have learnt Turbo C++. But forgot Visual C++."
Then people ask me - I typed:
10 PRINT "HELLO"
20 END
in BBC BASIC a long long time back, will it work in GWBASIC ??
I take a sigh, and tell them "YES, it will" as the last explaination of the fact that they have to deal with language, not environment or compilers.
I've used codewarrior on my mac to build up code to run on Solaris. For the vast majority of cases it has been instant compile. In the cases where g++ didn't play the same as Codewarrior, it was g++ being a whore. Quite frankly, if you're taking an intro course, you should be open to new and innovative ways of doing things. The compiler package that metworwerks has put together is IMHO first rate, far more informative for debugging code, nicer to assemble stuff in, and completely compliant and up to date. Furthermore, I can do Codewarrior on Mac, Windows, I bought a copy that runs on Solaris and prefer that environment to emacs for most stuff ... it's a sweet package.
I'd recommend bringing up that you currently compile stuff on an alternate platform, and ask if it'll be an issue, it's a good introduction to where C becomes platform specific. Then use both environments for a while to understand what they each have to offer. The time to be obstinate is not when you are a freshman. Take that from a fifth year senior. (double major, not just slow)
Turning it political was stupid. Asking the techincial question of the differences between CodeWarrior and g++ isn't.
Worse case scenerio...write it in g++ and then bring it over to code warrior and clean any environmental issues in code warrior before turning it in.
No offense folks..but when I went to college (all of what, 7 years ago?) they were still using mainframes for some of the courses.
Presenting the college with a new way of doing things is good. Demanding you be allowed to do it your way is bad. Look at it this way...you can show them the better product..you can't fix their intelligence...if they want to be stupid they're going to be.
It's easiest to teach the entire class by making sure everyone codes on the same platform, using the same development toolkit.
If you already know how to code, by all means, petition the college to allow you to skip the intro courses. Later courses will allow you to program in whatever development environment you wish, in my experience.
Freshman-level courses, though, NEED to be taught on a STANDARDIZED platform/environment, because it's hard enough to teach people to think like a programmer; it's even harder to teach them if they're not using the exact same frames of reference as you are.
If you really want to skirt the rules, try installing CodeWarrior for Linux, programming your assignments there, and making sure they compile under the Windows version. Other than that, forget about it.
- A.P.
--
"One World, one Web, one Program" - Microsoft promotional ad
"Remember when the U.S. had a drug problem, and then we declared a War On Drugs, and now you can't buy drugs anymore?"
Judging by the comments here, it looks like there are a lot who have had similar experiences.
Having been in a similar situation myself, I think the reason for the frustration goes beyond simple convenience (although that certainly would play a role).
I'm guessing that if a lot of Linux users are like me, most of us did use DOS/Windows/[insert inferior platform of your choice] earlier in our hobby computing experience. Then, when we found something that was so much better, we thought, "Why haven't I been using this all along? It's so much better, does all the stuff I need it to do, all the source is available, AND it's FREE!" (as in beer, because upon initial introduction, we probably haven't quite yet learned the concept of free as in speech.)
Then (speaking from personal experience here), one walks into an educational institution with the mindset of having discovered these great tools which cost nothing and blow the $100/copy commercial-ware out of the water (in some areas, but maybe not all). We soon discover that many in the organization -- especially the ones making the crucial decisions -- are simply NOT INTERESTED, despite all the advantages. This can be quite befuddling.
After all, we managed to switch to what we think is a far superior solution. We took the time and effort to repartition our hard drives, read the HOWTOs, tweak the modelines in our XF86Config, recompile our kernel, and twiddle with the rc files to get everything perfect. And we are very pleased with the result! Therefore, we wonder why they seem too stupid and short-sighted to do the same?
This is especially true if you believe that open source/free software is the way of the future. Who wants to be stuck learning how to train dinosaurs, when the dinosaurs will all be extinct in ten years?
That said, I do believe that I personally learned more about writing portable code as a result of having been forced to make all my stuff also work under VC++. As one of the other commenters also mentioned, I also discovered to an even greater degree why I find it so much more pleasant to work under Linux. ;)
absolutely right!
:)
:)
having just ta'd intro to c++ last year, i can think of a miriad reasons for sticking to one commercial dev environment only - you don't have to worry about non-standard implementations of c++ (ie. "what do you mean my code can't work? it works just fine in my turbo c++ 0.39beta for dos!"), you don't have to worry about students using environment differences to cheat (ie. "what do you mean my code can't work?", again), you don't have to worry about usage differences (ie. "to insert a breakpoint hit F9, unless you're using xgdb in which case you hit C-space, or if you're using codewarrior, in which you right-click in the margin to the left of the line in the editor, or if you're using turbo c++ 0.39beta for dos..."), you can actually teach very environment-dependent uses like debugging tricks and project management, et cetera, et cetera...
but, we've always made a point of allowing people to use unix tools if they want to. it makes us very happy if someone asks to do that - it usually means they know what they're doing and they'll be a good student.
My other car is a cons.
And to address another point that was mentioned in a few peoples' posts, the college where my son will be attending has a very strict policy on students' computers in their dorm rooms which are connected to the ResNet. To quote from their FAQ:
Their "minimum configuration list" for PC's includes Win95/98, NT 4.0, and tentative approval for Win2K after May 2000 (I guess they haven't updated that page in a while) This, of course, is a whole 'nother can of worms, that's probably been discussed in previous topics.
- Mike
In my uni they just hire a bunch of upper level undergrads to grade the assignments for intro CS classes (the ones with lots of people). They pay them like $7/hour and free pizza during all-night grading sessions. Sometimes you just demo your program to the consultant, in the computer lab assigned for the class. Such a demo is good because then you have no excuse for it not working.
FYI for the intro CS class they use CodeWarrior here too, but for other CS classes it's either Visual Studio or gcc/g++ and I've has classes where YOU PICK YOUR LANGUAGE OF CHOICE! How cool is that.
Since it is an entry-level course, I think its a perfectly valid way to teach programming - all the class organisers are trying to do is to keep a level playing field, as well as to encourage co-operation (note to students: NOT plagarism!!! ;o).
Things at this level are all about getting the basics in place, and forcing one platform onto all students is one of the best ways of making sure that knowledge assumed by later classes is definitely given in the early ones. Oh, and it makes the lecturer's job easier if you have to submit code for marking if he can load all code into one app instead of having to go to different machines or reboot into a different OS just to check one student's work. Do what I did - code the uni stuff the way they want it, then redo it in your preferred environment (or indeed language - I converted stuff from my Java classes into C++).
Game dev and music blog
Poster, what this really means is the TA, much less the lecturer, is NOT EVEN LOOKING AT your code to start with.
As a former TA speaking here: No fucking shit. You think the TA gives a toss about your worthless self? It is to laugh. Ho ho! The TA is trying to get through school just like you, and wants to put in the least possible effort for the money. Like, duh.
You are being deprived of informed criticism of your work by a competent and skilled instructor/authority beyond your own judgement.
If you don't understand something, then come ask about it in office hours. If you don't, then I assume you figured it out and I give you perfect marks, that's far easier than actually bothering to figure out if you have a clue or what.
I've got better things to do, like my own work, drinking beer, and shagging all the little hotties in the class. (Note to prospective TAs: Your school probably has some equivalent of mine's CMPT 100, "Introduction to BASIC programming for Business Students". It is full of 18 year old wannabe MBA hotties with no fucking clue whatsoever who look up to you as second only to God. Can you say "target-rich environment"? And this nincompoop thinks I give a flying fuck about whether some geeky frosh can write code or what. Hah!)
Often education is much more about life skills than people think. At some point, most people have complained to their teachers that what they are learning is pointless. The answer always comes back that we are not just learning the material but also study skills. In the work I have done I have not learnt much about computers but I have learnt a lot about working for people (they never know what they want and they force you to do stupid things). If you work for people, they may force you to work in their standard environment. They may force you to use a commenting style you are not used to. They may make you use libraries that you do not like. The teacher here, while making life easier for himself is mirroring what some companies will do. Now is the time you have to learn to be flexible, even if you think the people in charge are wrong.
Secondly: It's a kickstart to learning the language. I wouldn't reccommend attempting to map codewarrior quirks to gnu quirks in your first few programs, especially when you're trying to learn.
Lastly, to actually LEARN you can always develop on the unix boxes and port it to codewarrior. That's valuable practical experience in writing portable code.
And tell the TA you're doing it, too.
--Dan
I can think of many reasons why I would require students to use a single environment, particularly when teaching an OO language. Some of these include:
(1) so the professor can distribute lines of code and libraries for all to use in projects;
(2) to assure that code may be tested directly and automatically against testbed code; (the single worst part of graduate school for me, was the process of grading computer programs);
(3) to facilitate group programming projects.
In the first- and second-year CS courses I TAed
(waaaaay back in the Dark Ages when Pascal was standard), the reasons we specified the environment included:
1) Availability of lab resources. Often times the computer lab is only going to have one type of machine with a limited selection of development environments for the various classes. Today this is less of an issue, because most students will have their own computers (further increasing their desire to use a custom platform).
2) Compatibility. Besides basic issues with the compiler and standard libraries, we often provided completely or partially implemented code in the course of assignments, and could only afford to make sure that it worked on the specified platform. Imagine if you were a student trying to get an assignment working and discovered there was a bug in the code provided with the assignment when compiled in your environment. Clearly we had to define this
behavior as "at your own risk".
3) Proprietary native interfaces. In the very introductory class, we were using Pascal on Macs, and provided native widget libraries so the students could create more visually interesting programs than println('hello world'). Today of course there are cross-platform alternatives.
4) Mechanical concerns. As others have pointed out, testing submitted programs generally involves both compiling (to make sure there are no warnings) and executing them to evaluate that the output is correct. In classes of up to 200 students, no way can you be prepared to do that on 4 systems.
5) Support. TAs could not necessarily be expected to help with compiler or dev environment issues for more than one platform.
Today students have the luxury of a well standardized C++, that allows you to write compliant code that will compile under g++,
msvc++, or one of the edison design group
based compilers, not to mention Java. Nonetheless, in the context of a particular course I would still expect to see a pretty standardized configuration designated as the target platform for assignments.
That being said, advanced students could and
can still always follow whatever development process they wanted "at their own risk". Just don't expect your TA to bail you out if you run in to trouble!
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.
-- Could you use my software consulting serv
Does the school have Windows machines with Code Warrior on them that you can use to compile your assignments? If so, I don't understand what the big deal is. I don't think it's unreasonable to expect the TA's not to want to bother fudging around with code to get it to compile on the platform they're using. If they don't provide the environment on machines at school, and expect you to go out and purchase your own box which runs Windows, then maybe I'd complain. (Although apparently many schools in the US expect students to purchase their own computers and do everything at home; here, the labs on campus provide all the facilities you need for your courses. In this case you may have no choice, but see the texbook analogy below.) But otherwise, who cares?
Most CS courses here are the same way. If your code doesn't compile on the platform being used (often g++ on Unix), tough. Sometimes the software needed isn't available on Windows, so students who use Windows at home have no choice but to use the school's Unix facilities. And even if you're using Linux, your code is not guaranteed to compile on their system - differences between gcc versions, etc. may cause problems. If your code doesn't compile, tough - it fails the automated testing, and you lose a bunch of marks. Presumably if there's a problem the TA's are nice enough to try and fix code that doesn't work, and/or assign some marks, but I don't see what's wrong with expecting students to test their code on the school's systems before submitting it.
This is no different than being forced to do assignment questions out of a $100 textbook, even if you really don't need the textbook to learn the course material. This happens ALL THE TIME. You most likely buy the textbook anyway, and use it, but you can also just find a copy in a library or borrow from a friend. Likewise, in this case, if you don't want to buy Windows, you can either find a public workstation (presumably your University has some), or find a friend who runs Windows and compile on their system. How hard is that?
Ok, I'm on a bit of a roll here now. I'll probably get moderated down for this, but I don't even understand why Slashdot would post this question. Actually, the question is a good one; he merely is asking a technical question. It's Cliff's attempt to turn it the discussion into something political with his commentary that's stupid. Oh, poor Linux user! The horror of having to use Windows for 2 minutes to verify that the code compiles and runs on it (assuming they're not using features or libraries specific to CodeWarrior, which for an entry-level C++ course I would assume they're not)! I know we're Linux zealots, but why can't some people in this community just accept the fact that NOT EVERYONE USES LINUX, and there are going to be occasions when you're FORCED TO USE WINDOWS (or Macs, or...) For god's sake, stop WHINING and being offended and deal with it!
"When all you have is a hammer, everything
else look like nails."
The axiom above is true for many real life situation, including programming.
If you are limited to only VB or G++ or vi or whatever, make the BEST of it.
After all, you are in the class to LEARN something, might as well do you best LEARNING THE PROPER WAY TO DO THINGS RIGHT THE FIRST TIME.
VB or vi or G++ or whatever are just tools. You do not have to be attached to ONE SPECIFIC TOOL. What is MOST important is the SKILL TO CREATE, and that skill should NEVER be limited to any specific tool. You can "graduate" from using M$ stuffs, but as long as you have that skill to create newer and better things, you can always migrate to OTHER KINDS of tools available.
Hope all of you can glean the skill to create despite the obstacles the power-that-be want to throw at you.
Muchas Gracias, Señor Edward Snowden !
Of course, many students wrote their code in (insert favourite moronic Windows IDE here), and just copied the code directly across to the Solaris box, and submitted without even checking to make sure that the program compiled. Many times, the program failed to work, and the students were marked down regardless of their protests of "but it worked at home". How are we supposed to know whether it worked at home or not? In any case, a little bit of investigation usually showed that the program had a combination of bugs that gcc/glibc/Solaris trigged but DroolIDE's compiler environment didn't.
If you have an alternative policy that is even slightly practical for a class with 800-odd students, I'd sure like to hear it!
In any case, it's not going to hurt you to be exposed to a different programming environment. At worst, you'll know *why* Windows programming is as horrible as Slashdotters often regard it :)
Any sufficiently advanced technology is indistinguishable from a rigged demo
--Andy Finkel (J. Klass?)
Everything worked flawlessly until the final. I had a 98 average in the class, but the final exam was to take a program and modify it. Well wouldn't ya know it, the stoopid program wouldn't compile under gcc, cuz of a few function calls depended on a library that was different in gcc than it was on borland.
So being the procrastinator that i am, i found this out the night before the final was due, and by 8 the next morning i had the program compiling/running with gcc. It was due at 10. So I had to hand my port to gcc, but of course i got squat on the final, and my final grade ended up being a b. sucks huh??
the moral of the story is, yes there are valid reasons for a class to require a consistent work environment. This is a prime example, If i'd used the borland thing, i wouldn't have had that problem, but i'd be out 90 bucks and i'd have to have used windows. I'll take the B.
i was in almost the same exact class. the teacher explained that everyone should use Visual Studio 6, because that is what is provided by the school.
All i had to do was raise my hand and ask if i could use vi and g++ on my personal linux box and he was almost overcome with joy, i actually had previous knowledge.
After i asked, the teacher had to explain what vi, g++ and linux was to the class. Seems a lot more people are coming into computers for money and not the love of the game.
just ask if you can, usually they are flexible for students who actually have some original thinking in their skulls. Also, on the plus side, they will probably remember you and possibly favor you for taking a unique approach to the first problem of the class.
xavii aka bob
Its not about tech support. If that's all the problem was schools wouldn't care too much. The problem is really cross-platform/compiler compatibility. As sad as it may be...something written for g++ *might not* work on Code Warrior for Windows, or Visual C++. This is less of a problem with C compilers, but still an issue. Your TA needs to be able to compile whatever it is you wrote, and so they pick one platform they will use.
For example, at my school they recommend a particular compiler, and ask everyone to use it (under the Macintosh, since that's what dorm clusters have)...for lower level C/C++ classes. At higher levels they reccomend gcc/g++. But the issue is that you really should be running the same compiler that your TA/TF is, or the results will be somewhat unpredictable. You could probably get by, but its always a major risk. And if it doesn't work on their machine, you can't just say "well it worked on mine" because you were using an officially non-kosher compiler to test.
In contrast, Java classes (where most compilers are relatively conformant) encourage the use of whatever compiler you want. They say it might be wise to test on the "target" compiler (JDK 1.2/3 on Solaris), but that its not necessarily "required".
My advice is develop at home - just make DARN SURE you test it thorougly on the foreign compiler and fix all compiler errors before submitting. (and you probably will have some)
1) You need to learn how to LEARN TO USE new tools. If you think what you have is bad, I took a course that required all programs to be written using MFC and Visual C++. Now that was a nightmare (spend 80% of the time trying to find what you need in the docs, 10% actually writing code, and 10% debugging). What made the class even more fun it was my Operating Systems class where we did some basic networking, threading, and deadlock avoidance.
2) You will always have employers asking you to develop using 'Y' platform (X is an overused buzzword). Even though we all know that practically any development environment can be coerced into making any program, you have to do it the way they want it, or you will quickly be looking for another job.
I don't mean to be a pessimist, but for your own sake, avoid starting any type of confrontation. By the way did you ask the professor on the first day of class? In my classes we usually get about 3-4 question on this very topic the first day.