Questions along the lines of 'What would happen if I made a program that...' kept popping into my head. I was going to post them here looking for an answer; then I realized I could just write a program that did that thing. I already know C++, Python, and a little html. I am willing to learn a new language from scratch though. Which one do you thing I should do my messing around in?

Python is good for messing around in, quickly knocking up an application that does something. Can't really think of a more suitable high-level language. There's Perl, but its usage seems to be declining and I wouldn't say it's better than Python in many ways.

Honestly, I do most of my messing-around in FreeBasic. Structured enough to allow clean design, unstructured enough to let you do what you like, quick-'n-easy access to a graphics window on both Windows and *nix targets, and it doesn't have friggin' literal whitespace. Just don't go to it for high-performance work or GUI applications.

"'Legacy code' often differs from its suggested alternative by actually working and scaling." - Bjarne Stroustrupwww.commodorejohn.com - in case you were wondering, which you probably weren't.

Python is really good for learning how to program, but my impression is that it is not that great for much else. No one is going to be hired to program in Python. C++, html, and Java are much more likely to be used. I figure that if am going to be messing around, then I might as well train for a job at the same time. You know what I mean?

I actually see a fair number of job postings listing Python as a desired or bonus language, but okay, gotcha. In that case, the hot one these days that you haven't already learned is probably C#. Other .NET languages come up fairly often as well. Or one of the billion JS web frameworks, but I gather you want to mess around for fun, not seek out reasons to slit your wrists.

"'Legacy code' often differs from its suggested alternative by actually working and scaling." - Bjarne Stroustrupwww.commodorejohn.com - in case you were wondering, which you probably weren't.

jewish_scientist wrote:Python is really good for learning how to program, but my impression is that it is not that great for much else. No one is going to be hired to program in Python. C++, html, and Java are much more likely to be used. I figure that if am going to be messing around, then I might as well train for a job at the same time. You know what I mean?

Depends on the job. Software development, no, python is not going to land you a job, but for a more data science, analytics or informatics role python is absolutely an in-demand language.

commodorejohn wrote:I actually see a fair number of job postings listing Python as a desired or bonus language, but okay, gotcha.

Quercus wrote:Depends on the job. Software development, no, python is not going to land you a job, but for a more data science, analytics or informatics role python is absolutely an in-demand language.

Really? I never realized that. I think that I will not chose Python though because it is so easy to use. If I ever get hired to program in Python, it would take only about a weekend for my skills to de-rustify.

Most of what I want to do is math stuff that any language can handle, but I also want to experiment with AI. Does that effect what language I should use?

Quercus wrote:Most of what I want to do is math stuff that any language can handle, but I also want to experiment with AI. Does that effect what language I should use?

I'm barely more than a layperson when it comes to AI stuff, but my gut feeling for this is unless you want to reinvent the wheel purely for learning/fun purposes the important thing is to choose the framework/library you want to use and then use a language which works with that. I realize that that's just shifting the question, but hopefully it shifts it in a direction which is easier to research - articles comparing AI/machine learning frameworks are a dime a dozen.

Quercus wrote:I'm barely more than a layperson when it comes to AI stuff, but my gut feeling for this is unless you want to reinvent the wheel purely for learning/fun purposes the important thing is to choose the framework/library you want to use and then use a language which works with that. I realize that that's just shifting the question, but hopefully it shifts it in a direction which is easier to research - articles comparing AI/machine learning frameworks are a dime a dozen.

commodorejohn wrote:Or one of the billion JS web frameworks, but I gather you want to mess around for fun, not seek out reasons to slit your wrists.

With the chief advantage of JS of course being you can mash stuff together in a graphical environment (the browser) from the get-go. I feel more like "having fun" than "wanting to slit my wrists" when right-clicking your message, inspecting the element (so it gets bound to $0) and executing $0.innerText.split('').filter(char => char.toLowerCase()=='e').length to count the number of Es in it.

Lately, I've been using Haskell quite a lot for solving Project Euler problems. Usually I'm done in a couple of lines (and hours of thinking, fiddling with expressions and debugging –debugging edge cases, mind you, there's no debugging of null pointers or anything) and the runner is done in a couple of seconds. Only for a tenth of the questions do I arrive at an (imperative) approach that takes ages in Haskell and I resort to C++. To be fair, other languages with FP-style libraries may result in similarly* concise and readable code, but I chose the Haskell cake and now I want to eat it, dammit!

*except for all the parentheses; though even in Haskell there's lots of parentheses because the fixity rules are working against you half the time. *something something visual programming something something should exist something something can't recommend any because there's no general-purpose one with a user base of more than 10 people ever*

Flumble wrote:Lately, I've been using Haskell quite a lot for solving Project Euler problems. Usually I'm done in a couple of lines (and hours of thinking, fiddling with expressions and debugging –debugging edge cases, mind you, there's no debugging of null pointers or anything) and the runner is done in a couple of seconds. Only for a tenth of the questions do I arrive at an (imperative) approach that takes ages in Haskell and I resort to C++. To be fair, other languages with FP-style libraries may result in similarly* concise and readable code, but I chose the Haskell cake and now I want to eat it, dammit!

I find Haskell to be perfect* for fiddling around with the kind of problems found on Project Euler, but I wouldn't give it to someone as a first language to learn (unless they really like math, but then I might suggest Prolog).

* in some sense of the word perfect.

Flumble wrote:*something something visual programming something something should exist something something can't recommend any because there's no general-purpose one with a user base of more than 10 people ever*

I'd like to know of one of those so I can get the user-base up to eleven.

I think a good programming language to start to learn to program is a programming language that supports a simple and easy-to-use graphical engine.For example Logo programming language would a nice place to get some programming in.If you are looking for a programming language for a job, then you should research the type of job you want (do you want to work on AI? back-end? front-end? maybe you want to work in gaming?), since that will affect the programming language that it requires.For example most games use C++, while front-end is almost exclusively Javascript and derivatives of Javascript(like TypeScript), along with HTML and CSS, or if building native apps then for IOS there's Swift and Objective-C, for Android there's Java, for PC there's a whole bunch of choices which I'm not going to list here.

Demki wrote:I'd like to know of one of those so I can get the user-base up to eleven.

I know of Subtext, Viskell and Luna as the most general-purpose languages, with Luna actually being worked on right now. Then there are more specific languages like XOD, Simulink, LabView, GNU Radio which are (if I recall correctly) dataflow languages and things like Scratch (and derivatives), Kodu, MindStorms, Alice, (Unreal) Blueprints which are gaming languages. Unfortunately, all the languages require a keyboard half the time, so I have a hard time recommending any of them.Right now I would say Luna. Unless you want to fiddle within a game environment (reading the output from how many bots are coming after you, for example), then by all means install Unreal Engine.

jewish_scientist wrote:Most of what I want to do is math stuff that any language can handle, but I also want to experiment with AI. Does that effect what language I should use?

Python is fantastic for AI use — there’s lots of libraries out there for it and at any level you want. You could use something like Theano or Tensorflow to learn how, say, neural nets work by implementing a framework of your own design. But you could also use a library like Keras to be able to get an “out of the box” one.

Python is really commonly used for all sorts of data science stuff because people started building libraries on it due to its ease of use. It’s one of the more common data science tools out there.

I've been having a lot of fun learning Kotlin. It's a staticly-typed language mainly for the Java Virtual Machine, with support for compiling to Javascript and native support via LLVM is on the way. It has much better support for Javascript and Java interopability than Scala, generally compiles faster, and also has much of the functional programming goodness. No pattern matching, alas. Type inference is supported, but the type system does not require you to pretzel your mind to grok it. Google officially supports it for Android development.

It was created by and is actively developed by JetBrains and is intended to be highly pragmatic / practical. There are REPL and scripting modes. On-line docs are excellent.

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.-- Antoine de Saint-Exupery