Coffeehouse Thread

29 posts

Forum Read Only

This forum has been made read only by the site admins. No new threads or comments can be added.

A good language to learn after c#

Back to Forum: Coffeehouse
  • User profile image
    Jan​Kratochvil

    Hi Guys,

    I'm currently looking to learn a new programming language. I have a lot of experience with c# and I'd like to expand my horizons. While I expect to keep my "real" coding in c# which is awesome for business apps, I'd like to explore some new languages to learn new problem-solving approaches. For instance, I didn't use LINQ much before Eric Meyer's Functional Programming series here on C9, but when I watched it, it "clicked" and I heavily exploit the lambda expressions since.

    But I'm having a bit of difficulty to decide on the right language to learn. I considered Python, Haskell, F# and other languages. I look for something that is a joy to develop in, it looks extremely clean and forces me to think differently (Apple reference unintentional Smiley ).

    Do you have any tips and experiences learning these or other languages for the aforementioned purposes?

    Thanks for suggestions,

    J. Kratochvil

  • User profile image
    Maddus Mattus

    javascript is very usefull for developing web applications,...

  • User profile image
    Jan​Kratochvil

    @Maddus Mattus: That is definitely true. I know some JS, although I treat it more like a gateway to jQuery Smiley . To be honest, I never enjoyed writing JS. I never got the sense of structure, that I get with c#. Plus, it seems to be very noisy and not pleasing to look upon. I really like the notion of whitespace-sensitivity of Python or c# (and it is something that I didn't find in Ruby, although it is regarded to have a great syntax). Thanks for the answer though.

  • User profile image
    JohnAskew

    I'd become a savant with design patterns if you haven't done so already.

    4 guys from rolla ...

    EDIT: http://en.wikipedia.org/wiki/Design_Patterns

    Gang of 4 design patterns...is this their site? http://c2.com/cgi/wiki?GangOfFour

    At least I remembered the # 4...

  • User profile image
    blowdart

    If you want to force yourself to think different then functional languages would be a good idea. Cloqure is interesting.

  • User profile image
    Dr Herbie

    Or if you want to follow the Object Oriented design philosophy I have been told Smalltalk is the language to go for next (it's on my to-do list).

    Herbie

  • User profile image
    JohnAskew

    @Dr Herbie: Don't forget Eiffel... Smalltalk (was/is?) the IBM preferred OOP for OS2... The US gov't (uses/used?) ADA, which is pure OOP also.

    I'm not the academic type, so I would focus on design patterns and functional language paradigms because they are vocationally beneficial to me today.

    Smalltalk is wonderful. Especially back in 1993 working with OS2...

  • User profile image
    Richard.Hein

    I'd choose Haskell, because functional purity is forced upon you, unlike the other functional languages, including F#.  The fact that you are forced to do everything purely functional in Haskell will help you learn not to create side effects in your C# either, by learning to avoid assignment.

  • User profile image
    spivonious

    Common LISP is definitely a different world from C#. You'll learn to love counting parentheses. Smiley

  • User profile image
    Charles

    You should consider learning a native programming language, too. Modern C++, for example, is essentially a new language compared to C++ of old... D is also quite interesting and would be rather easy to learn coming from C#.

    Functional programming requires that you to think in a non-imperative way. This will challenge your basic assumptions and expand your mind. You can also stretch yourself without leaving C# -> learn Rx. Rx represents a very different approach to event-based, asynchronous programming that will certainly expand your mind.

    F# is a hybrid functional language. It will make it easier for you to dip your feet into the functional world coming from C# and .NET without drowning in conceptual complexity (you're mind is tuned for imperative thinking, to expand it you'll want to go slow at first...).

    Do learn JavaScript. Like it or not, it's going to be a part of your toolbox whether you realize it or not (so, it is and will continue to be both a programming language and an "IL" for the web...).

    As Herb Sutter often says, learn as many languages as you can. As Richard Hein mentioned above, this may actually make you better at programming in your primary language (in certain contexts), but most importantly it will make you a better programmer.

    C

  • User profile image
    Richard.Hein

    @Charles:  C++ is definitely worth learning, especially "again".  Good point about Rx ... you're absolutely right.  Lee Campbell just put out this free online book:  http://www.introtorx.com/ ... for all you C# devs out there who have now mastered LINQ concepts beyond just the DB stuff, Rx is the next step for sure, and looking at Haskell while learning Rx is enlightening.  Check out the section on side effects; it has a great example to illustrate how Rx is used to avoid side effects ... and don't fear the monad! Smiley

     

  • User profile image
    blowdart

    , Charles wrote

    F# is a hybrid functional language. It will make it easier for you to dip your feet into the functional world coming from C# and .NET without drowning in conceptual complexity (you're mind is tuned for imperative thinking, to expand it you'll want to go slow at first...).

    You see this I disagree with. When OOP was new (oh lord, another grey hair) I went from C to C++, and for far too long I kept using C++ in a C style manner. When I was consulting I saw people who went from VB to VB.NET continue to force VB.NET to act like VB. The most successful migrations I saw where when a team abandoned the safety blanket of VB.NET and jumped from VB to C#. The large change encouraged them to think in a .NET way. With functional languages I think a proper break would encourage that too. Sure, the initial curve is steep, but once you're over the hump ...

     

  • User profile image
    fanbaby

    I'd say stay away from Rx, Linq, and Async (I'd say even stay away from C#, if it wasn't too late Smiley). Reasons:

    1. Personal experience: In 2000 we decided to teach VB in a technical school I was working. It seemed a logical step back then, that would enable students to find work fast (after all it was the pre 2000 bust), and the newpapers were filled with wanted ads. The thinking was that VB would be applicable to Office, client-side internet (back then IE had 90% or more of the market so VBScript seemed as alternative to JavaScript), Server (ASP), and desktop (via VB6) and fast to learn if you are a beginner. BTW in the same course we also tought HTML/CSS/JavaScript (we didn't fully understand how to teach the latter, of course). Of these two veins, guess which one gave the best bang for the buck/time spent, and is still relevant today??
    2. Not everything is as shiny as MSFT marketing like you to think. Some things Microsoft markets look very shiny from afar, but upon closer look or having using these they look only skin deep shiny. Personally I remember some database design tools that were included in VB6 that looked just great when described, but upon trying them for something other then a quick demo,  I have found that they weren't  even 100% implemented! Now, I'm not sure this applies to Rx, Aync, Linq or even C#, but I would not rule it out.
    3. It's about the community. Outside of Microsoft, only the mono team is interested in dotnet. No one else is interested in it! For example, one would think that once Microsoft dropped (sorry, evolved) Silverlight, its vocal community would pick up the mono port called moonlight and do something with it. That project is very quiet. No one wants to contribute. Having said that, it seems Ximian is doing something magical with mono with monotouch and monodroid. Check out how many games on the best seller list are made with them. Still the outside community of dotnet seems small to me compared to projects like webkit, node, v8, php, python, ruby, RoR.

    I conclusion chose wisely, remember I chose VB for my students back in 2000 and it was a mistake.

    If you want a language that's fast, functional, cuncurent, terse, and beautiful check out go.

  • User profile image
    Jan​Kratochvil

    @fanbaby: I have to disagree with you. As a dev using MS technologies, I can say that the end-to -end experience is phenomenal. Microsoft has great support for its partner devs. For instance, when I recently had to do some Java, I was perplexed that it has extremely poor documentation, a minimal amount of samples, and the community that produces good content (mainly via blogs) is nearly non-existent, the language itself is stuck in the year 2000, and some of the core libraries are not very intuitive to use.

    When talking about c# and LINQ it is just awesome and the core .NET libraries are in general great to use. And talking about community, I've never seen such great dev content as here on C9, the MSDN Magazine, the countless blogs or day-long free workshops even in small countries.

    For that, Microsoft deserves some slack when it makes tough decisions, like with Silverlight, or whether the menu in VS12 will be all-caps Smiley

    When Steve B. shouts "Developers, Developers, Developers", he means it.

  • User profile image
    wastingtime​withforums

    , fanbaby wrote

    Personal experience: In 2000 we decided to teach VB in a technical school I was working.  The thinking was that VB would be applicable to .. Server (ASP) ..BTW in the same course we also tought HTML/CSS/JavaScript Of these two veins, guess which one gave the best bang for the buck/time spent, and is still relevant today??

    That's quite a ridiculous example, because working with ASP meant (and still means) automatically working with HTML, CSS and Javascript also. In case you haven't noticed, web frameworks are HTML/CSS/JavaScript generators.

    "We teached how to use a specific typewriter and how to write in English.. Guess which of these two is still in use?!"

    Your specific trauma is also not unheard of in FOSS-land. If your school would have teached Perl instead of VB6, you would have the same result (Or worse, I think classic ASP is today more popular then .pl / Perl CGI sites).

    And on the desktop.. at least there way more VB6 applications to maintain than FOSS alternatives of that time like tcl/tk. Imagine if you would have teached that one!

  • User profile image
    Jan​Kratochvil

    @Charles: Great idea about Rx, I'll take a look at it, I know there has been a lot of videos about it on C9, but I never had the time.

    As for the JavaScript, I agree that there is no escaping it, but since I'll be doing it on my free time, it's got to be fun to use it, and I am not sure how many people feel that way.

     On a recent Windows 8 event hosted by Microsoft, there was discussion on this topic, and people who know both WPF and HTML/JS/CSS showed very little interest in writing the apps in the latter. When I talked to some of them afterwards, the prevailing opinion (with which I agree) is, that when you write HTML/JS/CSS it just doesn't fit, because of the "document feel", where for example the layout using CSS poorly expresses your intent. I just never get the "wow, I just wrote some insanely elegant and robust code" feeling, that I have after writing a completely generic and decoupled component.

  • User profile image
    Bass

    I'd recommend Go or Rust.

  • User profile image
    kettch

    , fanbaby wrote

    If you want a language that's fast, functional, cuncurent, terse, and beautiful check out go.

    And what is Google's track record with products? Spew out as many as possible and hope something sticks. How can you tell if this is something that they are going to stay interested in?

Conversation locked

This conversation has been locked by the site admins. No new comments can be made.