Why Develop On Linux?
After spending the last year developing under Windows in my previous job, I can say that I would highly prefer the freedom of developing with Open Source rather than depending on a closed environment. I have had numerous problems with the preponderance of binary files created by Developer's Studio (and ActiveX's dependence on the Registry) and the the behavior of just building my project. I prefer makefiles and source code, where everything is specified in text and there's an open syntax describing all aspects of the build process. Here's question I would like to ask of all the Developer's Studio users...how can you take an existing MFC SDI (single-window) project and convert it to an MDI (multi-window in a single pane) project? If it doesn't involve creating a new project from scratch, I'd be highly surprised.
So what are your thoughts on this subject? Do you prefer the slicker, highly integrated commercial environments, or do you prefer open ones?
where I spend my days we mostly program for windows, but we do our programming on a Unix (solaris) platform. Why? The multi user environment provided by Unix make file sharing a breeze. Code control systems (CVS,SCCS,etc) are more widly avliable (and I think more through). My answer, it's easier to share :)
C and Unix as they stand fit hand in hand, they were born together. This makes programming on any unix-like platform MUCH easier. There are a ton of libraries to work with that have code that you can see and hammer bugs out of. There are a TON of languages, and more compilers and interpretters than you will ever find under windows. The command line is easier to understand. There is less garbage to mess around with. Pretty much, coding in Linux is coding just like you learned it in school. Coding in windows is, sort of like writing a biography about a person who won't tell you anything about themselves.
Eh...
Ugh, if there's ever been an application "framework" nastier than MFC I've yet to see it. The sheer complexity involved in acheiving some of the simplest tasks is truly amazing - who wants to deal with a huge mess of DDX/DDV commands just to get the value of an edit box into a variable?
Personally I'm using Borland's VCL at the moment, and whilst it, like any other framework, does constrain the things you can do, it certainly feels a hell of a lot more "natural" than MFC ever did - things work the way you expect. As for chaning an SDI app into an MDI app? Well, it'd be some work, but I can see myself doing that without starting over.
No, using MFC as an example of why Windows is a poor environment for coding is wrong. Plain and simple, MFC sucks, and there are a lot better alternatives out there for coding apps in. And since Borland are porting Delphi and C++ Builder to Linux, I'd highly recommend them there as well.
---
Jon E. Erikson
Jon Erikson, IT guru
By far, my favorite feature is the popup Intellisense, when you're working with an object or struct and type "." or "->" you get a window with the details of the object at that level. You will quickly get hooked on this feature.
Plus, you can now edit and recompile c on the fly while debugging. That's a big timesaver for me (for correcting "freshman" mistakes like incorrect loop bounds without having to start all over).
And finally, if it's good enough for John Carmack, it's good enough for me!
If nothing else, you don't have to pay out the arse for a copy of the "approved" development package. Being a cheap little bugger, that clinches it for me.
Jeroen
Secure messaging: http://quickmsg.vreeken.net/
Kudos due trolls , you own slashdot!
Hey moderator ! This is a joke
-- Oh Well
I have an alter-ego at Red Dwarf. Don't remind me that coward.
- The libraries you use are open. You can read (and marvel at or laugh at) their source code, debug them, fix them, and participate in their development communities.
- The API's you program against were mostly written by creative people with taste and community feedback; not by committees with deadlines, backwards compatibility requirements, an internal review only, and a narrow Microsoft mindset.
Really, development on a free platform is just more fun!The evaluation of an action as 'practical' . . . depends on what it is that one wishes to practice.
When you make a system call, you know what is going to happen. No hidden APIs, no undocumented 'features' to bite you in the ass, and it follows well documented standards.
Finkployd
If I write code to run under Linux, there's about a 90% chance that it will compile and run without changing a single line on Solaris, AIX, SCO, and BSD. In fact, with Cygwin and gcc, it's even got a fair shot at running on Win32.
If I write code to run under Windows, it'll run under windows. This year.
Really, is this a hard question?
--G
Where I work our developers use windows boxes because that interface is simple for them. They write the code under cygwin and compile with GCC. They can take their code wherever they want since they use a standard compiler. It's not about forcing an OS on people, it's getting them to use tools that will port easily. If they used visual studio or some other propriatary tool it would make things a hell of a lot more complex. The software that they write actually runs on Sun boxes with solaris 7. If you want to push Linux, push GCC. Once they can port their code they will be a lot happier to hear about what else they can do in Linux. I have found that they are most interested in A) a good text editor (emacs or vi) B) Good windowing interface C) ability to display video output from their apps (remote X session or local execution) If that all works fairly simply, I don't think they care a whole lot about what they are actually using.
I don't know about anyone else, but the programs I develop are intended to run under Linux, so I develope under Linux. If I was intending to develop Windows apps, I'm sure I'd develop them under Windows. Yes, there are cross platform development environments, but to be frank I couldn't care less about Windows (95 has just trashed two motherboards for me so I'm in a very anti-Windows mood atm).
;-)
Anyway, what I'm saying is, if the programs are intended to be run only under Linux, Linux is a good choice for development, is it not?
Now weary traveller, rest your head. For just like me, you're utterly dead.
I'd still recommend checking it out or you'd never be familiar with it. I just don't recommend anyone wiping out their Windows partition, running down to the store and buying Linux and think that they can be a Unix programmer. Learn Unix first and when you know it well enough, you'll WANT to program with it.
kwsNI
I see the difference between Ms-DevStudio and all the Linux tools a bit like the difference between coding in VB and C++. If all you need is a quick way to put up a simple program, it is easier in DevStudio and all its wizards that create stuff for you. But once you need to maintain this code for a while, or wish to do something the wizards did not provide for, you start to run into problems. Under Linux the initial costs of starting up are a bit higher, but once you have a project going, there are (almost) no limits to what you can do, all files are in documented formats and plain ASCII, so you can just go and edit them. Distributed projects are easier to maintain, with a publicly available CVS repository where anyone can get the latest development version, and a standardized way to submit patches etc. And of course the scripting facilites under Unix make it so much easier to make (semi)automatic regression tests and other advanced stuff..
In Murphy We Turst
I spent several years developing on Windows (3.1 and 95, mostly). The last 7 months have been on Linux (exclusively). Here's my opinion: I will quit my job before I will spend as much as a week coding on Windows again.
1) Multi-tasking: Booting into Windows makes me feel claustrophobic now. I can start multiple programs but if one of them hangs (like Exchange) they ALL do. If you are like me you like to be doing several things at once (emacs here, netscape there, news reader the other place, etc). This is harder (or even impossible to the extent I do it) under Windows.
2) Determinacy: It used to be that when a program crashed I'd try running it again. Then I'd reboot and try again. Under Linux if it crashes I KNOW it was the program that did it (or course there may be environmental factors, like config files).
3) Source code: In the course of just 7 months, I've had to inspect the kernel code twice (and change it once).
4) And then there's all the little things: DLLs. Installers. Command line tools. Now that I've learned how to use the "find" command...well, there's no superlative strong enough to get across how much I prefer Linux.
Here's what you do: Go back to your friend and find out what he hates most about developing under Windows. Then show him how that isn't an issue under Linux. "Linux, it has something for everyone."
--
Less money, less admin, less machine--more power
Linux MAPI Server!
http://www.openone.com/software/MailOne/
(Exchange Migration HOWTO coming soon)
I find that Linux is more consistent that Windows. Unix has a philosophy -- everything is a file. It's not followed 100% (as in Plan9), but it's pretty widespread. Windows has no philosophy; it feels like a mash of unrelated ways of doing things.
.c file at the implementation of the function in question, and my questions were answered.
Also, with Linux (any open-source, really), I can find out what the bugs are. I've been programming with imagemagick recently and ran across a situation where the headers didn't match the documentation. I just lookined in the
If he's good at Windows programming, though, good for him. It's not easy to be a *good* Windows programmer. And he probably makes good money at it.
Napster-to-go says "Fill and refill your compatible MP3 player", which is a lie. It's not MP3. It's WMA with DRM.
First, I write programs that fill needs that I see. The last desktop-based application I wrote, IntuDex, was a mailing list manager for the Amiga. It was much simpler to use than the relational database that my user group, Amiga Atlanta, had been using. Also, I could give it to anybody I wanted, an important fact. As the newsletter editor I depended on the secretary/treasurer for mailing labels. My program facilitated data sharing between us, and I didn't have to buy a $300 program to do it!
Second, I'm a big fan of simplicity. Even as an RF/Microwave engineer I find beauty in reducing complexity (try getting my program to believe that when they see this board I'm working on!). Win32 does not provide a "beautiful" environment, at least from my point of view. For example:
is pretty much all you need to do to open a window under the Amiga's operating system. Isn't it like a page and a half of code under Win32?For me programming should be a joy, not a chore. It's realy as simple as that!
I have just started using VB as it is reqd for a project at my company and for the life of me i can't figure out Visual Source Safe!
**Life is too short to be serious**
So, why do it? The reason to do it is that the code you end up with under windows is a big steaming pile of non-portability. In many instances, i.e. if it does anything whizzy, it won't even port to other versions of Windows. And there's tons of totally bogus crap you have to deal with in Windows, interfaces not working the way they are specced, weird... ok, one example: quick, allocate a string, and make it work cross platform. Do you want TCHAR, wstring, or any one of six others. Search MSDN, that will help you decide. ha ha ha.
Unix is for people who like to code everything they do. People who want to write a script to check in and out of source control. This morning, my cable modem was down at home. I whipped up a one line script so it would retry my the net every five minutes so I could make a service call from work and then later today I'll be able to log in from work and get to my home network. (The script: while [ 1 ] ; do /etc/rc.d/init.d/network start ; sleep 10 ; if ping -qc10 207.46.130.45 ; then exit ; else /etc/rc.d/init.d/network stop ; sleep 300 ; fi ; done )
you just can't do things like that under Windows. Oh, I know, there are tools you can find to do each thing, but it's not in Windows' blood. OK, then there's stuff like how regular the APIs are, how simple the inter-process control, and how network capable your apps will be (X Windows was designed for network use. When my home cable modem comes back up, I'll be able to log in from across the internet and use my several machines at home no different than if I were at home.
Finally (yes, there's more to say, but I gotta get to work :) you asked about Linux, and it's unix with all the source available. You can look up how things work, no secrets, no frustration with apps that don't quite do what you want. Apps that don't quite do what you want? That's almost the definition of Windows.
Unix isn't perfect, and Linux isn't perfect Unix, but if you love coding, you'll love coding them.
We are doing windows coding at work. Before all I ever did was do a little bit of *nix coding at home and school, and the biggest difference is that because Linux/GNU/BSD/etc is an Open platform, the APIs are actually followed. You can use code directly from an MSDN examle in your windows project and it won't work. Also under *nix you get all of the excellent POSIX calls. You can't use POSIX under Windows, it's not there. I had to write a string parser for a project we were working on without the use of POSIX regular expressions, and BOY was that a pain in the ass.
A wealthy eccentric who marches to the beat of a different drum. But you may call me "Noodle Noggin."
Quando Omni Flunkus Moritati
I think IDE's are bad for producing maintainable code. When, after 15 years, you find that you need
to alter a program that was once written using a command line C compiler and make, you can just recompile it using those same tools. If, however
the same program was written using some kind of IDE
with its own kind of project files and stuff you're going to have a hard time finding a copy of the same 15 year old IDE the program was developed with, not to mention a computer that can run the thing!
I think IDE's are only good for write-once programs.
I pointed out the big flora of tools for manipulating files and text, I pointed out the stability of the system
I see, I really love it how Unix has 10000 text editors. But I'd prefer one that works, and is easy to use. Does XEmacs support intellisense? No, I didn't think so. What's XEmac's goal? To demonstrate bad HCI by having the most deeply nested menus ever seen on the face of the earth.
And stability isn't an issue for many windows developers who use NT/2000. Which is overall more stable when you consider using X on linux.
I can say that I would highly prefer the freedom of developing with Open Source rather than depending on a closed environment
Yes I have some friends who can't program that well who refuse to use anything WITHOUT the source code. When I ask them what they do with the source code, they say, they use it to build the binary. Oooooh, I wish I could do that on windows.
The thing about Windows development is it's blackbox. You shouldn't need to know anything about the components except thru the interfaces. Makes things much more stable....guesss what Unix is starting to do. That's right, copy Windows...so far - poorly.
(and ActiveX's dependence on the Registry)
Hello? Mcfly!
So what? Oh damn, I really hate it how Unix relies so much on the file system. Talk about dimented understanding.
I prefer makefiles and source code, where everything is specified in text and there's an open syntax describing all aspects of the build process.
I see, so you've never looked at your project settings? All the compiler options, build options are explained there with controls AND with plain text.
MFC SDI (single-window) project and convert it to an MDI (multi-window in a single pane) project? If it doesn't involve creating a new project from scratch, I'd be highly surprised.
Maybe you should like learn MFC in addition to using the wizards?
There are a lot of compelling reasons to develop under Linux in my opinion. It's important to note that disclaimer in that sentence however: In my opinion. My first experiences with programming were BASIC on a Commodore Pet. While in university I did a lot of programming under UNIX and became used to the pervasive way in which text and data could be handled and manipulated.
I also realize that if it weren't for this sudden immersion I wouldn't find these reasons all that compelling. I've coded in MetroWerk's IDE under MacOS as well as with the shell-like IDE MPW (Macintosh Programmers Workship). If I had first used an IDE to program I'm not sure I'd ever have really felt as comfortable without one. Most of the reasons that I feel so comfortable programming in a shell environment under UNIX are due to the ability to manipulate data with PERL, sed, awk, sort, cut, paste and so on. I'm not sure that most people get data in alien formats (if you produce the data, you've got some control over the format, if you produce a format that you can't use then you didn't produce a very good format).
I've toyed with IDE's under linux but haven't ever felt the need to change. Under MacOS I prefer an IDE. Under MacOS X I will probably prefer command line utilities.
I think the important thing with anything is to be comfortable with what you are using regardless of whether somebody else feels that there is a better opinion or not.
For a software developer, the system environment is the UI.
How handily can you find stuff in your log files?
I use grep and perl for that.
How often do you have to reboot an unstable system?
I don't. (well, except for netscape)
Starting any services required in production in your sandbox without stability or resource exhaustion issues. Oracle, Apache...
Multiple desktops = almost unlimited number of windows, all neatly organized. This is
I think, therefore thoughts exist. Ego is just an impression.
More so, if something seems broken, you find out what it is, and you can fix it once and for all, whatever it may be: you have the source code to everything. What developer would want to use a platform that restricts her freedom to do this? For more information see GNU.
Jan.
PS: What I really don't understand is, if you're a developer, why not simply give Linux a try (or, why haven't you still given it a try, for that matter)?
"Unix it is simply not documentated as much."
I agree that it's easy to find references to Windows API calls. But it is easier to find documentation on Unix system calls. Just take a system call and do a search on Google. You'll get back 5 tutorials, 4 online man pages (from 3 different implementations) and several mailing list discussions.
As for expensive books: *shrug* Which would you rather have? One expensive comprehensive book (like Stevens) or 15 "Windows Development Bibles" at $10 each?
--
Less money, less admin, less machine--more power
Linux MAPI Server!
http://www.openone.com/software/MailOne/
(Exchange Migration HOWTO coming soon)
Cygwin
It is a lot easier to port Linux programs to Windows than it is to port Windows programs to Linux. Also, I am just starting to learn GUI programming in C++ and I find some of the graphical toolkits for Linux much easier to use than MFC and the Win32 API. For the functional part of the program, the code (assuming C++) is primarily the same on both platforms.
ByteMyCode.com: A Web 2.0 code sharing community.
When I moved from Windows and started coding for Linux (and unix in general), what really impressed me was how easy it was to do I/O. You open a file, read/write, and close it. There's none of that IDirectSound2->QueryDeviceAndPrayToGod() crap. It's SIMPLE.
/proc. You don't have to go find the undocumented hidden Win32 call that only works on Service Pack 3.
Need information from about the system? Just read a few files from
Linux has another advantage in that it ships with vi, emacs, the standard development toolchain, bash, perl, etc., which once you get used to, totally blows Visual C++ out of the water as far as ease of use and customizability goes.
I recently switched jobs, and went from developing in a Unix (Solaris) environment to a PC environment. What I've discovered is that, with a little effort, you can turn the PC into a development platform similar to *nix. NTEmacs, ActivePerl, A C/C++ compiler, a desktop pager, Apache, and the like are all freely available for the PC, and can be used to build a very open development environment even if you are forced to use a Microsoft OS. Of course, you have to convince the boss that your system is better than the slick packages...
I am a fairly new programmer, and mainly develop for Windows. At work we chose to use Borland's CBuilder and Delphi, and I have had nothing but trouble. I have no real development experience on unix systems, but I do know this: I'd rather learn the tools of the trade for unix, than stand stuck in bugheaven, with nothing but trouble. Open Source rocks.
-- Geir Jakobsen, Developer, Norway
.....he likes arcane command line tools. .....doesn't care about productivity (intellisense, integrated debuggers, debugging a web page, its server side scripts, its client side scripts, and binary server side code simultaneously). .....wants to manually create his own MAKE files .....wants to be stuck in a world without a component architecture (i.e. libraries and code sharing vs. binary level object oriented reuse)
Then by all means, develop under Linux.
Some might consider this s troll, but what the Linux developer community doesn't get is that Microsoft goes out of its way to take the chore out of programming and allow you to concentrate on the problem you are trying to solve. In many ways you can trace Microsoft's success as a platform to the toolset that allows business developers to get their job done.
I would also lke to point out that Id software used Visual Studio to create Q3. Here is a quote from Carmack as found in this slashdot article:
There are plenty of reasons to have issues with MS, but to just make a blanket statement like "everything that comes from microsoft is crap" is just not rational. There are a lot of smart people at microsoft, and they sometimes produce some nice things. There are some damn useful features of MSDEV that I have not seen on any other platform - all the intellisense pop up information and edit-and-continue, for instance.
I'm still working on a clever footer.
I can only see three answers to this question
a) You program in and for Linux when your customers ask you to do it and pay you for it.
b) You don't need more money and want to do your bit in the fight agains The Evil Empire.
c) You need to run something on hardware that whon't run Windows.
I know that some people dont like reason a) but this is the world that most of us live in.
TC - SFBook.com
--
TC - My Photos..
I use linux, and I can see where this is going....
People will post lots of replies saying something like "linux offers lots of languages and open source libraries, and heaps of tools that are cool and don't crash, unlike certain other companies' software". This will be marked "Insightful", and leave the original query unanswered.
1) Try to think of the person in question - someone who programs windows and *already knows* the above arguments about linux, but is not convinced. Try to imagine their mindset. What would your knee-jerk reaction be if someone told you that OS xyz is better than linux for dev?
2) There are already lots of libraries in windows, and lots more tools with lots more features than in linux. The IDE envs, testing suites, database tools and utilities, libraries and packages available for Windows make a formidable lineup. It's not for nothing that Windows has such a strongly hooked developer base (check out your local newsstand for evidence). This is why companies and individuals are impressed by a rich development environment with lots of options. Don't expect people to be convinced by Glade and Gimp and a far smaller lineup of software tools - explain why linux would still be better, or other things that compensate for the weaknesses.
3) Don't use ideology. If people wanted to program in linux because it's open source, they already would be doing so. Use a better approach. Not everyone finds ethics and the principles of open source a convincing reason (otherwise they would already be using linux, so you're preaching to the choir).
4) Compare point by point. If you say something is good about linux, think about whether Windows has an equal or better choice. If so, it's a redundant argument - not likely to convince.
5) Avoid zealotry. It turns off people. Really.
Free.
The dev. tool under Linux are free. That's convincing as hell.
With app studio you get huge apps that take up lots of resources. Titanic was a huge ship that took a lot of resources. Did you see all the coal in the engine room?
Apps on Windows are not properly protected from each other; any app can crash the whole system. Titanic's bulkheads were too short to keep the ship from sinking when one compartment got flooded.
C programming under windows requires those near, far where are my variables stuff. Titanic... "...near, far, wherever you are...".
More...???
F U NE X N M? Son: "Dad... How do you spell 'hourly'?" Dad: "0 * * * *"
pure and simple.
When you talk about anything, it pretty much comes down to cold hard cash. Everyone wants to know "What's in it for me?" Well, i'll tell ya. Money! If you look at the market share linux has gained in the past few years you see what's going on in the computer world. More and more people are switching to linux. Linux's market share has gone from almost nil, including servers and (especially) home users, to brawling for second with MacOS - that is one hell of an accomplishment. What does it mean. People are going to keep switching to linux and there's a veritable gold mine waiting to be dug in the software market. The same people that are installing default RedHat with GNOME or KDE and trying to figure out why linux is so "cool" are the same people that want Apps for linux.
Well, it's not free....these people are coming from a closed source, pay-to-play environment. You give them good software, open-source or no, and they'll pay for it!! If your friend were to develop an audio app that rivaled something like Rebirth (i swear if someone mentions FreeBirth i'm going to flip my lid)....i would be willing to shell out the cash for that. And so would a LOT of other people that are looking for that type of software.
Why develop on linux? Because there are a lot of gaps out there as far as linux software vs. windows is concerned. And as more and more people switch to linux from windows, the value of closing those gaps is going to increase exponentially. Develop for linux and make a BUNDLE! look at Loki, RedHat, VALinux, and all kinds of others. The way I see it...you either lead, follow, or continue to develop for Windows.
FluX
After 16 years, MTV has finally completed its deevolution into the shiny things network
"It is seldom that liberty of any kind is lost all at once." -David Hume
Take for example Aegis. Find me a tool like that for Windows which costs less then 1000$ per seat. Or compare the editing power of UNIX editors to the pitiful editor built into most IDEs - not to mention their brain dead build process (BTW, both Emacs and VI can and are commonly used as a UNIX "IDE" to great effect). It goes without saying that you can't replace your IDE's editor or build process, even if you are willing to pay.
Sure, UNIX developement tools are harder to learn (they are not harder to use). But one can hardly claim to be a serious professional and dismiss the UNIX tools as too hard to use. These tools simply assume a power user - one willing to invesrt the extra effort to get the (large) additional benefits. That's what being a professional programmer is all about.
I've been using linux since 1994, and in that time I've only written text console apps, with a smattering of perl/tk. My job requires me to to MSVC++, but on a personal note, HOW THE HELL DO YOU MAKE 'windows' APPS on linux??? Is there an anology to MFC? Or does it depend on the IDE?Do KDE and GNOME have thier own libraries? Do I have to develop for each seperately?
Please help me get started. I'm a VB programmer learning MFC and VC++.
TIA!
I have seen the future, people, and in it there are a multitude of computing devices, not only PC's the way we see them now, but also PDA's, set tops, even computers in your goddamn fridge!
Sucessful development in the future will be by people who understand standardization, integration and adherence to open protocols. From my linux box I can, using protocols like X, http, nfs and things like CORBA and Java, share data and apps with other linux machines, solaris, BDS, hell even Windoze if I want, and using this stuff is kind of natural when developing on linux as most open source software and libraries out there are based on open standards, making portability and interoperability much easier
Contrast this with our poor friend who is stuck with such hideous and non stardard thinks like MFC (ugh) anc COM (double ugh!)
Now excuse me while I port gcc to the toaster
The advantage of developing on Linux (or just about any Unix) is that it's a consistent, simple, and well-documented environment, with good portability to other platforms. If you develop on Windows as your primary platform, it's easy to get trapped into using hidden and undocumented API's that don't behave consistently from version to version, and it's real easy to wind up with Windows-only code.
Windows-only code isn't automatically a Bad Thing, but it does reduce your options going forward, and it links you inextricably to the Beast. Should there be a strategic need to change platforms a some point, it's going to be a more difficult task to go from Windows to Unix (or whatever) than the other way around.
That said, Visual Studio is a fairly slick IDE, though there are nice IDE's on Linux, as well. If you're developing for Windows, Visual Studio is really nice.
- -Josh Turiel
-- Josh Turiel
"2. Do not eat iPod Shuffle."
I have done a fair amount of commercial Windows development and can say that there are a number of advantages to working in a Unix environment, if not specifically Linux.
:-)
The one advantage that stands out the most in my mind is the kill command. I have fought Windows NT countless times trying to get it to kill an errant process. I gave up completely under Windows 95/98, just rebooting the machine when needed. I have NEVER had to do something like this in a Unix environment. Even when I have faced a stubbornly hung Lotus Domino server (which leaves resources open all over the place), I could still force it to shut down and be removed from memory so I could restart it. No reboots necessary. This little trick alone has probably saved me hundreds of hours of grief waiting for a machine to reboot just so I can continue development. There is no doubt in my mind that I am therefore far more productive developing in a Unix environment when compared to Windows.
Now, my preference of Linux over other Unix systems... well, that's another post.
I think text files are just better in general for any sort of development. Code is written in text files and using them to define how to work on the code makes things much easier.
If a unix type of development environment doesn't support a wanted feature, it's usually quite simple to plug in a new utility that does exactly what is wanted. If anyone has done anything similar, that utility is probably freely available, provided completely independently by a third party. Alternatively you could write your own, or even just make a utility by piping generic text processing commands.
This simply can't be done with most Windows environments because propriety methods of storing all the meta information about design and code make it so difficult for other people to expand on where the company left something out. (It's just a general open source advantage applied to the development of the developing environment.)
Even if this freedom to expand the environment can be done in Windows, it usually would need some real understanding of the development environments attributes and how it works.
If your friend the developer is developing software for Windows, then it surely makes sense for him to develop in Windows. For him, he needs to use the right tool for the job. MS Dev Studio isn't fantastic in all areas, but it's not bad, and most importantly, if he's developing Windows applications, it's probably going to be easier than cross compiling from a Linux platform. Also - Windows has all the other development tools you could want - CVS, RCS etc... and if you need to do lots of scripting stuff for maintainance, there are all the GNU tools - remember, they're avaliable for Windows as well. As Mr. Stallman would say - "It's GNU/Linux"...
If we, as a programming community, dry up the source of windows programmers, it will force up the price on the w*nkers who have learned only M$ and they'll wind up to be exposed as the frauds (the ones who are frauds - they must know who they are.) they are.
Meanwhile, IT managers will begin to understand that they need to move to non M$ platforms, or face getting left behind with outdated software and platforms.
That's not in any way trying to suggest that I actually know what I'm talking about or have thought the idea through at all.
Get the Hell off my planet, you slimy mobster Bush!
A young programmer once asked Stallman: "How can I do Rapid Application Development for Linux?" To which Stallman replied: "If you want to develop applications rapidly, I suggest looking into Scheme."
Of course, what the novice really meant was "how can I cook up pretty-looking programs with the bare minimum of knowledge and effort and call myself a Linux programmer?" In this (poorly paraphrased) story, Stallman illustrates what I consider to be a fundamental difference between the school of thought that says "get it done the quick and easy way" and the school of thought that says "get it right".
Whether this dichotomy is related to the Windows/Linux development dichotomy remains unanswered... just take a look at the source code for a typical "Open Source" Linux project. Ah well.
To the editors: your English is as bad as your Perl. Please go back to grade school.
For me, development has always come down to the best tools for the job or hobby or project or whatever. In Programming Holy Wars on my web site, someone roasts me for using ASP instead of PHP.
99.89% of my development job involves writing applications that are designed for either in-house use or for technically savvy customers. They also needed this tool yesterday, before the huge clusterfuck that just occured. What will it most likely get written in? You guessed it ... Visual Basic. Instead of wading through VC++ code, assembing everything from the ground up, I write it the fastest way possible.
It's all about getting the job done in a way that works and that you can still mess with in the end. There is no "right" answer to this Ask /. question, as the "right" answer will always depend on the individual situation.
--------------------
Visual Studio, as IDEs go, is not altogether bad. Certainly a Windows coder hooked on some of its snazzier features will feel a bit disappointed when moving to Linux to develop. IntelliSense and relatively advanced debugging tools give Windows a big advantage in certain areas.
Nonetheless, all my memories of developing using Visual Studio are horrible. This is because the actual Windows API is pretty ugly, and MFC... lets not even go there. Raw X programming is pretty nasty too, but using the Qt and GNOME toolkits development is much much easier than when using Windows, whereas the low-level stuff is just the way it should be.
Besides, I'm often working with a large number of quite small code files, spread over multiple desktops; and I prefer nedit as a text editor to Visual Studio anyway; it's a bonus that it's lighter weight. Microsoft documentation is to my mind inferior to much of the core Linux documentation, though YMMV.
I know that it is possible to get multiple virtual desktops for Windows (if you pay a fee) and nedit is probably also available. Qt is available for Windows, but you have to pay handsomely for the privilege. But Linux is well-nigh impossible to crash, and the command line beats any file manager into the ground. It's a totally different approach to development, and yes, there are disadvantages, but the sheer sweetness of the Linux APIs makes developing a pleasure, especially when you are convinced that the Un*x model is The One True Way to build an operating system.
Savant
Linux is a developer's wet dream.
Linux includes or makes freely available industrial strength versions of c, c++, perl, fortran, lisp, scheme, python java etc.
Compilation times and turn around is FAST when using the excellent (free) tools such as emacs, make, and bash (with all its wonderful command line tools) under a rock solid operating system.
The degree of system stability, API stability, as well as customization and developer options simply is not available under windows.
(If tools are available under windows, I have found them to be generally unstable, expensive, overhyped, highly gui-fied, and underperforming.)
It's no wonder we have such a huge proliferation of programs, easily and freely downloadable and installable, under linux. From windowing systems to versions of Corba to webservers to databases, to all the neat software that comes out of research institutions to programs that enable distributed computing, Linux is at the forefront of software development. Just take a look at sites like sourceforge to see this grass roots movement blossoming.
I developed under windows for years, and left it to go to Linux a few years ago. I have never looked back.
Under windows, I had ever changing and unstable APIs, a single expensive development tool (visual c++) , and upgrade problems every time windows released new operating systems, APIs, and products. I gave up dll hell and blue screening terminals, rebooting, and re-installing. I am windows free and that decision has saved me thousands of hours of administering a shitty OS.
All I want to do is program. Linux makes that possible. And most of all, fun.
I use Visual Basic at Work :-( but now I have access to a UNIX account I'm using Perl to autogenerate most of my code (all the fluff thats needed to support the business logic which is what I really ought to be writing).
My questions for Windows programmers: How many times have you been annoyed because VB's compiler gives up on the first thing it finds? Do you just shrug it off when the SourceSafe integration fails to integrate? What when VB saves your work in a completely different place to where the rest of the project is, and hides this detail from you (or have have you learned to work around that one)? "Wot No Layout Managers!?!". Would you like to be able to switch editors at will and still work?
I think the last question is probably the most important. Under Linux I can switch tools as I need. I can use different tools to the rest of my team and we can all get on together. There are development environments for Linux that have things like Intellisense if you want to use them. I use Vim or Emacs depending on the job in hand. Because so much in Linux is text based I have a wealth of really powerfull text manipulation tools to work with. The perl example above shows this.
A lot of work now is web based. If you want "Commerical Environments" then look at things like Enhydra, Java, JBuilder, ... A lot of web work uses the likes of Perl and PHP and Apache as the server. Linux is really strong for those languages. Also the ability to fully remotely administer a Linux (or any UNIX) Apache server really helps. People where I work are fighting NT at this moment because they can't remotely administer the IIS server.
In terms of environment. Linux, in comparison to Windows IMHO is a really well designed logical platform. When you look at how the file structure is organised and why it really seems to make sense. I've explained things like why /bin, /usr/bin and /usr/local/bin to people and though "That is good". Also why PINE has /etc/pine.conf.fixed, /etc/pine/conf and most importantly ~/.pinerc. The UNIX/Linux world has already had to solve the problems of dealing with a multi user environment, problems which the Windows is now starting to see as Microsoft bolt multi user capabilities onto Windows. It seems that system/user preference handling in WinFrame is particulary "interesting"
Well, linux would be nice to program in because nearly everything is a file or filesystem, including processes.
Secondly, lower system reqs make it better for embeded systems. No worry of is this NT function supported under CE and/or 98.
Third, stability. I've crashed my windows machine 30 times in one day cause I had a pad pointer. It was fun running the program and guessing where the error was (even in the debugger).
Personally, I prefer Linux to Windows bacause things work the way they're supposed to. I've seen some people refer to using GCC on Windows and non-MFC stuff, and that works much better. But the fact remains that a lot of other developers still use MFC, and the moment you're asked to do something related to that code, you'd BETTER use MFC as well.
I'm using MSVC++ 6.0 at work, and I've already run into too many cases where the MSDN is not informative enough or, in some cases, just plain wrong. Combine that with a refusal to follow ANSI standards(I still can't use a nocreate flag, I have to substitute the hex value instead), and developing for MFC is a big pain in the ass. Although I like the Intellisense feature, I'd take emacs any day(or vi, if I'd bothered to learn it yet)
Speaking of emacs, I tried using it an gcc for Windows, and its even harder to use MFC with that. Unfortunately, I'm forced to use MFC becuase of the file format of the project I'm on, which consists of a binary "snapshot" of all the classes in memory at the time of the save.
Speaking of binary files, that's ANOTHER pet peeve of mine. Windows is the only platform I know of that forces C to distinguish between binary and text files, forcing the coder to use special calls and causing massive headaches. Linux is much "cleaner" in design in this respect, which makes my job easier when dealing with files. Some may argue that permissions add complexity, but after using attrib a number of times because the default file created is not writable, I don't see how it can be any more difficult under Linux than Windows
I should probably stop now, but these are the problems I've run into in the last month or so alone. I could name quite a few more :)
- Free tabletop fantasy gaming! Grey Lotus
2- Because I can.
3- Because it's hip and cool to write open source software for linux.
4- Because all the software tools you need are free.
5- Because linux needs more software.
6- Because I am a free person, and have the choice to develop on a stable platform.
Actually, I develop for M$ Windows, as well as linux. They are both viable OS's, if you can get through the FUD that both sides dish out.
-- "Perceptions create reality. By changing your perceptions you change your reality."
I've seen statistics that in the real world, programmers spend half their time maintaining code. I can still compile and play Unix programs written in the 80s and 90s on my current Linux installation (one gets used to the few porting issues that may arise), meanwhile even with the available source of a Windows app written in 95 (Chaco's Pueblo client) I can't even hope to get the thing to compile right since it seems to rely on some "system" files which have mutated greatly over time. (Anyone got a spare copy of VC++ 4? Hah.) Unix also has some great glueware (sh and perl for example) for knitting together disparate programs into a coherent whole. With a bit of programmer discipline one can achieve a fair amount of effective modularity and reuse.
I know you can get cross portability, and use things like wish and tcl, but the key here is to do Windows apps under Windows, and *nix apps under Linux. If you can get it to behave under Linux, then you'll have little trouble porting it to the quirks of the other *nix flavors.
I'm paid to support a commercial application under *nix. The first iteration of the *nix client was written under Windows NT, then "ported" to *nix using third-party code porting widgets. Gaack! That resulted in code that none of the developers could recognize, and the occasional "Windows" error message popping up on *nix.
For the next iteration, they did parallel projects, and endeavoring to do the same things in the same way (as much as possible) on both platforms. Much improved, though there's still some issues with focus and pop-ups.
I worked for a while developing multi-threaded applications, both for SMP platforms and distributed environments. Apart from the aforementioned open-source and stability issues, I also found particular benefit in Linux's excellent process-control abilities.
While it's true that, for example, NT has the "Task Manager" with some degree of process killing/control ability, I found even simple tools like "ps aux", kill and top to be quite invaluable.
The ability to easily get a down-and-dirty view of low-level system activity saved me considerable frustration on more than one occasion, and several other members of the dev team migrated away from our original MS development environment for the same reason.
Just my two [insert low denomination currency unit here].
No reason at all to develop under Linux unless you want to. I develop under both (and a bit of cross-platform work ..and VAX.. dear God, no more VAX..) and I've got all of the tools I could ever need or want on both systems. While there may be philosophical reasons for developing under Linux, I haven't run into any practical reasons. If the development is happy under Windows, then stick with Windows. If the Linux development brings unforeseen joy and peace, then be happy with Linux.
Eric ze Kidder
After much tooling around and researching sites, we entered the source code. Evetnually, we found an obscure part of some very long functions where a word comparison was not taking into account the endian-nature of the byte being compared.
We added a bit of code, recompiled, and lo-and-behold, it found his network card. From then on, it went smoothly.
Now, how's that for an undocumented feature? Or does the plethora of Linux documentation somewhere say "designed to not detect certain network cards properly"? At least we could fix the code and recompile the thing. Can't do that with Microsoft!
You can do all of those things under Windows.
Emacs, vim, gcc, python, perl, tcl, sed, awk, grep, tar. All available under windows. So you have all of that PLUS nice GUI IDEs.
I haven't found writing console apps any more difficult under Windows than it is under Linux. Writing GUI apps is as difficult or as easy as the underlying toolkit makes it. You don't have use MFC under windows, anymore than you have to use raw xlib calls under linux.
I am a multi-platform developer. I write and maintain code on VMS, Windows, and Linux.
I've used nearly every type of tool there is to develop on, so heres my 2 cents:
General: All systems support whatever language you want to code in. C++, Pascal, Basic - these are all available. CVS is available on all systems. What differs is the user interface on the development tools on the systems, and the amount of learning time you have to spend before commencing coding.
Windows: Developing on windows is a good way to get to know the closed source system. Documentation is hard, and is often expensive to come by. Mostly people develop code using Microsoft tools. These tools look pretty and work ok. They allow you to edit, compile and run code. As a development environment is good. Whatever you want it there within easy reach. To start developing seriously for windows you are best off buying the Microsoft developer tools. You need to be prepared to continue to upgrade everytime Microsoft release a new OS. This is very costly, and not something a teenager can easily get into. There are free tools for developing under windows, but the windowing system calls make it a nightmare to be productive. Learning time is almost zero - mostly if you draw up your screen and hit run, it will. This can be a drawback in a large app if you need to maintain it on a daily basis - it can be hard to get to module you want quickly.
VMS: This is not something that is often done in someones bedroom. Alpha machines can be expensive, and follow the Apple style of making sure you use everything that Compaq can produce. The tools are good, and the documentation is excellent. The librarys are well documented, and do exactly what the docs say they will. Only in rare cases will these change radically enough to break your code. Developing under VMS is about the same as linux. You have good tools and good documentation, nothing too flash or pretty, but it's all very functional. Standards are so rigoursly enforced that as long as you obey the rules you'll never have to worry about your code crashing because of a conflict with some other piece of code. The drawback is that VMS developers are rare these days and good help is hard to get. Learning time is short, as the tools are basic enough to do exactly what everybody needs to do.
Linux: Developing under linux is nice. There are a lot of tools and a lot of people available to help when something happens. Newbies are very welcome. The range of linux distros and linux ports make it hard to write code once and forget about it. You need to figure out tools such as autoconfigure if you plan on being multi-vendor/multi-platform. Linux isn't as easy to code for as windows is, but if you are developing under open source you will get excellent peer review if your code is something everyone wants. Many of the tools are similar to other systems, but many have been scaled up to support world-wide development. Learning time can be long if you have to start a project from scratch, but is simple enough if you just want to contribute.
I think it's rare that you have to do a project that has to work under both Windows and Unix so that you'll have to make a choice on which of both to develop. If it's a pure Windows or Linux app, there's no reason to do it under the other OS. If complex tools are involved that must be used, again the choice has been made for you.
If cross-platform development is important, use the OS with the best tools available. Personally, I need a shell, a compiler and a good text editor for the stuff I write (not that I'm doing really big projects). They are available for Windows *and* Unix, so I just follow my personal taste and pick the one I like better.
Codewright is very customizeable. You can change your key binding and plug into external utilities like grep. You can even compose your own DLLs and link them into the Codewright API to enhance the program. Definitely worth a look.
Remember, You are unique...just like everyone else.
I know this may sound trite, but i think a good reason to program under Linux is for respect. When you see a really good program run under linux it's pretty easy to find out who made it and send em' and e-mail er somthing giving them some props for their work. You look at windows programs and they are all made by faceless developers whose company name takes the credit. I don't know it just seems like Linux developers hold a lot more respect then Winblows developers.
thx
:) it's in the resourcekit. Or you can code it yourself with little amount of lines of code. It's very handy. Also, bringing the taskmanager up with cntrl-shift-esc saves some serious trouble.
--
Never underestimate the relief of true separation of Religion and State.
Maybe I'm too old to even comment here, (my
Windows programming is actually DOS). The best
thing I found when moving to Unix was that when
my programs crashed, I was left with a clean
useful core-file which I could open up and see
what happened. No hangs, no reboots, just a
prompt, a core, and ready to check it out.
I used to trace programs in DOS of course, but
when you aren't tracing, or something happens
in the 10,000th iteration, having that core file
was just splendid.
Here are some comments I've read so far.
> if one of them hangs (like Exchange) they ALL do
This could have been an issue in Windows 3.1, but under NT this will never happen.
> the difference between coding in VB and C++
All those built in debugging tools can be helpful. If you don't want them, then don't use them! You can customise the IDE so they go away.
> The API's you program against were mostly
> written by creative people with taste
MS does employ a lot of really really smart people. This is sounding more and more like Apple vs Windows.
> Source code: In the course of just 7 months,
> I've had to inspect the kernel code twice
> (and change it once).
So now that you've changed the code what happens to your app? It just doesn't run correctly on computers which haven't modified their kernal source the way you have?
The only real advantages I see for doing development under Linux instead of win32 is the FSF philophy (freedom), the fact it is free (as in beer), and that Linux code is probably more portable than Win32 code.
Personally I like coding on NT with Visual Studio the most and will stick with that. Last compiler comparison I saw said MSVC beat GCC for optimization. The tools are more advanced (IMHO) and just about any Linux tool that is useful if free to be ported to win32 if you want it (I'm sure all the good ones you'd want already have been).
Maybe 9x isn't a good development platform, but NT certainly is.
How many people here have lots of experience (over a year) of coding in NT with Visual Studio that think Linux is a better platform?
Even if it is "better", how much better is it? NT&VS are a great combo. Linux is great too. If you only know win32 then I can't see Linux being so much "better" that it is worth switching too.
By far, my favorite feature is the popup Intellisense, when you're working with an object or struct and type "." or "->" you get a window with the details of the object at that level. You will quickly get hooked on this feature.
Hmm. If you like that sort of thing, I can see that might be useful. That's a pretty trivial hack to make something like Emacs do that for you if you wanted it. Maybe forty minutes of thinking and coding to add a reasonable working version which scans all the included files to pick up the struct definitions. Better still, if you use Tags support under Emacs, you don't have to go search either - you can just look up the details.
Plus, you can now edit and recompile c on the fly while debugging. That's a big timesaver for me (for correcting "freshman" mistakes like incorrect loop bounds without having to start all over).
Not to decry this feature - it's extremely useful - but I do this all the time. With Emacs. Now why use Emacs? Mainly because once you have got over the initial speedbump of actually learning how to drive Emacs, you realise that anything you ever find repetitive or clumsy can be automated, speeded up or helped along with either a quick reconfigure, a new library, or in the worst case scenario, a few minutes of thinking and a few more of coding a new Emacs function. It's this extensibility that makes me realise that I shall never really pick up another editor for anything complex. For all you VI users who are gnashing (sic!) your teeth over this, I use vi as well, but more often than not for simpler editing tasks.
Cheers,
Toby Haynes
Anything I post is strictly my own thoughts and doesn't necessarily have anything to do with the opinions of IBM.
I prefer to develop in a transparent environment---one where I know what code is being invoked, and by whom.
I'm developing under Next/Openstep, and while the Project Builder can be nice in some ways, when things don't quite work, it can be a bear to follow layer after layer of makefile to determine what library or header file is missing.
With standard Unix-like command-line developing, I know what I'm getting because I put it there, and if something's flaky, I can ask make (at least the FSF's version) to trace its ``thought'' processes for me to check. With the IDEs I've seen, too much is hidden, and if it doesn't work exactly as intended, or if you want it to do something that its designer hadn't provided for, you're in for quite a fight.
True, you can develop from the command line under msWin, but for it to be as powerful and convenient as Unix, you need to augment the shell and utilities extensively. Cygwin gives you the missing capabilities, but I'd rather not retrofit---just go to the system whose shell scripting capabilities are a full programming language, that has a ton of Lego-like utilities to be fit together as you wish, and that lets you see what's happening every step of the way. After all, the bottom line of correct programming is knowing exactly what your code will do.
I refuse to believe corporations are people until Texas executes one. -- desert rain on http://www.dailykos.com/user/
the whole damn OS is intuitive,
the file system is easy to understand and transparent,
shell commands are fast and easy at the command line; i hate my mouse
four cool desktops
my k-task bar slides
everything's free - i want it, i get it - my database, compilers, web server, lots of nice shell utilities and languages to choose from and suit any occassion, formal or informal
the OS older, better tested, bug-free
no memory leaks so i don't have to reboot (it would be a sin to bring my box down for any reason but an emergency)
real multi-tasking
it's cool
- "If you tell the truth, you don't have to remember anything" -Mark Twain
- "If you tell the truth, you don't have to remember anything" -Mark Twain
Multi-file editing (and opening each file only once)
Integrated editing/compiling/debugging
Availability on both development and target platform
Shall accept files written with other tools and shall generate files which can be modified with other tools
Useful:
Syntax highlighting
Search by variable/function/classes
Version control
MMI visual editor
Optional:
Graph generation
Project management
Conclusions : I'm quite happy with Emacs, but I might taste somenting different from time to time.
Ciao
----
FB
2) While I can't say that NT is immune from this, it is far more so than Windows 9x.
3) I too have had to fix the source code to Linux once -- for my own use. But what happens when you want to distribute your code and it relies on the 'fixed' code? Do you have to wait for your fix to be integrated into the mainstream? Furthermore, though, why should you even have to look into the source code? Ao good API should leave nothing questionable enough for the source code to be consulted.
4) Hey, some of us prefer a point-click-drag to 47 keystrokes. To each his own.
Linux has nothing for my grandmother.
Nuff said.
I sincerely hope the alternative most are referring to using linux is Windows NT. Development in a windows 9x enviroment was really never meant to take place. If we're talking about reasons not to develop in in win9x, the answer is incredibly obvious: No kernel space. Oops, my programs has clobbered kernel32.dll's memory space, time for a reboot.
Even in Windows NT however, the things that have bothered me most about MSVC++ are the way the IDE and compiler are really inseperable. In FreeBSD I can look at the makefile (which has nothing to do with the code to be compiled) and figure out why something's broken. In MSVC, I can think of at least one point where a linking error was traced to some obscure error in the MSVC itself, and to which the only solution was to build in Release mode instead of Debug mode. Great solution, Microsoft.
to e-mail: remove the (dot), rot13, 2's compliment the bits, XOR with pad 42b397f92109d9ca92, and remove head from ass.
It's sheer hell to try to make different programming tools inter-operate in Windows, unless they're all parts of Visual Studio (and even then it's difficult)
On linux you have the luxury of picking the tool for the job. On windows you have to fit the job to the tools that M$ gives you.
Biju
"Rowe's Rule: The odds are five to six that the light at the end of the tunnel is the headlight of an oncoming train."
If you look at the hardware.txt from the original Windows 95, it states that Micronics motherboards, and Micron/Zeos systems would get their BIOS overwritten. It really helps when it tells you about it after the thing is installed...
I remember reading that it still happens with Win98 and Win2k, but I'm too lazy to check the Microsoft knowledge-base now.
The compiler in MSVC++ doesn't support the latest C++ standard, especially in the area of templates. In addition, it doesn't support the Standard C++ Library as described in the latest version of Stroustroup.
Also, having the full source for the system libraries and the operating system is important when debugging. I've been able to fix/extend things that I couldn't on Windows.
Thread support in Linux is robust and follows the POSIX standard. If you have to write portable code, this can be important. Also, most textbooks and references on threading address the POSIX standard pthreads library.
A rather big one: sockets and file descriptors are unified under Linux/Unix. This means that the system API's that apply to files also apply to sockets. Because TCP/IP was added to Windows later in the evolution of Windows, the socket descriptors are not interchangeable with other system objects, so WaitForMultipleObjects() in Windows cannot wait for a system object and a socket at the same time. This can complicate socket programming.
Windows takes a huge performance hit because its DLL's are not relocateable code, and the runtime loader in Windows must patch each call and jump instruction in the code when the DLL loads. In addition to taking a huge amount of time when a DLL is loaded, it pollutes the swapfile with multiple copies of the DLL because of the patched instructions. Under Linux, shared libraries are position-independent, so they do not have to be patched at load time and they may be paged directly from the shared object file, thus not polluting the swap file.
That's all I can think of off of the top of my head.
Question: how can you take an existing MFC SDI project and convert it to an MDI project? Answer: In devstudio go to tools --> Options --> Environment --> General. Once there select SDI, if you would like SDI, or unselect SDI if you would like MDI. Now close your project and re-open it. You will now have your pre-existing project in either SDI or MDI depending on what you chose. It takes less than a minute and you can switch back and forth as you wish.
I beg to differ.
What about the fact that you have access to a truly complete definition of the API? Does this guy realize that there things that MS does with their code that others can't because the API is less than fully documented in the public arena?
Additionally, if you want to compile on a MS platform you pretty much have to shell out several hundred dollars for your tools. On Linux your tools are included with the distribution that you can acquire completely free from many places.
Let's see here, Linux has:
- Stable systems
- Free OS
- Lots of FREE tools, Woohoo!
- Open API
Whereas, Microsoft has:- Questionable stability
- $200+ for the OS
- Expensive tools
- Only a SEMI-open API
I think Linux wins 4-0!!My office has been taken over by iPod people.
Hey people,
Read the subject. The whole point of using the Win32 platform at this stage in the game is the massive number of developer tools that Microsoft has been building for the last 15 years. Imaging the Microsoft environment as a pyramid: VB, ASP, ADO on top, COM, MTS, active directory, etc in the middle, and the Win32 API at the base. Of course this is grossly simplified but it exemplifies what is unique to the Windows development environment.
Case in Point:
1) The Win32 API is similar to Linux system calls; create files, threads, events, mutexes, etc. While you can argue that there are major architectural differences, they both provide the same level of support to the developer.
2) COM, MTS. Now the differences start to show. Linux does not have a component model that is widely integrated or used across multiple projects. Of course, newer works like GNOME are very component driven and may end up driving the defacto component model for Linux. However, on Win32 almost anything can be done with COM using a bit of VB script (can you say Melissa virus?). MIS people can tie together a bunch of different packages using COM. In Linux you have to resort to a wide array of command line tools that have different syntax, different configuration file formats, etc. MTS provides easy to write transaction support that is almost too easy to use.
3) VB, ASP. For anybody who has used these tools they are probably very familiar with their limitations. Is VB or ASP superior to other high level scripting languages? NO!! However, VB & ASP can access thousands of objects. You can create a fairly sophisticated UI in VB in a couple of hours. If you want a new control for your UI chances are someone has already written it.
The moral of the story: The application developer has a whole suite of tools they can use to rapidly develop high level apps. It may be a stinking pile of crap but for the most part it works
IMO, the java technologies are still the Windows killer for development internet apps. JSP and EJB sounds like it may be much better (and more fun to develop) than using VB and COM.
Many of the points brought up by TummyX are valid ones. Sure,they can be refuted, but he could then counter-refutre them.
The key is its a philosophical difference. Linux lovers might say "Linux's command line is superior!" Superior to what? NT's command line? OK, yeah. You know why? Becuase the NT command line is an unimportant accessory in NT while the GUI tools are central to it. It's a philosophical difference.
Like any philosophical difference, you will hardly be able to convince people to give up their current beliefs, morals and understandings to see your point-of-view. Why try?
Well, I've done all sorts of stuff, I've done VB development, Access, Paradox and C++ for Windows. I've developed for the Mac, for embedded systems, for tons of flavours of UNIX, and the reason to use UNIX, for me, has to be the documentation. Mac has this advantage as well, with the proviso that you have to buy "Inside Mac". Once you've bought it, you've got a UNIX level of documentation.
/excruciating/ detail it describes the API, and everything it can do and everything that can go wrong.
/has/ the documentation available, but it's somehow much less accessible. Firstly it carries a lot of layers about with it: there are multiple image formats, and multiple string types and layers of API and not all of what you can do in one layer is wrapped in another layer.
/make it simpler/, not to hide that complexity behind wizards. The problem there is that the minute you try and do something the wizard isn't expecting, you're dropped off into this ocean of complexity with little or no support. This leads to a development style where that which is "possible" is effectively determined by that which the wizards support - and that often there is one way of doing things, because any other way, no matter how obvious leads to complexities and incompatibilities and huge amounts of effort. The example given of switching an MDI to an SDI project is a perfect example of this: you aren't supposed to. You're supposed to make that decision on day 1 of the project and stick with it. Access never used to export new toolbars along with the database: toolbars have to be built on each user machine. Corrollary: Access is designed to be used in a fashion where the development machine is also the deployment machine... anything else requires a fight.
When you want to know what something does on UNIX, the documentation is there. In
Windows
Secondly, the documentation is scattered around. It's a lot harder to grep for things: you have to know exactly the right trigger phrases to get the info out of the help systems. (To be fair, it's hard to grep dead trees, but Inside Mac comes with an index volume bigger than the Bible to help on that front.)
Thirdly, the documentation is often simply out of date. Windows chanegs API at a scary rate and it's hard to be sure what you're reading is applicable or useful.
The fourth problem I found is that the API levels are incomplete. They lack details. Obvious example; loading images in MFC in a format to display them. It's horrible and code that gets repeated over and over. It needs an image class to handle that, and several dozen are available but are 3rd party and hence buggy or licenced or shareware or unfinished or unsupported or...
There's no way to tell what will remain a supported interface: Will this DX5 call still work in DX8? Who knows. Macintosh has promises of support attached to the APIs.
I found projects annoying on VC++ as well as other people here, but I didn't on Codewarrior so that might just be the way they're done. I dislike MFCs dialog accessing stuff: Delphi does it much more elegantly.
On the final front, the whole concept of having stuff like running a window being so complicated that tools are needed to generate the boilerplate code to save people from the tedium, kind of indicates that that code is too complicated. On a personal front, I'd much rather have it take 3 lines of code to drive a window than have a tool to write the 300 lines for me.
Microsoft is running with two huge conflicting goals: the first is to drive stuff forward creating new APIs, but the second is not to outdate anything ever. Coupled with their financial issues ("ship it quickly") means that they layer things but layer them badly - some of the layers have thin bits which expose lower level nastynesses, others parts are too thick to expose useful functionality.
The solution to windows being complicated to develop for is to
MFC uses macros instead of virtual function calls to dispatch window messages. Why? Because using vfunc calls was too slow in early versions, given the volume of window messages generated. So now it has this history of macros and general untidiness dealing with that sort of thing.
UNIX never had the problem in the first place. Why? Because X allows you to choose which messages are ever dispatched in the first place, rather than sending them all and letting the app sort out the wheat from the chaff. Manipulating the macros is complicated and error-prone, so now a wizard does it for you: a patch on the patch on the...
UNIX concentrates on being small, layers appear only slowly and are more complete. And at almost all layers, there are interchangeable options. Different shells, X servers, editors, window managers.
This smallness makes it easier for the layers to be complete, and uniform in shape and well understood.
The downside is that it does take it longer to evolve higher layers - media players and so on.
I'm addressing the original poster here.
It seems you were wise enough not to mention what language or environment you and your friend use!
The reason is portability. Not in the sense that your code should run in different OS's. I'm talking about that commonsense rule that states that portable code tends to be cleaner and have less bugs. If you are writing code that has to be compiled in different environments you educate yourself a lot.
When I first installed Linux I was in the middle of a project. I didn't install it to do my coding, but just to give it a try as a desktop. Well, I'm infected now. Eventually I decided to compile my C++ sources with gcc. It's still a console app, I'll add the UI layer later, so it should compile with gcc as it did with Borland tools. Man, what a shock! Not a single module survived without a warning. When things finally compiled, the program behaved all wrong.
If you use one single development tool you tend to assume things such as all int's are signed or fopen() defaults to "binary" mode. These things stick to your knowledge of the language and you end up coding as if they are part of the specification, although you "officially" know they are not.
I assume you code in a way that separates user and machine interface from the business rules (sorry for the cheesy expression). If you have a test framework to call the latter, you should compile it with different tools and compare the outputs. What I did was switch from Windows to Linux every other day. The first build of the day was pretty error prone in the beginning but as I became more careful I finally managed to get things right the first time around.
Developping for a good OS is a good idea. but... Developping for most OSes is even better ! A little Java advocacy : - really portable, event to OSes that do not exist yet, - efficient coding : 20 lines for a Web Server, - tons of free tools, - fast : 10ns for a for loop step well, the OO approach is a bit of a learning curve for C geeks, but it's worth the effort. No more OS advocacy : Application Development can take the best of the two worlds...
On the subject of Stevens, I have "Advanced Programming in the Unix Environment", and would thoroughly recomend it to anyone wanting to get into "serious" Unix-based programming.
It is comprehensive, detailed and well written with clear examples; quite simply the best computer-related text I've ever read. It is pricey, but well worth the money.
Cheers,
Tim
It's official. Most of you are morons.
At home I use Linux. At work I use Windoze NT. If I had to pick just one thing about the Windoze GUI that really bugs me, it would be MDI. What a hideous thing to do to an otherwise useful application. IMNSHO, no multi-document application should ever use MDI.
When I'm developing on a real OS (Linux now, OPENSTEP before), the ability to interleave windows from multiple applications is invaluable. When testing and debugging, I need to be able to manipulate the windows of the target application, use the debugger in a terminal window, watch the live outputs into various log files in other terminal windows, view the source in various editor windows, etc. On Windoze, if even one of these applications is MDI, then the others become almost useless.
In an MDI world, you've basically reverted back to a single-tasking OS. Please don't go there.
"Dance like it hurts. Love like you need money. Work when people are watching." - Dogbert.
The answer for 3.51 was "buried on some cd somewhere, notincluded with the default NT install". The answer for 4.0 is, I assume, the same. I will challenge you, or any of the other MS apologists, to name one commercial program successfully using NT's POSIX module.
--
-- Slashdot sucks.
> IMNSHO, no multi-document application should ever use MDI
Microsoft agrees with that, and so do I.
Ever since Windows 95, MS has been deprecating MDI. Word 2000 doesn't use it at all.
My Karma: ran over your Dogma
StrawberryFrog
for the carpal tunnel syndrome, man ! Twelve terminal-emulations and cut and paste without ever using a mouse ! Is that better than feeling for your mouse, then looking for your window and then positioning your cursor in that window or what ?! I have to (cross-)compile an application I'm typing with vi on a linuxbox, on a windozebox every now and then (using lcc), but I'm only too carefull not to let anything linger there or make any changes, since I closed ie5 once on it and the thing just rebooted without warning; that's NT for you; the multitasking operating system on which the multitasking stops when you kick off 'edit' in a 'cmd' box. Give me stability, give me vi and let me get on with my work now !
Religion is what happens when nature strikes and groupthink goes wrong.
The best developement enviroment is JAVA, it runs best on UNIX, and you can get Forte Comunity edition for !!!!!free!!!!!! in the sun web site.
If you don't care which platform to choose and what your audience is using, it's up to your personal requirments. All other arguments are advocacy material. I can ramble along for hours what the advantages of development on win32 are above development on Linux. So can others about the advantages of linux development above win32 development. Hell, I think even some Mac user can join in and ramble with us :).
--
Never underestimate the relief of true separation of Religion and State.
Generally the biggest problem with converting an MFC program from SDI to MDI is that you've made all sorts of assumptions about your document being the only one in the application, and similar assumptions about your view. If you've been true to the Doc/View architecture, and assuming your MFC code is clean it really isn't that hard to change from one to the other. The easist thing to do is create 2 projects from scratch which are identical except one is SDI and one MDI. Do a diff and see which code is different. It's not a lot - mostly the Application initialisation.
As for MSDev vs Emacs: I've seen both in use where I work and that's on Windows. When given the choice, I prefer to write my code using MSDev because I like the IDE. Even when coding for Linux, I prefer the layout and operation of the system. Then you switch windows and make (assuming you have Samba and share code dirs). Others use Emacs on NT for development.
I've never crashed NT with Dev Studio. Developing on 9x is suicide - you learn to regret it really quickly. Personally I don't mind Win32 development. YMMV of course, but Microsoft really does go out of their way to make things easier for developers. With tools like MSDN on DVD (over 6G of indexed help), Linux's man pages really pale in shame. The only redeeming grace is the "ultimate" documentation - the kernel itself.
I will say it again: YMMV.
(Brace for flames - this is Slashdot).
John Wiltshire
Fear: When you see B8 00 4C CD 21 and know what it means
For me is a misterious apple... i never ask me.. in which language are code all apple software... i always think that are under assembler but is this right? i mean... Apple is more intuitive than windows to use daily... and more powerfull than windows.. i am a mac user since 1995 and is great to use than my actual pIII 550 128ram windows 2000 system... i am fighting with my bosses to have a Macintosh again... cause... i am a senior graphic designer but... now... i must use windows cause...
In my project we use that crap of Visual Interdev, and of course the f* Visual Source Safe, wich the f* way.... i cant use a simple text editor cause my CTO tell me that i must use Visual Interdev to work great with all the team...
i'm really f* up... so... i still in battle to have my kick ass 9600/300 =). and of course my linuxPPC box... =)
---- EoF
mpegs? Try freshmeat.net; ISTR that there's an entry for smpeg, and one for mtv. The former is SDL based, and therefore has... issues, if you've got an Aureal Vortex-based card.
Only the dead have seen the end of war.
The developer in question should be looking at making his/her code run across Unix, not Linux.
Portable code is the key. If they write PORTABLE code they can run on Solaris, AIX, HP/UX, BSD, Mac OS X, etc.
Now, why develop for OpenSource Unix *FIRST*? As another had said....you have FULL access to the source code. You can trace the flow from your code to theirs. And figure out if the error is in their code, the written docuemntation you used to produce the call, or the error is in your code.
The only thing to watch out for is GPLed code if you don't want your code under the GPL. Odds are your firm makes its profit from intellectual property expressed in the source you compile and sell. *IF* someone makes a charge that you have GPLed code in your product, you will have to defend this charge. Such defense could be as simple as a statement "No we don't" to hiring a lawyer to explain to a judge why the lawsuit over the GPL needs to be decided in your firms favor via the presentation of your source code to a judge, paid experts, etc. How do you avoid the GPL? Just read the licences. Some are as simple as public domain. The licence on PostgreSQL is an example of a simple one that is not PD and specific to one program. Some are more verbose and complicated.
If the code *HAS* to run on Windows, libraries exist for Unix to Windows portability. These cost $, and slow up operation, but somehow money and speed are not an issue with M$ software.
If it was said on slashdot, it MUST be true!
This post is neutral.
CodeWarrior is available on Linux (they support RedHat and SuSE). I've used CW on the Mac, and rather like it. But anyways, the program is available on Mac, Win, Linux, and Solaris. Now, when I got mine it said the project could be shared across different platforms. This may make it easier to do cross development.
So if you like CW under Windows, you could use it under Linux (hopefully they kept the user interface the same under linux, and that would make transitioning easier).
-- Mike DeMaria
True, NT supports a POSIX personality for programs. There is one caveat: if you want a C2-certified system, you have to disable the POSIX subsystem.
I'm not sure if the GNU tools actually use this POSIX system: they also work on Win9x, and AFAIK there is no POSIX for that OS.
WWTTD?
Has anyone noticed that there is an entirely different culture out there when comparing the folks that code for M$ vs. NIX? It is kinda tough to pinpoint, but one example that sticks in my head is the first time I checked out TUCOWS. I was used to Freshmeat, and man what a difference. It seemed like every program on TUCOWS was either shareware or crippleware, hardly any freeware, and almost no source code. Compare this to freshmeat where freeware and source code are the standard fare.
I guess that is one of the things that turned me on to NIX coding. The people that I interact with either in IRC or usenet are just more friendly and willing to help (assuming RTFM) than their M$ counterparts in the same places.
Casca
man mount:
hard: The program accessing a file on a NFS mounted file system will hang when the server crashes. The process cannot be interrupted or killed unless you also specify intr. When the NFS server is back online the program will continue undisturbed from where it was. This is probably what you want.
soft This option allows the kernel to time out if the nfs server is not responding for some time. The time can be specified with timeo=time. This option might be useful if your nfs server sometimes doesn't respond or will be rebooted while some process tries to get a file from the server. Usually it just causes lots of trouble.
--
Less money, less admin, less machine--more power
Linux MAPI Server!
http://www.openone.com/software/MailOne/
(Exchange Migration HOWTO coming soon)
As a developer of multi-platform applications for almost a decade now, I can say that there aren't any significant advantages in the actual development of apps across different platforms. SOme asre better for some things, and others are better at other things. The one advantage, and the best advantage, is that you can break into different markets and/or make yourself more marketable. Here's what I mean... The chances that Windows will be where it is 10 years from now looks pretty slim. By learning and porting applications to other OSs, you create a user base in a growing market. If Linux takes off and grabs real market share, and/or Apple ports OSX to Intel machines, how pretty will you be sitting when businesses and consumers realize that your apps are available across all three; and can share data transparently? Answer: pretty damn sweet. If you are a developer for a business (not developing "shrink wrapped" apps), it is also a good idea to get your feet wet in developing for other OSs. Again, MS probably won't be the juggernaught it is today; and you will be a lot more marketable if you can develop on other platforms.
I am Slad.
about regular expressions, configuration management, build management, or testing. Try any of these in Visual C++ and you'll find yourself falling over your own feet. There's also the funky directory structure that VC++ keeps trying to force you into. (Basically, it's a rather deep strict tree, with everything you add as a subtree of whatever you did last.)
Then there's the cost factor. Buy a copy of VC++ (not cheap!) and you're not done. Seems like every time you turn around, you need a new piece of software. The justification, of course, is that a programmer costs (mumble) thousand dollars per year, so a few thousand extra for "productivity tools" is negligible. Sweet deal for Microsoft and friends.
Admittedly, the last big project I did with VC++ was for WinCE (doesn't anybody *look* at these acronyms??). That's guaranteed to leave a bad taste in anybody's mouth.
Welcome to the Turing Tarpit, where everything is possible but nothing interesting is easy.
Hmm... GTK does this, but you can get GTK-- or another wrapper (I think another exists, I just forget its name) to wrap the functions into nice, neat classes.
.sql, .spec...)
Of course, QT is class-based from scratch, if you like that sort of thing.
And my two biggest reasons for developing under Linux?
* vim's syntax highlighting whups MSVC's five times a week and twice on sundays. Try to get MSVC to highlight 90% of the formats that vim supports. (e.g.,
* rpm/dpkg beats InstallShield hands down.
-Grendel Drago
Laws do not persuade just because they threaten. --Seneca
Uhm...try gtk_widget_show_all()
Shows a widget and all its children.
Bub-bye
-W.W.
"Well it should be obvious to even the most dim-witted individual who holds an advanced degree in hyperbolic topology...
Locate is great for finding files. Problem with it is threefold:
1) Let's say I install something, like LessTif. The LessTif rpm doesn't modify my ld.so.conf so I have to put the path to libXm in there myself. Where did the RPM put it? Can't use locate because I haven't yet run updatedb.
2) Not portable. Maybe there is a locate workalike on AIX or Tru64, but I haven't found it.
3) find has some great options. Like -exec, -owner, etc.
I generally use locate to find files (even if it means running updatedb manually first) and find to perform operations on them (grepping especially).
--
Less money, less admin, less machine--more power
Linux MAPI Server!
http://www.openone.com/software/MailOne/
(Exchange Migration HOWTO coming soon)
I find that laziness drives me to code on UNIX, because the UNIX little-tools-in-a-pipe philosophy usually means that I only have to write a tiny program to do what I want, and in general it only needs to handle input from STDIN and output from STDOUT, so I don't have to worry about
In a Windows environment, it's likely I'd feel the need to write some sort of GUI. Windows would not provide me with the rich set of CLI tools I'd need to wrap around my quick and easy program to make it fully functional. It's possible I'd have to write that functionality into my own program instead. Sure, you *can* install GNU sort, cut, awk, sed, tr, etc. on Windows, but by the time you've done so you may as well have installed Linux or BSD.
--
who was tasked with also coding for Windows and he replied..
"The API documentation on Unix type systems is actually useful. The API's do what they say and you don't need to cover 30 different possible variants, one usually covers the lot"
ie its all alot simpler.
I don't program at low level.
And therefore I can get away with:
Do Form X
(or, if I wan't to get a result back from the form/dialog):
do form X to Y
Simple, easy and no low level code at all.
My Journal
E.g. PCI is an improvement over ISA in many respects, and so is Plug-n-Play, but when Plug-n-Play decides to introduce conflicts (especially when combined with shared IRQ slots, and on-board PCI devices), it all turns to hell, and I get a serious itch for jumpers to hard code the damn things exactly where I want!
Even though we managed to improve older problems like IO address management and the like, we've managed to introduce new problems like Bus-mastering slots vs non-bm, IRQ sharing drivers, Plug-n-Pray, etc. Sigh.
PS. A bios update is usually the fix, make sure you use the latest bios.
Why?
Because since the code is open, as a coder, you are given entirely free reign to do what you want to do, how you want to do it, and are "empowered" to actually discover and remedy bugs.
Because you are not at the mercy of a large, faceless, corporation which dictates the APIs and specifications to you, forces you to use certain tools, locks you in, and makes you pay through the nose.
Because Linux, Unix, and open source *wants* and *needs* you. Microsoft couldn't care less. There are beanie weenies falling all over themselves to become l33t VB c0ders.
Because it is the Right Thing.
It's 10 PM. Do you know if you're un-American?
I love saying stuff to my mates like,
or
on this point, Q-DOS clones like windows have problems:
- no pipes! - v. important.
- useless options
- a tsr for history functions
- the shell is not seperable.
- I actually found the shell on the amiga more useable than DOS!!!!
- All serious developers use Unices - ( I work at Bell labs)
-----go to the website and suffer.
If you are involved in the
development of any of the new
programming tools or IDE's,
you'll notice that visual studio
is closely studied. It is the
benchmark for a development
environment.
Anyone who approaches working with
visual studio with an open mind will
find that it is the most flexible
and powerful development environment
out there. you can even use your
makefiles and gnu tools with a
custom build process if you so
desire. Sure you have the
limitations of the system you
are programming on, however,
don't use that to attack the tool.
For a person who is used to
working within visual studio,
moving to a vi(m)/ or (x)emacs
development environment is
literally moving back into the
stone age.
As to changing an SDI app
into an MDI app, no you don't
have to create a new project,
Add a CMainWin class which
inherits from CMDIFrameWnd,
Migrate all your toolbars and
non-document specific menu's.
Then change your other windows
to inherit CMDIChildWnd make a
few changes in theApp class
and you have an MDI program.
Thats won't give you a complete
program though and the project
will still require a lot of
major hacking, mostly to deal with
mutiple instances of child windows
and what not.
-T
Old truckers never die, they just get a new peterbilt
This has a much steeper learning curve and to truly master it, you have to be a true hacker, thinking in terms of how you can recombine little pieces to make something new. Many developers are better off under a Windows IDE like DevStudio since it takes care of all of the little things. However, I really take advantage of being able to use the same editor (in my case, Emacs!) for everything, being able to extend my environment easily, and having such a large set of tools (perl, python, make, awk, sed, xargs, diff, rcs, cvs, etc.) that I can recombine easily. A lot of little things that are all really good at what they do is much better than one large framework that paralyzes you when it doesn't meet your needs.
Yes, many of these tools are available for Windows. The environment isn't supportive of them, however. Forking under Win32 is extremely slow, so using a bunch of little tools is less efficient than using a single tool. We're talking orders of magnitude here. The Win32 port of Emacs has never quite gotten along with my environment; slashes go in an un-C/Java-friendly direction, the concept of "disks" vs. "mounts" isn't really supported, my configuration files don't make sense on Win32. None of this is Windows' "fault," or a serious argument that Windows is an inferior platform (I think it is a superior platform for most applications, just not development) it's just that the little tools approach doesn't work.
magic
Thanks for the information. It's kind of a moot point now since I'm unable to flash the BIOS to the latest version because the board is dead. Besides, seeing as Linux runs like a dream on it I'm just going to remove Windows completely anyway.
Now weary traveller, rest your head. For just like me, you're utterly dead.
Note: This is kinda sloppy :)
--- clip ---
#include <iostream>
#include <gtk--/button.h>
#include <gtk--/main.h>
#include <gtk--/window.h>
using SigC::slot;
void destroy_handler() {
Gtk::Main::quit();
}
class HelloWorld : public Gtk::Window {
Gtk::Button m_button;
public:
HelloWorld() :
Gtk::Window(GTK_WINDOW_TOPLEVEL),
m_button("Hello World")
{
destroy.connect(slot(&destroy_handler));
m_button.clicked.connect(slot(this, &HelloWorld::hello));
add(m_button);
show_all();
}
void hello() {
cout << "Hello World" << endl;
}
};
int main (int argc, char *argv[]) {
Gtk::Main kit(argc, argv);
HelloWorld helloworld;
kit.run();
return 0;
}
--- clip ---
Luke
On a side note, VC++ was "innovated" by some company that Microsoft bought out, so...
You are in a maze of twisty little relative jumps, all alike.
Visual Studio was a lot better than I expected from Microsoft, but it's not that good. It has a damn lot of features, but many of them narrow your thinking so much that you tend to produce the Same Old Windows App every time.
;))
Here are some of the problems I've run into in Visual Studio:
Project management is so complicated and "behind-the-scenese" that projects can easily get corrupted and unbuildable.
BAD support for advanced features of C++, especially exceptions and templates (yes, worse than g++). One time we took a working, warning-free program from g++ to MSVC++ and it crashed the compiler. Another one couldn't compile because VC++ put a 255 character limit on the length of the names of instantiated templates.
AND IT ASKS YOU "Are you sure you want to recompile?" when you PRESS COMPILE!!
And of course, linux features unmached by windows:
Availability of library/kernel source
Awesome emacs features like smart syntax coloring, automatic indenting, regexp search/replace, keyboard macros
Elegant, scriptable project management
Not having to worry quite so much about compiler bugs.
Of course, the forms designer is the best way to make windows in Windows, and some other tools are invaluable. But as much as I'd like to be able to make apps for the OS I use as my desktop, I've just given up on dealing with MSVC. (And I have no patience to learn the twisted API and compile with cygwin or something
I have written programs using these tools under windows. The experience is not the same. Windows just does not work like Linux/Unix does. Unix has been molded to fit the C language. Working with external programs, libraries, everything is a basic function call in C, whereas under windows, this is far from true.
Eh...
I think it is the complete idea behind UNIX that makes Linux a better development platform. UNIX has been designed to be a multiuser development platform in the first place.
/usr/doc, ...etc!
It is already said that everything is a file in Linux. Indeed, that makes it very open. If you want to know something, you can read it with your own eyes, no big mysteries here.
Furthermore, every configuration is a textfile. Even less big mysteries.
Off course you can read the code, and the headers.
There is a lot of room in UNIX, GNU and Linux for documentation, it is simply seen as a necessity. Man pages, Info files,
The file system structure also makes things logical; while in Windows the structure coming after "C:\Program Files" is completely random, in Linux programs are forced to be in logical places. This does ease development when your program cooperates with other programs (should be useful).
The multiuser system and tools like CVS also make it very handy to work with more people, without making things more mysterious.
The stability makes that in case of an error, you KNOW what caused it (which I almost never know with Windows - has been said before).
You can work in good graphical environments and stuff, but this does not take away the underlying structure of commands, files, configuration textfiles, etc. Can be VERY handy (also for remote working, e.g. with SSH).
You are encouraged to program in Linux. Not only the source, but also the fact that GCC and Perl (to name two) are considered standard parts. There is no hard difference between developers (who require headers and stuff) and normal folks, like with Windows. (Which doesn't mean you have to be a programmer and you can't leave out -devel packages.)
...etc. etc.
While Linux presents itself structured from the ground up, even though the building blocks are "simple" things like files, Windows presents itself as some kind of magic book from which some selected people can learn some selected things.
It's... It's...
"We can confirm that Debian does *not* ship the version with the trojan horse. Our version predates it." [CA-2002-28]
There are several libraries that have ports for both environments. I suggest using one of these if you are developing cross platform, less code to modify. The only time that I would suggest not using them is when you need fast, optimized code.
Eh...
I like developing on Linux and Unix (tm) in general because the following program will *NOT* result in a system crash:
int main() {
int *p;
int i;
p = rand();
i = *p;
}
A segfault, yes, but in winDOS you're as likely to lock up the whole system as anything.
Even if it is not the best tool at all for the job. MSVC gives you all that built right in, no need to "spend time getting over the speed bumps."
1) Windows itself is a buggy and unstable platform with bad API's.
2) Programming tools on Linux are easy/harder/more productive than under Windows (with tools like Visual Studio)
I agree with #1, however as user of Visual Studio for several years I'd say that Windows wins #2.
I've never used a more helpful and intuitive coding environment. Once you use Intellisense its hard to remember how you worked without it. Just try coding without syntax highlighting and you kind of get the picture. "Edit and Continue" make it an absolute joy to debug.
If you are a little careful it's easy to write portable code under Visual Studio, and Win2k is suprisingly stable.
That said, there's something beautifully pure about using makefiles and debugging with GDB, and its good for your soul to take control on a low level now and then. For me, its kinda like camping in the woods for a few days. Some peope like camping a lot, others don't...
Try both out and see what feels "right".
Cheers,
Justin.
"My cat's breath smells like cat food." - The Tao of Ralph Wiggum.
I've read that GVIM can be used as the default editor in VisualStudio.
Try looking here: http://www.vim.org/doc/if_ole.txt
In 10 years, how many of the programs you write for windows today will still work?
The answer is almost certainly "zero".
why would I develop for Windows when in just a few years, all my programs will be unusable?
I have a bunch of useless Turbo Pascal programs
I wrote in my misspent youth. What the hell can I do with them now?
On the other hand?
How old is "vi"?
How old is "make"?
How old is "cat"?
How old is X11?
How old is
How old is "awk"?
All of these programs are well over 10 years old and they still work, and all signs indicate they will continue to work for the forseeable future. (Well, there might be some filesystem hiccups around 2038...
Of course these reasons apply to any unix, not just linux.
The GPL is another reason, though if you're aking "why develop for linux? I like windows", then baby-steps are in order, and the GPL might not be the place to start.
Bang the head that doesn't bang!
I did about 2 years at HP developing image processing/manufacturing software in WinNT. I had to use MS Visual Studio to communicate with the hardware so I developed that stuff as a DLL. Since it was all low level stuff built on my own class library, I didn't have to use MFC which was a real blessing. The only time I butted heads with MFC was when I would write a quick and dirty application to debug a piece of the DLL.
Did you ever try to remove a button from an MFC application? If you're not careful it will chew up and spit out your project before you know what hit you.
The rest of the application(s) I did in Borland's C++ Builder. Remember, Borland is releasing Kylix sometime this year, with the C++ Builder version to follow soon after. Kylix is is Delphi for Linux. It is a marriage of all of the stuff you like about programming in Linux, with the slick, integrated IDE.
Delphi Rocks and it's going to be great on Linux. If you're careful with your code, deploying your application in Win32 will be as simple as recompiling it.
Go to community.borland.com for more information on Kylix.
With Regards,
Phillip H. Blanton
Given that statement, Windows' ease of use is NO EXCUSE for its instability, difficulty to administrate, and general lack of room.
By lack of room, I mean the fact that to do anything in Windows, you have to search through ungodly amounts of documentation, search through deep menus of the Start menu, or try to use what limited facilities are there for finding files. On Linux, if I forgot what the command was to run the GNOME Control Center, I can "ls --color=yes -C -p /opt/gnome/bin | less -r" and take a look at all the binaries there; and I usually suddenly remember what the command was once I see it. When sitting at a UNIX command line, I know that, even if there isn't much installed on the system, I can always get my kicks writing shell scripts. At least UNIX's command interpreters can take advantage of multitasking.
the real at&t mix
This is more of a geekpinion, not so much a reason because well, unfortunatley, if your making a product to mass market for a company, they *will* want it done in linux.
For a developer, the biggest noticeable change from Win32 DLL to Linux ELF Shared Libraries, is this: In windows 95, 98, NT, and 2000 (but not 3.11, which makes me beleive the 3.1x coders were superiour) DLL's get loaded once for each application. Why? In my eyes its to help stop severly sloppy code from crashing everything, which happens anyway, but *shrug*. Under linux, shared libraries only get run into memory once, if i remember correctly, and that's a big resoruce saver.
--- 'dex
Most comments I've read here talk about open source.
That's an advantage, but not the only one.
You have:
* flexibility: scripting, make, and that kind of tools allow you to easy recompile a project, tweak all the compile-time options comfortably and easily. Command line tools are MUCH more flexible than their GUI counterparts
* stability: When coding, you have to usually test a program. It's quite possible that your program will have bugs on the first run, so it will hang. I prefer having a core dump instead of having to reboot my machine
* language/compiler availability
* codebase availability: It's quite usual to find some code that already does what you want, or part of it.
* documentation: Documentation is usually much better in open source environments. And when that fails, RTFS....
* portability: most linux libs are standard based, and much more easily portable to windows (or other unices) than windows libs...
if you're a win32 programmer it doesn't really make sense to use linux unless you are programming in java, perl, php or using gcc to write code. but other advantages are the bash shell and all the text processing tools. if you're a command line compile kind of guy like i am, i'd suggest cygnus to get the hang of linux based development. i am currently using it but am planning a full transition to all linux since i currently code in java and perl most of the time.
--
J Perry Fecteau, 5-time Mr. Internet
Ejercisio Perfecto: from Geek to GOD in WEEKS!
--
And Justice for None
Emacs in nice in some ways, but it's a dated dog in others. IDEs from Microsoft, Borland, and Metrowerks are annoying in different ways, but make so many things *sweet* (the Microsoft's being the worst of the three, because they insist that MDI programs are good). Similarly, Makefiles are nice sometimes, but once you've lived without them then you wonder why you went through all the trouble in the first place. Of course, you can use Makefiles with Windows compilers as well. The three big compiler companies all ship command line tools, so heck, you could even use Emacs under Windows if you want.
There's no clear answer yet.
Why develop for any platform that could be considered "emerging?" (Note: I realize that Linux will qualify as past emerging for some of you, but bear with me.)
;)
The same question could be asked for BeOS, PalmOS, or even WindowsCE to be honest. And my opinion is basically this:
1. You can do it for free.
2. THE OPPORTUNITY IS THERE.
3. See #2.
4. See #2.
5. See #2.
Let me explain #2.
Windows: wow, I'd like to really write a kick ass check book program. Let me see what my competition is like.
*does search on Infoseek, Excite, or your favorite engine and pulls 1,517 hits on check book programs*
You've got to stand out in *that* crowd.
Now.. Linux.
*does search on Infoseek, Excite, or your favorite engine and pulls 4 hits on check book programs*
Primary program is gnuCash. Wow.
You're going to stand out a *lot* better.
Any emerging platform stands as a prime development platform simply because you have a greater chance of having your product recognized and used, and as any egomaniac can tell ya, isn't that the *real* reason you code?
To help others?
(This maybe a sick twisted viewpoint but it *is* how I look at it.)
B.
My reality check bounced.
I think that this is confounding several issues.
1) Uneven as Unix documentation is, it's more
complete and better organized than MS'. Unix folk aren't trying to hide anything. I've lost more time hunting for documentation of some obscure but necessary datum on Windows than it would have taken to research, design, code, test, debug, and package the whole app. on Unix.
2) It's not IDE vs. pile-of-tools, at least not exactly. I've also used DECset, a tightly integrated collection of editor/build manager/config. manager/test harness/static analysis tools. It accomplishes much the same things that MS' IDE does, but the interfaces between the different functions are exposed and documented. That made all the difference, for me. I could understand what the funcitional units were doing, and take command if I had to.
3) Another complaint I have about MS' tools is the one-size-fits-all fallacy. I write mostly noninteractive stuff and small tools, but the whole VC++ package assumes that you're developing an object-oriented, document-centric, OLE-ized monstrosity. (Come to think of it, much of what I write for Windows is meant to overcome the same sort of thinking embodied in the OS.)
Bottom line: to me, programming for Unix (or VMS, or even OS/360 and its descendants) is more like being part of a community, while programming for MS products is like being trapped in a Spy vs. Spy strip.
"Glory is fleeting, but obscurity is forever." - Napoleon Bonaparte
Emacs is truly awesome.....I can't stand any other editor anymore. :)
There are 2 features (out of the box) of emacs that I just can't live without.
1. Dynamic expansion - start typing a word press alt-/ and if that word exists in any file you have open, it will complete it for you, cycling through the possibilities. Greatly improves my code readability since now I can have informative variable names
2. Coding/indent styles - Once you set up your preferred indenting style, just have to hit tab to put that line in its rightful place. ctl-c ctl-q and the whole damn file is indented the way you want it!
There are a million other reasons emacs is cool and if you don't have one, you can easily make it do what you want. Emacs does take some time to coax it to behave the way you like, but once you are there.......you shall never return to the dark side.
"I have been around the world and found that only stupid people are breeding" -- Harvey Danger
the whole damn OS is intuitive
Linux is wonderful and I wish that I never had to use Windows, but intuitive is not the word I would use to describe it. How does 'grep' relate to a command that finds strings within files. Yes I know it stands for Get Regular Expression and Print, but that wouldn't help my dad find the command. I'm not knocking it in the slightest, just knocking the rather jargonified Unix syntax that it's based on (heretic!).
I've recently found out about KDevelop and it's pretty much an IDE like MSVC. I'm not quite sure if it has the Intellisense option, can't check that right now. http://www.kdevelop.org
Karel Bemelmans, karel@narfum.org http://melvin.narfum.org
True, NT supports a POSIX personality for programs. There is one caveat: if you want a C2-certified system, you have to disable the POSIX subsystem.
This is a common misconception, and not true. I know, because I read the NT C2 guidelines to do the security design and implementation for an Army logistics system being built under NT.
The actual security guidelines for making NT C2 recommend disabling POSIX, but only because most people don't use it. The very next line says that there was nothing that they found in the POSIX subsystem that was a problem for C2 compliance.
Basically, unless your application requires POSIX (multi-platform stuff, or a port from a legacy *nix), you should disable it, just like you would disable a network service that isn't being used.
Less services -> less potential security holes.
Yours truly,
Mr. X
_______
2B1ASK1
There is the old mantra: to the tune of 'Let it be', called write in C.
..)[I know I should learn perl but you can't teach an old dog new tools when his old ones still work], netscape, oracle, make, grep, emacs, cvs, jdk on win32 and linux. (I prefer linux because I am used to unix, but it tends to be less user friendly (i.e. graphical, remember developers are users too) than windows, but it bites (blue screens) less.)
Now I reckon the answer is write in Java.
As it is platform neutral, including the graphic user interface apis shipped with the language.
I use bash (diff find grep
Using java it is easy to shift to win32 or Linux, either now or in the future, depending which pays more (in money + career development).
applepiesolutions Ltd.
Be Free: Free Software Tuition
Linux will be here in 30 years. Windows won't
Linux developers will be able to get a job. Windows developers won't.
Deleted
The latest problem I'm seen with developing for windows is that it's easy to make your distribution destroy your users machines without meaning to. The broken way the windows handles dynamic libraries and updating them means that if you have a old or incompatible version of a library and distribute it with your program, users may install it and make their system unusable. This happened with a project I heard about recently, and really annoyed a lot of people who weren't expecting their friend's program to trash their system.
With Linux either you just tell your users to get the libraries they need if they don't have them, or you use a package management system, which works far better than the windows scheme.
show him this discussion on /. and let him think on his own. If its not obvious to him now, it may be later. and if not, his loss.
Of course, if all you ever want is what MSVC gives you, then by all means use it. If, like all good programmers, you find yourself wanting to do more, well then you'll find it after a point to be limiting. But if you'll never reach that point, then MS is fine for you.
This is in a nutshell the basic philosophy difference between MS/Windows and Unix. MS tools try to give you everything you need, whereas Unix tools give you the power to build bigger and better tools.
---
At least mafia-owned pizzarias make excellent pizza. Compare to Bill Gates.
True, I've often used it as a paperweight.
...the single, most effective "tool" to debug applications quickly. Combined with RCS, you can fix a once-in-a-lifetime bug by checking a core dump from something that blew on a production version of an app that you built two years ago.
I refuse to develop under a system where I can't examine the core space of a crashed program. It's stupid.
--
Do daemons dream of electric sleep()?
Use emacs to edit and the 'ddd' frontend to gdb to debug.
I spent over a year working on a large commercial product (Lotus Domino) with MSVisual Studio and was almost convinced that Visual Studio was a better place to develop then linux because of the debugger. THen I discovered ddd. First of all, it supports all that "IntelliSence" shit, and it has the <B>Best</B> data display capabilities i've seen anywhere. You have to try it to believe it.
Emacs has more features that are better integrated then the Visual studio editor anyway.I wonder why such excelent solutions aren't more widely used.
I've done both Linux and Windows development, and Linux wins by a mile.
:)
1) Stability. If your program crashes in Linux, the worse thing you get is a coredump. In Windows, you're lucky if your system remains stable, and you may or may not get an error when the program crashes. This means you have to either:
a) run the binary to a "crash machine" or
b) reboot after running the build
both of which waste equal amounts of time.
2) Debugging
Long Live the Core Dump. It's a million times more useful than "This program has performed an illegal operation..." (which you don't get half the time, especially if you're using DX, which has a nasty tendency to just dump you to the desktop). Is it any wonder PC games are so incredibly buggy when the OS doesn't provide any facilities for fixing the bugs?
Those are two main reasons that I abhor Windows development. The slickness of the IDE is not really an issue, in fact a MSDS-like IDE for linux would be tres cool.
Nathan
I really don't agree with this. I develop on WinNT using Visual C++ for a cross-platform project on Win32, Irix 6.5, SunOS, and Linux. We don't use cross compilers, but the IDE makes it worth it. Code completion and having the MSDN library is _MUCH_ easier than sifting through man pages.
Your preference for MSDN and code completion over referencing the occasional man page aside, you haven't said anything that addresses the original concern of the post you replied to.
Large projects developed using proprietary IDEs will be difficult if not impossible to manage in another 15 or 20 years (and, as Y2K showed us, the code will need to be managed many years hence). Using industry standard, human readable makefiles may not be as snazzy as running the latest glitzy IDE and project manager, but a developer in 2030 will have little trouble rebuilding the project from the source if need be. The same developer, confronted with a large project developed under Microsoft's IDE, for example (Microsoft isn't the only culprit, there are competing IDEs with the same problem), will find it nigh unto impossible to find a copy of a 20 or 30 year old IDE. Recompiling the project will be next to impossible and very expensive, possibly more expensive than the code is worth.
Now, undoubtably someone will argue that this is doing the hypothetical company and developer a favor, that 30 year old code should be disgarded and rewritten anyway. In some cases perhaps, but in some cases perhaps not. "hello world" isn't going to be any better fundamentally if you retype the code 30 years from now or recompile code written today. In any event, the decision whether to discard or reuse code should be based upon the merits of the code, the time/cost required, etc., not upon the unavailability of some ancient, proprietary IDE needed to rebuild the damn thing.
The Future of Human Evolution: Autonomy
Your co-worker is correct -- if you are building Windows apps, most tools are readily available under both systems (albeit much less expensive and more malleable under a free U*ix). I probably would agree that the IDE's available under Windows are somewhat better, particularly for developing Windows apps.
But if we want to compare pound for pound, the bottom line for me is the command line.
The real difference is that you have a serious, real, command line and shell that was made for doing serious, real, complicated things. The Dos-like approximation under Windows is virtually useless in comparison. Windows are simply a nice means to have plural consoles on the screen at the same time.
Its hard to explain why this is so to someone who hasn't done it, really and seriously, both ways. The command line places massive power at your hands -- and the capacity to manipulate text, therefore manipulate programs, appears to have been highly underestimated by your colleague.
Everything else is a wash, or in some cases only slightly favors one system over the other. At the end of the day, its the command line, silly.
---
guillaume
give me all your garmonbozia
Read/Write almost any disk format in existance
Cross-platform testing, using WINE or IBCS, -without- rebooting or switching machines
The Penguin logo is cooler than the flying window
Ability to test out on multiple network configurations
Linux is gaining mindshare & market share in the server arena. Microsoft isn't.
Linux is gaining mindshare & market share in the home network market. Microsoft isn't.
Linux has a guaranteed future. Right now, Microsoft doesn't.
Linux is future-proof, as it can migrate to a pure 64-bit OS. Microsoft 9x is DEAD, in 2032, and companies might not want another Y2K budget fiasco.
CBQ, RED, ECN, RSVP are all supported, making Linux a powerful network machine and DDoS-proof. Windows is not.
Linux supports a wider range of RAID configurations (so long as you don't use 2.3 or 2.4, just yet!)
Linux has better swap-handling, making development quicker. (Faster compile times, less disk thrashing, etc.)
Linux has -real- FS journalling. MS Windows does not.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
Create killer app
Watch MS eat your market
Penguins just eat fish
------
------
You are in a twisty little maze of open source licenses, all different.
Many of these were good tools, some bordered on great tools.
It was while I was deeply involved in Visual Basic (VB) that I began to get an uneasy feeling. As new versions of VB were being designed and released, it seemed that I was spending more time learning the nuances of the tool, and less time honing my skills as a programmer. Even worse, MS would come out with a set of tools, then abandon or alter them a few months later. Gods help the early adopter.
In 1994, I started working in a group that was almost exclusively Linux. The learning curve was somewhat steep, no doubt about it. But the unix toolset was so rich, and the tools built upon themselves in such a manner, that instead of a vicious cycle of adopt/upgrade/abandon/relearn, I found that all my unix learning built on itself.
The unix command line, with its concurrent filters and pipes, makes it very easy to build and reuse tools. gcc and gdb, coupled with emacs, made for a very powerful programming environment.
But the essential difference between programming under Linux and programming under Windows is that in the former you are using tools, and in the latter you are using products . When MS wanted to push the adoption of OLE (Object Linking and Embedding) in their OS, they spent a great amount of time adding OLE features to their languages. At the time, users may have been clamouring for better OOP constructs in VB, what they got was whatever was on the MS agenda.
Who do you want building your tools?
i first got started with turbo c++ at my high school (and i hated it). i had already used makefiles, but never to make my own stuff. right now, i've found that codewarrior is what i wanted. at least in macos it has a nice point and drool interface, and i've always shyed away from makefiles (i'm not sure why). unfortunatly, metrowerks has not made codewarrior available for linuxppc, so i guess i will have to learn how to use gcc....
--- Hey, Jesus is coming! Everyone look busy
Actually I like using emacs, but I tend to use visual studios, not because of the intellisense.. but because of copying and pasting.
I dislike the copying by double clicking (my fingers just won't synchronize) and using the mouse. And even though I use an emacs that knows how to copy and paste (it implements ctrl-enter and ctrl-shift-enter, dos-like copy/paste), sometimes when using different xterms, the copy/pasting gets confused.
I guess, its not really that important to most people.. but I really like being able to copy and paste properly, specially when dealing with large amounts of code.
Mez -- not good enough to dig into emacs lisp just yet.
If you get a service that failed to complete either starting or stopping, it goes into an uncontrollable state where you can neither start nor stop the service.
You cannot control the process from the task manager at this point and the only cure is a reboot.
It's way, WAY worse than zombie processes under *NIX - in fact, it's as bad as RWAST processes under VMS.
--
Peter
I keep running into this mythos taken for granted nowadays. C and Unix born together?? I don't think so. Unix was born, and then later, recoded to C, and has since become the standard. C was an AT&T internal programming language, and Unix just happened to have been written by an employee at Bell Labs who liked C enough to recode it in the language...
i) so you can annoy users of other Unices when your "portable" code won't build for lack of linux/soundcard.h
ii) so when your application hangs the X server you can shrug and say "well, what do you want for free?"
Rob
The big advantage is that your code will run under Linux (and other Unixish systems if you do your job right). That's a big deal, because you won't get bug reports about other programs crashing yours...and there are way fewer pain in the ass liberery bugs...and when there are it is far easyer to find them with the source to libc (or libcurses, or libfoo) and either fix them, or code around them. Way way way nicer. At least IMHO.
With Linux everything you need is free.
Anything missing? Add your own code or talk with whomever is resposable for the libary.
And thats the other advantage. Direct access to the develupers.
Linux is know for stability under fire...
Develupers don't need THAT they need minimal stability.
Windows dose not deliver.
Windows 3.11 had memory leaks and it's a good bet many apps writen for 3.11 had memory leaks as well.
A programmer can not be expected to fix bugs when he can't be sure the bugs belong to his app and not the operating system.
I don't actually exist.
Programming in the MS Windows environment is geared towards producing nice, pretty Windows apps, full stop. Everything else is much more difficult for all the stated reasons. I've used Visual Studio and Visual Cafe on Windows and in both cases there was no advantage to using those environments unless you were building a standard, user interface Windows app. However, in today's world so much of programming is either "systems" or Web. Sure, Microsoft has long stood for the "Cadillac" ride, while Unix/Linux is more like a Landrover, but you can go more places in a Landrover. That's why I think the "Where do you want to go today?" is so specious: Whatever your answer is it better fit into a Windows app on a Windows box. And I have to emphasize the Open Source mentality again. I've worked in MS environments where needed bugfixes or lacking functionality simply stopped the show--with no recourse to solving the problem other than to wait for MS to maybe fix it or expand it. When you have to back an entire development team out of Visual Basic 6 because VB6 suddenly can't handle your VB 5-written app, you'll stop complaining about the canvas seats and the hard suspension of that Landrover. Sure, the learning curve is steeper in the Linux/Unix environment, but there is no limit to what you can do--once you master the gnarly tools--whereas Windows programming always seems to have a stone wall just lurking around the corner.
--- WWSD? What Would Strider Do?
Some people may not be this lucky.
I imagine that someone has already made this point, but I'm on the run, so I'll toss in my $0.02. This will probably get lost in all the noise that this story is sure to generate.
I'm a Windows coder. Don't flame me, I've got my reasons, and it's irrelevant to my point. Just get in your head that I'm experienced with the Windows enviroment.
I have written code in Linux. The networking class I took in college made us use Linux. While I'm not experienced in Linux, I know the basics.
The single thing that really attracts me to Linux (*nix in general, really) is the elegance of the APIs. The beginnings of the API set was written with some very careful thought, to make the interaction between the APIs nearly seamless. I'm a big fan of tight, elegant code - and I continually get frustrated in Windows because the APIs almost force you to create bloated code. I recently rewrote a simple port listening project that I had done in that class - the 50 lines of code for Linux became 300 under Win32. Why so much? Multitude of reasons, but the inelegance of the API set is the basis.
If your friend is a good developer, he'll appreciate the beauty and attraction of good, tight code.
J.J.
http://slashdot.org/users.pl?op=us erinfo&nick=CDanek
/. down).
So fucking what? This guy has just as much right to be here as you do.
I really get tired of you bigoted Linux users.
If you don't have anything constructive to say, just keep your mouth shut (and the noise level on
In win 95-98 the DOS window doesn't scroll so if an error (such as a Java Exception stack trace) prints out then you can't scroll back up to see what the error was. Very frustrating.
Also, the memory management of the DOS window in 95-98 is different from the memory management in the rest of the OS. By this I mean you can easily get out of memory errors by doing something as simple as running "make" on a project a few times. That pretty much makes 95-98 useless for writting code.
So that just leaves NT/2000 or Linux. I've never even seen Win2000 (I don't have a need) but I've done a lot of development on NT and Linux. I should say that I'm very much an anti IDE guy. I think tools like JBuilder (for example) insulate the programmer from the code (among other problems). So the coolness of certain tools desn't really effect me. I don't need JBuilder or Visual anything becasue I just use an editor and make files. Therefore, I'm not locked into an OS by the tools I must use.
So, *I* prefer Linux because it easily supports make files, it has very stable memory management (I've crashed NT too many times) and I love the concept of multiple desktops in KDE and Gnome. I can put my CD player on Desktop 4, my browser on Desktop 3, and keep my editor and terminal window on desktop 1. Then I run the program I'm coding on desktop 2 and none of my screens are crowded. It helps keep my thought process clear and uncluttered (just like the desktop).
Finally, my Linux desktop feels like *MY* desktop. It's so easy to customize the themes, the terminal window colors and so on that I just feel more "at home" when I'm on Linux. I know that I'm on *my* computer, instead of being forced to use yet another clone of Bill's vision of what an OS should be.
Just my $0.02 YMMV
Multiple versions of SourceSafe (because newer versions aren't compatible with older ones) and multiple databases.
.ini files just to let the dumb client programs know where to find stuff. Don't tell me that this isn't necessary, I've spent two years administrating this shite product over two dozen databases and three versions. Which I suspect is a whole heap more experience than you have with it.
This is life in the real world, where you have to maintain stupid
Using the remote administration tool trashes the ini files, meaning you have to go back and reconstruct SRCSAFE.INI by hand for each version you're running. It's no fun at all.
Source Safe Sucks. CVS Rules.
--
Peter
The fundamental difference between developing under Windows and under UNIX and its derivatives (I use FreeBSD), is that under UNIX everything other than object files, executables, and libraries, is in flat text files. This includes your project files (i.e. makefiles), your version control files, your documentation (man pages, LaTeX, etc). The formats are well documented. Furthermore, you have all the tools you need to do whatever you like to these text files. And the upshot of this is that you can automate almost anything, to the point where typing `make' can check your latest sources out of various repositories around the 'net, compile them, run regression tests on them, and build and cut your release CD, and maybe even send out the mail saying a new release is available and what the changes are.
Under Windows, you have some great tools - but they don't have this underlying simplicity, and that is where *true* power originates.
When I develop under Windows (not very often anymore, I'm glad to say), I still use command line compilers, make, etc, to get as much of this benefit as I can. But it isn't quite the same...
Graham Wheeler Cequrux Technologies Internet Firewalls/VPN Routers/Encryption Software
If Borland's Kylix is anything like Delphi, it will have all the Experts (Wizards to MS fans) and code completion that you speak of.
BTW, Kylix will be Borland's Delphi/C++ Builder environment for Linux (now in beta).
The only drawbacks I can think of going to Kylix are its dependencies on QT. But, supposedly, they will allow those libs to be distributed..and are encouraging inclusion on Linux distributions.
The other drawback is that it is a commercial product. That won't stop me (I'm a corporate (and hobby) Delphi developer), but it may stop some people. Me, I just want my apps to port with the littlest amount of work and then to develop natively with the same interface I've come to enjoy.
RD
I started as an Amiga guy, then switched to Windows, then to Linux. A few years ago, I had to write an app that I had to port to Windows and Mac, so I have programming experience in most "flavors" of the major OSs of today.
... It's even possible to mix-up the APIs, so you can have one app that has both Motif, Gtk and Qt all used together and using the same event handler! UNIX has some really poor GUI-builders (none of the PD ones I'd recommend), but it's not that tough to throw together a GUI using vi and your own 10 digits.
In short, there are pros and cons to programming on any platform.
* Windows has good commercial tools, but MFC, I/O and the memory problems associated with windows are enough to make one look for an alternative. The public domain tools available for Windows are either buggy as hell or don't even begin to understand the meaning of "robust".
* Mac has an interesting (yet similar paradigm to Windows) philosophy when it comes to GUIs or graphical resources. They're still using the old development tools (with the exception of Code Warrior) of yesterday to write apps. In the Mac world, YOU USE CODE WARRIOR - there's just no other way around it, but in a way, this actually a good thing. If you grab some mac code off the web, you're almost guarenteed it'll compile and work! The legacy stuff makes IPC and GUI development very "hacky".
* UNIX (in general) is interesting because you have several choices of APIs to use. Want to write a GUI? You can choose from a number of different GUI APIs! Motif, Tcl/tk, Gtk, Qt, and so on
Some of the previous comments I also agree with, like the ability to treat devices as files under Linux - sound is simple, framebuffers are simple, tcp/ip is simple - it's all very low-level as opposed to the MFC where you have to instantiate a huge object and dig down inside of it to turn on the thing that you want. Unless you've done this for years, the MFC is a real pain in the ass to do anything very productive with.
That's just my $0.02
- Steve
--
Steven Webb
System Administrator II - Juneau and TECOM projects
NCAR - Research Applications Program
Everyone is turning this discussion onto whether Linux or Windows is a better platform. The question was what was the benefits of developing of on Linux. I have programmed on Windows for about 3 years now. I learned how to program in MSVS but then I switched to Borland and a few other compilers including GCC. Borland was the worst. MSVS is about the best compiler I've ever seen. It is stable but then I use WinNT instead of Win9X becuase they are user OS instead of a developer platform. Now to be fair I have worked with Linux and FreeBSD and I think for developing they are great but I don't see any benefits to actually coding. The level of Coding comes from the coder and not the tools he/she uses.
I/O, I/O, its off to disk I go, with a read and a write, and a bit and a byte, I/O, I/O, I/O, I/O
Actually, I find that an opposing view forces both sides to think harder - which I assume has -some- value here.
Who gives a damn where he works? And why does being a Microserf (if he is one) make you persona non grata here?
Such a narrow breadth of viewpoints reduces the relevance of any Slashdot discussion - makes me wonder sometimes why anyone with the obvious expertise that floats around here would continue to come here and wade through the trolls and partisan schlock.
But the discussion is a valid one, with many intelligent answers. I don't happen to group this one in that number.
Or maybe I just need my coffee this morning.
I usually 'lurk' on these comment trees, but I just noticed something that really interested me.
:)
:)
This user, TummyX, is obviously a Windows user. VERY obviously. But what makes me wonder is why every single one of his posts is a powerful pro Windows statement. Every single one. Go ahead, check it out.
Opinions and opposing viewpoints are what this place is all about, but the extent of this guys pro Windows rallying in every single thread he posts in is kinda weird. Almost as annoying as some of the Linux zealots here
Anyone detect something strange with this dude? Like maybe his agenda is a little too specific?
Reading Slashdot too long has got me beliving my own conspiracy theories
Why all the fuss about little documentation on Windows Programming? msdn.microsoft.com has just about everything you need if you're using Microsoft tools (a fast connection helps here btw)...
Actually I've found less documentation when trying to do things in Linux, but that's because I honestly don't know where to look.
The only reason I switch back and forth between OSes is because of demands by clients... If someone pays me to write DOS programs, then DOS it is...
--
Peace,
Lord Omlette
ICQ# 77863057
[o]_O
It's not so much about which OS you want to develop on, it's about which tools are available on the OS. It's also about your target audience. I couldn't get away with developing database solutions under Linux for people who are going to be using NT.
And for the people who said that virtual desktops are a necessity, and this is a reason to use Linux over Windows, check out VirtuaWin. I've used it under W98, NT4, and W2000. It's virtually foolproof, it's free (as in beer), and it's open source. People should -really- start checking out options before resorting to zealotry.
Now, for my personal rant - why are we learning this stuff backwards? At school they try to teach pretty interfaces and making your program user friendly... and then a year or so down the road learning assembly. Why don't we learn assembly first, then basic C, etc, and then by the time we're making those oh-so-spiffy interfaces we're turning out real-world aps that are actually useful. I can only code The Library Program so many times, ya know :) Doing The Library Program in first one language, then another, then another doesn't actually further my knowledge of programming. Give me a book of syntax and I can learn languages. I pay these people umpteen bux I don't have every semester to teach me programming, not pretty interfaces. Okay, end of my explosion about the status quo :)
While the majority of Open Source (or Free) projects are for Linux, there are plenty out there for Windows (maybe there should be more). You can look at the source code to a LOT of stuff on Unix (not just Linux). So, while it's an excellent point (and a definite bonus), this isn't something that is tied intrinsically to Linux (I'd like to see more large commercial closed-source products using Linux, as an affirmation of it's popularity).
If you your friend really is a Windows Developer than he or she must have run into a big Windows bug before.
Now I know Linux has bugs as well. The only sure fired way to elimate software defects is to eliminate end users, right?
Anyway, with Linux you have access to the source, and you can fix the bug or report it to someone for fixing or pay someone to fix it. With Microsoft you hope and wait.
Plus, ever try to bring up NT in a debugger? With Linux you can do just that. Of course, you can do some debugging with NT, but without access to the source it just isn't the same.
Open source means that if you don't understand the documentation, or think there's a problem in the underlying API, you can look at the source underlying the API (be it X or the kernel or whatever). You can see what the developer intended, and why your interface doesn't work, or find a bug and fix it or change the API altogether.
In Windoze, you thrash and hack trying to figure out why the API doesn't behave as documented. You hit a brick wall when trying to figure out what's going on underneath. You call for support, only to find someone who understands less about the system than you do... try to bring them up to speed... futile. In Windoze, you're trying to fix a car with the hood welded shut.
Then, there's the level playing field:
In Linux you won't be undermined by the OS manufacturer when they decide to make a competing product. Rather than using the same lame Microsoft API's you're stuck with, Microsoft makes their own secret special hooks into their OS, tailor made for their application (this is exactly how Visual C undermined Borland in the late '80s to gain compiler supremacy on the Windoze platform -- but there are hundreds of other examples, just read Judge Jackson's "Findings Of Fact").
In Linux, anybody can make their own special hooks into the OS. You're never in competition with the OS vendor.
In summary, this "really cool coworker here who's one of the best developers I've met" isn't as good as you think if he hasn't already figured this out.
it will only hammer plastic nails.
MSVC is full of speed bumps. In my experience most of them have been resolved with the lines "Damn, it can't do that. I guess I'll have to write a makefile".
That is the flaw in having everything "built in"; you are constrained by the expectations of the person building the tool. Deviate from those expectations, and using it is like pulling teeth.
It is possible to write plugins. Take a look at the Visemacs page: http://www.atnetsend.net/computing/Vis Emacs/. Visemacs integrates Emacs into MSVC (well, as best it can considering the constraints placed on the task by Emacs ;)). I've been using it for several years, and really like it. The source is available, so I'm sure it wouldn't be hard to do a plugin for Vi, Lemmy, etc. Of course, Emacs integration uses the gnuserv package.
There are no advantages to developing on either platform. I develop on both Linux and NT. I definately prefer working in Linux, the environment is better (multiple desktops, better stability etc). But when it comes to tools, they are both about equal. I use the same tools (emacs, vim, bash, perl) on both platforms so I don't see a real difference. It simply comes down to using what you are most productive with.
Linux or Windows as Development platform. It all depends on your business needs. The current product I'm working on doesn't require to be platform independent at all, so why would I spent time in setting up my crew to learn a total new environment. Do you really think I can afford to loose a customer that is allready using an NT environment using backoffice etc, because I don't like how windows is working. Hmm grow up please. If a customer comes to me and says: " hey I got a sytem running here and your product needs to be integrated with ours". I will say:"oke no problem" and I will start coding it no matter what the platform might be. Also even if it would have to be platform independent, it's still perfectly possible to code it under any platform. Even now at work we use dedicated tools for the GUI side since it allows us to do the job in the shortest time, but we use plain C++ for the back bone (business objects etc) and another layer to abstract the OS side. And yeah I do like Visual Studio and its tools, its stable, well documented and nicely integrated. I know it's not for free, but it ain't that exspensive either. And finally for the stability part, I agree that win95 is a joke for developping stuff, but NT4 and Win2k provides me with all the stability I will ever need.
Unix (and, of course, Linux) is the best Integrated Development Environment ever built. Just add a GUI builder and what more could you want?
Always and inevitably everyone underestimates the number of stupid individuals in circulation
Information is not Knowledge
Really... I did C++ Windows development for many years (most of this last decade). Still do sometimes... there are several issues though:
- Compiler bugs are extremely slow in getting fixed... like years... you will have to work around the problem. Only recently has there been an open source C++ compiler worth a salt (g++ is awesome for ISO compliance these days but it has it's own issues... but they get fixed quickly). And Borland's C++ compliance with 5.5 is finally good... hadn't been able to use their compiler since 5.01a. MS VC++ is a joke and Watcom is good but way behind in C++ feature support.
- Win9x simply isn't a host development platform... I will spend an average of an hour a day rebooting when I try (I tend to do fairly intensive multi-threaded and low-level devlopment so YMMV)
- Win9x and Win NT behave *very* differently in various areas of the API
- OS bugs just don't get fixed (has MS yet fixed the memory leak with in EnhancedMetafiles and Clipping Regions in Win9x... makes them useless even though I've seen MS state them as the recomended way to print)
- Changes to the OS are not documented... I remember one entertaining time when an Outlook service pack had the side effect of initializing serial port DCB's differently.
- The API documentation is highly inaccurate and contradictory/unclear... and it's not like you can just look at the code to see what it really does. I've spent enormous amounts of time playing with API calls just to see how they really behave... and on which fix level or which OS.
I don't jump on the "open source is the answer for everything" bandwagon much. I think it has it's place and I definitely think that the OS and development tools are places for it. As you can see my complaints are centered mostly around lack of access to information on how things really work and the inability to get problems fixed.
Brian Macy
Windows does everything assbackwards. I've developed under both. I prefer Linux development. If you want to develop under windows, by all means do so. I like the programs that I've written under windows, I don't even really mind the windows development model, but it's not the same. The way that most people learned how to program in academia is the Unix way. I prefer that way, and I programmed under windows before I ever touched a line of Unix source. Don't call me biased, I run a dual boot. It's simply more natural to develop under Linux/Unix, and quicker, and a whole heck of a lot easier. These OS's were written with developers in mind. I do not get that warm fuzzy feeling when I am working under windows. It has gotten better, but it's still not there yet for developers. Perhaps when they break up, Microsoft will be forced to open the gates a little.
Eh...
Even if it is not the best tool at all for the job. MSVC gives you all that built right in, no need to "spend time getting over the speed bumps."
I'd compare MSVC against Emacs like a Video Recorder vs a Computer. MSVC gives you a set of predefined tools to allow you to do what MSVC is designed to do. If at some point you need something which MSVC doesn't do, you have to either upgrade or switch platforms. However, because the options you have are limited, the amount of time you need to acquaint yourself with the MSVC environment is also limited.
Emacs is daunting for the new user. Why? Because it is a programmable, flexible editing environment. You have a predefined range of tools (libraries) at the start, plus the underlying configuration variables (via Customize or Options for Emacs or XEmacs) plus the Emacs Lisp programming language for more specific customization. There is very little limit to what you can do with Emacs - but becoming familiar with it requires time and patience spent. This time is not wasted - far from it. Every time you learn a new trick or feature in Emacs, you build your knowledge further and next time you need some function, you have a better idea of how to find it or write it.
People jokingly talk about EmacsOS. But it's not so far away from the truth - I know people who rarely step outside Emacs in their interaction with the system - maybe to adjust a window position or to switch to another desktop window. A system this powerful takes time to learn, but I doubt you regret the time taken to learn C? Or Unix?
At the end of the day, it's all about being able to make the best of the tools available. I actually prefer having many specific tools which can be used together. Emacs would seem to contradict that, but the reality is that Emacs provides a framework which helps glue those small tools together in such a way that the sum of the parts is greater than the whole.
Cheers,
Toby Haynes
Anything I post is strictly my own thoughts and doesn't necessarily have anything to do with the opinions of IBM.
Myths
1) NT == IDE (can use CLI makes on NT)
2) Linux == CLI (can use IDE on Linux/Unix)
Advantages of *any* unix flavor:
1) Client/Server nature of X (can sit at your workstation and work on any other unix box transparently. no need for pcAnywhere)
2) Industrial strength "kill" (i can issue kill -9 [pid] and *know* that the process will die)
3) More sophisticated shells (BASH, C shell, Korn shell, Bourne shell all leave cmd.exe in the dirt). Though one can get these equivalents on Windows, they're there on Unix.
4) lsof (view which processes have files open -- very handy on occasion)
Advantages of NT:
1) Tightly integrated toolset for MS development tools.
Tools/Utilities:
1) The tools/utilities such as vi, emacs, sed, awk, etc. can all be obtained for Windows. However, the Unix versions typically are more full-featured.
2) Editors are definitely a matter of personal preference. Personally, I'm no fan of emacs. There's a nice GUI editor called "CoolEdit" (http://cooledit.sourceforge.net/) that only requires Xlib. See above advantage of the client/server nature of X. Commercial editors like Visual Slickedit (my favorite) is available on Windows, most flavors of Unix, and other platforms (OS/390 even).
3) I've come to the conclusion that it's often better to stick with scripting languages like Perl or Python (my favorite) instead of writing shell scripts or batch files. They're more powerful, usually more readable (at least in the case of Python), and definitely more portable.
4) Using *multiple* compilers on your source is often advantageous since one compiler may catch some things that another will not (as well as giving a check on compiler dependencies).
Most Universities teach on a UNIX system by choice. Where the hell did you go to school that opted for windows? How many PhD's do you know that got there by pointing and clicking that paper clip under windows? Perhaps if you had any credentials, you would know a little bit better. C and Unix were developed for each other, it's a historical fact, you need references? Go to the CS section of ANY university book store and find their Unix textbooks. There are surely some historical references. My personal belief is that you don't know where you stand. The only reason that they even bother putting NT on high end boxen is to cater to users like you. If you didn't notice, the primary operating system of almost every computer other than intel based PC's is a Unix variant, ever wonder why? It's not because MS doesn't care enough about the server market.
Eh...
How come Apple hasn't released QuickTime(tm) for Linux yet?
-- Cisk for the Cisk God
C was written as a standard language under the Unix environment, and then Unix was rewritten in C to ease portability. Pretty much by the same people. Most Unix texts make references to the C language, and vice versa.
Eh...
No you could not add this to emacs as a "trivial hack". No way.
Why? Well, the compiler and the IDE talk to each other in DevStudio. The only way you could really get the same level of functionality in Emacs would be to build the first few stages of the C++ compiler pipeline into it.
If you type:
"pMyDoc->m_pWindo[tab]" it fills in the rest of the member variable. When you get the m_pWindowList you can type "->Head(" and the little tip window pops up and shows you what the arguments are for the Head method of pMyDoc->m_pWindowList.
Now, to do that in Emacs you would have to build code to:
1. Keep track of all temporary variables, their scope, and their type or class
2. Build tables of all classes and their methods and members, with the class or type of each.
The problem is, that's essentially the first stage of a compiler. It is NOT a trivial hack. You can't just do it by piping together a bunch of text parsing functions: you have to keep all this stuff in memory for decent performance - and even DevStudio 6 is pretty slow sometimes for this stuff.
On the other hand, under Windows you have to put up with MFC which has some good stuff but a lot of problems. You have to put up with all the different versions of Windows, which behave in different (undocumented!) ways and have different bugs. There are at least three occasions where I lost a night of sleep trying to fix things that worked perfectly under NT and blew up under Windows 95. (Microsoft fans who doubt me can get all the gory details by asking.) Without the source you often feel like you are working blindfolded.
My background: One month ago I started my cool new job using OpenBSD, Java, PHP, and Apache. I have used Linux at home for years, but haven't done serious development under it until now. I use Emacs because it's better than vi, but I don't think emacs is very good either. I want an editor that uses Alt- keys, not "Ctrl-X Ctrl-that Meta-x foo" for everything.
Simply put: I want Dev Studio 6 capabilities under a free operating system. That would be bliss. And if the IDE and compiler are all free software too.... ooohhh yeah baby.
The problem is, I believe that most free software developers just put in the huge effort to get good at vi or emacs (which are very powerful) but then don't have any incentive to create something better. And it could be better.
Torrey Hoffman (Azog)
Torrey Hoffman (Azog)
"HTML needs a rant tag" - Alan Cox
2) Development tools: GCC is one of the best implementations of ANSI C++ available. Possibly the best. With exceptions, namespaces, templates and STL, C++ now feels like a mature language. And you can get an assortment of ORBs and other goodies. And if you ever wonder, "How did they do that?" you can look at the source.
3) Intuitive: I've always found the X paradigm of using callback functions to be much more intuitive than the Windows event driven big case statement offering.
4) Stable APIs: OK, Microsoft hasn't really been playing the API of the week club game since they mercilessly slaughtered OS/2, but if the APIs ever do change, you don't have that nagging feeling that the people who made the change did it just to piss you off.
5) Choice: You have your choice of toolkits, and many of those toolkits are portable to other operating systems.
6) Total Cost of Ownership: All the necessary development tools in Linux are free. By the time you finish assembling everything you need on Windows, you could easily have shelled out more than your computer cost you. And you'll have to pay for updates on a regular basis.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
...is really that when you develop for Linux you don't have to deal with Microsoft bullshit licensing issues, Microsoft (lack of) support, HUGE costs for development packages (as opposed to a quick visit to Freshmeat).
TheGeek
TheGeek
http://www.geekrights.org
Kill the monkey
1) Open Source - you can see what the code is you're running with. So if you have problems (why doesn't this work in NT but it works in 98?) you can actually step through what the OS is doing.
2) A purer environment - A lot of Windows programming is MFC twiddling. Yes you can end up messing with Win32 primitives directly, but a lot of the time a lot of the folks just want you to run the AppWizard and then tweak something undocumented like RectTracker.
I would NEVER have gotten to know C++ and OO design as well as I have without experience outside of Windows.
3) Your choice of development environments, windowing environments, et. al.
4) When was the last time you could email someone to explain part of the Windows kernel source to you?
--- Jump!! Fire!! Bullet time!! - Lego version of the Matrix
The net will not be what we demand, but what we make it. Build it well.
Sorry, but I can't see any real advantage of using Linux. It's just a kernel, what difference does it really make? What you're talking about here is the quality of tools available, and thanks to projects such as CygWin, just about everything your talking about can be used quite happily under Windows.
How does it even boot into Linux if the board is dead? You're confusing me....
Either Windows trashed the board, or it's just crashing on boot into Windows in a really spectacular manner.
When I hear the word 'innovation', I reach for my pistol.
-Noctavis
My school is totally unix in the CS department, and sells the Burks CD's every semester. Almost every student, therefore, has a copy of redhat 5.2 laying in their room. Also, a lot of students burn CD's with various linux distros (go Slack) and hand them out in class. Any school that does not teach its freshmen actual coding, is not teaching them computer science, and is not doing them any favors. In 10 years, where will they be, and are they really computer scientists? I know graduate students who fail out because they don't have enough actual computer science background. I am tired of people in this forum who think that pointing and clicking = computer science. Go and get a degree, and then yell at me, ok?
Eh...
I'm a Java developer so all the arguments about VC++ (which I've used in the past) and Win32 APIs are pretty non-compelling. Since my preferred IDE is written in Java (Forte), I can run it on pretty much anything that runs Java 2. Even so, I'd rather develop on Windoze because of the availability of non-development software.
Let's face it, there's a lot more to being a professional software developer than just slinging code. Interfacing with "business" folks is as important as writing tight code. If you don't have the ability to do that efficiently, your product won't be successful.
If you're not writing platform-neutral code, you should be working on the target platform. Regardless of how you feel about VC++, if you're writing something that runs on Win32, you should develop on Win32, not Linux, regardless of how you feel about the tools and environment.
This message composed using 100% recycled electrons.
Oh yeah, the point being, I agree.
Eh...
I've spent some time trying to avoid using the mouse under X 'cos it aggravates carpal tunnel. Using fvwm2 as my WM it lets me mimic the Alt-Tab behaviour of Windows but based upon expressions that let you (for example) cycle between just your xterms, just your netscape windows or just your XEmacs (sorry:) frames. The fvwm functions to RTFM are "prev" and "next". The aches and pains have improved noticeably since I did this.
I agree completely with you thoughts about documentation, however, you no longer have to pay money for the Inside Mac books (unless you have a thing against trees). All of the Inside Mac documentation is free via html or pdf from the Apple developer website. Microsoft's developer docs are nowhere near as complete and easy to use.
Then try it with Loki's open-source SMPEG player; on my machine, it looks at least as nice as with the Windows player.
You wrongly assume I am a Microsoft Apologist. I am more of an outsider who is amused to see Linux lovers and Microsoft apologists fight the bloody fight to defend their ways.
;-) Don't get me wrong, I respect your enthusiasm, and the enthusiasm of those who enjoy other alternative operating systems (including those which don't interest me personally). None of the alternative OSes is perfect, but all of them have one thing in common: they are better than Windows in nearly every technical respect, and none of them are guilty of having held back progress the computing industry for fifteen years.
:-)
And I, an unashamed Linux, FreeBSD, and BeOS enthusiast, always find Linux, FreeBSD, Amiga, Mac, and BeOS enthusiasts to be quite amusing.
Apologists, astroturfers, and zealots supporting MS Window variants, on the other hand, are promoting a technically inferior platform and a parasitical company which has actively and severely harmed computing for as long as I've been in the field. Worse, they promote a culture which replaces technical diversity, individual knowhow and intellectual endeavor with a technical monoculture ("One World, One Web, One Program"[1]) mentality, canned solutions which barely work and often map poorly to the problems they purport to solve, and corporate marketing hype which is often criminally misrepresentative. I don't even want to begin discussing their criminally negligent attitude toward security; that is a topic for another discussion. Suffice it to say, that for all of this I can have absolutely no respect whatsoever.
To the subject at hand: as another pointed out, POSIX is only available for Windows/NT, not 95 or 98 (which comprise the majority of installed systems), and even there it is hidden away (and not installed by default). Worse, it has more than once caused severe headaches after various service packs were applied, and had to be removed. This hardly qualifies as a function product in my opinion.
Unlike Linux, code generated for one variant of windows will very often not work at all on another variant, whereas for Linux most code will work with a simple recompile, 64 vs. 32 bit architectures not withstanding (We do allot of work on both 32-bit Intel and 64-bit alpha Linux platforms where I work).
Actually, I prefer BeOS as an OS. None of the programs for it crash the OS. 'course, there aren't too many programs either!
I like BeOS, but Adamation Personal Studio crashes all the time when I try to make long video captures (from either analog or firewire sources). On occasion, it does take BeOS out with it, and a hard reboot is required. It is a very cool OS, but no where near perfect just yet.
[1]Microsoft Promotional Ad, bearing a striking resemblence to Hitler's "Ein Volk, ein Reich, ein Fuehrer" political slogan. Both show a completely malignant attitude toward diversity, be it technical, biological, or cultural.
The Future of Human Evolution: Autonomy
I haven't had it blow a motherboard, but I have tried this (moving a windows disk from one motherboard to a new one, a couple times) and it never works. The only solution was to wipe the disk and reinstall windows on the new platform. I have moved linux disks between 3 or 4 machines, and after playing with rdev to get the boot partition right and /etc/fstab, it always wooks. And I only had to do that because It used to boot from /dev/sda1 and now it is /dev/sdc1.
Set up an interrupt handler for SIGCHLD that calls wait() or waitpid() to reap the child process.
(and, btw, the SIGIGN thing is not specific to just Linux, it's mentioned in the HP-UX manpages too, and IIRC Solaris as well)
DNA just wants to be free...
It is right there ...
Jeff
stty erase ^H
The hungarian inventor, Charles Simonyi, also created the first WYSIWYG word processor at Xerox PARC... unfortunately, he went over to the dark side and presided over MS Office... :(
...there seems to be only one solution. Whatever platform your are programming on or for, use LOTS of acronyms.
--
+&x
I use Linux programming style on Windows, so it's not an answer we need, but a different question. Soon, Kylix will join us, making Windows and Linux apps development approx. the same for many people. The question will be answered very differently depending on which tools people use.
The question should be: Why should you do open-source development instead of Windows Closed-Source development?
I think the answers here are much more obvious, I don't need to list them.
I've programmed on a variety of Unix systems for almost 20 years. I've programmed on Windows (mainly NT, VisualC++) for about 3 years.
The biggest benefit to switching to Linux (or some other Unix system) is that it doesn't crash. We all write bad code when we are developing. You allocate an infinite amount of memory (or leak it), you open an infinite number of windows, you open too many files, you chase wild pointers, you pass bad parameters to system calls, you lock up all your threads, etc. Under unix, you just kill the app (from a window that will not be hung), and start again. You have not corrupted the OS.
Any number of times under Windows, the IDE goes down, or the browser crashes and the OS goes down or locks up. If I have to kill a process, the OS becomes unstable, and after a while I have to reboot.
Yes, I've crashed the X server. But you just rlogin to the box, or switch to another login screen (cntrl-alt-F4 or whatever it is - BTW - God bless whoever built that!). You can kill the server, kill your shells, kill your hung emacs, whatever. Then you just login, and start again. Linux *doesn't* hang!
This results in *way* faster development. In Linux, I don't have to be as careful, and consequently, I can move faster. In Windows, I'm always afraid to run outside the debugger, and even then it will lock up, sometimes.
One thing I do like about Windows development. That is the microsoft knowledge base. Whenever you hit one of those wierdo, impossible errors with the useless unrelated error message, you can look it up, and they record the most likely causes, and patches. It would be nice if the same service were available for linux. Searching dejanews and the HOWTO's is OK, but not as efficient.
oh come on, copy/paste is the worst feature ever implemented for any developer...
It duplicates code !!
j/k
As far as Windows crashing I can only say that if you were using Win9x for your development you deserved it. WinNT is more stable and is what I use to do my Win32 programming. That way when you make a mistake everything doesn't crumble with bad program
I/O, I/O, its off to disk I go, with a read and a write, and a bit and a byte, I/O, I/O, I/O, I/O
Also, the development community itself follows more of a traditional scientific community. Ideas and source code is released to the community for peer review; this is a critical element of the scientific process. The end result is that the developer and the consumer end up with better software. From my perspective, the Apache web server is the perfect example of what can happen when everybody works together. Since most Windows software is designed to generate revenue, the ideas and source code are closely guarded secrets and any errors in the software are regarded as hits against profit.
At this point, you're probably asking, "So what? How does this make development on Linux easier?" A great toolkit combined with an active development community means your problem has probably been solved by someone else. Linux just happens to be the OS these ideas are implemented on. There is nothing intrinsic about Linux that makes it easier for development than, for example, Solaris. It's the people (in this case, the developers) that make a difference. The OS, toolkits, and development environments are (and should be) interchangeable. It's the people and processes that truelly make Linux development a much better platform than Windows. -- Josh
No you could not add this to emacs as a "trivial hack". No way.
OOOooo! A CHALLENGE! :-)
Why? Well, the compiler and the IDE talk to each other in DevStudio. The only way you could really get the same level of functionality in Emacs would be to build the first few stages of the C++ compiler pipeline into it.
I disagree, but do continue. I'll explain why later.
If you type:
"pMyDoc->m_pWindo[tab]" it fills in the rest of the member variable. When you get the m_pWindowList you can type "->Head(" and the little tip window pops up and shows you what the arguments are for the Head method of pMyDoc->m_pWindowList.
Several options here for the budding Emacs hacker to get going on. For Emacs users already using Imenu and Speedbar, much of the functionality to chase those variables is in there. Spawning either inset windows or new frames in Emacs is not a difficult task. Dynamic or stati c abbreviation expansion can be used to fire up lisp functions as well as complete text, so having a hook run at buffer entry to set up the abbreviation tables is trivial.
Now, to do that in Emacs you would have to build code to:
That's why I noted that with TAGS support, most of the work to implement this hack is done. TAGS databases already include a complete list of structs, variables, functions and other such data. Therefore finding out what the definition contains is not difficult and neither is parsing it. Emacs is good with text :-)
Cheers,
Toby Haynes
Anything I post is strictly my own thoughts and doesn't necessarily have anything to do with the opinions of IBM.
For one thing, I can't stand Hungarian notation. :-)
Most importantly, though, if you don't like one widget set, you can try another. That's just not possible under Windows.
Reason 1 for me is portability.
The GNU compiler is more compliant with standards than VC++ (yes it is, yes it is). I don't feel the constant pressure to use ATL, MFC, and a bunch of platform-specific stuff. I can get my Linux-written code to compile on Windows a lot easier than vice-versa.
Yes, if you're doing GUI stuff, you're S.O.L. You're S.O.L. if you're doing GUIs on any platform, though. Abstract it from your logic and processing or you'll regret it later.
Here's a suggestion: Go to Cygwin's site and get their Bash and compiler for Windows. Fire up your favorite text editor and go.
I do this when I have to write code in Windows. When it comes time to pull the whole thing together, I load the code into VC++ and add the Windows-specific stuff. Works like a charm and I know that my core logic will be portable later.
Save the whales. Feed the hungry. Free the mallocs.
Disclaimer: I have just recently started doing serious development for Linux; before that I was a Windows programmer with a distinct preference for Borland tools, such as Delphi and C++ Builder.
Developing on/for Linux, I appreciate the open source, when there are bugs. I know I can go fix them if I must. But frankly, I would hope this is a rather rare experience, because as I am trying to meet a deadline for work, I don't want to be debugging other people's code! I understand that the situation would be worse if I discovered a closed source library to be broken, my point is just, while open source is definitely an advantange, it is an advantage that is only occasionally useful.
On the other hand, the IDE is something I use every second I'm programming. I want it to be there, I want it to be powerful. I know it's not really the Linux/Unix way, since you wouldn't typically get to choose your own mix of tools for every step of the process. But it's just so nice to have all the tools you need to go from dev to debug right there. I'm thinking code completion, integrated debugging, context sensitive help, etc, etc.
My question is: for those of you that prefer IDEs, what Linux IDEs do you use? Are there IDEs out there that are reasonably competitive with, say, C++ Builder?
-----
"I want my.... I want my.... I want my IDE"
I much prefer the highly integrated IDEs for the type of programming that I do. Sure, text mode programming and all that can (at least some people believe that) be more efficiant than an IDE, but it has to be set up right, and switching between programming and debug incurs some overhead. For the graphics stuff (especially with DirectDraw) that I do, I tend to write a small module, then have it crash, fix the bug, recompile, have it crash again, etc. numerous times before it works correctly. For me, it is a tremendous advantage to be able to simply move my mouse to redo the build rather than to switch to a new terminal, hit up bring up the previous command, and then execute my program. Also, VisualStudio offers something that keeps me coming back for more: incremental compiling. If you make a reletivly small change (like one often does in debuging graphics code) it will just change that part and not recompile the whole file, which is much faster. Also, it tends to produce better optimization and support incremental linking (which isn't supported by default in most Linux distro's) which make file size smaller.
A deep unwavering belief is a sure sign you're missing something...
Turn your browsers to http://www.vim.org if you want an extensible, programmable VI editor. VIM stands for "VI iMproved", and it certainly is. With syntax and keyword highlighting, smart indenting, macros, piping and shell escapes, you've got almost everything you could possibly need in an editor without the overhead of the EmacsOS.
My personal preference reason for using VI is mode-based editing. It saves my poor pinky fingers from having to camp on the control keys. Even though I understand EmacsOS has a VI emulation mode (it really DOES do everything, including controlling your toaster and microwave), I'd rather use the Real Thing (tm). Since VIM gives me everything I desire from the Emacs programming environment, including a nice X/GTK front-end, I'll be able to avoid having to brush up on my Emacs knowledge for a little longer.
assert(expired(knowledge));
What happens if you want to develop an app that doesn't use a window? One to the thing that bugged me about Windows (3.1, I don't write for Windows any more) is that everthing had to have instances of Windows to work. It was impossible to write a small, lightweight application to do a simple, single task.
There are some useful articles about getting started with development under Linux, as well as useful downloads, at:
http://www.redhat.com/devnet/
- develop on Unix, then porting to other *nixes
is a breeze. porting to Windows is reasonable.
- develop on Windows, and porting to anything
else is major major headache, and usually means
rewriting from scratch.
in other words, kill two birds with one stone,
and develop on a Unix environment first.
I have had exactly the same problem with my KA7. It is the BIOS boot block that gets corrupted. I took the BIOS chip out and programmed it in another motherboard by hot swapping the chips. To stop this from happening, you can try bending pin 27 (Write Enable) of the BIOS chip so that it does not make contact with the socket, therefore preventing the BIOS chip from receiving an erase command.
My personal experience, before having read any of the four hundred or so responses already under this thread...
I learned to program on a Commodore 128, in MSBASIC 7.0, one manifestation of the prototypical policy=implementation environment. It wasn't all that bad (structured programming constructs had been backhacked into the language, but that didn't mean much to a twelve-year-old trying to figure out how to write an operating system in BASIC), but to learn to code on such an environment is very limiting. There is no hand-holding outside the manual, but you can't get lost easily (short of a rogue POKE) so it doesn't matter. It wasn't for a very long time that I understood the benefits of keeping the implementation separate from the environment. This is what has made Unix more successful than many other environments of its generation.
The beauty of Unix is that implementation doesn't matter -- you have your choice of tools, and you're free to use whatever you're comfortable with. You don't have to write every last piece of code in bash or jump through hoops to do otherwise. Linux goes traditional Unix one better by traditionally offering a far richer development environment than any other system on the market. Not only do you have a solid, time-tested C compiler (gcc), you have any number of other languages like Perl (my personal language of choice), Python, Fortran, etc...
Another aspect of GUI systems is the IDE. I used to think IDEs were the greatest idea until I switched my Mac environment from Think to CodeWarrior. Now CodeWarrior is pretty damn good, and AppleScripting gives you every bit as much flexibility as shell scripting and then some, but to me it's not particularly obvious how to construct a tool chain in a project build -- there is a learning curve that simply doesn't exist in a traditional shell environment.
I don't like make(1) very much, I'll admit, but there's a certain simplicity to using componentized tools that just isn't there when you're using modulomonoliths like CodeWarrior or Visual Studio. Fast turnaround tools are much more easily managed under Unix, as well; I don't think I could meet the demands of the constant fine-tuning my current language project requires if I wasn't writing it in Perl (or maybe Python), and as good a tool as MacPerl might be it's still a GUI app.
So what's so great about Linux? The flexibility. Yes, there's a learning curve. But it's worth it just to not have to worry about the complications involved in managing a full-up project file for a simple program.
/Brian
Hmmm. Well, I didn't know about TAGS. It sounds like the hard part (equivalent to the first stage of the compiler) is done by TAGS. So maybe with TAGS it would be easy.
Where can I find out more about TAGS? Does it support Java? (My employer's language of choice)
Do TAGS automatically update whenever you add or modify members or methods in a class?
The other thing that is missing (or, maybe not?) from emacs is the good integrated debugger that DevStudio has. Can you do an edit and continue on a running C++ or Java program from inside emacs?
I hope the answer is yes, but I suspect no. But I was wrong before...
I suppose I will just have to take the plunge, get a good emacs book, and go from being an emacs user to an emacs expert. Then I'll be able to fix the keyboard commands too. (Ctrl-X, Ctrl-C, Ctrl-V should be cut, copy, paste, dammit! And Ctrl-Z for undo!)
Anyway, thanks for the info.
Torrey Hoffman (Azog)
Torrey Hoffman (Azog)
"HTML needs a rant tag" - Alan Cox
- huge number of free (open-source) software floating around. You don't even need to borrow any code, you could just see how feature X is implemented (for example I remember looking at some Perl code and implementing smth similar in C)
- open standarts. Practically all kinds of Unix are compatible on source level because of that (POSIX, X libs and everything on top of them, i.e. GTK/QT, etc, is the same on every Unix). You don't have huge number of undocumented (or in most cases in Windows half-documented) APIs
- For scripting languages one big advantage is that kernel automatically runs interpreter specified after magic '#!' . That could be a quite helpful if you have a system with many scripts running each other. For example if 25 programs call script X, and you decided to rewrite it, say, in Phyton istead of Perl, you don't need to modify those 25 programs to run Phyton interpreter - you just modify the script.
/proc filesystem is very useful too - you could extract a lot of information from it.
For C/C++ programmer Unix have even more advantages:Practically all other advantages depends on language you use. Unix have incredibly good set of tools (gcc,make,cvs,gprof,etc). Most of them had been ported to windows as well, I don't have much experience with those ports. However, there are some advantages of Unix system itself:
For most shell scripts stuff like
Also, windows still lacks many shell utils. Last time I checked, pipes support was horriple - maybe it's changed in W2K, thought
Unix memory protection mechanisms - superior to anything I've seen. Most problems I have with C/C++ programs (especially raw C) are memory-related. Unix approach is very flexible: when program tries to access wrong address in memory it receives SIGSEGV or SIGBUS and could either intercept it and handle situation by itself or it could just create core dump (I usually trap SIGSEGV to output values of internal vars at the time of crash). Libraries like Electric Fence take advantage of this mechanism too.
Also, under Unix, application couldn't write in system memory. Under windows it's not supposed to - and as you could easily see none of microsoft's absolutely bug-free applications never ever crash windows, right ?
Support for debugging, like core dumps and ptrace(). Core dump allows you to save program state at any point, so that you could open it in debugger later. ptrace() allows you to trace process execution - in windows there are mechanisms to do this but all the debuggers I've seen (from SoftIce to TD) use their own functions, which means windows' default interface is almost useless. Also, you could attach your debugger to already running process, this is very usefull when debugging something like server process (in my case Squid proxy 2.3DEVEL3)
Much better development tools, like gdb and ddd. gdb, for example, is scriptable, you could easily program it to watch when variable changes to a specific value, when it does set temporary breakpoint in a specific function, trace that function until exit, and then if another variable has specific value set another breakpoint. I don't claim to be VC++ guru, but the only way to do it that I know is to press "next" and "step" buttons around 700 times. I tried. VC++ crashed somewhere at 500th.
DDD (Data Display Debugger) is really just a shell on top of gdb (or dbx or perl debugger). It's tread if you have complex data structures in your program and would like to examine them. DDD allows you to run gdb remotely, for example I ssh'ed to server (SunOS SPARC) from my workstation couple of times to debug a running cache proxy.
Some of these things could be implemented under windows, but things like watchpoints would require debugger to rewrite parts of OS.
Tools like gcc and emacs.
Emacs Is The Olny One True Editor, period !
Seriously, I never seen any other sools able to do everything emacs can, i.e.:
Please note that all the features above are supported at least for C/C++, Perl and Java, function navigation also works with List, etc
I've tried windows version of emacs, but they have very limited number of features compared to Unix versions
As for gcc, it's simply a C/C++/Objective C compiler with support for, if I remember correctly, at least 29 platforms, one of the best optimisers I've ever seen (egcs beats VC++ and Borland on every project I've seen), very powerfull error-detection mechanisms (I always use -Wall -pedantic options, it's way much more picky than either VC++ or Borland CppBuilder, but I never ever seen it bark on something that was not an error)
gcc is ported to windows, slow, but it's working
Last, but certainly not the least, user interfaces are better designed. For example, in Unix once you open socket you could use file IO functions like write() to write into it. When I tried to do it on NT I had 2 different results: General Protection Fault and BSOD. Unix system supports some very advanced functions, like for example, locking only certain parts of file (you could lock bytes 30 to 56 in a file, rest of the file is writable). X has very powerful API. One thing I really like is window being able to swallow (capture) another window. That, for instance, allows you to run any X application inside Netscape, provided you have plugin called xswallow. X does more than just windowing, it allows you to create atoms and properties - basically something like windows registry, only transparent thru network. Unix Netscape uses this mechanism to send "remote" commands to it's instance runnings, even if that instance is running on another machine. Similarly, XEmacs uses this interface to to connect to remote emacs process.
Unix has wide array of GUI toolkits, like Motif/GTK/QT/Tk. Some of them are much easier (for me) to use than MFC. For example GTK's event handling scheme is much better.
GUI development tools that Unix has look much more appealing to me than their windowsa counterparts. For example Glade - tool that creates GUI interfaces visually. There is a library called libglade that allows you to load Glage project on runtime. That way you could have "pluggable" user interfaces. I have yet to see anything like that for windows.
Component architecture upon which GNOME is build (CORBA) also seems to be better for me than COM. I'm not a COM expert, but parts of COM design I'm familiar with (for example the "proxy" components needed to marshall request over network) look like a kludge on top of badly designed protocol for me. CORBA is available for windows, but unlike GNOME, which is all based on CORBA, windows is based on COM, so practically you have CORBA and no components for it
Bottom line: learn every OS you can. Code for Unix - more fun ;-)
Obama 2012: our incompetent asshole is slightly less of an incompetent asshole than the other incompetent asshole !
Why develop under linux? Or rather, why is it better to develop under?
Source code.
Let me steal a story from a co-worker of mine for a few minutes....
He was a rabid NT developer and had developed an extremely cool SNMP application using some hidden API stuff in windows. This was all done with available debugging tools from MS. Basically MS came to his boss and said "stop this now or we'll sue you". His boss folded and made my co-worker stop coding.
Now remember, no reverse engineering was done. No kernels were hacked, and no dlls were harmed. He, being a very smart guy, did brilliant code.
The hidden API in question was available from MS however, and for free. All you had to do was sign up to one of their developer programs, for only $50K/year (or some similar outragious amount), and you get access to all their hidden little things.
Not long after this he checked out linux. Not only was the entire inards of the system available, but you were *encouraged* to look at it, fix it, comment on it, etc.
At the Linux World Expo Last February, Linus Torvalds asked the crowd "how many of you have contributed to the Linux kernel?" Quite a few hands were raised. "Now how many of you have contributed to the Windows kernel?" 2 hands were (gingerly) raised. "And that," he said, "is the difference between Windows and Linux." (paraphrased, my appologies Linus.
So to end my rant, I'd say that the tools in windows are the same, and lets be honest, probably better or more mature (yes, I know, I do my coding with vi and gcc too...) than those in Linux, but the availability of information from the innards of Linux, and the whole open source movement for that matter, is what makes the difference.
As a developer for a decent sized company, I can tell you that we looked into the Linux market but decided against it because it's just plain unprofitable. The fact is, there's no money to be made for companies such as ours on the Linux platform. However, with so many users on the Windows side, if only 5% of our users pay for our software, we've made our money back! Even if it's easier to develop for Linux or BeOS or whatever, it's just not worth the effort.
A pretty obvious reason for developing on Linux that hasn't been stated yet...
With M$, you only have a matter of years before they decide your app is
good enough to plagarize. If your customers still prefer your APP to theirs,
you can expect the standard application of FUD, marketing muscle, intimidation
applied to your investors, inhibiting your distribution channels, special
undocumented OS hooks designed for their latest APP's features, and if you
still dare to sell a product that is superior to theirs, bundling their
APP into their OS distribution.
What I don't understand is why any ISV would EVER design a product for Windows.
It's like investors have no intelligence whatsoever.
But I develop in Visual Basic for my full time job. It is increadibly fast to develop, intuitive, and compiles using the C++ 4.0 engine, so it's comparably fast to run as well.
The reason why I bring this up is, well, moving from SDI to MDI is a matter of two seconds work. Flip MDIChild to True, and add an MDIParent form to your project.
Why Visual Basic is continuously discounted as a good environment is beyond me. With IntelliSense available, development time is vastly reduced. The only two things I have never been able to do in VB are subclassing external process windows (either by creating a system-wide message hook, or injecting code using remote memory calls), and device drivers.
Heck, I've even created a multi-threaded owner-drawn ActiveX control without too much trouble. As for the dependancy of a Registry for ActiveX controls... Well... ActiveX runs in Windoze... and Windoze has a registry... so what's your point?
You should never, never doubt what nobody is sure about.
You quitting proves that the karma kap worked. The most annoying of the whores shut up. --CmdrTaco
I am in the (enviable?) position of designing and developing Java server applications. Because of the nature of Java, I can use whatever platform has the best tool for a particular task, without having to do cross-compilation to another architecture. (Apart from the JVM.)
For front-end work with a modeller (Together/J) or IDE (VisualAge for Java), I use NT. Both of these products are available for Linux, but the freely available JVMs are either too slow or too flaky for constant use. In addition, the Linux version sometimes lags behind the NT version. (There is no VA/Java for Java 2.) For database interaction, I use TOAD, which is not available on Linux.
However, I use a Linux box (display exported to the NT box) for all of my debugging. I can tile 12 or more visible xterms in one screen, so I can watch the server output, all of the logfiles (application, servlet engine, web server), system activity (top), test harnesses, and still have screens to do rapid searches through code. Since I host all of the source and class files on a filesystem exported via Samba, all of my data is synchronised.
Basically, I draw the line as follows: if it uses a GUI, use Windows; if it uses a CLI, use Linux. I duplicate some tools on both environments (EMACS, perl, cygwin on NT; VA/Java, Together/J on Linux), but only for occasional use.
I'd like to add:
1) you can hit tab from anywhere on the line, so you don't have to hop back to the beginning to get proper indentation.
2) incremental search (ctrl-s). Why isn't this feature in every viewing and editing program in existance? I hate regular search, where you open a new interface, guess at how much of a substring you need, and then hit some wacky key-combo to differentiate between find and 'find next'.
Just hit ctrl-s to start the search, and start typing. If you make a typo, hit delete and the search will back up to the previous match. Once you've typed in as much as you care to type, if you aren't already at your desired location, hit ctrl-s until you arrive. If you need to search on the same thing again after you've done some editing, hit ctrl-s once to enter the incremental search, and then ctrl-s again to search for the last match.
3) esc-%, although a pretty bizarre combo, is search-and-replace. It has history for the search and replace terms, which is why I wanted to mention it.
-Paul Komarek
Amen.
> Now, undoubtably someone will argue that this
> is doing the hypothetical company and developer
> a favor, that 30 year old code should be
> disgarded and rewritten anyway.
Let me address this. I've had the misfortune of
having to support old code (around ten years old)
in many settings for many companies, as have many
developers at large companies.
The fact is, managers are often idiots. They will
not allow a rewrite because deadlines have to be
met (they never are, because of the vicious cycle
of fixing crappy code, but that's beside the
point).
The result is that poor maintenance developers
like me have to pay a huge price for the shortcuts
and laziness of the original developers.
I have often been forced to modify *generated*
code, which is in source control, because the
IDE's are gone or no longer work with the
generated code. Horrible, I know. Welcome to
my world.
The ironic part is that the supposed time savings
of using wizards, etc., actually leads to massive
time and productivity losses over the long run.
The point is that MFC, ATL, and all that other
auto-generated/wizard-driven junk from Microsoft
will, in the long run, make even the most simple
bug fixes a nightmarish headache.
I was under a deadline last year to finish a relatively simple little C program for my business class, so i figured borland C under windows would do just fine. It was to read situations and outcomes from a file and allow someone to make descisions and see what the results were. I wrote a good segment of code (i was hot that day) and ran it with a sample file with only one answer. Oops, forgot to save it. Oh well it'll be fine. Bam! GPF!. Ok, no big deal it just took down my program right? Wrong! There goes a good 30 minutes of quality code right down the drain with the rest of windows. I gave my console the 3 finger salute and waited for the system to come back up. thats when it occured to me to try doing this under linux. I booted into linux, fired up emacs and typed out essentially the same code that I just wrote. I saved it (not like I had a choice to get back to the command line). I compiled it and then ran it. Bamn! Segfault! Oh whats this? My work is still saved? I went right back to the shell? I can just open the file and try again without rebooting? AMAZING!! I saved myself a lot of time by using linux for developing that program. I would have had to reboot windows about 15 times before I found the nasty little pointer that was causing problems. 15 boot ups for windows is about 45 minutes on my computer. 45 minutes would have been wasted. Instead it only wasted about 5 minutes while i played with the code and kept trying it out.
Thats my 2 cents about linux development
It depends on whether you are developing software on your own (in your spare time or in your own business) or in a shop where you work for someone else. Assuming that you are referring to developing your own software for whatever reason, the next question becomes: Do you want users for your software? Let's also assume that you want to develop desktop software, which may or may not involve client/server compontents but which has a nice user interface as well.
If you want users, stick with Windows. I don't know anybody except geeks who uses Linux for anything but servers. Developing for Linux, you will have a market only of other programmers, sysadmins and IT students. Developing for Windows you will have 90% of the world's computer users as your target audience.
Developing for Linux, it is very unlikely that your code will get noticed by anybody no matter how good it is or how useful your programs may be for real users. Because most people who use Linux are also programemrs, they will be competing with you and won't be inclined to use yours. Further, the fragmentation of Linux applications on the basis of political correctness regarding various toolkits (Gtk vs. Qt for example) will further reduce your market to those of the appropriate camp. Everything in the Linux world is divided along political lines, from the database you use to the scripting language. With Windows, a consistent user interface and a consistent component model (COM), even with several toolkits available, insures better cooperation between programs, and Windows users don't care what toolkit you use so long as your applications work.
Non-technical people don't want to use Linix. Even if all major retailers were forbidden from preloading an operating system on new computers and were required to offer customers a choice of operating systems to install and use, 95% of people would still choose Windows, even though they have to pay the Microsoft tax.
Of course, there will also be an increase in internet appliancs and portable devices. While these will use Linux as the base OS, that won't mean anything to you personally as a developer because Linux will just be used to bootstrap Java, the real OS for such devices. You can develop for Java just as easily with Windows and the toolkits for Java development are much nicer under Windows.
Where does developing for Linux get you? It might get you name recognition in certain elitist circles which might in turn lead to a good job offer, but I have a feeling many if not most of these Linux startups will collapse and these developers they have been sponsoring will return to systems people want to use. There is little or no chance that the Linux community will change. Elitists have difficulty understanding ordinary users and their needs, and are almost incapapable of developing for such users. If you are being productive with Windows development right now, why give that up? The Linux fad will soon pass but your investment in Windows skills will remain useful in the coming years.
(global-set-key \C-x 'kill-region)
(global-set-key \C-c 'kill-ring-save)
(global-set-key \C-v 'yank)
(global-set-key \C-z 'undo)
But I find the default keybindings good enough for me (\C-w, \M-w, \C-y, \C-_). Remapping Ctrl-C and Ctrl-X breaks lots of other commands, so I don't recommend doing it.
OTOH, I always end up remapping Ctrl-A and Ctrl-E in Win apps (where I can), I'm just too used to them.
I like TextPad too. I'm writing Perl scripts in Windows and need to know line numbers sometimes. Beats hell out of counting lines in Notepad or trying to wean myself off c and v, which Edit doesn't support.
CodeWright was nice too, though it liked to crash now and then.
Doesn't it make you wonder what the MS folks use in-house to edit text? I doubt they're limping along with notepad..
I'm a senior level developer who's done a fair amount of network development in both Windows and Unix environments. I can say first hand that when it comes to building complex client/server (or worse...n-tier) models Unix is much more efficient.
Bringing up multiple instances (read 64 Meg) of Visual Studio each with its own project or workspace brings the poor little Windows box to its knees. With VS 5 and above you can bring up multiple workspaces with a single instance of VS. In my experience this hampers the development cycle more than helps it as the 'multi-workspace' Visual Studio environment A)gets cluttered B) is hard to debug C) behaves extremly buggy.
In Unix it's no sweat. Just pull up multiple X terms each with an editor of your choice (nedit, emacs, vi, whatever). You can have one virtual terminal for your clients, one for your servers and your ready to rock. Hang a process? NO PROBLEMO. CTRL-C or KILL -9 (if you background some executabes) and your in the clear. God forbid you should hang a process in VS AND you have multiple workspaces 'alive' within it.
I love using emacs but there is so much to learn. Does anyone know of a great web site for learning emacs? I think a well built web site that was newbie oriented would do emacs well. I used emacs in school, started working with MS IDE and have forgotten so much of what I knew...
"better ways of doing things eventually just replace the inferior things" - Linus Torvalds 09-08-07
Where can I find out more about TAGS? Does it support Java? (My employer's language of choice).
TAGS is pretty wide ranging in it's abilities and Java support is somewhere. Ah. Here it is. To create tags for Java, and for Java development under Emacs, take a look at JDE. I've not used it, but it looks pretty wide-ranging. It also features automatic completion of class fields and methods :-)
Do TAGS automatically update whenever you add or modify members or methods in a class?
No - they are updated when you run the TAGS utility. If you update the methods/members, it's best to rerun TAGS to tidy up the database. It's often a good idea to run TAGS as part of your makefile so that whatever changes are put into the binary are reflected in the TAGS database.
The other thing that is missing (or, maybe not?) from emacs is the good integrated debugger that DevStudio has. Can you do an edit and continue on a running C++ or Java program from inside emacs?
Yes - with GUD (Grand Unified Debugger) under Emacs, you can interface with whatever debugger you feel like, from gdb, xdb, etc.. You can mark lines in the code as breakpoints, view variables, step, next, and so forth inside Emacs, plus issue compile and connect to process calls. I note that JDE also features automatic jump-to-offending-line with compilation issues too.
After a brief amount of searching, I discovered QuickPeek for Emacs, which works as follows:
QuickPeek
Quick peek is a tool that uses a second frame to display context sensitive information about where the cursor is. It wants to be the superior copy of "Intellisense".
There is a reason that one of the more popular icons for Emacs is a kitchen sink :-)
Cheers,
Toby Haynes
Anything I post is strictly my own thoughts and doesn't necessarily have anything to do with the opinions of IBM.
Here is a little story that happened to me a few years back which made me rethink my decision to develop for Windows.
I was having trouble developing an MFC application. I forget what the actual issue was, but when I called Microsoft's tech support for assistance, I was asked a number of questions about the configuration of my project. One of the things they wanted to know was what options I had chosen in the AppWizard. I told them I didn't use AppWizard because I preferred to code everything by hand. There was a long silence, then the MS representative said, "You can do that?"
Up until this point I had always believed Microsoft's claims that they put wizards in Developer Studio to remove the tedium of repetitive programming tasks. This incident got me thinking. Why is MS so adamant that people use the wizards that even their tech support doesn't know there's another way?
Wizards are supposed to be helpers. If you don't feel you need the help and would rather do it yourself, why use them? I learned more about MFC's internals while coding by hand than I'm sure these tech support people even knew.
A few years ago I decided to try C++ as a programming language for Windows. Until that point, I had been using Visual Basic to develop in the windows environment (mostly database stuff). Because certain things in VB can only be done by accessing the WinAPI, I decided to investigate the possibility of using C++. Since VB and Visual C++ came from the same company, I thought, their IDEs were probably similiar. I had learned C++ in some college classes on a Solaris Box, so I wasn't too concerned with being overwhelmed.
Surprise. Surprise. The VC++ IDE was/is NOTHING like VB's. Windows development in VC++ was more primitive. You actually had to define the main window, create it and create the message loop for the program. In all, in order to bring up "Hello World" in a single window you needed several lines of code and about 30 minutes. Over the next few days, I learned a few other things, but was always astonished that it took so much to do so little. Needless to say, I looked to explore other options.
About this time, Borland released the trial version of C++ Builder. They said that it used the Delphi VCL and IDE. Since my current job at the university included a T3 connection to my computer, it took only a few minutes to download and install.>
For those of you who've never used C++ Builder, think Visual Basic IDE with C++ syntax. In was able to make that same "Hello World" app in 5 minutes, including compile time. This, I thought to myself, was what M$ should have done. Since that time, I've used C++ builder as much as I could. It's stable and does NOT MARRY ITSELF TO THE OPERATING SYSTEM like all other MS products. If Borland/Inprise ever developed a BASIC version of VCL, I would push my company to switch in a heartbeat.
Microsoft's products seem to exist to promote themselves, rather than to encourage the programmer. Their documentation in Visual Studio is almost total garbage. I find myself using 3rd party books and tools just so I won't have to deal with it. I've even used the HLP file on Visual Basic version 4 to look up syntax after a similiar MSDN query on Visual Studio kept giving me the wrong answer consistently.
Regarding programming tools and options for Linux, J++ Builder Foundation a very good tool to use to learn JAVA. Borland/Inprise has a very good history of designing IDEs/GUIs and that much is apparent. The only downside is the sheer size of the APP. You'll need 128MB RAM to run the thing without pounding your disk cache constantly. If you want a good, powerful text editor, use EMACS. If you want a good, simple text editor, use Pico. If you are doing web development and need a server side language, there is a Java plug-in for Apache called JServ. PHP is also a good language, I've recently discovered. Also check out shell scripting. Unlike DOS, The command interpreter in Linux is very sophisticated.
As a coding environment, Linux offers the best choices and widest variety. Once you start, the thought of going back to Windows will make you ill.
I've found over the past 2-3 years (coding under Win 9x/BSD/Linux) that due to the open nature of Unix-like systems, there is more widely available comprehensive help available for these systems.
Take the World Wide Web for example. When you browse the web for Windows coding help, you run into a lot of stuff like "Making your program minimize to the system tray". Where as browsing for Unix-like coding help, you usually find many organized, simple (ie: all info, no frills), and comprehensive papers. Many of which are FAQs, but are still written almost like a manual. Also, web sites with Windows coding help don't usually talk about what is portable and to what. With Unix-like coding help pages, they almost always site sources and tell where a certain approach is portable and safe.
MFC? A nightmare on some levels, sure. But if you use the brain-dead Visual Studio wizards to create your MFC project, you deserve the lossage you get. If you actually do that stuff manually, well, you still have to live with MFC, but that takes a lot of the horrible hair off of the development process. Of course, the better way is just to throw MFC away entirely -- nobody holds a gun to your head and forces you to use MFC just because Windows is your development platform. That's a choice made during the design process, and there are plenty of alternatives.
The Linux development "environment" isn't one single thing, either. There are all sorts of tools and options -- if you don't like some piece of software, you're hardly stuck using it. With the degree of customization available, you can have as Windows-y or as un-Windows-y an experience as you want.
Most of the posts here are about Linux and Windows as development targets, not development platforms. These are separate issues.
Nobody in this thread seems to understand what this poster is saying about VC++. You can edit your C code while debugging, and recompile it, and continue execution. Thats insanely cool. I use emacs myself, but I am in awe of this feature.
****Gfx Scrollbar Special case hit!!*****
That very fact (that everything is represented as a file) is the one thing I love the most about Unix programming. I won't pretend to be some crazy hardcore y3wn1X h4X0r or any crap like that. In fact I haven't written any code in Unix in a while. But that is something that I just *love*. You just have to learn the basic read() and write() crap, and you're immediately set to go. You can write sound generation programs, write network software... heck, you can do just about anything!
The streets shall flow with the blood of the Guberminky.
I agree that there are many things about the Linux (Unix) style development process that is very appealing compared to Windows. However, I sit at my Windows box with most of these tools working just fine for me. I have the MKS toolkit for instance (and now MSDN members get a nearly equivilant toolkit as part of their CD subscription.) I get bash, gmake, grep and alot of the other necessary tools. First: lets get over the complexities of MFC. Yes, it sucks. Lets move on. Not everyone wrights graphical code and lets be honest here - Unix isn't exactly the best programming envinronment for GUI coding etc. Saying "hey, great, look at all these GUI toolkits you can choose from" seem to imply this has no drawback. Code for one and go somewhere else on the same apaprent platform and you get to learn a new API again. I don't do much GUI coding (mostly CORBA, XML, database, scalability etc) so I won't claim superior knowledge in this but ignoring the complexities involved in the flexibility is to see the day without the night. Next, the issue of Microsoft selling products and inherently making a moving target. I can't believe someone would say this is a negative toward MS. I hate it when MS does this as much as anyone but HELLO! How many times have people in Linux development been asked to DL all the newest libraries, do builds of them, figure out the order and then retest their own build process? Geez, this is BETTER than installing a patch to Visual Studio (which by the way is not a fast moving platform by any stretch for C++ and since Linux doesn't even have VB why complain about VB? - you don't HAVE to use it.) Suffices to say that yes, the Unix tools available on Linux or more consistently maintained, more source is available and the low level API's are better than Microsoft's. But there are significany prices to pay for that too and starting a workspace, copying my projects to work on a new one in VC is kinda nice. And tracking down tabs vs. spaces in a makefile are hell on earth while still trying to make your files look readable. I do both programming frequently as I work for a cross platforms tools company but Windows is pleasant at times after debugging a build process on Linux for a day. ~Tim Triemstra
Tim T.
Oh.. hang on a sec - you mean.. OTHER than having the source code to everything your working on? hrmm.. as others pointed out: sharing resources, furthering the entire OS through dev work..
I refer you to an internal Microsoft memo.
For additional information (there is no shortage on-line, and no reason to belabor the obvious any more here) may I suggest numerous introductory Linux websites, some of which you'll find linked to here and here.
The Future of Human Evolution: Autonomy
autoconf automake aclocal gcc beowulf/clustering portable tools (for unix) CORBA - ACE+TAO, ORBit, MICO DB's - PostgreSQL, mySQL, Oracle, ... Apache Modules + LibGimp bash make i could go on.. but its time to go back to work..
There is one thing that all the GUI libraries for UNIX (Gtk, Qt, Xt, Fltk, etc) do better than the windows GUI for the coder - all space allocation for widgets (Sizing and positioning) is done automatically. In windows, you can only place widgets (buttons, text inputs etc) on coordinates. If you want resizable windows, you must code the resizing/moving of the widgets in the window by yourself (At least, so it was in VB. And I can't imagine why they would have it like that in VB if it's not because of the underlaying GUI tookit). This is one reason programming GUI apps under UNIX is much easier, even if you don't use a GUI-drawing tool (Like GLADE).
All together, what makes UNIX more apreciating as a programmer is that a lot of things are abstracted away. You have device files to manipulate devices. Thus, you don't have to learn how each device or device API works. They are all the same.
--The knowledge that you are an idiot, is what distinguishes you from one.
--The knowledge that you are an idiot, is what distinguishes you from one.
TAGS does not take into account local variables and scope. It also does not give help on function definitions and has limited functionality, however search and replace across multiple files is very nice. Also, C mode (I think) uses regular expressions to skip forward and back statements so it makes mistakes and can be annoying. It does block traversing quite well.
I'm working on an extension to C mode to fix this. TAGS is pretty good, but it misses some potentially important things. Of course,it is quite fast, which is advantageous but it is not something that Emacs itself runs. It is a shell command. Anyway, I finished most of the parser this morning, so I'll be testing it later.
However, some of the features you mentioned have the real potential to be intrusive. Popping up new frames can be very distracting. However, the echo area is quite restrictive, so ehn, whaddya gonna do? =)
Woz
I have no doubt that a lot of developers love Linux and for good reason, however the absurd and misdirected claims that I've seen in here, particularly claims of a nature that make it obvious that the person has no professional development knowledge (i.e. probably jump into vi and spit out a hello world app every couple of months and call themselves a programmer), have no purpose in factual discussions. That sort of nonsense serves no one except for their myopic, cultish obsessives who feel that a lie is acceptable if it follows what they consider to be moral.
No File access comparable to ADO (OLE DB). No built in sound support. No built in MAPI libraries. No built-in IP libraries. No Built in Networking libraries. No built-in graphics libraries. In short, if you are coding for Linux you have to buy a lot of code libraries from a lot of third parties.(If you don't know, let me tell you, that can mean nightmares.) In Windows you them all free. Built-in.
That should have just been M-/ (C-M-/ is a pain IMHO)
OK, I buy the argument that if you're developing for Windows, use Windows, and if you're developing for Linux, use Linux. So you're an ISV - you have decided that your organization will write programs and sell them. NOW why would you develop on Linux? Correct me if I've suddenly gone all loony, but is there anyone on the planet that's actually MAKING any MONEY by SELLING applications or even tools that work on Linux? The early adopters (Corel, Oracle) aren't making any money SELLING software for Linux. Is anyone? Can anyone? Or is Linux all about "write everything yourself that you can't get for free"? Because if it is, isn't it doomed to financial failure as a platform, regardless of how "cool" it is?
- i got yer sig *raht heah* -
First off it just seems to be a natural fit as many have said. Whenever I develop in UNIX/Linux, I can't help but feel that it built with the developer in mind.
Second the system comes with compliers and vast assortments of libraries at my disposal at install time. I don't need to install/configure anything else to get my development environment up and running...
Third, the tools. awk, sed, grep, perl, cut, etc. and regular expressions in general are great for quickly modifying existing source, test, configuration, data, etc. files. Also, tools like truss (Solaris) or strace (Linux) are extremely useful in a pinch where one might not have a debuggable executable to work with in an IDE to figure out what went wrong. Also, when a production piece of software goes awry, you might not be able to recreate the bug, but these utilities (at least truss, only used strace a couple times) will tell you what your process is doing at that moment. I'm sure there are other's I have yet to discover.
Fourth, I like the notion that crashing my application won't necessarilly take out my entire OS. I've crashed Win32 OS's with program bugs a lot easier than I've ever crashed a UNIX box. (which to date is never, but I know it can be done)
Fifth, Linux and some other UNIX systems are open source. If you are trying to mimic part of the behavior of a program its nice to be able to see the source. Two examples, the other day I was trying to find out where the ps command got some data... I could look at the source. Today, I want write a utility to retrieve my corporate Outlook e-mail by mimicing Outlook. (due to configuration stuff, fetchmail with NTLM support doesn't cut it) Guess how far I got on that quest.
I mean its always going to be different strokes for different folks, but I'd been searching for a better development environment for years because Windows and DOS just never really felt right. After using Linux for a week, it fit like a glove and haven't really continued my quest since.
-- A computer without COBOL and Fortran is like a piece of chocolate cake without ketchup and mustard
in our office we installed the latest and greatest anti-virus suite on our machines and after that ms office decided to stop working. This even happened with w2k (which as we all know according to microcrap should be immune to dll hell;)
But.. this meant 1/2 day's worth of work down the drain.
But, really, this is like asking how do you change a single-threaded program into a multi-threaded program. If you designed it with multi-threading as a possible future, it's zero work : just add locks where your dummy locks are. If you slacked and never considered the need to lock your data, you've got a ton of work ahead.
--
It's a
-- Danny Vermin
I do all of my programming in Win32. The only reason I *ever* would be interested in programming under linux is because it doesn't crash and I would save a fair amount of rebooting and waiting time. Advantage: linux.
Source Control? I don't care, I work by myself. Advantage: none.
IDE? I have MSVC absolutely memorized. I never touch the mouse, and moving to something like.. well.. anything else.. would be a waste of time because there is nothing I feel like I need my IDE to do that MSVC doesnt. Advantage: MSVC.
Debugger? This has always been a joke of an issue. There is no debugger/ide combo on linux (that I'm aware of) that works as well as MSVC. Honestly, I'd say the MSVC debugger is the most impressive piece of software Microsoft has ever done. Advantage: MSVC.
Libraries/Support? I make it a point to use as few libraries/outside code as possible. And when I do, I put an abstraction layer between it and my code so that when it comes time to port to another platform, I'm not left staring at 10,000 TreeView_Message() calls that need to be rewritten. Advantage: none.
There *IS* more free code available on linux - but if I just want to look at it I can do that in windows. If I want to use it, well then I'm screwed - but I tend not to use other people's code anyway so its not a big issue. Advantage: none.
MSVC is the right environment for me - but whats best for me isn't best for everyone, obviously.
If someone is comfortable developing on something other than linux, and their job or their interests don't direct them to switch over - they shouldn't. By the same token if someone IS comfortable developing on linux, and their job or their interests don't direct them to switch to something else, they shouldn't switch either. I guess my point is: We don't all have to use the same development environment - so why be concerned about it? Because its fun to get into Emacs debates? =)
http://www.identicalsoftware.com/xwpe/
Not exactly an MSVS replacement, but not all that bad of a tool.
Being able to come back to the same setup of xterms, emacs-windows, day after day, month after month, have all the code in the editor's buffer, knowing that the only thing that will destroy the setup is a failure in my company's UPS's just makes it worth it... No blue screen and booting..., it just works, no interrupts in the workflow, no illegal operation that forces me to wait for the disks to spin up again, ... how many of your windows coders know exactly the checksum of your bios that is printed each time your box is rebooted?, my last uptime before upgrading the kernel was about 120 days... it takes time to set up those terms exactly where I'm used to, but I know they will be standing there the next day, and the next day, and the next day... I can consentrate on coding, not reinstall windows every time it begins to be unstable for unknown reasons... no need to reboot because I installed some new software... IMHO.
There are different tools available for each platform. Many are available for just one but not the other; in most cases I think that the UNIX tools are more powerful and more flexible in the long run, but it takes at least a year or two of using them before that becomes clear. So I won't bother to cover these, because it's not going to convince anyone except those already "in the know".
Instead I'm going to ask what your application is. I have used both Windows and Linux to develop commercial games for many years. In this area, Linux has a clear superiority, largely because games are such unstable beasts. One can develop a 'typical' user app on Windows without needing to reboot but perhaps once or twice a day, which is perfectly workable. Doing games, I have found that up to 50 (yes, really, I have counted) reboots a day are necessary. At one place I worked I had two computers so that I could work while the other one rebooted, just so that I wouldn't loose so much productivity. (A lot of the blame here lies with DirectX - if you are developing OpenGL on NT 3.5 or 4.0 this is much less of an issue. I have heard that Windows 2000 is similarly usable.) FWIW, writing cross-platform game code is quite easy these days. Most of the games I have worked on in the last three years have run, and been developed, on both Windows and Linux, but have a completely different release target (including Dreamcast, PSX2, and an arcade game).
Another application I have tackled professionaly is enterprise-level servers. Here is an area where UNIX development is a clear win; there are thousands of small server-oriented tools at your disposal that cut your workload by an order of magnitude. TCP wrappers are absolutely *wonderful*, for example - I spent over a week writing code for NT that is entirely handled by TCP wrappers on UNIX. Other major headaches on NT, such as the poor multiprocessor support (running lots of threads pegs CPU #1 at 100%, while CPU #2 hovers just below 30%) and the slow filesystem (perhaps it's the SCSI drivers that are slow, I dunno) make it almost unusable not only as a *target* for high-end servers, but also as a development platform.
When it comes to 'typical' end-user apps, like ICQ clients, word processors, or spreadsheets - I think the difference between the two platforms comes down to personal preference. The tools available on both are perfectly sufficient for this kind of development work, although each developer is likely to have their own preferences.
UI stuff is about the same - writing down-to-the-metal WIN32 code is just as horrible as writing down-to-the-metal X (or even Motif) code. All sane developers use encaspulation (either their own company's classes, or a 3rd party library such as Qt) to hide the ugly implemention details anyways. So in this case, any convincing that you do will be purely an "expand your geek power!" type of argument, rather than a practical double-your-productivity kind of argument.
Keep in mind, while we're bashing MFC and talking about object orientation, that MFC is NOT properly OO designed.
Microsoft actually inform its inner circle that yes, the proper thing to do in its framework design would have been to use inheritance and virtual functions, etc... but instead, it found that its code was faster when using MESSAGE MAPS and MACROS instead.
So guess what - the novice programmer, having been lured in by the gateway drug of Visual Basic (the "Lego" of Windows programming - just drag the BUTTON onto the FORM and double click on it to get the "Button Click" function) just sees MFC "classes" as the equivalent to those little thingies you drag and drop on Forms, only you use the ClassWizard instead of the GUI to do it.
MFC courses and books teach you just enough C++ to know that you use the class name as a type
CMFCClass theClass;
and dot notation to use functions therein
theClass.doSomething();
And here endeth the C++ lesson.
The tools are good to get people productive when doing repetitive tasks, but when used instead of understanding of how things work, trouble's a brewin.
--- Jump!! Fire!! Bullet time!! - Lego version of the Matrix
For me the question isn't which I enjoy more or less. I enjoy not working at all. So, its about getting the most money with the least effort. As I see the salary offers NT development is clearly where the most money is for the least effort (for me anyway). I know NT. I understand the way MS works. If you understand MS and pay attention to their white papers you can avoid some of the "surprises" I hear devs complain about. But Linux is owned by who? Who decides to change things? That bothers me. But again it really just comes down to $.
I think too many people are confusing IDEs with code generators. An "Integrated Development Environment" does not necessarily mean visual programming or code generation. Emacs, with proper modes turned on, is an IDE. Used simply for placing editing/compiling/debugging into one frame, IDEs can be wonderful time savers. I loved MSVC++ for this..who can argue with a debugger that visually allows you to step backwards in code!
The BeerBaron
silly emacser, check out the semantic bovinator by eric ludlum.
You can compile the GNU fileutils, including locate, pretty much wherever you want.
>I want an editor that uses Alt- keys, not "Ctrl-X Ctrl-that Meta-x foo" for everything. Not sure I understand this; how is Alt-f (for example) better than Ctrl-f? Sure emacs has a lot of ctrl key commands, but I don't see any way around this. You can either map all the commands to mouse clicks or keystrokes (or both) ; and since there are only so many keys available, some key sequences tend to get lengthy. Emacs is my favorite editor -- I don't think you can give it a fair evaluation after a single month of use. I have had 30 files open in emacs for monthes at a time before; I can't remember the last time I had emacs crash on me. I used to get multiple Visual Studio crashes PER DAY back when I used it a few years ago. Sucks ass when the program I am debugging crashes the debugger and the whole OS too! BTW Most Windows programs I use require several Alt keystrokes in a row to do menu functions, too.
I agree that it might be good for C and C++, but when you start using Java, the Windows tools aren't matched yet. Even with C and C++, the Microsoft candy might make it more enjoyable.
http://www.logient.com
But not because MS's GUI is considered to be the be-all and end-all.
Rather, because the lead developer of GNOME (at least) has publicly acknowledged that he's no good at GUI design and would rather spend his time putting together a high quality, well-designed system underneath.
(Say, who was that that said something 'bout this stuff being "hacks"?
The whole unix mindset of small tools strung together with pipes encourages modular functionality oriented thinking. If your software has to work right command line, reading from a pipe, you have to have the base functionality correct. So its very difficult to get lazy and forget to make the real functions of the system robust, while you play with user interface.
By far the most stable user mode software I have ever used always seems to come from a command line style core and a gui or admin interface built on top of it. Instead of gui first and function second. There's a reason why the visual programming CASE tools never really caught on.
-- Perl Hack, Web Hack, SQL Hack, Guitar Hack
While MS VS is nice, I find that I can be much more productive using the command line debugger, gdb, no pointing and clicking and waiting for the UI to reconfigure itself into "debug" mode. Once you know the commands, you can become extremely efficient at debugging your code (Of course, the best method would be to not write buggy code to begin with, but it happens). I should also mention at this point that my favorite editor is vim. To me, the 1-2 punch of gcc and gdb make development under linux ideal. Also, vim is a very elegant text editor that makes creating/modifying code very easy/quick to do.
Mike
Note: no vi/emacs wars, here, please, they are both excellent editors, I think preference is based on whichever one you learned first =)
Intel transfer the difficult from Hadware to software, for get more power, programmer need more technology. -- chinaitn
. Example:- MSVC server cgi dll = 115k (prints hello world) apache server cgi exec. = 5k (prints hello world) Need I say any more...
/ALIGN:16
Try cracking your project file open and taking OUT all the DLLs - like winspool, GDI, etc etc. Only link to msvcrt.dll - and change linker alignment to
You'll find - lo and behold - that all of a sudden, your HELLO WORLD becomes about 2K long (give or take).
Simon
Coming soon - pyrogyra
I know exactly what you mean. I attended a couple of classes at UH, and was not at all impressed. I've since transferred to SFA (Nacogdoches, TX) and have been much more satisfied the the curriculum, and quality of education.
I think that a lot of the larger schools take the easy route because there are just too many students for them to keep up with, whereas SFA has less than 200 CS students - which means if you have questions, a professor will be available.
That, and I got a sweet job with Iomega here.
The copper bosses killed you, Joe. 'I never died', said he.
With app studio you get huge apps that take up lots of resources. Titanic was a huge ship that took a lot of resources. Did you see all the coal in the engine room?
Apps on Windows are not properly protected from each other; any app can crash the whole system. Titanic's bulkheads were too short to keep the ship from sinking when one compartment got flooded.
C programming under windows requires those near, far where are my variables stuff. Titanic... "...near, far, wherever you are...".
More...???
Well, given that apparently the last time you touched Windows you were programming it under Windows 3.1, no thanks.
NEAR/FAR - went with Win3.1 & DOS. GONE. FINITO.
Windows app protection : across the board in 95/98, and NT/2000 unless it crashes the 98/95 kernel or uses 16bit drivers. In NT/2000, all apps are protected from one another.
App studio creates "huge apps with lots of resources". Only if you use the default settings, in which case, it's YOUR fault. Change them. Don't be afraid - it works just like under UNIX.
Switch to a frickin' MAKEFILE if you have to.
Simon
Coming soon - pyrogyra
Functions are functions and you call them directly - after you fill out a few strucs - if you want to do something. MFC seems less a part of the c standard - too many callbacks (yech! c was not meant for this!) and levels of abstraction.
If C wasn't meant for callbacks, why did they bother putting function pointers in the language?
Clue: Sometimes a function pointer can be orders of magnitude more efficient than a switch statement. And when you have to do direct binding, nothing else will do.
Simon
Coming soon - pyrogyra
Gee, I guess you've not used NT have you?
Simon
Coming soon - pyrogyra
Yes, Vriginia, there is an art to coding. Yes, it is possible to produce beautiful code under Windows (Quake 3 anyone?), but the crucial difference, I think, lies in the availability of the IDE, language, and supporting bells and whistles used to develop programs.
... Windows caters to lazy programmers and psuedo-programmers who wish to learn as they go, while Linux requires that one learn how to do things by the book.
Windows Programming
It is pretty easy to write a program. You can attach bits of code to shiny little buttons that say "Hello World!" a thousand different ways. However, Microsoft's desire to generate computers that trained monkeys can operate means that their development tools, regrettably best-suited to working on the Win32 platform, are similarly dumbed-down.
This doesn't mean that one has to create sloppy code or bug-filled programs, but Visual Studio and its ilk just make it easier to do so.
Linux
For the programming novice, Linux is a nightmare. There's no real way to read the "user's manual" and jump right into coding. Yes, the manuals are all there, and there's plenty of reference information, but for the trained-monkey set, they are too difficult to find. Coding in Linux conforms to standards (such as they are) and forces that programmers learn to effectively use those standards in writing their programs. The lazy programmer cannot function in the same way in a Linux environment without being forced to evolve and learn how to code like a real programmer.
In short
I'll take Linux any day.
AfroNinja
AfroNinja
Pretty much, coding in Linux is coding just like you learned it in school.
Well, unfortunately many schools (like my school) are moving away from this and teaching people how to program in Visual Studio. All the labs here run Visual Studio on Windows NT and as students, you are either expected to purchase Visual Studio or do all your work in the labs. While many assignments can be done just as well on linux machines (MFC has finally been completely removed from the required core classes), when turning in assignments, professors expect a project/workspace file.
(what's the real point of this comment? don't go to Miami of Ohio for a CS degree)
That is the problem with most CS programs now , they fail to register a basic truth about programming : Once you learn to program ( really OOP ) then it's easy to tack on any additional language later . Programming is a skill , a way of thinking and creating that is ( mostly )independent of indiviual language syntax . My father ( like many father's do ) had a great thing to say on this subject . He has forgotten 75% of the details that he learned in Vet school ( they dont' come up often enough ) but he recognizes that there is a detail he needs to chase down and he remembers where to look when he needs them . What Vet school was invaluable at was drilling into him the methods and practices that he uses every day without thinking about it . The 'understanding' and familiarity with medicine/phisiology is what sets him above technicians . Similarly there is a big difference in the understanding of programming from someone who is allowed to peruse the libraries that are being used and someone who just let's a developement tool create binaries for them . Note: there is a big difference in the way I thought when I did F77 and the way I think while programming OOP . But once inside of Object oriented thinking differences between languages are just so many details . I have the refernce manuals and they speed me up .
First, the reason: Quality of the compiled app. For a quick test, I compiled the following in both Linux and NT, using the most common tools (VC++ 6.0 and gcc)
#include stdio.h
int main()
{
printf("Hello World!\n");
return 0;
}
Under gcc/linux, this compiled to roughly 11k
Under VC++6/NT, this compiled to roughly 115k
I don't think I need to add much more to that.
Now for my question: What's wrong with middleware? I don't like MS either, but personally I'd rather develop in PureJava and allow people to make their own OS choice. I'm not going to start ramming an OS down anyone's throat, I'd rather see people free to make their own decision.
Politics, Culture, Food?
I am even currently working on a project that has to work on Windows, and various UNIX flavours, not to mention any other OS I can compile the damn thing on. I say give me linux any day.
First, the standard automake/autoconf tools make compiler options, compatability, and essentially, making the code portable under different environments a breeze, AS WELL as checking for dependancies, which MSVCPP has no way of doing until after you've started the compile process, and assuming you dont include any extra 'library includes', it wont warn you about the missing sections until the link phase, quite annoying.
Second, All the code is plane text, plane C or C++, no ombufscated visual C++ code to essentially make the code unreadable and unmaintainable. Its clear to see what it does.
Third, GCC is a hell of alot more robust than MSVCPP. Granted, i've only used 5.0, but my project has already surpassed the point where MSVCPP cant handle it anymore, and gets an internal compiler error, when borland C++ and gcc have absolutely no problems with it and compile it happily.
Fourth, UNIX C and C++ tends to be very standard, and even when they expand on standards, they usually leave the standard calls alone. MSVCPP tends to want to create their own standard, and only actually compile in a standardized fassion kicking and screaming.
Personally, I dont need a fancy IDE to do my development, its, as the programmer in question called, 'fluff, scenery', and not nessicary to program with. MFC is more trouble than its worth, and encourages bad coding styles, and the UNIX OS's are much more stable any day. As other people have mentioned, more often than not, when coding, it was the instability of the OS than the code that caused a problem. Not to mention that I can recover from my code crashing on UNIX a HELL of alot easier than windows -- can we say 'General Protection Fault'?
In our source tree we have all of MSVC 6.0. It's not the most elegant solution, but if you've got the source, you've got the IDE. Of course... We don't use the IDE for building daily builds...
I've spent the last week cursing Windows as I
.login shell script
try to get a Solaris (Unix) Java/C program to
work properly on Windows NT 4.
The program needs a 300M datafile. I ftp that
over, unzip it, and run the program. The
computer thrashes. There is no "renice" command
to lower the priority of the backgrounded program
to, say, something low enough that I could type a
letter and have it appear on the screen less
than a minute later.
The code was written to work on a Pentium I
with around 32M RAM; I have a Pentium II with
256M. I check the system RAM. I have 60M
in use, 270M being swapped to disk, and 200M
of empty RAM. 24M out of the system kernel's
29M is paged out to disk. I can hear the
disk drive churning continuously as it swaps,
and I have 200M of free RAM.
The program crashes. I try to figure out how
to tell Windows to use my RAM. I know! I reduce
the size of my swap file, from 272M to 10M.
I reboot Windows. I open up a couple of
apps, and it refuses to open any more.
I get an error message: I have run out of
swap space. I have 220M of unused RAM,
but Windows would rather use swap.
Postmortem shows one byte somewhere in my
300M file is garbled. I ftp it over again,
unzip, and diff with previous version. Identical.
Bug is in ftp or WinZip.
No problem. I can edit by hand.
I make a big swap file again and reboot.
I try loading the text file, and discover that
Notepad and Wordpad can't open a file larger
than the physical memory.
I try with Word. It opens! I try searching for
the bad line. The machine thrashes.
I check system memory. Word has devoted 5M
of RAM to my 300M file, and is swapping
everything beyond that to and from disk as it
searches through the file. I have 200M of
empty RAM. I download Uuedit. Same problem.
I think of splitting the big file up into
pieces, editing, and rejoining.
On Unix this would take one command each for
splitting and rejoining.
Under Windows I need to write my own C programs
to do it. I don't.
I go to a more powerful computer that sits empty
in a neighboring office with the idea that I
will run the program on it. When working with
SGI boxes, I would often log in to a more
powerful machine, from my desk, and then
change directory to my home directory (NFS
mounted) and run a CPU-sucking program.
But Windows NT does not have remote login.
Environment variables are hidden somewhere in
the OS and in my project files, which will work
only on my machine, so I can't log on to the
other machine, run my
to initialize any environment variables not
already on the command line, and run the program.
I can't even read my email from another
machine on the same network, which I don't
understand, since there is filesharing.
I briefly study the problem of
moving everything over to this computer,
changing the Windows environment settings,
and decide not to do that either.
Other things I have done today:
- Try to find line of source code somewhere in
a project using both C and Java. With Linux
this would look something like:
grep "line of text" *.java *.c *.h
With Windows I open the "find" program,
and click and click and click and click
until I find the right directory (the one
I would be IN if I had a command line).
There is no way to specify both C files and
Java files, so I must search all files under
directory, including the 300M text file.
Which I know better than to try.
Instead must do separate searches for *.c,
*.c++, *.h. *.java files. Many many clicks.
My wrist hurts.
- Look up documentation on "fopen". Under
Unix: man fopen, instantaneous response.
Under Windows: Pay Microsoft $1000 or so.
Click on MSDev Library. Wait about 20 seconds
while Windows swaps things out of RAM to avoid
having to touch any of my free 200M. Do a
search of fopen. Wait another 20 seconds while
it does a search (why is it searching? why
doesn't it have a database? I asked it to make
one when I installed it!). Finally see docs
for fopen.
- Tried organizing my Java files sensibly,
which means putting the Java source all under
one directory. But the GUI editor I am using,
JBuilder, sets the default directory to be that
in which the source code for your main function
is. I have to move everything back because it
is impossible to tell the GUI environment that
I want my data in one directory and my Java source
in another. This is a JBuilder problem, but it
is typical of what you have to do to keep GUI
tools happy. I am just lucky that JBuilder
stores its project files as text; otherwise I
would have had to scrap them.
- Tried to find an important email that I knew
I had received within the last week. On Unix,
would be: forall ~/Mail grep "ATMSDI" (forall
being a shell script I wrote using find to
iterate over files below a directory).
On Windows: Spend half an hour clicking through
my Outlook Express folders looking for it.
Click through every single folder, searching
by username (nice feature, I admit). Search
deleted messages too. Never find it. It has vanished.
- Rebooted Windows several times
because the system started acting weird and
I wanted a fresh start.
I reread the above and saw it doesn't explain
what bugs me most about Windows. It's
because there are so many times when I want to
1) specify a simple operation, like grep or ls, and
2) specify a set of files I want to apply that
operation to.
You can't do either in Windows in a general way.
Phil
The following in ~/.emacs made emacs nicer for me (I was a bit used to the Borland Pascal 7 IDE):
;-).
Basically the keys on the bottom-left corner of the keyboard don't change. A hard-core emacs user only uses these anyway
However, shift+arrow-keys select, home,end,del "work" as expected. shift+del, shift+ins, ctrl+ins: cut/paste/copy. ctrl+arrows move words, etc.
It's also nice to have the "windows" key between Ctrl and Alt as "Meta" key. Debian is like that out of the box if you specify that you have a 105-key keyboard to X; other distro's might do it differently.
(pc-selection-mode)
(display-time)
(global-font-lock-mode)
(setq kill-whole-line t
view-scroll-auto-exit nil
scroll-step 1
lazy-lock-defer-on-the-fly nil
pc-select-meta-moves-sexps t
pc-select-override-scroll-error t
column-number-mode t
frame-background-mode 'light
visible-bell t
display-time-24hr-format t
display-time-day-and-date t
scroll-preserve-screen-position t)
(custom-set-variables
'(scroll-bar-mode 'right))
Look if you don't know, stop filling in the blanks. Windows does not need to be used to develop for Windows. Please stop guessing. Windows is not a programming environment. Visual Basic is. Unix isn't a programming environment. XEmacs is. Computers are not just tools. Yes, and my car is just for driving to work. Adding toolkits makes it much easier to get the coding done. Some toolkits are tuned toward a piecemeal approach while others are tuned for a holistic approach. One is superficially easy to code in, the other isn't bloated. In the last 30 years ppl should have learned that you can't just stick a program in a microwave oven and let it cook. Coding is only 10%-20% of a project. And when you get to repetitive parts of the project the microwave tools just fall apart. The fact that this question focusses exclusively on the "what to develop in" aspect ignores the fact that computers are just a tool, and you use the right one for solving whatever problem you need fixed. Programming is not just a repair job. A computer is not just a tool. It's an environment to create in. And creativity is not just images and words. So the question should really be, "For what kinds of problems is Linux a better solution that Windows?" Answer that, and you have also answered which system to develop under. They're not dev environments. The culture that revolves around them produce vastly different tools. Decide on where the tools tuned to your planning style (which affects software quality) are more likely to be available. Software is a tool. A computer is a refrigerator for software. Both systems have their strengths and weaknesses for development, and a competent coder can do a good job on either platform. And out of a coin toss I get heads or tails. Fluff. Please it's really depressing to read an argument like this.
The message on the other side of this sig is false.
the network IS the computer. nuf sed.
It is very hard to explain to some one who has never used a Unix system why grep, sed, perl, awk, make, find, *sh, etc. etc. etc. are so great.
I think the best approach is
For the Unix person that is trying to convince someone of the greatness of Unix remember this...
You can not convince a blind man to undergo surgery that will give him sight by telling him how great it is to see. But if enough people around him are talking about the greatness of vision he will want to see.
--
May the source be with you!
--
May the source be with you!
Jason Zwolak
i always felt dirty (and not in a good way!) when i use MS products.
this will be long winded, but here goes. when i was in college, my gf came up to me all tearful, etc. her aunt had passed away, and the family had agreed to meet at the aunt's house, and go through her things, and decide who would get what. they were supposed to meet at something like 8:30am, as i recall.
anyway, her part of the family shows up at like 8:15, and some other family members already had gone in the house and were loading things up in a truck -- get this, they said "you snooze, you lose"!!!
so, she was upset because she wanted a couple pieces of jewelry that she liked, but the relatives took her aunt's whole jewel case.
okay, i was angry and upset too. i was raised that things like that just shouldn't happen, fair is fair, wrong is wrong.
but as i get older, i realize that many people in our society don't feel that way. it really is "you snooze, you lose". whatever they can grab, between birth and death, well -- that's competition -- you lose if you're on the losing end. go cry about it or something.
case in point: whenever developers yap about MS innovation, thay always get on Visual Studio and "Intellisense".
I'm always glad to see it, cuz i know who (by name, anyway) made visual studio -- something like "Anders Helsjborg". he was with borland, made delphi (which was killing vb) and was targeted by bill gates for recruitment. the final offer? something like $6M to leave borland for MS.
that, in itself, was not so bad. certainly not illegal. but what came next was stunning -- MS rented the top floor of a hotel nearby borland, and called borland's top engineers and invited them over for a "technology expo".
when the enginners arrived, it was not a tech expo, but a recruiting center. several of borland's top employees accepted offers and left for redmond. this move, "Brain Draining" a competitor, is illegal in california. a lawsuit ensued, and MS settled out of court late in the trial (as usual -- another MS tactic -- keep the expensive lawsuit going til the end, then settle).
in the meantime, borland struggled to bring the less senior people up to speed, while MS developed visual studio.
bill gates, like the people who took the jewelry case, may honesty believe that what they are doing is somehow "acceptable". a lot of people agree with him -- that, somehow, "morality and fairness is for losers".
myself? i've found that most microsoft people are intolerable little wretches, enjoying life on the winning side, at any cost. harsh, but true. i've only met a couple microsofties that i though were decent folks -- the rest? watch your back.
Treatment, not tyranny. End the drug war and free our American POWs.
See my user info for links.
What explains the difference in hard disk requirements - with Linux targets needing more than Windows - for large, comparable applications?
By way of example (from the StarOffice 5.2 datasheet):
Why should a Linux app. (in this case) need an additional 70 Mbytes on the Linux target system?
While, as hard disk sizes grow, a difference of less than 100 Mb begins to approach 0, but more code can still mean more places for errors to hide (assuming - a priori - that the extra 70 Mbytes holds code, mostly)...
I personally develop on Linux, SCO Unix, Dos, Win95/98/NT/2K, and anything can get my hands on. We all know an open source platform is better (and if you don't you should know better) but you must consider that a programmer is not developing for himself - he is developing for the user. If the user does not run *nix and needs to run a win-32 platform then break out Borland C++ Builder, MS Developer Studio, Cygwin, or GCC for Win32 and write them the best program you can. If the user runs Linux or another *nix or the program can run on the server side, by all means develop on Linux. Compare the programmer to a DJ. You don't play just the music you want to listen to, you play what your listeners want. Some of them are listening to the Linux tune and some to Windows. Play them both. It's about freedom man. Don't limit yourself to one platform, language, toolkit, or audience. A true guru can develop for them all, depending on what the user needs.
"As flies to the wanton boys are we to the gods; they kill us for sport." - William Shakespeare, King Lear
The reason is not long, it does not need many words.
Linux doesn't try and lock you in.
QED.
I regularly develop on Win NT/98 and Linux. For development CM I use CVS, but rely on ClearCase for Binary and higher level CM like managing documentation, release notes, packing documentation, QA, test metrics, etc for a release to a customer. There is absolutely no difference in the tools. I still type the same thing from the command line. On the few occasions that I use a visual interface I become disturb by how hard it is to do something that I can alias or script from the command line.
Basically, what everyone seems to be saying is that: "I like this or that better." There is no reason to bash M$ because you don't like their products, so don't use them. You are entitled to use what products you like to get the job done. (provided you can convice your boss...)
Multiple desktops out of the box. 'nuff said.
"I prefer makefiles and source code..."
In visual studio, you can have makefiles just like those of GNU make.
The question is why should i develop on Linux. I use linux but for development, i prefer the Visual Studio. the day i get something close to that on linux i will gladly switch. Make no mistake that I like Linux. I like the clean implementation the simple api (i will keep all the mess of ioctl() aside for the time being). the idea is to develop with as much help as you can from the development system. and visual studio does that better than others. those who take pride in doing it the hard way should have stuck to programming with toggle switches on altair systems (something i still do). we are NOT discussing MFC or Windows API vs. Linux (somthing that this discussion has rapidly degenerated to). we are discussing whether visual studio is better than emacs + man + gcc + gdb. i program on visual studio. i very rarely dip into windows specific code. i get by with standard c a fair distance. and i am not talking about any silly stuff - i am right now implementing an edge to edge telephony solution using extensive networking calls. i develop on windows and deploy on linux. all my kingdom for an ide where i can select with shift held down, cut copy paste with control-x,c,v, see the stacks of various threads, place break points with a click. point and see variable values and get help on F1. this is something even turbo c did in 1992.
The purpose of all philosophers was to impress women
There's little point asking you to support your claim with evidence because it is Totally False.
You mustn't believe everything you read in those pamphlets the true believers hand out at supermarkets and airports nor in 'excellent briefs' handed out by big trade organizations with big anti-Microsoft agendas...
Before you protest that sometime in the mid-80s Microsoft C 3.0 was OEM'ing Lattice C, or something like that, note that (to my knowledge) there has not been any Lattice C code in MSC since MSC3. (Indeed, a more plausible argument is that all Borland C++ innovation came from its purchase of Wizard C. And all that Symantec C++ innovatation came from Zortech C++ or rather, its precursor, Datalight C.)
(That's the problem with "Microsoft didn't innovate it, they bought it" whining -- it doesn't reflect that a product is 10-15 years evolved with respect to a purhased or OEM'd starter/interim technology, 0% of which lives on in the current product.)
I was there. I wrote a chunk of the MS C++ compiler and other tools. C/C++ 7.0 was a death march and it was a great, great experience. That shipped 4/92. Visual C++ 1.0 followed (2/93). I was there when Scott and Brad and Greg and Dean et al invented ClassWizard and its tight integration with the code editor and the resource editor and MFC.
Bought indeed! Those were the days. The fun we had. Too bad you missed it.
"There was a white glow, overpowering, sublime, running over our island from end to end." -- Churchill
I have Watcom C++ v11.0b and the scope of for loop variables is implemented as described in the C++ ARM (i.e. for loop variables are visible outside the loop). I've also had a number of problems with namespaces causing faulty code generation and internal compiler errors. It also doesn't ship with the STL, although it works (a special version is needed though). Besides Watcom C/C++ is not developed anymore and may be opensourced (this is what I got from a developer when they said they were discontinuing WC++). It's a solid compiler though, very quick compilation compared to GCC. (Can't really say about VC++).
It's pricey
Around here, based on the going rate for a *junior* unix programmer/analyst (boils down to a guy who's read Stevens and played with the file io chapter), the book pays for itself in less than two hours' work. I dunno, I don't think it's pricy.
Of course, that was all my fault, but hey, it had to be done in the name of silliness :-). Although, it also gave me a good glimpse of how much network overhead nfs has.
-a happy joe user
Your post got me thinking back to my first IDE and grappling with windows code. At the time, it seemed as though everyone was using Borland C++ 4.5 to make their applications in windows. Borland used OWL. I never got into enough to know if it was done well. I have read that Microsoft felt threatened and came up with MFC and totally destroyed Borland. I was wondering if there were any old timers out there who could provide some insite into the capabilities of OWL. Was it better or worse than MFC?
Don't insult VCL by comparing them to that quichy mess that is BASIC. It is a million times better. Visual Basic's IDE sucks, not to mention the language being tripe.
And the 'Hello World' program actually takes about 25 seconds, not five minutes.
Windows has much more variety than Linux too. All those things you mentioned are available on Windows (note that most people don't use them because the default tools are good enough; but they are there).
Sorry, I meant Linux *did* run like a dream on it. And hopefully will again when I get the replacement through.
Now weary traveller, rest your head. For just like me, you're utterly dead.
Don't you find it crude that microsoft's prime programming language would be a language created 30 years ago as a means of teaching computer illitterate people how to code. The B in Visual Basic stands for "beginner's"
VB Developers are a a lot more like professional level editors for quake than they are like Programmers.!!!!
And it took me just 3 minutes to not only force a former VB Dev that I could outcode him with one hand using vi and tk, but also make him want to learn Linux coding, he is still learning
I stick to my opinion, nothing can influence coding time except:
RAD Tools cut development time but multiply debugging time exponentially, because half the code is not actually written by the programmer.
Oh, and to the guy who quoted "real programmers don't use pascal"
PASCAL Is the most structured, syntactically simple (case Insensitive) Language ever created. Nicolas Wirth is a Human god on a near Torvalds Level, and I love it. On Linux a good pascal compiler KIXXASS.
"Semper in excretum set alta variant"
I'm VIMmer myself, yet I seem to be more and more compelled towards starting on the long leaning curve to start figuring emacs out. I just keep hearing about all the features, and I want to try it. (How come no one complains about feature creep in Emacs?)
Anyway, how do you do compiling/debugging windows with vim, like you can do with emacs? Or do you just use different xterms?
Gee, I guess you didn't read my post.
Yes, I have used NT you blithering idiot.
What I say still stands, NT's security model is an abomination. 95 and 98 don't have a security model to speak of. Etc. etc. etc. with references provided.
I am through feeding the trolls, forage elsewhere.
The Future of Human Evolution: Autonomy
Yes, yes, troll poster alert. If you actually took time to read through any of his posts or even look at the titles of any of his previous articles it would be clear that he's obviously pushing for Microsoft in a very clear and very determined manner. True, he might be a genuine (vocal and prolific) Microsoft admirer. But knowing the financial strength of MS, the tactics of MS, and their recent legal irks with /., it would seem more than helpful to have a bit of the Linux crowd turn on itself.
And unfortunately, I don't have linux installed, nor am I personally a linux groupie/follower/guru, I'm just another guy. But I have been watching MS, and I _do_ think they are much more sneaky than most people give them credit for.
I can earn 6 figures writing Windows software. Nuff said!
I'm a Linux and C/C++ programmer, but I've (tried to) program for Windows a little.
IMO, any development arena which does not allow the simple "hello, world" program to be written in less than ten lines of code is BROKEN, at least for mainstream use.
For C-based Win32 it took me several dozen lines of code to do "hello, world". It also took many hours of frustrating trial and error just to learn how to do this. The code was complicated enough that I cannot remember how to do it off the top of my head, I would have to re-read the book to do it again.
For C++-based MFC, I gave up after several very confusing hours.
For MFC code generated by Visual Studio, I was up and running in less than an hour with a sample program out of the book, but I couldn't modify the program to do anything interesting because I didn't understand what I had done.
As a comparison, I recently taught myself PERL from a book. In PERL, writing "hello, world" took less than five minutes after opening the book. I still prefer C++ over PERL for most things, but you gotta love anything that powerful.
(Yes, I just said that simplicity is power).
And of course, in text-based C it takes a mere three statements which I've had memorized for years.
-- laws are the opinions of politicians --
What I say still stands, NT's security model is an abomination.
It's actually better than the one used in Linux.
Better control. Finer grained. The only difference is that on most installations, it's turned off by default.
On Windows 2000, however, it's not.
Simon
Coming soon - pyrogyra
I just wanted to point out both of this things are possible and easy to do under Vim. I used Emacs for a year or two and really liked it. Then I found Vim and started to use it more and more and more until I realized I wasn't using Emacs anymore so I just removed it.
:help cinoptions; I set it to `>4{2n-2:2=2p5e-2(0f0}0^-2g0h0t0+4c3u2)20*30').
:help include-search.
:grep command is very nice. Type, for example, :grep symbol *.c. It will run the grep command and parse its output, allowing you to jump from each occurence to the next using :cn and :cp.
:make too. It parses the compiler output too, allowing you to jump from one error to the next using :cn, :cp and :cc.
:set showmatch. You can set the number of tenths of second using :set matchtime.
:so `vimspell.sh %`<CR><CR> :syntax clear SpellErrors<CR>
1. Dynamic Expansion - You can use tags for that. Just build your tags file (Vim comes with scripts to build tags files for many languages) and then, while in insert mode, start typing your variable/method/symbol and hit C-p or C-n. It will autocomplete. If you want to use <Tab> for that, do `:imap <Tab> <C-P>'.
2. Coding/indent styles - Vim does this too. If you don't like the default settings, it is completely configurable. Just set your cinoptions variable (see
3. For the incremental searches someone mentioned (ctrl-s in Emacs) you can set the variable `incsearch' in Vim. Your searches will then be incremental.
And I'll add a few more hints:
4. You can have Vim start looking at the beginning of your file for the first occurence of a given word. If it finds #include lines (you define the regexp used for #include lines so you can support other languages too), it will start looking at the included file and only come back once it's done. This is a nice way to find the place where a given struct/function/something is defined. See
5. The
6. Vim has
7. When I switched from Emacs to Vim, I found it annoying not to have it show me where I opened a given `{}' like Emacs did. I mean, in Emacs, when you type `}' editing a C source file, it moves the cursor for a second to the opening `{' (if it is visible). You can do that under Vim to:
8. Add the following lines to your ~/.vimrc:
noremap <F8>
noremap <F7>
IIRC, the vimspell.sh script is distributed with Vim. It depends on the `spell' command. Then, when you save your file and hit F8, Vim will find your spelling errors and highlight them.
Ok, I guess I don't have any other tips for now.
Check out Vim at <http://www.vim.org/>.
Alejo.
for services which "cannot respond to the control function", to quote the error message...
--
Peter
With sufficient munging, you can make anything do almost anything.
Need a Python, C++, Unix, Linux develop