I'm feeling conflicted on which languages to learn

I'm feeling conflicted on which languages to learn
0

You can write functional PHP :wink:

I had no idea either until going back to PHP after a while and feeling like the language was “archaic” only to find out that you can write functional PHP! But much like JavaScript, how many tutorials out there use functional programming? (unless of course, it’s an actual article ON functional programming).

2 Likes

You “can” but is it the best solution? Other languages exist that were built as functional from the ground up. PHP also tends to run slow compared to other languages. It’s yet another reason I choose to avoid the language.

As for javascript it’s a popular language so many people have built on top of it making more and more new things that rely on it, at its core though it’s an still an old language people are constantly making major changes to it so I see it still having a long life though I have my concerns, I guess javascript is worth learning due to the vast amount of open source projects written in it and the many UI Libraries like React and Vue which require it.

I don’t see much value in learning PHP unless you want a job maintaining older codebases which rely on it. I’d rather not spend the rest of my life maintaining a PHP codebase, it would be a very dull life to me.

EDIT: I’ll add the javascript version made around 22 years ago, isn’t the same javascript we have today. I don’t know which variants of javascript to consider relevant to today’s work vs which variants of javascript are legacy. I’m conflicted as to which types of javascript are relevant.

Ah but I have used the language, in fact I’ve written a good chunk of freeCodeCamp’s PHP Guide: https://github.com/freeCodeCamp/guides/issues?q=php+author%3Ansuchy I obviously had to use PHP to learn the language to use it. I still dislike the language, it’s style seems bad, it runs slower than other languages (slow == need more servers == high cost language | Boss ain’t gonna be happy to know he’s paying money he could save if you used another language), and back to the I don’t want to spend my life maintaining legacy code.

“A language that doesn’t affect the way you think about programming is not worth knowing.”
Alan J. Perlis

4 Likes

Any new language I learn should give me new ideas about how I develop. Great quote.

Just find a language, and learn everything there is to learn about it; master it.

The reason I say this, is because you will relentlessly be learning new framework and languages throughout your career. Being a developer, you need to know a few languages, but what’s really important is your ability to be able to learn programming languages.

In your career, your employer may use different frameworks and languages, and they expect you to be able to “know how to learn”. Does this person get the big picture, does he/she understand the fundamentals of a computer, etc.

If you know at least one language, there is a high demand for you in software development. Have a look at this video:

That’s what I’ve been doing with Elixir, I’m betting on Elixir and functional programming being the future of software development.

My point of view is that if you need to know a framework or language you should be able to read the documentation and a crash course and be ready to work on a project in just a few days. I’m aware you’ll be constantly learning new things in software development.

I think focusing on CS fundamentals would prove worthy. Can you implement common data structures from the ground up in the language of your choice? Do you understand how languages work, under the hood? If not, then you shouldn’t be jumping around languages.

A language is just a tool. Using that tool all comes down to your fundamental knowledge on how these tools work. Without such knowledge, you’ll only produce spaghetti code.

1 Like

Yes to the above questions.

So then you shouldn’t be worrying about which language to learn.
They’re just tools. You have a problem, you reach in the big toolbox, decide which tool is best , use it put it away and it’s on to the next one

1 Like

Ah but each tool requires special training. Which ones are the best and for what tasks?

The point is surely to use a language you’re comfortable using (which is unlikely if you’ve not learned the language for any practical reason)? Outside of specific big tech companies (who maybe have reasons for their slightly wierd hiring methods), interviews normally go 1. check applicant isn’t an idiot -> 2. check they understand the basic language of the stack used for the position -> 3. do a task using that language.

But, but, most popular newer languages are multiparadigm - Rust for systems, Swift for IOS, Kotlin for Android, Go. Elixir (Erlang) is heavily based on Smalltalk (and Prolog, which is a logic language rather than functional per se) and works in a similar way to idealised OO. Reason might beat out Elm and other functional compile-to-JS UI langs in the long run, and is just OCaml, which has a complete and powerful OO system (and also [pragmatically] allows mutation). Monads have crept into most newer versions of big languages via Option/Optional/? as a better way to handle errors (Java, C#, Swift, Rust). Etc etc.

JavaScript ain’t going anywhere for a long time either, and basically everything that’s ever existed in the language still works, because nothing can be deprecated.

Functional stuff is great and makes a lot of things better, and it’s really good that it’s had attention. But the direction seems to be to use functional features as and when they are useful; some features of other paradigms are equally useful and good (lots of imperative and OO ideas/styles/patterns/etc are great) - knowing when to not use functional styles is very important, and it’s difficult if you don’t have experience in those paradigms.

7 Likes

I’m looking into webassembly at the moment because I have a feeling it’s going to be quite prevalent inside the next couple of years. To begin with they are focussing on C/C++ support (http://webassembly.org/docs/faq/) but there already seems to be pretty good support for Rust too (eg; https://github.com/rust-lang/rust/pull/45905).

1 Like

You’re looking for work, right? If that’s the priority, I wouldn’t touch a new language with a 10-foot clown pole at this point. I think you should just stick with the stacks you got and focus on any weaknesses therein.

On the other hand, if you’re in no hurry to get hired and you want to expand your horizons, you can’t really go wrong with C/C++ and Python. There are valid arguments for and against any choice, but with these languages you can accomplish anything imaginable.

Hello! I just want to put in my two cents here. The others have given some good advice as to next steps. However, the real question is - “Where do you want to end up?”

Do you want to make video games? Do you want to build automation software? Do you want to build analytics pipelines? Do you want to build penetration tests? Do you want to build server software? DevOps?

Until you answer where you want to be, you’re just coding for a requirement. Instead of “coding for a requirement” why not pursue something you’ll love doing?

I have worked in C, C++, PHP, JavaScript, Java, Python, Golang, and your standard HTML/CSS. At each job I was asked nearly identical questions and they were not language specific - they were logic and computer science based. In many whiteboards I was able to use whatever language I knew to solve the problem, they only cared about how I solved the problem not what language I used.

Working in a “hot” language like Ruby, Python, JavaScript doesn’t always mean you’ll land the job. Many sophisticated companies still survive on Java and ASP.Net/C# as their web stack. This also is limited based on region. I am local to Detroit and the primary languages used in that area for these businesses is ASP.Net/C# and PHP. This doesn’t mean there are not jobs for Python, Ruby, etc. there is just a much stronger focus on the “legacy” or more “sophisticated” languages - if you will.

To make this long story short - do whatever the hell makes you happy to program. The jobs will ALWAYS be there if you’re good at what you do. Don’t sell yourself short to a language because it’s “hot”. I can say from first hand experience in hiring developers and working with developers - they don’t truly give a rats bum on what language you’re proficient in if you can program effectively and efficiently.

There are many developers, I went through this as well, that think they need to be on the “latest and greatest” and often fall short to meet requirement. Don’t be that developer trying to chase a requirement and just be a damn good developer and make cool things.

4 Likes

If you want something in between object oriented and functional you should definitely try Scala. It’s a functional programming language that allows you to write object oriented programs as well. It’s extremely enjoyable and it’s gaining popularity.
That said if your goal is to land a job as fast as possible, you should see which are the most popular languages in your area.

I do understand your concern. But for me, it may be quite different compared to you because I do not really know how to code yet and I am just making a start. But, I do have the same sort of concern as well. When I was trying to get started to learn how to code, I have realized that there are quite a lot languages to learn and I was overwhelmed as to, which language is the most recommended one to make a start with. I realized that learning to code, HTML and CSS, Java is considered the language to learn. Just wondering if I should stick with Java and learn about it as much as I should.

Also, on a separate note, I just started learning to through - Grow with Google. I am slow at this because like I said I am new to coding. So for that reason, I take my time reading every bit information before going on to the next. I wonder if should also keep on doing that or just let it pass.

Your suggestions are welcome in regards to both of my inquiries. Thanks.

ASP.Net has two versions, .NET and .NET Core.
.NET is focused on Windows and Windows Server.
.NET Core is the cross platform version. It runs on Windows, Linux and macOS Server.

C# is like Java, it’s used more in big Enterprises and Corporations.
I’m a ASP.Net MVC Developer, I really would not consider ASP.Net development unless you are looking at a job in an Enterprise or Government.

Suggested considerations.

Front-End Development

HTML, CSS and JavaScript are all required if you will be doing any Front-End Development.

Cloud Development

Lately, I have been doing a lot research into cloud development. At work, we might be adding Azure or Amazon AWS development.
Cloud providers support different languages like Elixir, GO and Scala. But, it’s safer to stick with Node.js, Python, Ruby and PHP.

Start-ups or small businesses

Many Start-ups or small businesses are using Ruby/Ruby on Rails, Node.js/Express.js, Python/Flask-Django, or PHP/Laravel-Symfony-Zend.

Big Enterprises and Corporations.

Many big Enterprises and Corporations use C#/MVC-WebForms and Java/Spring MVC-Hibernate

3 Likes

It’s easy… start with the easy ones, then go harder…

Just learn the basics.

I am in the process of making a course on this on https://www.secretlesson.com. I will show how to learn the basics, then how to hack your code. Also, it will build to each level of practical knowledge I have used in the field as a website/app programmer.

Also, I will also have them on youtube https://www.youtube.com/channel/UCOgV9t68M2hkYS9Hw6hV8Fg

It looks like you may already know these…

The client side Front-End Development basics:

HTML - 1st (HTML5 later)
CSS -2nd
Javascript (for beginners I would recommend learning JQuery first, because it is easy to use, then figure out javascript later)

Then you can learn the easy back end development server side language:
PHP, MySQL

but then I would say Python and .NET (C# with Visual studio community edition is free) are very popular for high paying jobs because of XAMARIN. Xamarin allows you to make apps between Android, iOS, and Windows Apps all in one shot. Also, C# is use in a lot of programming jobs with hospitals.

The problem with this job market is that you really need a good online interactive resume that shows your skills otherwise your resume is glanced over quickly.

Check out:

Monster
Careerbuilder
Glassdoor
LinkedIn

Look up programming jobs your area and see what kind of programming jobs are available and what you are interested in (try different keywords: programmers, javascript, etc.).

Glassdoor will give salary and interview advice. Most of my jobs have come from having a really good LinkedIn profile and connecting to lots of people. But my online resume has made 3 times as many people search for me which I display on linkedin.

I can see you are a very practical person; seems to me that you want to learn what will be useful “just” to be ahead when the next big wave of changing will come.

Nothing bad in this attitude, but I want to present you with a slightly more “philosophical” approach.


  • Learning is never a waste of time.

You don’t have to learn to play piano only because you want to be a pianist one day. Or learn to speak a new language just to add it to the curriculum.

It is perfectly fine to learn something because you always wanted to and you find enjoyment in it.
This is what will keep you motivated to continue pursuing, since it’s more a passion than a commitment.

Moreover learning will never be time wasted since any new knowledge will intrinsically make you grow as a person.


  • enjoy the ride, not the goal

Unless you possess some sort of magical power, the future is and always will be mysterious.
It’s great that you want to be prepared for what “will come”, but don’t stress too much on it, or you will loose focus on the present.

This means that instead of focusing on what (may) be the next trend and learn that, learn something that you need/feel like today.


So in practice I would:

  1. learn first what you think you will enjoy to learn:

example: “I always wanted to know how to write videogames” - learn the industry standard. (cpp ??)

  1. learn what will make you grow the most as of you stand today:

example: “I’m a node backend developer” - Why not learn GO? It’s so different from JS (compiled, statically typed…) that will benefit for sure even if you won’t ever work with Go a single day in your life.

note: the languages were just mere examples to illustrate my ideal thought process behind.


tl;dr Learn something because you enjoy Learning; and because you want to expand your horizons.

1 Like