You are not logged in.
Yes, I know these kinds of questions have been asked a million times, but it just seems no matter how much research I do, there are great arguments for every side you can think of. I know the standard/best practice would be to just 'try them all, and see which one you like', but I really would rather have a better idea before I dedicate a bunch of time to this.
First off, I don't have any real programming experience. I've dabbled a bit here and there, but nothing for any length of time. The languages I'm most interested in at the moment, seem to be haskell, go, and either rails or django.
Rails and Django are obviously for web development purposes.. I don't know, python's syntax seems kind of more familiar to me, but it seems like the rails community is much larger. Are there any other options I'm not aware of in this field? Anyone have any experience with Lift?
I really do like the look of haskell.. does anyone know what it's normally used for? what it's not good at?
Go seems cool too.. so is it basically a c++ replacement? what would it be most useful for? It actually seemed to get pretty crap results in this programming language speed comparison I found.. do things like this even matter? to what extent?
I've heard alot that there isn't one all-exclusive language.. you use each what it's good for. I'm just trying to get a better idea for what these are.
Last edited by Stythys (2010-09-01 00:09:31)
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you."
-- Bregol
Offline
https://bbs.archlinux.org/viewtopic.php?id=96398
https://bbs.archlinux.org/viewtopic.php?id=95431
xmonad is written in haskell.
go is for systems stuff.
Offline
I wouldn't say Haskell is 'normally' used for anything in particular. Check out Hackage, you can see a vast and constantly growing set of libraries covering pretty much every area of programming. The way Haskell allows you to separate pure functional code from side-effect generating code somehow makes more sense to me than any of the more popular programming languages. If you combine that with it's in-depth static type system you get a really powerful language that allows you to reason very clearly about the potential behavior of any Haskell code. My only complaint is that lazy evaluation sometimes confuses me, because once you are deep into a chain of functions it can sometimes be hard to wrap your brain around what is actually going on.
Here are some resources if you do go with Haskell...
http://learnyouahaskell.com/
http://book.realworldhaskell.org/read/
http://www.haskell.org/tutorial/
Offline
Personally I doubt the rails community is larger than Python's, but at any rate, IMHO I would say go for Python: powerful, easy to learn, well supported, lots of documentation, great website, support forums, etc.
Philosophy is looking for a black cat in a dark room. Metaphysics is looking for a black cat in a dark room that isn't there. Religion is looking for a black cat in a dark room that isn't there and shouting "I found it!". Science is looking for a black cat in a dark room with a flashlight.
Offline
Personally I doubt the rails community is larger than Python's, but at any rate, IMHO I would say go for Python: powerful, easy to learn, well supported, lots of documentation, great website, support forums, etc.
On that note, try Perl for the very same reasons.
If you're reading this; you're awesome.
Offline
I do think you do good choosing Haskell. I'm just not that sure of Go, though. I don't see the point of this language unless you happen to be developing for Google systems, for which the language is tailored. Linux already has its system language and that isn't going to change in the next 20 years. The 'cool factor' you mention is only going to cloud your judgment. It's mostly monkey-see-monkey-do hearsay spread by people who didn't even laid their eyes on one line of Go code, much less programmed anything meaningful with it. There's nothing cool about programming languages. Much less programming languages aimed at systems development. Really, there isn't. The thing you'll learn more about the language you love the most, is to hate it. You can quote me on that.
What you should definitely aim for is Perl and Python. You should gain at least passable knowledge in these two (I'd say especially Perl) because of their ubiquity in Linux systems. They are really a little everywhere.
Haskel, perl and python should have you entertained for life (and even get you a job). But I honestly think you should learn C too. It's not as difficult as people sometimes make it and you'll be equipped with a powerful programming tool capable of handling basically any programming requirements in Linux. I would also advise C++ (my personal favorite). But that's as far as I'm willing to go about that issue on a linux forum.
I probably made this post longer than it should only because I lack the time to make it shorter.
- Paraphrased from Blaise Pascal
Offline
Imo, if you haven't learned a functional programming language yet, do so.
It will open your eyes to a whole new way of thinking about problems.
Offline
I totally agree with marfig, and I also forgot something in my last post;
If you decide on Perl or Python..
I suggest you read little more about Perl's way of doing it and Pythons way of doing it and decide on which one you like better. I say this because, while Perl and Python may share a similar syntax, the results may be what you want.
I personally program in Perl because, well, I have my reasons (and they're not good ones so I'm not posting them).
And if all else fails, try C/C++
If you're reading this; you're awesome.
Offline
alright, so what I've gotten so far.
C- good to learn for general systems programming (also b/c it's extremely widespread.)
Go- I've head good things and bad things about it.. I'll have to try it out for myself. Seems to be good for network apps.
Lua- nice if you need good support for extensibility with other languages
Haskell- general awesomeness
Perl- good to know because it's also widespread?
For web development I'm actually looking to try scala/lift first.. before I check out python or ruby. Any opinions on that? Although it's community isn't as large I hear it performs better.
Last edited by Stythys (2010-09-01 03:07:29)
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you."
-- Bregol
Offline
scala is one of the newer programming languages which combines OO and functional paradigms. I like it, because it works well with Java bytecode and therefore I can use it in my applications which use Java.
I like how the constructs are much more concise than in Java. Lot less fluff, lot more work.
I actually started out learning Ruby, and Scala was just beginning to take ground. But, since I work only in Java/JEE, I wasn't able to apply the readings to any projects. With scala though, I can use it in my production apps and keep learning more about it since I am hands on with it.
There's no such thing as a stupid question, but there sure are a lot of inquisitive idiots !
Offline
Indeed! Scala is great. In my opinion it merges very well OO and functional programming. Not many dared to try and lived to tell that tale. And if that wasn't enough, it presents us with what is in my opinion the best concurrency model implementation of them all; the Actor model. Die threads! Die!
Scala puts you closer to Erlang. And makes a good platform for later learning all about it. Erlang provides a more solid low latency concurrency programming (from which scala got its inspiration). With both under your belt, you'll firmly plant your feet in a very specific development niche that has no real competition, Stythys.
I totally subscribe to Inxsible post.
I suggest you keep your course. But when you have the time (and you will) and feel comfortable enough with your programming knowledge, give scala and erlang a very good look.
Last edited by marfig (2010-09-01 03:32:09)
I probably made this post longer than it should only because I lack the time to make it shorter.
- Paraphrased from Blaise Pascal
Offline
For web development I'm actually looking to try scala/lift first.. before I check out python or ruby. Any opinions on that? Although it's community isn't as large I hear it performs better.
I personally haven't heard of scala or lift... but just a thought; maybe you should also give PHP a gander?
For my web-development purposes I usually try code as much PHP as I can before I make gratitious use of PHP's "$perl = new Perl()" class .
EDIT: grammer.
Last edited by Ari'osika (2010-10-13 20:01:06)
If you're reading this; you're awesome.
Offline
I don't know... php just has this archaic feel to it =P
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you."
-- Bregol
Offline
Hahaha, true and then you'd have to deal with the whole LAMP thing if you don't already have a server.
If you're reading this; you're awesome.
Offline
Lift/scala is nice, it can use existing java frame work, but it's still jvm.
I think I would personally prefer gwt/closure/django/flask/codeigniter for web development. Go, c# for general purpose. Python/lua for a quick prototype.
C++ replacement doesn't really exist yet.
Last edited by yejun (2010-09-01 05:15:53)
Offline
I think that based on pure usage I think knowing C/C++, Java, Python and Perl is most useful. Then the question is what kind of programming you are planning on doing.
It also comes down to personal choice. I'm really into Ruby these days, and most of my work is in C++ which is what I think I've programmed far more in than anything else. I also regularly try to learn more programming languages as a way to just generally improve programming skills. There are for example a lot of things to be learned from coding in SmallTalk.
If you want something really fun/interesting that is also quite a challenge I would recommend trying out x86 assembly.
Last edited by Zeist (2010-09-01 05:59:52)
I haven't lost my mind; I have a tape back-up somewhere.
Twitter
Offline
If you don't have much real world programming experience then I think you'd be better off looking at Python or Ruby or something like that. I'm massively into Haskell at the moment but I do find it to be very challenging at times, even though I have formal training in computer science and professional experience as a software engineer. I have found Scala to be similarly challenging and I'm not sure I would recommend that until you have some more experience.
Ruby and Python are great because even an inexperienced beginner programmer can pick them up and start writing some code that does some cool stuff. And just because they're fun and easy to learn, but that doesn't make them toy languages: real professionals use them every day in the real world to create useful software. You can be off creating exciting websites without having to spend hours scratching your head about covariance vs. contravariance or monads or whatever. You can save that stuff for later, when you're looking to broaden your horizons some more.
Well that's just my opinion, I'm sure others will disagree, but maybe it will help you anyway.
Offline
Maybe you will have a look at Vala. I switched from pure C development to Vala because her excelent integration of modern programming paradigms and simpleness. You can use every Library developed in C which opens many development fields. The only disadvantage - you cannot use Qt or any other toolkit. At the moment Vala only provide bindings for GTK.
Offline
Vala and Genie do look pretty interesting -^^-. Will have to check them out.
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you."
-- Bregol
Offline
It is hard getting a good perspective on languages because some get so much "buzz" because they are something new and fresh. They really aren't as widespread and heavily used as one may think. I would highly suggest picking one of the big languages and then later, if you want to play with other ones you can always explore more.
The biggest language in use is probably C or C++. These are powerhouses that have been used to write everything from code to drive a microwave oven to operating systems. There is a lot of syntax in other languages based off of C due to its widespread use. All that being said it is pretty old, and you can certainly shoot yourself in the foot with it. There are better 'beginner' languages.
Perl, Python, and Ruby are all scripting languages, which means you don't compile them, but they have to be run through an interpreter. It basically means that anywhere you want to run these they will have to have perl, python, or ruby installed as well. Perl is the granddaddy here, and is quite fast and pretty powerful.. the problem is it is a little archaic and hard to comprehend at times. This can be such a problem that companies avoid Perl because code maintainability is a real issue. Python and Ruby are relatively new. Both are very popular, though Python maybe a little more so. Python is probably regarded as a little more stable, while Ruby is a little more cutting edge, IMHO. Both are very funy to program in and would make great starting places. Their popularity also means that there are LOTS of libraries for both (Perl too) which let you write scripts to do almost anything with very little effort, if you find the right library. I would choose Python or Ruby in your situation.
There are some others that make sense, like Java. I have no experience in Java, and I think it would be a little less beginner-friendly from what I've seen, but it is what android apps are written in, so that could be a neat thing to keep your interest.
Haskell, Lua, etc are all interesting but much less mainstream. This means it'll be harder to find tutorials, docs, libraries, etc. Not impossible, but a little less to choose from. I would wait till you're familiar programming before moving on to one of these. Just my humble opinion.
Most of all, pick something that you can find a use for. If you choose a language, and have no real "projects" to use it on, it will not stick as well. If you pick something that you can start little projects for and accomplish things it will boost your confidence, and provide good motivation to learn even more. Little projects like sorting your music, uploading webpages, finding duplicate files in directories, etc .. these are things that Perl/Python/Ruby excel in, and one reason I recommended them.
Most of all try to have fun.
Offline
why would perl/python/ruby excel at things like that over haskell/lua? other than more documentation.
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you."
-- Bregol
Offline
Perl, python and ruby have more libraries. So you don't have start from scratch. Lua doesn't even have official oop support yet.
Last edited by yejun (2010-09-02 17:10:13)
Offline
couldn't one look at that in a positive light in regards to learning more by having to code more?
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you."
-- Bregol
Offline
Then why not just use c++?
Offline
'cause? I don't want to? =P
Scala looks like what I want to focus on atm. Gives me access to the lift web framework, has a nice mix of imperative and functional, integrates seamlessly with Java (nice for things like android dev.?), etc.
[home page] -- [code / configs]
"Once you go Arch, you must remain there for life or else Allan will track you down and break you."
-- Bregol
Offline