Domain: python.org
Stories and comments across the archive that link to python.org.
Comments · 1,513
-
10 Resources You Can't Live WithoutThere are, nowadays, enormous piles of resources for those starting out in game development. Some suggestions as to where to start...
I agree with those who say that knowledge of OpenGL and/or DirectX is a must, (always know something about what goes on under the hood), but I'm also a big fan of short time-to-market once you actually start developing a concept. Here are some 2D engines that speed up development:
- Torque2D - GarageGame's upcoming 2D tiling engine SDK. This looks promising, but is in its early-adopter release. Not yet ready for primetime, according to GarageGames.
- Pygame - Python-based 2D engine. My feeling is that Python is a great language to start game development in.
- Orbforms Designer - Why limit yourself to the PC? PDA games can give you a greater return on your time than Windows games do. (Per man-hour, our PDA titles bring us more revenue than our PC titles do.)
- Game Editor - For those who want to go even higher-level than an SDK.
- 3D Gamestudio - The engine of choice for our latest games. I love it, and hope they'll extend to the Xbox 360 platform when it comes out.
- Torque - Maybe the single most popular 3D engine among indies and hobbyists. Focuses, in part, on cross-platform compatibility (Windows/Linux/Mac).
- OGRE - An open-source package. Frequently updated. Some nice projects using the engine.
- DarkBASIC - A popular package among new developers and independents.
- Game Tunnel - Previews, articles, and reviews of indie games.
- DIY Games - Covering the latest independent/shareware titles.
---
Inago Rage - Create and fight in your own FPS arenas.
--- -
Google uses a lot of Python
Yes, that should be it. According to Peter Norvig (of "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp" fame):
"Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we're looking for more people with skills in this language." said Peter Norvig, director of search quality at Google, Inc. (Source).
-
Re:psf?
-
Re:psf?
Python Software Foundation
http://www.python.org// -
Re:Dont Forget ZopeZope targets a very different space than Rails. It's always been a bit of a struggle for a programmer -- it tries to make certain things easy, and in the process makes other things very hard, or introduces very difficult magic. You can't get your head around Acquisition, no matter how you try it'll kick your ass periodically.
If you are comparing Rails and Zope, you probably aren't comparing things properly. Doing a CMS? Then Zope has a lot of infrastructure, and Rails has none. Doing a small databased-backed web application? Then Zope will be rather painful.
If you want to compare a Python option to Rails and Ruby, you should look at something like Paste/Webware, CherryPy, Subway, Aquarium, or others. There's a lot of choices, but there's very active work to bring together these web platforms, so won't be trapped by your initial choice.
-
Re:Open source
My personal favorite is the Python Foundation's Explore Functional Programming. Getting paid for sitting around all summer and monkeying around with FP concepts sound great, as I already do it for free (though they probably want you to use Python... ugh!)
Although I'm not so sure Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire is such a good place to introduce FP to students... I've get nothing against the tupling lemma of Fokkinga, but jumping right into catamorphisms and hylomorphisms might cause a rush for the nearest exit... -
From the Python Coding Project Ideas
http://wiki.python.org/moin/CodingProjectIdeas
:
-CleanupUrlLibProject
-ProfileReplacementProje ct
-MakeXmlrpclibAsynchronous
-Virtual Girlfriend
-.. -
Some examples
As far as I know, there is no non-free networked object-oriented database. Relational databases are nice, flat files have their place, but OO databases are quite useful too; I've built a few webapps using this. Thanks, Pavel Curtis!
Several programming languages exist only in a free version, or the non-free versions are derivatives. Scheme, Squeak (Smalltalk based), Python, and Perl are just a few that come to mind. Perhaps this clown would say that these are all derivative works from Fortran, or somesuch, but it's a stretch.
-
Re:Python?
Be warned: while this is true for most of them, atleast one level requires Pickle.
-
Re:When did Matlab become commercial?
The open alternative is Numerical and Scientific Python. It's a better language, has a good number of numerical libraries, and a huge number of other useful packages.
-
Matlab doesn't measure up
Octave doesn't even come close to measuring up to Matlab.
Depends on what you mean by "measure up". The stuff that makes Matlab useful is all the libraries and tools created by third parties. Matlab itself is a lousy programming language and a lousy implementation. Octave doesn't have all those third party packages, which makes it more limited.
So why not push [Octave]?
Because Matlab itself is broken; there is no point in pushing the clone of a bad system to an illogical extreme (although that doesn't mean people won't try). It may be convenient for existing Matlab users to have others waste their time giving them a free-as-in-beer alternative, but that's not the point of open source. If you are happy with paying thousands of dollars for Matlab and can live with its numerous limitations, well, just keep on using it.
The alternative to Matlab is not Octave, it is Numerical Python. And compared to Numerical Python, Matlab is half-assed.
Don't expect Numerical Python to be a drop-in replacement for Matlab, it is not. You will have to spend time learning it. Packages you can get for Matlab won't exist for Numerical Python, just like there are lots of packages for Numerical Python that Matlab doesn't have. Overall, in terms of technology alone, Numerical Python is better; the fact that it is free and open source is an additional bonus. -
why not create something more enduring?
I'm not sure why writing open source code for a platform that is so completely closed and hugely expensive is a badge of honor. It's like doing "volunteer labor" for poor starving Donald Trump. Right now, you may be getting MATLAB cheap as a student, but have you looked at the prices you have to pay for it in the real world?
Furthermore, while MATLAB is a tolerable language for numerics, as a programming language, it is horrendous. I would not want to hire someone who spent most of his time programming in MATLAB.
Why not devote that energy to writing and contributing Numerical Python code? Numerical Python is free and it's a far better language than MATLAB. Numerical Python does not have quite as many numerical modules as MATLAB yet, but it beats MATLAB hands down in the availability of other libraries (GUI, visualization, plotting, parallel computing, networking, etc.).
Even better, you actually have a prayer of being able to use that code after you leave the university; MATLAB is simply too expensive for many environments. -
open source for proprietary platform
This is a pretty typical abuse of open source by a commercial company. Not only is MATLAB hugely expensive, in addition, while they make money on platform sales, they want other people to develop free and open source software for their platform to make it more valuable.
In fact, the only thing that has made MATLAB valuable is that it is in widespread use and that everybody develops add-ons for it. As a numerical programming environment, it is technically considerably worse than available alternatives, both commercial and free.
Don't waste your time doing free work for MATLAB (or other arrogant companies like that). The same amount of time and effort would have been better spent contributing to one of the open source MATLAB alternatives, like Numerical Python and Scientific Python. -
Re:not to nitpick here
python is ugly and unreadable.
You must be a very good computer scientist to reject a language because it has a style guide that's enforced - and to have a strong opinion about a language that you obviously don't know. Wow.
My recommendation to you is to spend 10 minutes reading this tutorial and playing with the language, then to spend couple of minutes browsing through the documentation.
Then when you have a quick scripting project you decide to undertake - build a solution in Perl, but take a couple of extra minutes to also try it in Python. You'll probably love it - once trying Python I never looked back to Perl. -
Re:In your face MS
a real programmign langauge doesn't need brackets.
-
[OT] Re:Still not a Slate
I have nothing against competantly implemented MI -- my compliant was about people (like several of the Java programmers I work with) who treat MI as inherintly evil just because C++ botched it so badly. And face it -- C++'s naiive MRO is evil. See here for a discussion of some of the considerations that go into a good one.
-
Re:Software Quality
Of course it has. It's called Python
-
That is so funny....
A Java person talking abtout "lock in". How many JVM platforms are officially supported, like 3? Win, Linux(x86), and Solaris (Sparc). (Mac is provided by Apple) Compare this to how many are officially supported for python. I count 16 just in the OTHER catagory. So while "lock in" is not locked in to one platform, you are extremely limited in what platforms you can choose.
Python is also free; there is no controlling corporate body; no single source.
I often wonder why we aren't just distributing .pyc files instead of .java. I can only speculate that it was a lack of a standard windowing system and a browser plug in. But everything is better in python.
Since you are coming from Java, don't forget Jython. And if you are coming from .Net don't forget IronPython.
All in all, I have to recommend python for so many more reasons than vendor non-lock in.
Also for your new interface I would suggest the PyGame module.
-
Re:I guess it depends on what you mean...we had damn near purged the world of programmers who put their opening brace for a new code block on the same line as the conditional statement
Why the hell shouldn't that be done? (Unless you're referring to using Python.
:-) ) -
Anything for PYTHON
Is there anything similar for Python? There's PyPIhttp://www.python.org/pypi of course, but anything else?
-
Re:Purpose of dynamic types?
For python looks at peps 245 and 246. http://python.org/peps/pep-0246.html and http://python.org/peps/pep-0245.html
The first one is Python Interface Syntax allows you to define an interface and check if something supports it.
The second one is Object Adaptation is an item that builds on the interface system to define adapt an item with one interface to another.
Both of these things are already used in zope, twisted and other places and it seems very likely that they will be in python 2.5. These features have been used for at least a few years it is just not part of core python yet.
My point though was that I want to deal with "types" that are not computer types. I want a type that has a URL and id, or I want a type that is callable, or a type that is iterable and supports containment checking. The int, string, list, etc types are not normally the types I care about. You are right that types are important but only if the computer can give you types that match the problem. I do look forward to having more of this stuff in python and would be even okay with some limited type of static typing support so long as it was based on these more useful types rather then computer types.
One of the things I like about the python interface stuff is I don't have to have things inherit from a base class in order to follow that interface. The interface and the inheritance are separate so I can have something that says it follows a list interface but does not need to inherit from list. I am sure you can see the value of that after seeing some of the truly evil deep inheritance hierarchies. :) -
Re:Purpose of dynamic types?
For python looks at peps 245 and 246. http://python.org/peps/pep-0246.html and http://python.org/peps/pep-0245.html
The first one is Python Interface Syntax allows you to define an interface and check if something supports it.
The second one is Object Adaptation is an item that builds on the interface system to define adapt an item with one interface to another.
Both of these things are already used in zope, twisted and other places and it seems very likely that they will be in python 2.5. These features have been used for at least a few years it is just not part of core python yet.
My point though was that I want to deal with "types" that are not computer types. I want a type that has a URL and id, or I want a type that is callable, or a type that is iterable and supports containment checking. The int, string, list, etc types are not normally the types I care about. You are right that types are important but only if the computer can give you types that match the problem. I do look forward to having more of this stuff in python and would be even okay with some limited type of static typing support so long as it was based on these more useful types rather then computer types.
One of the things I like about the python interface stuff is I don't have to have things inherit from a base class in order to follow that interface. The interface and the inheritance are separate so I can have something that says it follows a list interface but does not need to inherit from list. I am sure you can see the value of that after seeing some of the truly evil deep inheritance hierarchies. :) -
Re: CPAN
Re: CPAN -- a bunch of improvements for PyPI (the Python Package Index) were written during PyCon, which should go some length to making something like CPAN. It's hard to really say -- CPAN is actually just a very simplistic FTP site, with lots of tools built on top. So it's a very different design. But with just a little more work, and a lot more evangelism PyPI (a lot of Python programmers don't even know about it) should become very useful.
-
Re:How not to win the corporate mind.
I have to agree. Java-Doc is one of the best things about java. The API listing is enormously useful and links regularly to the tutorials. Java is simply the most accessible, best documented language/platfrom I've used.
I do wonder why other languages don't adopt some sort of javadoc. While it may add more verbosity to an already verbose class file, modern editors allow ways to hide arbitrary sections.
Sun's api listing is vastly easier to navigate then python's , perl outdated man-page style, or even ruby
Seriously, (and I'm not trying to troll) is there anything better than javadoc? I don't see any drawbacks to it. Why doesn't the rest of the open language community adopt it? -
Re:Advantages?
Too Many!
http://www.python.org/moin/WebProgramming
http://www.boddie.org.uk/python/web_frameworks.htm l
Developing web applications in Python is LOT more painless than anything in Java. There are multiple frameworks for almost every style, except maybe ASP.NET/JFaces style.
My personal favorite is CherryPy. Keep it simple.
If you are Tomcat type, try mod_python.
If you are JBoss type, try WebWare.
If you just like to complicate things from your Java roots, choose Zope :-). Just kidding. -
Re:Why is whitespace significance a good thing?How would you do that in a language with no explicit block delimiter?
def do_stuff()
Or, you can go one better...
i = mangle()
# Babble on for a hundred lines or so
frob_i()
frob_i_again() ...
frob_i_one_last_time()
#end do_stuff()if i: #{
do_stuff()
#} ;-)
-
Re:Python is killing C#, not JavaOne great way to use Python while still being able to easily interoperate with
.NET programs and take advantage of the CLR's base class libraries is IronPython, an open-source implementation of Python for the CLI (it works with both Microsoft .NET and Mono).
It actually turns out to have suprisingly good performance compared to regular Pyhton implementations (see this presentation from PyCon 2004).
The latest version (released a few days ago) isn't yet linked to from the IronPython website, but can be obtained here.
DISCLAIMER: I'm not affiliated with the IronPython project, and I haven't yet had the opportunity to make any extensive use of it, but what I've seen so far looks really promising.
-
Re:Advantages?
PSF has given a grant to implement SNMPv3 in 2005. So your wish will probably will soon be fulfilled.
http://www.python.org/psf/grants/ -
Python still has severe limits
I'm a big fan of Python. I used it almost exclusively before taking my current job. But let's be honest, Python and Java just aren't intended for the same type of applications.
Python's standard library just doesn't have the breadth of Java's. For small apps, the CPython VM is lighter than Sun's JVM, but CPython's VM is lacking several capabilities that I'd consider pretty essential -- chief among them is the ability to return unused memory back to the OS. And for many tasks, CPython is still effectively single-threaded due to its global interpreter lock. Java has never suffered from either of these problems. These aren't trivial issues or the result of nitpicking -- they're rather severe limits (which make me seriously question the suitably of Python for enterprise apps, eg. Zope). Of course, once CPython does get decent threading, it's likely that it's GC subsystem will need to be totally rewritten. I apologize if it sounds like I'm beating up on Python. That's not my intent here. I love Python, and I only wish I could stop more people from using Perl
:)In fairness, it does look like the Python community is trying to address some of these problems. I just read a paper presented last week at PyCon 2005 on CPython's memory management. The author is developing some patches to let CPython return unused memory to the OS for most object types (except for Number, List and Dictionary). The memory manager still can't defragment its heap, so this isn't a perfect solution. As of a few weeks ago it looks like these patches haven't yet been accepted.
-
Python still has severe limits
I'm a big fan of Python. I used it almost exclusively before taking my current job. But let's be honest, Python and Java just aren't intended for the same type of applications.
Python's standard library just doesn't have the breadth of Java's. For small apps, the CPython VM is lighter than Sun's JVM, but CPython's VM is lacking several capabilities that I'd consider pretty essential -- chief among them is the ability to return unused memory back to the OS. And for many tasks, CPython is still effectively single-threaded due to its global interpreter lock. Java has never suffered from either of these problems. These aren't trivial issues or the result of nitpicking -- they're rather severe limits (which make me seriously question the suitably of Python for enterprise apps, eg. Zope). Of course, once CPython does get decent threading, it's likely that it's GC subsystem will need to be totally rewritten. I apologize if it sounds like I'm beating up on Python. That's not my intent here. I love Python, and I only wish I could stop more people from using Perl
:)In fairness, it does look like the Python community is trying to address some of these problems. I just read a paper presented last week at PyCon 2005 on CPython's memory management. The author is developing some patches to let CPython return unused memory to the OS for most object types (except for Number, List and Dictionary). The memory manager still can't defragment its heap, so this isn't a perfect solution. As of a few weeks ago it looks like these patches haven't yet been accepted.
-
Python still has severe limits
I'm a big fan of Python. I used it almost exclusively before taking my current job. But let's be honest, Python and Java just aren't intended for the same type of applications.
Python's standard library just doesn't have the breadth of Java's. For small apps, the CPython VM is lighter than Sun's JVM, but CPython's VM is lacking several capabilities that I'd consider pretty essential -- chief among them is the ability to return unused memory back to the OS. And for many tasks, CPython is still effectively single-threaded due to its global interpreter lock. Java has never suffered from either of these problems. These aren't trivial issues or the result of nitpicking -- they're rather severe limits (which make me seriously question the suitably of Python for enterprise apps, eg. Zope). Of course, once CPython does get decent threading, it's likely that it's GC subsystem will need to be totally rewritten. I apologize if it sounds like I'm beating up on Python. That's not my intent here. I love Python, and I only wish I could stop more people from using Perl
:)In fairness, it does look like the Python community is trying to address some of these problems. I just read a paper presented last week at PyCon 2005 on CPython's memory management. The author is developing some patches to let CPython return unused memory to the OS for most object types (except for Number, List and Dictionary). The memory manager still can't defragment its heap, so this isn't a perfect solution. As of a few weeks ago it looks like these patches haven't yet been accepted.
-
Python still has severe limits
I'm a big fan of Python. I used it almost exclusively before taking my current job. But let's be honest, Python and Java just aren't intended for the same type of applications.
Python's standard library just doesn't have the breadth of Java's. For small apps, the CPython VM is lighter than Sun's JVM, but CPython's VM is lacking several capabilities that I'd consider pretty essential -- chief among them is the ability to return unused memory back to the OS. And for many tasks, CPython is still effectively single-threaded due to its global interpreter lock. Java has never suffered from either of these problems. These aren't trivial issues or the result of nitpicking -- they're rather severe limits (which make me seriously question the suitably of Python for enterprise apps, eg. Zope). Of course, once CPython does get decent threading, it's likely that it's GC subsystem will need to be totally rewritten. I apologize if it sounds like I'm beating up on Python. That's not my intent here. I love Python, and I only wish I could stop more people from using Perl
:)In fairness, it does look like the Python community is trying to address some of these problems. I just read a paper presented last week at PyCon 2005 on CPython's memory management. The author is developing some patches to let CPython return unused memory to the OS for most object types (except for Number, List and Dictionary). The memory manager still can't defragment its heap, so this isn't a perfect solution. As of a few weeks ago it looks like these patches haven't yet been accepted.
-
Re:Toolsets
Love the no-brackets
I love Python, but I hate the significant whitespace. Apart from anything else, it's an utter bugger to do web templates like PHP without resorting to crappy XML mixins or yet another crappy macro language.
[SQLObject is ]hard to compare to the Perl DBI because the dbi just is an interface and doesn't do mapping.
The Python equivelant to DBI is the DB-API. Any Python database module should implement that.
Lack of CPAN
The equivelant here is the vaults of Parnassus. Admittedly, CPAN has a bit of a head start
:).Probably the biggest thing going for it in Python's favour is it's sheer productivity. I learnt Python back in 1999, and then let it go for a few years. I picked it up again last year, and was absolutely amazed at how much I was able to achieve in just a few hours.
You know that feeling you get sometimes when you write a thousand lines of code, and it all compiles cleanly and runs perfectly first time? You get that feeling a lot more in Python than any other language I have ever used.
I'm not sure exactly what it is about Python that brings this productivity boost, but it's real and it's worth learning Python just for that.
-
Re:Toolsets
The Vaults of Parnassus is a great resource for Python stuff. http://py.vaults.ca/. It doesn't have a CPAN like interface for it though.
Then there's the python http://www.python.org/pypi which afaik can easily be accessed through the setup.py from Python distutils. If it's not implemented yet it's not even that big of a deal with all the native http/url/xml from Python.
I, for one, think a CPAN like interface to the PyPi or Vaults are great. -
Google is not enteprise?
-
Re:What If Linus Torvalds Gets Hit By A Bus?
What if Guido was hit by a bus. Open source people are so morbid. Apperently they think followers of other languages are dangerous.
-
Re:FOSS [sic] versions of Java
They have.
-
Re:works great for honest spammers
Hopefully your auto-reply software is configured to realize "Hey, I just sent an auto-reply to the email address that sent me an auto-reply
... let's not bother them a second time." See here and here and here.
I would hope that this service from IBM would also be configured by default in such a way that it avoids the infinite-challenge-loop (and is hard to configure to set up such a loop.) -
Re:Slashdot standards?You can't write documentation without asserting something about the reader.
Does "no clue" imply that this is the first time they've ever tried coding something?
In this case, you want to write something gentle. The python tutorial is one notable example of what to do there.
However, if you're talking boost, the 100-level stuff isn't going to win applause.
One thing I haven't seen yet in this thread is the task-oriented, or 'cookbook' approach, that serves at least two distinct purposes:quick-n-dirty steps for the initiated
nice feature overview, to highlight functionality you may not yet be using.
Another thing unmentioned in the thread in indices. For documentation of size, the better the indices, the more useful. -
Re:I'll switch
xCode is a programming environment. You're talking about scripting.
So you can't write a program in Python?
I suppose none of these projects exist, then. Would you call Quark a script? How about Yahoo Maps? Or Google for that matter? -
Re:Bazaar-NG
Arguing whether Python can or can't scale is less interesting than showing that bazaar-ng does or doesn't scale in practice. Being skeptical about python performance is OK, but don't jump to conclusions.
The current pre-release bazaar-ng code can manage kernel-sized trees faster than arch (written in C) or darcs, and comparably fast to svn. So far, so good. Will it still be fast enough when it's feature-complete and when there are proper benchmarks? We will see. -
perl6 is a mistakeI've been using perl pretty much constantly since the Pink Camel, and believe me, Perl 5 is an extremely good language for quick scripting things. That's what it was designed for. Sure, you can do big projects in it, but it's not exactly ideal. Recently I've started using Ruby as well, and I intend to move my department over to it instead of wasting time with Perl 6.
One of the goals of Perl 6 is to make non-trivial projects possible. That's good. The way it's being done is bad. Perl was once a lightweight, extremely flexible language. Now it's become a huge ugly monster. People wanted OO, so a nasty hack was bolted on top to allow some semblance of it. Now this nasty hack is being expanded. Sure, the code's different, but the basic form is the same. Kludge upon kludge upon kludge; I'd much rather have a nice, clean, pure language (and not one with loads of irritating whitespace thank you very much).
The same goes for the syntax. All the switching between $, @ and % is really irritating (ask a newbie how to get at the length of the keys array of a hash inside a hash, for example), and the changes proposed for 6 are just making this worse -- it seems that Larry, in his infinite wisdom, wants to prefix every data type with a different hard-to-type character. Perl was only designed for the three data types, and adding more is a mess.
Perl 6 is a complete rewrite, but it keeps all the mess which has accumulated over the previous versions. This is not good. Sure, my const int $var = 27; may look neat (in the same way that, say, Pascal does), but $var isn't entirely constant, or entirely an integer, it's just a hack which makes it sort of behave like one. It's like Ada all over again! The whole thing is an exercise in pseudo-computer science masturbation with little real purpose except to please the managers who dislike the one thing that makes Perl special.
On a similar note is regexes. I'm an avid fan of regular expressions simply because a nondeterministic finite automata is far more flexible than linear code. However, Larry must have been smoking that cheap $2 crack when he wrote this. Does he want Perl 6 to be flex or something?
I won't be going on to use 6. It's a nice idea, but it's completely unnecessary. It won't make large projects any easier to manage (the language is still, at heart, an almighty hack -- an impressive one, but still a hack). It won't make OO any cleaner. It won't make development any faster. I'd prefer to use a language which has always been pure synthesis of science and engineering, not some half-baked imposter.
Perl 6 will be nice, but I'm guessing it will be the end of Perl. It can't do what it wants to do whilst still being based upon a nasty mess. There are now other options, which provide all of Perl's power and none of the mess. Sorry, but *BSD^H^H^H^H Perl is dying.
-
Re:Use your imagination...
-
Re:Use your imagination...
-
Pretty obvious
On unix systems, ftp itself is scriptable. Other ideaswoul be to: http://curl.haxx.se/, http://lftp.yar.ru/ or using an expect script as an interface between your script and an ftp client. If you use python, use: http://docs.python.org/lib/module-urllib.html, or ftplib. For Perl, use LWP, Net::FTP.
-
Re:some newbies
The story I heard (which may be Urban Legend) is that K&R used the style in order to fit more code on the page. It has subsequently been adopted by all and sundry because K&R are gods and so must be correct. Personally I hate it; the information content to the reader is practically nil. Many years ago I was an advocate of kclittle's indented braces and I agree it makes good sense, the preceding statement is immediately more readable. I gave it up because every IDE I've used tries not to indent braces, plus working in a team resulted in a mishmash of styles, reformatting source files is not my idea of a fun time. The answer is obvious.
-
Use open tools only!Here's the big thing: only use open tools.
What happens three years down the road when Management decides not to renew the Rational Rose license? What happens when IntelliJ stops supporting your version of IDEA and you have to upgrade with money you don't have? Etc.
Use only open tools. Open-source is best, of course, but anything that uses completely documented file formats and has tools for exporting to other formats is acceptable.
Don't let yourself get nailed with vendor lock-in. That's a bad, bad place to be. Better to use slightly inferior tools which are open than to lock yourself to a vendor.
That said, here are the tools I find myself using again and again:- C++
- jEdit is a Java programmer's editor with excellent C++ support. I do development on Linux, Win32 and MacOS X, so it's very nice for me to have one editor I use on every platform. jEdit's not as featureful as, say, Emacs, but it's considerably more friendly to use.
- Boost. If you're writing C++ and you're not using Boost, you're committing a crime against yourself.
- Python. With Boost's Python library, it's easy to make your C++ applications scriptable. Write the heavy lifting parts in C++, then make those parts callable from Python. Do the rest of your development in a far safer, more sane language. You get almost all of the speed of C++, and far fewer headaches.
- SWIG is another tool that's excellent for creating scriptable C++ applications.
- Subversion for your version-control needs. Nothing else will do.
- Doxygen for all your documentation needs. Learn it, love it. Your code's not done until every public part of the API has been doxygenated.
- The GNU Autotools are really, really awful. They're also far better supported than Scons or pick-your-Autotools-replacement. Get ready to feel the pain of m4 macros. Sorry.
:( - The GNU Compiler Collection started getting a good C++ compiler around version 3.0. I've been quite favorably impressed with 3.3, and I'm looking forward to 4.0. I don't recommend it for Windows, but for Solaris and x86 Linux it's beautiful.
- I haven't found a good C++ unit testing framework yet. If you find one, please let me know.
- Java
- Eclipse is an excellent Java IDE. jEdit also fits the bill nicely, if all you want is an editor. I use both frequently, and am quite pleased with both.
- Subversion again for your version-control needs.
- jUnit for unit tests. Your code's incomplete unless you've written unit tests for it.
- Javadoc for documentation. I would recommend Doxygen, but it's quite possible you'll be deploying your applications on machines that don't have it installed.
- Ant for all your build needs.
- C++
-
Re:hmmm
I haven't, but I imagine it's exactly the same problem you'd have doing Java in a "plain vanilla text editor" -- only in Lisp the closing parens are all ), where in Java it's a combination of ) ] and }. I *have* tried to debug Java in NOTEPAD.EXE, and all the different types of close-paren *do* screw me up.
I don't think the moral of this story is "don't use Lisp/SGML", or even "make closing tags really verbose". I think the moral of the story is either:
- don't use a "plain vanilla text editor" for debugging "deeply nested" code -- use a real editor -- or:
- use a languages like Python and YAML that don't *need* closing parens in the first place.
Since this is slashdot, I now expect several people who have never written a line of Python in their lives to respond, saying how Python's use of indentation is brain-dead. *Yawn*.
(Oh, and the parent was probably trying to say "minimized end-tags like <tag/text here/", but forgot to escape his <.) -
Re:Beagle
Everybody talks about living under the mercy of Microsoft when using Mono, but really it isn't an different than living under the mercy of Sun, both companies have their history of sqaushing compitition.
Just guess which one is more likely to attempt a lawsuit attack on the desktop Linux users. ISTR also that clean-room Java implementations are less infringing than Mono (which implements the ECMA standard that is granted with "reasonable and non-discriminatory" terms). Too bad Java is a dog, especially for smallish desktop apps.
Of course people should choose a truly open solution whenever appropriate :-). -
Re:You jest, however
Seriously. It's one of the things I like about strongly typed languages; the ability to utterly restrict input to what is supposed to be inputted.
I think you mean static typing, and besides, this is silly. I would much rather have the flexibility and ease of a dynamically typed language combined with more flexible restrictions available in Design by Contract. Instead of just checking the "type" of the data being input into a function I can have strict contractual obligations about what a function accepts as input and what it returns as output. I can even define invariant properties of objects.
A lot of vulnerablities come through allowing someone to give (for example) a chunk of code as an input.
But what if you wanted "a chunk of code" as input for certain things? With static typing all you've got is that it does indeed conform to the type you expected. With DbC you can be more specific as to the properties (like what commands the code object tries to execute) you expect. Vastly superior, and yet you cna still have all the benefits of a dynamically typed language.
Yes, yes, you can do the same thing as DbC's pre and post conditions by putting a list of assert statements at the top and bottom of the function, but when it is built into the language you are more likely to use it. Also note that object invariants are a little harder just using asserts. In the end DbC is about giving you provable code, which is a good thing.
So let's drop the pointless clinging to static typing and instead use DbC. If only the Python people would accept Contract Python in then we'd be all set!
Jedidiah.