Slashdot Log In
Coding Classes & Required Development Environments?
Posted by
Cliff
on Sat Aug 26, 2000 04:18 AM
from the why-you-can't-go-your-own-way dept.
from the why-you-can't-go-your-own-way dept.
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?
This discussion has been archived.
No new comments can be posted.
Coding Classes and Required Development Environments?
|
Log In/Create an Account
| Top
| 377 comments
(Spill at 50!) | Index Only
| Search Discussion
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Teaching on a specific platform cuts the BS. (Score:3)
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
Re:Cliff is a fool (Score:3)
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. ;)
Re:Well, It's probably fair (Score:3)
I know of no commercial developers who use g++ to develop on. It's just not practical. Like it or not, IDEs increase productivity, and that's why we use them. If these students are going to be professional programmers, they're going to be using IDEs their entire career. Why the hell shouldn't they be learning from the get go how they function?
Any CS program that doesn't teach a student how to use and IDE is being negligent in their curriculum.
Re:similar experience (Score:3)
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.
Another point to consider... (Score:3)
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.
Re:Like it or lump it, it's necessary (Score:3)
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.
Valid Teaching Method (Score:3)
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++).
Re:That's way the world works (Score:3)
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!)
What education is for. (Score:3)
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.
You probably want to do it their way... (Score:4)
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
Many reasons . .. (Score:4)
(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.
Former TA (Score:4)
(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!
Study Fundamentals Not API's, Tools or OSes (Score:4)
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 [slashdot.org] 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++ [fatbrain.com] and More Effective C++ [fatbrain.com] 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 [fatbrain.com] (I recommend the special edition to professional programmers).
I started reading the newsgroups comp.lang.c++ [comp.lang.c], comp.lang.c++.moderated [lang.c.moderated] and comp.std.c++ [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 [fatbrain.com] 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? [slashdot.org] (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 [c2.com].
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 [goingware.com] - 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 [goingware.com] - 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 [optimizeit.com] 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 [goingware.com]. (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 [ncl.ac.uk]. 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.
Re:Valid Teaching Method (Score:4)
Which is why I would think that the standard should be ANSI C/C++. That way you are guaranteed to have the solid foundation, and if you later move on to fancy IDE's with extensions, it doesn't matter which one you (or your Prof. or boss) choose, because your knowledge will translate into that environment. If that environment has nice extensions and handy non-ANSI classes and such, you'll be ablt to appreciate those better. For instance, I use C++ Builder at work, and it's nice to use AnsiString, which has features like an overloaded "=" operator, but when I recently worked on a demo project that needed cross-platform compatible code, it was good to still know how to use strcpy with char *'s.
By the way, I had a class like this too. We were told that our code had to compile in Borland C++ 4, and to submit our source code and program to the grader. It turned out the grader was running a Solaris box, so he just pulled the source files out, discarded all of the IDE bloatware, and compiled with gcc. My point is, since it was all standard console-type code, it didn't matter how we developed it. Make ANSI your class's standard (that's why it's a standard), have the students submit the ASCII source code, and then let the TA/Prof compile it in whatever combination of environment and OS they please.
Do not teach Confucius to write Characters
Cliff is a fool (Score:5)
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 ...... (Score:5)
"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.
Like it or lump it, it's necessary (Score:5)
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 :)
Re:Why schools pick an environment (Score:5)
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.
similar experience (Score:5)
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
Why schools pick an environment (Score:5)
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)
That's way the world works (Score:5)
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.