One Each - Best Programming and Scripting Language

Page 2 - Seeking answers? Join the AnandTech community: where nearly half-a-million members share solutions and discuss the latest tech.

cytg111

Lifer
Mar 17, 2008
23,196
12,849
136
No, issues with generics do not just come up for people writing an PhD. I was working on a project at my previous job where we had to use Java and an issue with generics came up very quickly.
- Yes, been there too, I can remember the specifics but it was frameworking with generics at the very corner of it's existence, and while the sun jdk spew it out, IBM's worked like a charm. Hey, bugs happen, even to JDK maintainers :). But even so, there is at lease ONE bug, *everywhere*. I find the JDK suite very dependable. (I dont know if this generic issue persists in java7/8 or was even fixed in an update to 6, it was some 4-5 years ago.)


How popular a language is has nothing to do with whether or not it is a good language. In fact, I would say that Java is probably a lot less popular outside of corporate environments. It is a terribly verbose language for one thing, and not very fun to program anything in outside of work. This is especially true since it is almost always used in some kind of heavily configured IDE like Eclipse.
- Yes, definitions, for the purpose at hand, like building "houses" and "cars", Java and/or C# has no rivals I am aware of, and that makes them winners in my book. Depending on our definitions our milages will vary.


Java != JVM

What 'hippie crap' are you referring to?

I don't have a problem with the JVM, I have a big problem with Java. In fact, I'm quite interested in other languages that run on the JVM such as Clojure and Scala, but I haven't had time to investigate them.
- Yes, isnt it beautiful .. Java != JVM, i like that alot. Possibilites.
By hippie crap I ment .. arh sorry about that, I dont wanna offend anyone who's curious and exited about the next best thing since the next best thing in interpreted languages.. just cause im not excited doesnt mean others shouldnt be. (I too am keeping an open eye on scala.)
 

bobross419

Golden Member
Oct 25, 2007
1,981
1
0
As a *nix guy, I like perl. Its installed by default on just about everything and its pretty easy to write scripts. Bash is great for quick things, but its pretty easy to whip up a perl script once your Bash starts getting a little more complex. I know that some consider perl unpolished, but for scripting who really cares. Its super easy to whip something up on the quick. I would also lean a bit more towards c or c++ myself... I'm no developer, but I know enough of these languages to make sense of stuff when diving source code. Take these recommendations with the understanding that I'm coming from the standpoint of whats useful to me as a sysadmin and not as a developer.

As mentioned before though, there is a lot of tools using python these days. I'm planning to pick it up myself just have so much other stuff I've been spending time on lately.

Regardless of what you choose, finding projects that are both interesting to you and within your abilities can be a huge boost in learning to code.


Also, LinuxLinks just had a post of 20 free python books:
http://www.linuxlinks.com/article/20121228122317781/20oftheBestFreePythonBooks-Part1.html

Can't give any recommendations, but could be worth a gander and maybe someone can +1 one of them for you.
 
Last edited:

Obsoleet

Platinum Member
Oct 2, 2007
2,181
1
0
Programming: Python
Scripting: Python

And you use Linux? So you're aware it's very heavily used for many Linux GUI apps?
Python isn't some sort of mockery of a programming language, it's the real deal.

I use Python for everything I do (it does it all like few other languages/platforms do), and have dabbled in C and Java.
Unless I had a career path I was interested in that involved C++ (games, more hardcore apps like Photoshop... not my cup of tea to tackle), Java (everything, TONS of jobs), or C# (everything, tons of jobs)..
if you don't have a specific company in mind, or goal in mind, stick with Python. It's both the best learning tool and desirable resume material whether you're a programmer, systems guy, or artist (GIMP, Blender ect).

If you insist on messing with pointers and managing memory for no reason other than learning how much of a pain in the ass it is, I'd suggest C++ and Python. C is still the standard on Linux though. And Python/C work together very well. You can program a limited subset of C in Python, it's called Cython. Something Ruby doesn't offer.

I wouldn't learn C# because it's Windows-specific (at least .Net, the cutting edge, default implementation is), but one cool thing about it over Java is that you don't have to run in managed mode, you can access the memory and screw around with pointers like in C++. Java can't do that.

If I snapped my fingers and became a pro at any 1 language out there alongside Python, it would be C++. I have 0 reason and desire to teach myself though.

If I were you I'd stick with Python to learn and use, branch out into what you next find USEFUL (it will likely only pertain to a specific career focus). Whether that's Java, C++, or C# it doesn't matter.
Python covers all the use cases as well as anything, until you need something else.

In 2013, with the ascent of the mobile and web era- I like the idea of one very high level language (Python) and one lower level (C++). Those are my choices. I prefer to skip the stuff in the middle (Java, C#) if you don't know them already or have a job interest involving them.
Oh, and one of the biggest geek news hits of 2012, RaspberryPi, uses Python as it's native language.
 
Last edited:

Cogman

Lifer
Sep 19, 2000
10,277
125
106
I wouldn't learn C# because it's Windows-specific (at least .Net, the cutting edge, default implementation is), but one cool thing about it over Java is that you don't have to run in managed mode, you can access the memory and screw around with pointers like in C++. Java can't do that.

Currently, Mono is at the same place as Microsoft's CLR. Sure in the future the .Net framework will likely implement things first, however, mono has really done a good job at keeping up.

Don't get me wrong, mono is slower than the CLR. However, that generally doesn't matter all that much. (It isn't THAT much slower).
 

Ken g6

Programming Moderator, Elite Member
Moderator
Dec 11, 1999
16,250
3,845
75
C++. Does everything that C and Java can do, and that's pretty much everything.

Not entirely correct. For one thing, C++ doesn't support reflection. You can't run C++ on an Android phone, that I know of, either.
 

Markbnj

Elite Member <br>Moderator Emeritus
Moderator
Sep 16, 2005
15,682
13
81
www.markbetz.net
If a young person asked me today to recommend a language to learn, unless they had expressed an intent to get into one of a few specialized areas there's no way I would recommend C++. It was a great language in its time, but from my perspective the evolutionary trends in the industry are clear: higher level managed languages like Java, C#, Python, and Ruby are the future, with scripting languages for glue and the various display frameworks sitting on top. If you really want to learn a low level unmanaged language then at least there's some good reasons to learn Objective-C (which is just C, anyway).

Unless you're doing game development, systems development, hardcore engineering or scientific programming, embedded systems, etc., C++ doesn't have that many applications anymore. I absolutely adored the language when it was my daily tool twenty years ago, but I don't go back to it anymore unless I really have to. A recent example was some XMPP stuff, but those examples are getting rarer as time passes.
 

Obsoleet

Platinum Member
Oct 2, 2007
2,181
1
0
If a young person asked me today to recommend a language to learn, unless they had expressed an intent to get into one of a few specialized areas there's no way I would recommend C++. It was a great language in its time, but from my perspective the evolutionary trends in the industry are clear: higher level managed languages like Java, C#, Python, and Ruby are the future, with scripting languages for glue and the various display frameworks sitting on top. If you really want to learn a low level unmanaged language then at least there's some good reasons to learn Objective-C (which is just C, anyway).

Unless you're doing game development, systems development, hardcore engineering or scientific programming, embedded systems, etc., C++ doesn't have that many applications anymore. I absolutely adored the language when it was my daily tool twenty years ago, but I don't go back to it anymore unless I really have to. A recent example was some XMPP stuff, but those examples are getting rarer as time passes.

I'd contend things are going BACK to native code from 20+ years ago (C/C++). With the highest level scripting languages accompanying it as both glue and used where they can be.

The rise of mobile means that if a 16KB chip can be used instead of a 32KB, and your skills can make that happen in a low level language, you're going to make a big impact on the $bottom line$. It's true that hardware is overpowered in PCs, but not every device is, and profits will always come into play. While embedded is not the job for everyone, it's one of the reasons for the return of C(++) in recent years.
Not that native code is limited to embedded programming.
There's Google's NativeClient for Chrome, Golang (compiles to native code, no VM), MS jumped on C++11 pretty quickly. Checkout MS's 'GoingNative' series http://channel9.msdn.com/Shows/C9-GoingNative.
Or this post 15 hours ago. http://channel9.msdn.com/posts/C-and-Beyond-2012-Panel-Convincing-your-Colleagues
I'm curious why MS is promoting anything called "C++ and beyond, convincing your colleagues"?? Didn't we just GET DONE convincing our colleagues to jump on the .Net bandwagon?

And it's true Java/C# will continue to dominate the boring, sludge that is the corporate market (due to inertia), I prefer to go as high level as possible, to maximize programmer time. Higher up the food chain is Ruby and Python (personally, my money is on Python). Not to mention, I'm not too keen on corporate sponsored tech from Oracle (build a successful business on Java and get sued like Google did) and MS (really, no one needs examples here).



Typically, you ever have a asinine amount of processing power and memory, or you have far too little. That's the way it seems to be going. You either have a server or local machine with 4+ cores and 8GB+ of ram (on the lowend), or you're developing for an iPad.

That's why I recommend an interpreted language + low level.
Versus the former trend of some virtual machine that's been ported everywhere. With Python you have a widely ported interpreter, and if you know C or C++ you have native code at your disposal.

OR, better yet IMHO, if you use Python- you have Python and Cython. Python where you can, C(ython) where you need it. Pretty much my preferred solution. And we'll never get rid of native code nor very high level code until something is widely adopted that is similar to Golang (best of both worlds). I don't like things like the JVM, people are hot on Scala, Clojure and other JVM based languages. I'm hot on native code, and would hop on the Golang bandwagon before Scala anyday.

Regarding Objective C, it does have a garbage collector, for OSX, but not for iOS (back to our, far too little resources on mobile meme I mentioned before).
For vendor-locked code, ObjC is the winner over all other OS-specific code (pretty much the only other competitor for that grand title is C# on .Net). While I would also endorse ObjectiveC, I'm not sure it's not more the flavor of the decade (which is fine, if you like making money like most of us). C++ is universal, never went away, and like C might not ever go away as a 1st class citizen (aren't Windows7 drivers still written in C?). Java and C# will continue to lose relevance outside of the corporate world, if they haven't already.
 
Last edited:

Obsoleet

Platinum Member
Oct 2, 2007
2,181
1
0
Currently, Mono is at the same place as Microsoft's CLR. Sure in the future the .Net framework will likely implement things first, however, mono has really done a good job at keeping up.

Don't get me wrong, mono is slower than the CLR. However, that generally doesn't matter all that much. (It isn't THAT much slower).

That's good news, and glad to hear it. .Net isn't that fast either. I like Mono (no sarc) and I keep MonoDev installed for occasional use (usually just recompiling small changes to open source C# programs that I mess with).
It's the closet to .Net that I ever get. :) While I'm a believer that the best way on C# is to use MS's stuff.. If I were a seasoned C# developer (with no MSDN account for free VS updates), I'd just migrate to Mono and be done with it. I refuse to pay $500 to develop on VS or use their cutdown Express versions. There's PLENTY of tech out there just as or more exciting to use for free, MS can stuff it.
 
Last edited:

Markbnj

Elite Member <br>Moderator Emeritus
Moderator
Sep 16, 2005
15,682
13
81
www.markbetz.net
Typically, you ever have a asinine amount of processing power and memory, or you have far too little. That's the way it seems to be going. You either have a server or local machine with 4+ cores and 8GB+ of ram (on the lowend), or you're developing for an iPad.

My new S3 has a quad core and 16GB of ram :). I tend to think current mobile limitations are just temporary. We can expect the devices to follow the same curve. And as for "promoting C++ and beyond" I didn't watch that whole video, but I think they are primarily talking about language features. Managed C++ has been the red-headed stepchild of .NET for a long time now.
 

Obsoleet

Platinum Member
Oct 2, 2007
2,181
1
0
My new S3 has a quad core and 16GB of ram :). I tend to think current mobile limitations are just temporary. We can expect the devices to follow the same curve. And as for "promoting C++ and beyond" I didn't watch that whole video, but I think they are primarily talking about language features. Managed C++ has been the red-headed stepchild of .NET for a long time now.

I'm talking about the guy who writes the software for the Nook, or one of the many microcontrollers in such a device, or the firmware for the S3 I suppose. Not the guy who writes a sloppy app placed on Google Play that consumes way too much of your 16MB of RAM.

Samsung doesn't care about that, that's someone else's problem.
What they care about is during the design process, using a 2MB ROM vs 512KB ROM. We all know a company isn't going to be generous on non-user facing memory that isn't a selling point.. just because some guy/team can't program efficiently or in native code.

I know if I were making a couple million devices, I'd be interested in making sure the entire design and BOM were as small as possible so my profits were maximized.

Maybe that's not what they're doing :)
 

Markbnj

Elite Member <br>Moderator Emeritus
Moderator
Sep 16, 2005
15,682
13
81
www.markbetz.net
I'm talking about the guy who writes the software for the Nook, or one of the many microcontrollers in such a device, or the firmware for the S3 I suppose. Not the guy who writes a sloppy app placed on Google Play that consumes way too much of your 16MB of RAM.

Samsung doesn't care about that, that's someone else's problem.
What they care about is during the design process, using a 2MB ROM vs 512KB ROM. We all know a company isn't going to be generous on non-user facing memory that isn't a selling point.. just because some guy/team can't program efficiently or in native code.

I know if I were making a couple million devices, I'd be interested in making sure the entire design and BOM were as small as possible so my profits were maximized.

Maybe that's not what they're doing :)

I guess you're right. Perhaps I should freshen up my assembler skills. Nothing gets your logic into fewer bytes than good, hand-optimized assembler.
 

Obsoleet

Platinum Member
Oct 2, 2007
2,181
1
0
Ok that made me laugh but still, mobile devices ARE more and more popular while the desktop/laptop PC is waning in popularity (amazingly enough, as I prefer choice).
I'm not sure it has to be assembler, pretty much every OS and driver is written in C.

I still find Python does everything I need and more, so I stand by the Python + Python suggestion. I don't really have a need or desire to put in effort to learn anything lower level. Good idea for a learning experience. If I did, I'd probably go with Mark's suggestion and learn ObjectiveC. I think I'd find the most use out of that, and most of us, but doesn't work for the OP.
 
Last edited:

Obsoleet

Platinum Member
Oct 2, 2007
2,181
1
0
Interesting perspective on C++ by Linus http://harmful.cat-v.org/software/c++/linus just doing some reading today and came across that. Linus is out of my league, but sounds like he'd probably recommend regular old C and <insert garbage collected language here>.

Another quote from Linus on C++, he's basically saying to not screw with it and just go to something with memory management and tighter integration with your OS. Use either very low level (C) or high level (Python, C#, Java).
http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57960

'And if you want a fancier language, C++ is absolutely the worst one to
choose. If you want real high-level, pick one that has true high-level
features like garbage collection or a good system integration, rather than
something that lacks both the sparseness and straightforwardness of C,
*and* doesn't even have the high-level bindings to important concepts. '
 

Markbnj

Elite Member <br>Moderator Emeritus
Moderator
Sep 16, 2005
15,682
13
81
www.markbetz.net
'And if you want a fancier language, C++ is absolutely the worst one to
choose. If you want real high-level, pick one that has true high-level
features like garbage collection or a good system integration, rather than
something that lacks both the sparseness and straightforwardness of C,
*and* doesn't even have the high-level bindings to important concepts. '

He's nothing if not opinionated. I don't really agree. I always thought of C++ as a better C. It adds a lot of support for modularization, decoupling, and reuse without adding much overhead or restricting C's low-level close-to-the-machine semantics.
 

Cerb

Elite Member
Aug 26, 2000
17,484
33
86
Meanwhile, 50 years from now, people will still be having the same arguments, just with better dynamic languages. There's a fundamental trade-off between control over machine resources, and ease of coding solutions to difficult problems. Both sides will get closer to the middle, but without some major mathematical breakthroughs, there won't be one language to rule them all.
 

mv2devnull

Golden Member
Apr 13, 2010
1,498
144
106
Furthermore, if you did form your opinion about a language 20 years ago, you might not have been looking at the same beast that is around today. Languages and compilers can change. C++ in particular has now complex ways to fail that were not even imagined back then.

Linus has a point though; the "total control" requires that You Know What You are Doing, while the "ease of use" should do all the hand-holding for you automatically and correctly. C++ is somewhere in the middle.
 

Obsoleet

Platinum Member
Oct 2, 2007
2,181
1
0
There's no 1 language to rule them all, but from what I've seen Golang comes the closest, if it were more popular and more libraries (though the stdlib alone is robust).

The OP might want to look into Golang for his 'programming' language. While I don't think anything will ever replace C completely in drivers or embedded applications, Golang solves a lot of modern problems with C++ and many other compiled languages. Not only for the compilation time, but concurrency/multithreading/async stuff that I don't know much about 1st hand.
But it does appear to solve those issues without complexity (Scala).

Python and Golang might be a pretty strong pair. While avoiding going back to the days of yore with C/C++/ObjC. If Go were more popular than it is, I'd say it's one, if not the only language that I could wholesale replace Python with.
But having other users, search results, and lots of FOSS code available is worth a lot to me.

I'm taking the wait and see approach with Go, Scala, Erlang, Clojure, Haskell.. whatever else is out there that's 'advanced', and taking a safe bet with my time and effort with Python.

If I were to go beyond Python, it'd probably be C, Go or maybe C# (if Win8 wasn't the apparent new standard for the Windows desktop, which might be the reason for my first Macbook purchase ever).
 
Last edited:

Staples

Diamond Member
Oct 28, 2001
4,952
119
106
I have taken a look at many of them recently and my top two would be Python and C#.
 

Staples

Diamond Member
Oct 28, 2001
4,952
119
106
Remember, if you're not learning it the hard way, you're doing it wrong. :p

It may be beneficial to start with C regardless of what you actually want to use in the end.

I actually did their Python tutorials but I have to admit, I like my O'Reilly book better, that website has you go do a lot of independent research with only saying do a search for x y and z and not really giving you links to what it would like you to read.
 

Obsoleet

Platinum Member
Oct 2, 2007
2,181
1
0
I also did the Python tutorials from that site, and he does ask you go learn some on your own, but you'll end up doing this anyway. It's the best way to learn 'the hard way'.
He doesn't confuse people with IDE features, detailed explanations on how things work or why they are this way, he doesn't insist you understand pointers or that 'a real programmer needs to know this history or CS theory' kind of soapbox rhetorical nonsense. And if anyone is qualified to talk down other programmers, it's the author.

The way I approached it, is that I did the lessons, and the lookup parts I either did briefly, or did later on as I started on a project. He gets you off the ground with appropriate hand holding, but I did my own projects that I had in mind for Python, rather than use web.py for the game. I went from someone who failed in teaching himself Java, to someone making real applications in Python and it's a lot more FUN than Java, and cheaper than C# while being just as versatile as either (possibly moreso if scripting is important to you). I'm pretty thankful for the role of that book, IMO his selflessness has solidified Zed Shaw as a legend, maybe not quite on the world changing godlike level of RMS or Linus, but he's definitely reached demigod status.

The key/brilliance to LPTHW is that he gets you to do STEP 1, typing and running working code with ease.