What Programming language to learn Next?



  • Hi Everyone,

    I have been working with C# for a very long time and looking for a change at the moment.

    I am looking to learn a programming language primarily for personal / afterwork use.This means playing with it on my spare time,Hobby projects,little scripts etc.

    I would like to invest my time in something that ranks high on the "Bang for the Buck" scale in terms of being the most fun and being as different from c# as possible .

    1.I have dabbled with Python,Ruby,Haskell and Go for a while.
    So I feel pretty much the same towards all of these.

    2.I would like to actually use any of the new languages I learn for writing non trivial,user facing applications if possible.( wanting something fun to use outranks being able to do this )

    3.I do not want to invest in languages that are pretty much outdated meaning FORTRAN,COBOL if you know what I mean.

    I've been reading too much about what languages to learn, the pros/cons of each language and am just confused at the moment.

    What new languages that you have picked up for personal reasons have been the most fun to use and what would you recommend, taking the things I've said into account?

    P.S Please feel free to refer me to any other threads where similar discussions have already happened.

    Thank you.



  • INTERCAL or C++



  • I have never heard about INTERCAL till you mentioned it .

    Any reason as to why INTERCAL or C++ ?



  • INTERCAL mostly as shock value and softening you up for C++, I really like C++.



  • Try dabbling in ansi C for a while and see how you like it. I wouldn't call it fun but it would be different.



  • Java :trolleybus:



  • After a very brief look at the INTERCAL site,It looks like something that was created with pure WTFery as its main goal .



  • I ve already used a lot of C#. In what way would learning Java be more fun or different.It would be helpful if you could elaborate some more .



  • @stillwater said:

    It looks like something that was created with pure WTFery as its main goal .

    @Yolobert said:

    INTERCAL mostly as shock value

    Yes?



  • So I would actually be trolling myself on a few levels If i learnt INTERCAL. Nice.



  • Javascript would probably be the most useful one. ANSI C can be fun, but you should probably buy yourself an Arduino or something like that, since by now it's the one thing it's still useful for.



  • Why limit yourself? I've tried for the past ten years to learn a new language or framework every year by building different stuff. Here's my list:

    1. C
    2. PHP
    3. Java
    4. Perl
    5. Python
    6. C++
    7. ObjectiveC
    8. JavaFX / Android

    And all this time trying to get my head around others like JavaScript, Brightscript, Go, CoffeScript, Lisp, LUA and Bash.

    2016 will be the year of Rust... Unless I get bored or discard it as stupid (like what happened with Go and CoffeScript)



  • I've heard people say Every decent programmer should know C. What is the deal with that ?



  • Ah yes.

    Do you think it is still worth investing time in Python ? Also what was it about Go that got you bored or made you feel it was stupid ?



  • @stillwater said:

    What is the deal with that ?

    Elitism, mostly. C is rather close to the metal, so learning C should in theory give you a better understanding of how the underlying hardware works... though in practice it just means a lot of manual dabbling with things that the computer should handle for you.



  • @Maciejasjmj said:

    Javascript would probably be the most useful one. ANSI C can be fun, but you should probably buy yourself an Arduino or something like that, since by now it's the one thing it's still useful for.
    Linux kernel development?



  • @DogsB said:

    Linux kernel development?

    That's stretching the definition of "fun".



  • c is good for understanding how things work under the hood, because there is 0 magic in it, but its not fun

    I would recommend Python for OP. High level as c#, but very different and runs in some devices c# doesnt. Seems like a good second language for a c# coder.

    javascript is a given for web dev, I assume he already deals with it.



  • I think we've forgotten about fun when we start with manual memory management.



  • @DogsB said:

    Linux kernel development?

    I am not looking for anything that hardcore at this moment.


  • :belt_onion:

    @stillwater said:

    Do you think it is still worth investing time in Python ?

    If you want to go for user-facing applications running in production, no. I think it could work well for scripts, prototyping and devops stuff like Ansible, but then you're still working somewhere in the background.

    If you want something radically different, try Clojure. Yes, it's a LISP-dialect, but at least you can call Java stuff. It should hopefully be still modern enough that you can find a community where you can ask for help without getting the usual LISP neckbeard stuff.

    And once you have gone through the pain to get a Java Runtime installed you could also look at Scala, or even the Play framework built on top of it.



  • @stillwater said:

    what was it about Go

    I stoped reading about go when I saw how they treat errors. I'm not going back from exceptions in a new language.



  • @stillwater said:

    In what way would learning Java be more fun or different.

    It wasn't a serious suggestion ;)



  • Sure, you can build cool and fast things with Python and get yourself a totally different experience from C# land. Just stay away from multi threading code.

    And Go... Well, it doesn't really bring anything new and lots of things are not there or fixes anything about programming languages which is broken. Anyway, that was my experience at the time and I was kind of pissed at Google for closing Reader.


  • :belt_onion:

    @fbmac said:

    @stillwater said:
    what was it about Go

    I stoped reading about go when I saw how they treat errors. I'm not going back from exceptions in a new language.

    Meh, that depends on who you're asking - writing good exception-handling code is hard.

    What upsets me the most is that they chose to implement package fetching into the main runtime (see go get), except that by default it fetches the latest version of everything. Because people only make stable APIs, right?



  • @fbmac said:

    javascript is a given for web dev, I assume he already deals with it

    I am not a Web dev and I dont deal with Javascript. I've done the basic tutorials but havent gone further.

    @fbmac said:

    I would recommend Python for OP. High level as c#, but very different and runs in some devices c# doesnt. Seems like a good second language for a c# coder

    I was very seriously looking at going down this road with all I've got but If there is something better than python ( In terms of doing the same things python can do in a better way, or doing more stuff than python can ) ,then I don't think there is any point in learning python.Also I am in the dark about if there is something out there that is better than Python.

    P.S I hate Ruby. Absolutely do not wanna learn that.



    • New language
    • Versatile
    • Want to do user-facing GUI stuff

    I suggest:

    • javascript ES6
      That's (basically) a new, modern feeling language. You can use it on the frontend using cross-compiler, which is pain the ass to set up, but nice once you get it going.

    • node.js
      Server side programming using ES6 out of the box.

    • GitHub Electron
      Write cross-platform desktop apps using node + webkit rendering engine. Microsoft used it for their new VSCode editor. Instead of their own .NET based frameworks. Tells you all you need to know about the future of Windows programming.



  • @JBert said:

    And once you have gone through the pain to get a Java Runtime installed you could also look at Scala, or even the Play framework built on top of it.

    I was reading this and quite a few people seem very negative.



  • it is a discussed issue, but ai have a strong opinion on it, and the other side arguments seems pretty weak for me

    Writing code just to take an error code from something you called and return it for who called you is dumb after checked exceptions were invented, and makes code less readable. I have a lot of ugly c code here as proof.


  • :belt_onion:

    @stillwater said:

    @JBert said:
    And once you have gone through the pain to get a Java Runtime installed you could also look at Scala, or even the Play framework built on top of it.

    I was reading this and quite a few people seem very negative.

    People at WTDWTF can be very negative about javascript as well. That by itself doesn't mean it doesn't have its uses. The Y-combinator thread you linked actually has more than a few people in support as well.

    In the end it's your choice though, I'm not telling you how to spend your time.



  • Fair enough.



  • people should comment about how practical these languages are wihout an ide and how is the tooling for these languages

    python is quite useable in a common text editor, I use google to discover methods and library syntax for doing things

    c# has awesome code completion that we miss when we're away of visual studio. with mono in linux I felt a bit lost, didnt go all the way to get used to it

    for scala and node I dont expect it to have good code completion on ide or eclipse, is it there? and clojure?


  • area_deu

    @cartman82 said:

    Microsoft used it for their new VSCode editor. Instead of their own .NET based frameworks. Tells you all you need to know about the future of Windows programming.

    Because Microsoft has never used some stupid hype for one single product only to never let you hear anything about it ever again.
    Just sayin.


  • Winner of the 2016 Presidential Election

    I've wanted to try out Ceylon for a while now. It looks awesome, but I don't have time for a side project right now. It's also a bit more sane than Scala, which was previously suggested.

    @stillwater said:

    P.S I hate Ruby. Absolutely do not wanna learn that.

    <3



  • @JBert said:

    In the end it's your choice though, I'm not telling you how to spend your time.
    But I will tut disapprovingly when you choose javascript.


  • Winner of the 2016 Presidential Election

    JavaScript has its quirks (many, many quirks) but it's useful in many places: clientside web, serverside with Node, and it's used as a scripting language all around the place (off the top of my head: Unity game engine, QtQuick for frontend scripting without poking around C++). It has C-ish syntax so it should feel familiar from that standpoint at least. Also, some of the new syntactic sugar and features in ES6 makes it far more pallatable for someone used to object-oriented programming rather than prototype-oriented which was the only option until now (it;s the same thing under the covers, but I find it easier to follow using OOP way).

    Python... I don't like it, but the only objective complaints I can put against it from my limited use of it: docs are a bit lacking in parts, and some of the larger GUI applications written in Python I used seemed to have some weird problem with going all crazy and taking up 100% of CPU after a few hours. This might have changed / might have been poorly written applications. Presonally, I can't stand the syntax, but I'm tempted to learn more of it for my purposes since it's almost certainly installed on every modern Linux system and it sure is less ugly than bash regardless.

    C++... ugh... I have a love-hate relationship with it. I love all the freedom it gives me, but fucking hell can that freedom be annoying at times. Personally, I only use C++ when writing stuff in Qt which abstracts away most of the annoying, almost never "raw".

    I also tried Lua at one point. It's... weird. For some reason I prefer it to Python on a purely aesthetical level even though it's weird as all hell still. But it's kinda underused these days I think. From my understanding it was mostly used for scripting macros and such, but these days this was overtaken by C# and JS. That's what my limited experience tells me, at least.

    So... it's mostly about what you want to do with it, I guess. JS is becoming pretty all-around kind of language. Python is great if you need to script stuff on *NIX systems, and can also be used in place of PHP (and these days, JS) for server-side web development. C++ is cool if you have the patience and want to learn about all the nitty-gritty on a lower level of abstraction, but for serious use I would really recommend something like Qt once you learn the basics (you should understand a big chunk from C# anyway, at least the general concepts) because there might be hair-pulling otherwise.

    Everything else is either domain-specific or either obsolete or experimental at this point, IMHO.


    Filed under: You could always learn PHP...if you like pain...


  • :belt_onion:

    @fbmac said:

    for scala and node I dont expect it to have good code completion on ide or eclipse, is it there?

    Scala IDE is a thing, though I must say I've heard more about the language than the IDE.

    @fbmac said:

    and clojure?

    Weeeelll, the Clojure tools page still lists Emacs. There is an Eclipse-based Clojure IDE but I can't say how complete it is. Clojure isn't such a complicated language so maybe it just works?



  • Note to self: invent object oriented brainfuck.


  • Winner of the 2016 Presidential Election

    @Onyx said:

    JS is becoming pretty all-around kind of language

    Yeah, and that makes me really sad, because it's still a shitty, broken language. I think the only reason it's being used everywhere these days is that most programmers start with web development, so everyone knows it.* Other than that, there's no reason to use a crappy scripting language like JS at all.

    *) Also, since way too many people start with PHP+JS, they might actually think that JS is a nice language, since it's not nearly as fucked up as PHP.


  • Winner of the 2016 Presidential Election

    @asdf said:

    Yeah, and that makes me really sad, because it's still a shitty, broken language. I think the only reason it's being used everywhere these days is that most programmers start with web development, so everyone knows it.

    I'm not a huge fan of that either, but you know, eh, what are you going to do.

    The part that actually pisses me off is when I download an application that's just WebKit in a window... AND IT'S FUCKING RUNNING NODE IN THE BACKGROUND!

    HEY, MORON! You know what Node is? It's v8 compiled as a standalone. You know what WebKit contains? v8! YO DAWG JOKES ARE ONLY FUNNY WHEN THEY ARE NOT REAL!

    @asdf said:

    Also, since way too many people start with PHP+JS, they might actually think that JS is a nice language, since it's not nearly as fucked up as PHP.

    Trust me, there are many, many things that piss me off about both languages, and, believe it or not, JS tends to get higher on the annoyance list many times.



  • Oooh forgot about Threaded INTERCAL where multiple COME FROM referring to the same label creates multiple threads.

    Gives me a warm fuzzy feeling knowing that it exists.



  • C++ is the kind of language that is incredibly deep, with a rich history and many design patterns and good practices that you have to learn. If you are just going to spend a little while learning a language, don't pick C++. There is a reason people say that 80% of C++ programmers each know a different 20% of the language. Don't contribute to that mess - only learn C++ if you really mean it.

    Java, on the other hand, is extremely straightforward - I'd say it's far simpler than C# even. The biggest part of Java is the standard library, because the language is so small and it pretty much sticks to one way of doing things.

    Python is an interesting diversion from the rigidness of other languages - you can pretty much do anything and the compiler doesn't care. Change the type of an object at runtime? No problem. Screw around with private member variables? Sure thing. Try to enforce the type of object given to your function? GTFO.



  • @LB_ said:

    Try to enforce the type of object given to your function? GTFO

    For real ?!?! OMG!



  • Why has nobody mentioned Haskell,F# or Ocaml so far ?


  • Winner of the 2016 Presidential Election

    So you like static typing? Because the slogan of Ceylon, which I suggested above, is literally "Static types that just work" (= static typing that doesn't suck). Also, I'd really love someone to try it out and tell me whether it's worth getting into. :P



  • @asdf said:

    So you like static typing?

    Static typing feels reassuring.

    @asdf said:

    Because the slogan of Ceylon, which I suggested above, is literally "Static types that just work" (= static typing that doesn't suck).

    I looked at ceylon . It looks pretty neat . Looks like a brand new language though. I m unsure about jumping in .

    @asdf said:

    Also, I'd really love someone to try it out and tell me whether it's worth getting into. :stuck_out_tongue:

    Waiting for the same .


  • Winner of the 2016 Presidential Election

    Because nowadays, you have a lot of procedural languages (Rust, Ceylon, ...) that adopted the good stuff (e.g. algebraic data types, higher-order functions, ...) from functional languages, so you can kinda have the best of both worlds without worrying about unreadable folds, bad performance and tail recursion all the time.


  • Winner of the 2016 Presidential Election

    @stillwater said:

    Looks like a brand new language though.

    Yeah, unfortunately they don't market it enough. I'd love to see something like Ceylon replace Java in the long term. And I especially like the type system (intersection and union types). I mean, just look at the observer pattern example from their blog.



  • @Eldelshell said:

    Android

    Android apps and OS are written in native C or Java, right? Or am I misinformed/misinterpreting this?



  • Why is Next capitalized? You mean the Nicholas Cage movie?

    Well, let's see, I guess something that has a good date-time library (need to keep track of how far in the future you are) and something it's easy to do depth-first searches in (need to keep track of all those alternative realities.)


Log in to reply
 

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.