DEV Community

Cover image for Choosing a Programming Language

Choosing a Programming Language

Douglas Minnaar on March 19, 2018

Summary I recently came accross 2 videos on the BigThink website that addresses the topic 'Five Programming Languages that Everyone Shou...
Collapse
 
eljayadobe profile image
Eljay-Adobe

There was a recent discussion on this dev.to forum about whether or not learning more than one language was important.

I like learning programming languages as a hobby, even if I'm not going to be using them to get paid money. But not everyone is interested in investing the time to master a language for fun, that they won't be using — and that's legit.

The survey was missing Lisp or one of its dialects like Scheme or Clojure. So I punted and picked Haskell, but it was a tossup between Haskell and SQL.

I did not vote for C++. I think C++ is overused in both industry and academics, where another language would be more suitable. It is a difficult language to learn, even more difficult to master. It makes for code that is a huge effort to maintain. Modern languages like Java and C# have demonstrated that the Preprocessor portion of C++ is more of a liability and anachronism — but C++ cannot divest itself of the Preprocessor without not being C++. That ship has sailed. Despite all of those barriers, C++ is a very popular language and will continue to be popular in the foreseeable future. I have a ~30 year love-hate relationship with C++.

You mentioned "I suspect that functional programming is going to become THE programming skill to have in the near future", and I fully agree with that statement.

That reminds me of this quote (from the Forward in "The Book of F#"):

I’ll wind down with a lie that OO people who are learning FP tell one another: “Learning FP will make you a better OO programmer.” It rings true, and in the short run it may even be true, but as you internalize immutability, recursion, pattern matching, higher-order functions, code as data, separation of behavior from data, and referential transparency, you will begin to despise OO. Personally, I went from being a Microsoft C# MVP to feeling guilt every time I created a new class file. Once you understand the defects that can be avoided, it stops being a technical choice and becomes an ethical one.
Bryan Hunter, CTO, Firefly Logic

Besides functional programming, I think the other up-and-coming kind of languages in software development will be Domain Specific Languages (DSL). The smart people at JetBrains have created MPS, which I think will be the kind of thing we'll be seeing more of: tools to support the creation of DSLs. (And by DSL I exclude EDSL. I think EDSLs are so inferior to DSLs, that I have nothing good to say about them.)

Collapse
 
drminnaar profile image
Douglas Minnaar

Thanks for the great response! That was really insightful. A pity I forgot to add Closure to survey. I should have added Erlang too. It's interesting what Bryan Hunter had to say about OO, though I don't agree with him :) ... I've too often seen this pattern of throwing the baby out with the bath water. For me it's not an "either or" decision between the 2 paradigms. But perhaps his objective was simply to make a strong statement to get peoples attention. In terms of DSL's, I actually really regret not mentioning any, so thanks for raising it. I noticed that Groovy was one of the top paying technologies according to the 2018 Stackoverflow survey.

Collapse
 
drminnaar profile image
Douglas Minnaar

Python is a really good general purpose language. Therefore, you could develop games using Python. I've heard that pygame (pygame.org) is quite popular for example. I suppose it really depends on the type of games you want to build. However, I personally feel that Python is better suited to other areas like data science. For building games, I think that "C" is always going to be a popular choice. Unity (unity3d.com/) is very popular these days too. I am busy learning Unity for fun. In the beginning I was surprised to see that it uses C#. Btw, if you're interested in getting into Python and seeing where it is applied then I would highly recommend MOOC platforms like Coursera and Edx to learn more.

Collapse
 
meredevelopment profile image
Mere Development

“Nobody should call themselves a professional if they only knew one language.”
Calm down Bjarne. There’s plenty of folks using just one language, making a living, doing good work. Elitist old gatekeepers with decades of experience aren’t helping anyone with this sort of comment. If anyone read the intro to this article and felt disheartened I feel for you. Don’t believe everything you read. Thankfully the rest of Douglas’s article is realistic and more positive.

Collapse
 
drminnaar profile image
Douglas Minnaar

Haha Yea Bjarne does make a pretty strong statement there. I also found the statement made by Larry to be quite controversial where he considers Java to be "heavyweight, verbose, and everyone loves to hate it". And they're not the only one's (in terms of leaders in the tech field) to have made these controversial statements. I think that passion for a subject sometimes gets the better of most of us :)

Collapse
 
rgchris profile image
Chris Ross-Gill • Edited

I'd strongly recommend taking a peek at Rebol. It's not popular, but approaches language from such an alternative perspective that an understanding of programming is deficient without it. Imagine you could write code using only JSON notation with a few extra types here and there...

Collapse
 
drminnaar profile image
Douglas Minnaar

I have never heard of Rebol until you mentioned it. I find it very interesting. I like it when a programming language encourages one to think different. For anyone else coming across this thread, I found this youtube video that may be of interest.

Collapse
 
michel4globant profile image
Michel Ortega

IMO it pretty much depends on what are you trying to "create" with code. E.G An iOS app(swift), VideoGames(C++ or C#),etc. Or if you just want to start to learn the basics and then decide what to "create", choose C.
Well, and there's the other part. If you want to make money coding, yeah, choose one of those languages from those lists that updates every year.

Collapse
 
johannesvollmer profile image
Johannes Vollmer

Side effects doesn't mean that a different thread manipulates shared data, side effects means that a function modifies some global state or object that is not a parameter (like this in Java) :)

Collapse
 
drminnaar profile image
Douglas Minnaar

Yes, I agree with you :) May I just say that by "shared data" I was attempting to infer "shared state" in the global scope. But shared state can be local too and I didn't make that clear. Therefore I should have been more explicit by specifically mentioning the scope of state. And lastly I should have made it clear that the potential problems of accessing scope outside the scope of the calling context are not limited to multithreading but exacerbated instead. Thanks for your response!

Collapse
 
anindyaspaul profile image
Anindya Sundar Paul

Why do you consider SQL to be a programming language?

Collapse
 
drminnaar profile image
Douglas Minnaar

When I chose SQL as one of the languages I think that one should know, I knew that it may raise a few questions. Therefore, I'm surprised that you're the first to ask :). I consider SQL to be a programming language because even though it is quite different to third generation(3GL) imperative languages like Java, C, C++, it is still a fourth generation language(4GL). I understand that many developers only use SQL to achieve simple CRUD (create, read, update, and delete) operations, but you can do so much more. SQL supports loops(FOR, WHILE), conditional statements (IF,CASE), variables, functions, types, procedures etc. This may cause many to cringe, but I personally know a developer who wrote an entire backend batch payroll system for a medium size enterprise using SQL ... legend :D

Collapse
 
anindyaspaul profile image
Anindya Sundar Paul • Edited

I am having difficulties trying to wrap my head around the fact that someone wrote an entire backend batch payroll system using SQL! Also, I didn't know SQL supports loops. Thanks for enlightening. There is so much yet to be learned!

Collapse
 
radicalbee profile image
Abdu

I just raised a question about what to learn, so life can be easier in future. I am glad to read your review. I can see C# there, and I like JavasScript very much.

Collapse
 
drminnaar profile image
Douglas Minnaar

C# and Javascript are my 2 loves. You can't go wrong with either.

Collapse
 
ghost profile image
Ghost

Python can be embedded in games to provide scripting support. So, Python can be a good tool for game developers. It may not be the main language, but make no mistake, it can be very useful.

Collapse
 
biffbaff64 profile image
Richard Ikin

I recently spent some time 'messing around' with Scala. I Like!
BeefLang is quite C#-like, and interesting.

Collapse
 
sam_ferree profile image
Sam Ferree

Everyone should also learn one esoteric language, just to really bend your brain.

Might I recommend Funge++?

Collapse
 
drminnaar profile image
Douglas Minnaar

Forget everything! Let's just go with Funge++ :D