Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm a programmer who's still in his teens. I've been doing some programming for a couple of years now, I started on Ruby, and later switched to Python due to the massive amount of learning resources there. I never really built anything worthwhile with Python, but feel like I learned a fair amount of programming fundamentals going through Zed Shaw's Learn Python The Hard Way.

For the last few months I've been looking over languages to learn, as I feel a lack of interest in Python. In the end I decided I want to learn both C# and Haskell as my next languages. My brother, a software engineer, recommends I don't learn Haskell yet, as he thinks I'll get tripped up with some of the ideas associated with it, such as it being pure. Originally I would've just stuck with learning C#, as I have a few books on it and it's frameworks such as XNA, but Haskell keeps drawing me back to it. I also have a copy of Learn You A Haskell For Great Good! which seems like a great start into Haskell.

I feel like I could learn C# along with Haskell at the same time, although it might take me longer. One of my worries about not learning C# quickly is that with the fast pace of C#/.NET/XNA development that the books I have will be outdated by the time I'm really ready to use them. (I don't have any directly about beginning C#, just C# in Depth, a couple ASP.NET ones and an XNA 4.0 book.) Also note, I have access to Visual Studio Ultimate, which seems like it could be useful in learning how to program while still getting access to Intellisense and other VS features.

Haskell on the other hand seems extremely enticing as I'm really interested in some of the things it's best at, such as algorithms/problems at sites such as Project Euler. The advantages of learning two very different paradigmatic languages at the beginning of my programming career seems very advantageous.

My question is this, would it be better (considering my situation) to learn C# and write some non-trivial programs in it, something I've yet to really do, then attempt to learn Haskell and write some programs in it? Or could I feasibly learn both at the same time and still be fluent in both and be able to write projects in both of them?

Edit: I chose tdammers response as the questions answer for the reason that he recognized both options and gave reasons for why either could work. In some ways I agree with Sayem, that generally it's best to learn just one language and master it. However, I have years before I'll be entering the workforce as a programmer, and since it is one of the things I love most I feel like it wouldn't be much of a burden to take the time to learn both and master both simultaneously. That said I still might chose to focus mainly on one language and learn the other on the side.

Edit 2: I've chosen to learn both C# and Haskell at the same time. I'll be using online resources along with a couple books I have. Below is a list of the resources I'm going to use for each language.

C# -

Haskell -

share|improve this question

migrated from stackoverflow.com Jul 5 '11 at 6:24

This question came from our site for professional and enthusiast programmers.

2  
If you're interested in learning about multiple languages for the purposes of getting a broader perspective of programming, then the book Seven Languages In Seven Weeks may be of interest to you. –  Andrew Brown Jul 5 '11 at 4:17
    
@Andrew Brown: I've looked at that book before I think, but thanks for the reminder. Could be of interest later, but as of now think I'm going to do some kind of path with C# and Haskell. After that learning other languages will probably be open game, so thanks for the suggestion. –  PardonMyRhetoric Jul 5 '11 at 4:56
1  
I can't see why you need to structure it either way - it seems that your interest is such that you eventually WILL learn both languages. Why don't you just start with one, when you feel like doing some hacking in the other, do it. Your question seems more relevant when someone has to force himself over some mental barrier to learn. –  Max Jul 5 '11 at 7:02
1  
Seven Languages in Seven Weeks is definitely a fantastic book, which I was going to suggest had Andrew not already done it. All seven languages it teaches, it covers just enough to give you the essence of the language and its paradigm. Learning multiple paradigms at once helps highlight their similarities and differences, and gives you a broader "toolkit" to work with in the future, which is the ultimate goal of the book, as opposed to rushing you into seven languages for the sake of having seven more languages for your resume. –  UtopiaLtd Jul 5 '11 at 18:39
1  
Hey I am also learning C#, Haskell simultaneously. I finished HeadFirst C# (now studying from C# in Depth) .. with Haskell i am a little behind .. but its okay, i am learning both. I would suggest that you dont worry too much and just follow the flow. Some days you will learn more of one than the other .. thats okay .. –  Ritwik G Jul 6 '11 at 5:14
show 3 more comments

8 Answers

up vote 5 down vote accepted

Either way can work.

If you pick up one language at a time, you'll be able to learn it more in-depth, and you'll produce tangible results earlier, which is a major motivation boost. Learning another language will come easier the more languages you know, so the time spent learning the first language isn't entirely lost for the second; and vv., exposure to a different language will also broaden your mind and make you a better programmer in the first language. Some details may be confusing at first, such as the fact that both languages have a 'class' keyword, but the corresponding concept is not the same (in C#, a class is a type, while in Haskell, a class is a group of types, more like an interface).

However, learning two languages in parallel is also a perfectly viable and interesting path. You'll have a harder time keeping them separated in your head, it'll take you a bit longer to get into that state where thoughts flow directly from your mind into the text editor, but if this method fits the way your mind works, then you'll be able to look at either language from more than one angle, and carry concepts from one language into the other while you learn. The Haskell / C# combination is especially interesting IMO, because Haskell is such an unusual language with its pureness and lazy evaluation, while C# is fairly traditional in its OOP roots, yet borrows a lot from the functional, aspect-oriented and data-driven programming paradigms. Programming in C#, it is easy to forget that OOP is not the only way to solve programming problems, a fact of which Haskell will remind you.

As for the 'emerging language' argument: I don't think you should attach too much value to that. If you're any good, you should be able to become productive in any given programming language (well, except Malbolge and such) within a few weeks max.

share|improve this answer
    
Those are all good points. Considering that I'm in a situation where I have years before I'll be able to write code for my career, I think I can take the time to master both simultaneously. I think learning two very different languages with very different paradigms will benefit me later as a programmer. –  PardonMyRhetoric Jul 5 '11 at 20:07
add comment

Learning multiple languages is good. However, it will be better if you concentrate with one language at a time.

First, learn C#, and learn it really good. Become a master of it because this language is emerging as one of the major languages these days. When you are done with it, then start learning Haskell.

Concentrating on multiple languages at the same time has its advantages and disadvantages. The advantage is that you can compare how things are done in different languages at the same time which will help you to learn them effectively. The disadvantage is that you will have to spend more time to learn the languages than learning them one at a time. Also, mastering a language takes quite a lot of time too.

My suggestion would be to learn C# and become a master of it. After that, start learning Haskell.

P.S.: All of the above are my personal opinions. Things may work out differently for you.

share|improve this answer
1  
Thanks, this is the same advice my brother gave me. I was leaning more to this already as I was writing my question, but I really wanted to see what other people thought about it. I also think it might be harder to switch to C# from Haskell than the opposite. Anyway, thanks for the quick reply. –  PardonMyRhetoric Jul 5 '11 at 4:11
1  
@PardonMyRhetoric: Once you master a language, it isn't that hard to switch to another language. Besides, you should pay more attention to C# because it's being used heavily, and it has so many features that mastering those will take quite a lot of time. After you feel that you know C# now, then try learning Haskell in parallel with C#. It won't cause you much trouble then :-) . –  Sayem Ahmed Jul 5 '11 at 4:14
1  
Ahmed: Agreed. I've also got been talking to a guy about working on a C# open source project, so it's probably better if I master C# so I can start helping on that/working on my own projects. I might still play around with Haskell now and then, but I think for the most part I should invest my time in C# until I've learned it well. –  PardonMyRhetoric Jul 5 '11 at 4:21
5  
By first mastering C# and only then learning Haskell, you might face the problem many programmers face when they try functional programming for the first time after doing only imperative programming, namely feeling completely lost because it's so different from imperative programming. By learning only one way of programming, people somehow shape their mind into thinking "this is what programming is", and this makes difficult to grasp a new paradigm thereafter. By learning both at the same time you may avoid this caveat (I cannot guaranty it though). –  Julien Guertault Jul 5 '11 at 6:41
1  
@Julien Guertault: Learning two different languages at the same time has its own pitfall, too. He will have a difficult time to grasp two different concepts at the same time. If it was C# and Java, then I would have suggested him to learn both at the same time, since they have some concepts in common :-) . –  Sayem Ahmed Jul 5 '11 at 6:44
show 5 more comments

Learn both at the same time! They are very different animals, and given that you already have the basic programming concepts down from Python, the contrasting approaches will give you insights into both new languages.

A unique opportunity which shouldn't be missed, I'd say.

share|improve this answer
1  
Thanks for that suggestion, still kind of borderline because of some of the comments. I feel to some degree I'd benefit from learning one, then go for the other I'd done a project or two in it. But putting an emphasis on C#, and maybe writing certain parts of programs in Haskell to learn it on the side could be just as effective. –  PardonMyRhetoric Jul 5 '11 at 4:47
add comment

Learning programming languages is a long road. It would take a lot of time before you become a true master. IMO best way to learn is to write some small projects just for fun. You could try write a project which will use both languages for different parts.

C9 talks by Erik Meijer could be helpful for you in learning Haskell from C# developer point of view. http://channel9.msdn.com/Shows/Going+Deep/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1

share|improve this answer
1  
Thanks for the suggestion and video. Think I'll be learning C# first, but maybe learn a little Haskell along the way to do certain things like algorithmic programming. Was thinking of maybe writing a tic-tac-toe game with a front-end in C#/WPF and an A.I. in Haskell. The reality of that project might be more difficult, but I like the idea of small projects. –  PardonMyRhetoric Jul 5 '11 at 4:36
add comment

It depends on how you see your route from here. If you plan on shipping stuff, you are better served using C#. To learn Haskell will definitely benefit you as a programmer.

My recommendation is to start out with Haskell as long as it's fun and flowing. Do not think twice about putting the book down and producing something tangible in ruby or c#.

share|improve this answer
2  
As of now I have no real plans to create a commercial product anytime soon, and I have a few years before I go to college or I have the opportunity to get a programming job, so whichever path I chose I have time to go slow. Think I might learn C# first so I can solidify the fundamentals in my mind, then do Haskell for the paradigm change/fun factor, or mainly learn C#, and learn Haskell a little bit on the side. (As in reading and doing the exercises Learn You A Haskell For Great Good and Real World Haskell and maybe a project or two but not much more until I know C# well) –  PardonMyRhetoric Jul 5 '11 at 4:51
add comment

There seems to be a perception that Haskell is a "hard" language that should be learned after you've gotten experience with other languages. I completely disagree. Haskell is only "hard" because it is highly declarative, while most popular languages these days are very imperative (Java, Python, flavors of C).

I would highly recommend learning both Haskell and C#, but I don't really think order matters (learning at the same time is fine, but when push comes to shove you can't read two books at the exact same time; you can interleave them though). Learning each will expand your mind. If Haskell excites you, I'd say start with Haskell. LYAH is a great way to start. Since you're a teen, you really shouldn't worry too much about job training skills, imho. Enjoy the sweetness of hobbyist programming before it gets defiled by "production" code.

The main thing to understand is that Haskell is very different. Whenever you program in Haskell, try to forget everything you know about imperative programming. Or at least most of it. As has been mentioned, Haskell changes your brain and helps you program better. Ruby, Python, and C# all have functional aspects that Haskell will help you understand and enjoy.

share|improve this answer
    
I definitely agree. It seems like certain concepts in Haskell might not be as intuitive as in C# or another language, but I don't think it seems hard. I find it all very intriguing, and am starting to think I should just start learning both languages. –  PardonMyRhetoric Jul 5 '11 at 20:03
add comment

You can try:

share|improve this answer
    
Thanks man, I appreciate the book recommendations. I'm not going to learn F# yet, but I do plan to learn it later on for use with my C# code. I also own C# in Depth 2nd Edition but I'm not really up to the level of C# programming it expects. Is Basic C# an actual book, couldn't find it with a quick Google search. If not any basic C# books you'd recommend? –  PardonMyRhetoric Jul 7 '11 at 6:03
    
@PardonMyRhetoric In 1st, 4th and 5th point, I didn't mention any book. That's your choice. You can search with "best book for beginning __" and you will get many suggestions. But I recommend the 2nd and the 3rd book. –  Gulshan Jul 7 '11 at 11:49
    
Cool, I knew you weren't on the 4th and 5th ones, but Basic C# kind of sounded like a book title. I'll be sure to check out Real World Functional Programming when I decide to learn F# further. –  PardonMyRhetoric Jul 7 '11 at 15:37
add comment

My experiance was the following:

Pascal > Haskell (at uni) > Java (yuk!) > C#

I found the following things helpful about this journey

  1. Pascal as an imperative language made the basics of Java & C# easy to grasp but make learning Haskell more difficult
  2. Learning Java made learning C# pretty easy as they are fairly similar although I find C# far faster to code in.
  3. Learning Haskell gave me good knowledge of higher order programming concepts which changed the way i write algorithms in C#.
  4. There are many many functional concepts common in Haskell which have been sneaked into C#.

You might like to read the following paper by one of the language authors describing the features of Haskell which have been put into C#: It should help you see the commonality in some features (Linq & Lambdas especially)

Confessions of a Used Programming Language Salesman Getting the Masses Hooked on Haskell Erik Meijer http://research.microsoft.com/en-us/um/people/emeijer/Papers/es012-meijer.pdf

David

share|improve this answer
    
Thanks for the link. I'd heard that Microsoft had used Haskell as inspiration for both functional C# features and F#. Good to see an actual Microsoft paper on it. –  PardonMyRhetoric Jul 5 '11 at 19:55
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.