ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
So I'm an accomplished Python programmer, have decent experience with C, PHP, Pascal and assembly, but can't decide what to learn next. Whatever it is, my intention is to learn it inside out.
I want a language that is:
-good (powerful, not dumbed down)
-relevant in the job market
-will be relevant in future
-can be used for hobby programming as well as work
-can be used cross platform without too much difficulty
-the language must keep me interested
-should be able to perform different tasks (3d graphics, CLI, desktop applications)
-preferably fast executing compiled code
>I liked C#, but mono is still in it's infancy, and since I use Linux 90% of the time it may not be the *best* choice due to lack of 'Forms'.
>C++ is powerful and relevant, but feels like an old beast that takes longer to do things with (in my limited experience.)
>Java is too boring and cumbersome
>I considered objective-C but it's propriety, no? And how relevant it will be in the future?
What should I pick? Am I overlooking anything??
-thanks
Last edited by flamesrock; 08-02-2005 at 07:17 PM.
You really should give C++ a try. Not only is it extremely powerful, it it also very interesting on many levels.
It is very relevant to the workplace now and for the foreseeable future.
Cross platform is very doable with libraries like Trolltech's Qt (www.trolltech.com).
There are also many other free libraries that let you do a ton with little code. Check out the Boost library (www.boost.org) if you are not familiar with it already.
Java can certainly do 3D. Their 'Project Looking Glass' desktop environment is Java based: http://www.sun.com/software/looking_glass/
There are bindings to OpenGL from Java, so it should be about as cutting edge as you like.
I'm betting the farm on learning assembly, C++, C, Java, Linux API's and graphics API's. Hopefully my choice works out for me. I like assembly because I learn 10x more about other languages when I program in it. I'm drifting further and further from MS programming which might bite me in the ass one day, but we'll see.
Quote:
Originally posted by flamesrock >Java is too boring and cumbersome
I felt like this for a little while, but I gave it another serious try. Have a look at the JFC/Swing tutorial and maybe give it another shot? Thats what I did at least
I see Linux only getting bigger, so like I said I'm kind of putting my eggs in that basket. Other than that, the only "in-demand" thing I see getting big is Java/XML/Web Apps, and I kind of see web apps getting much bigger once we get faster Internet. Its easier to create UI's in a browser window, and the general public doesn't like installing software.
Simply put, entire Operating Systems have been coded in C and C++ (with assembly of course). Most OSes have native C or C++ APIs too. These languages won't disappear for a while yet.
Learning these languages is a very safe bet in the forseeable future.
Yeah, there are 3d APIs written in the standard release SDKs. But it will never be as fast as a true compiled language. It is compiled to a byte code that is interpreted by the Java Virtual Machine. It is fast, but CANNOT ever be as fast as native, since there is this abstraction/interpretation.
I recommend java as it is heavily type safe, making for VERY reliable code that is easy to bug check.
You've obviously been around this block before. The more languages you learn the easier each one becomes. They're the tools in your toolbox. You never know when you'll need to use a new one.
I don't think you need to try to learn every new language "inside and out" because pretty soon the learning process becomes repetitive. It's probably better to acquire a somewhat-in-depth exposure to a wider variety of languages, at this point.
Originally posted by elyk1212 It is fast, but CANNOT ever be as fast as native, since there is this abstraction/interpretation.
That's not strictly true. The JIT methods used in modern bytecode interpreters can cache frequently used code, which can result in faster execution. The interpreter can also provide speedups by analysing code on the fly, and avoiding situations where memory would normally be transferred to and from main memory, instead of remaining in cache or registers.
That said, for 99% of the people, 99% of the time, yes Java will be slower.
Hmm... I am leaning more towards c++. At my school, they teach mostly in Java so I will gain Java experience, like it or not. The question is, is it worth it? Python/Jython are a lot more fun and just as fast.
Any opinions on c#?
edit to add:
oh -- and I do plan on learning more than one. The plan is to learn them one at a time and not fill my brain with any unnecessary languages.
Last edited by flamesrock; 08-02-2005 at 10:33 PM.
That's not strictly true. The JIT methods used in modern bytecode interpreters can cache frequently used code, which can result in faster execution. The interpreter can also provide speedups by analyzing code on the fly, and avoiding situations where memory would normally be transferred to and from main memory, instead of remaining in cache or registers.
That said, for 99% of the people, 99% of the time, yes Java will be slower.
I am aware of workarounds and caching, but these are just enhancements and special cases that do not change the paradigm. A lot of this has been around since interpreted languages began. Perl Does this on Apache's mod-perl etc. Still, any time there is an initial redirection, there will be a delay somewhere in the execution, whether it be the first invocation or later. JIT compilation produces a delay somewhere, this is the general statement that can be made. As in analysis, we always have to consider the general WORST case. Anyhow I just studied this exact concept 2 years ago on my CSE exam (in my 68k assembler class). It is not based on opinion or any subjective leanings towards favorite languages.
Anyhow, if you analyze it as an algorithm that needs to compile N lines, then execute. Perhaps I could consider that a O(N) + O(1) = O(N) algorithm. While just execution with no parsing would be a O(1) algorithm (and in the case of a cached method, this method invocation would also be O(1), but probably not the whole program. Also it is a special case). Again, we always have to consider general case analysis, which as you know is ALWAYS in the WORST CASE.... That's what discrete math's big O analysis entails .
Want to learn a VERY strange and function related program that has its roots in Lamda calculus? Try out Scheme. It is required of all Computer Engineers at my local university. Good for learning Computer Science, not necessarily for writing many programs. But, learning different approaches to programing help with languages you already know.
For writing practical largely scalable OOP programs I have to again recommend Java AND C++. Notice the AND, as I think Both are VERY important to learn. C++ for the pointer concepts that you miss in some other languages, and Java for learning base OOP concepts with minimal complexity. Also I LOVE the cross platform possibilities of Java.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.