# Programming Languages as Tools

## Recommended Posts

Hello forum!

I know a lot of people say "programming languages are just tools" and pick the right tool for the job.

But as it seems, companies want experts at certain tools.

Now, I'm not really sure if I want to be an expert for one tool, I want to be a great developer instead.

Knowing my way around Git and how to write readable, decoupled and maintainable code.

This requires knowledge of paradigms and patterns of a language of course.

At the moment I'm learning a lot of rather advanced C++, just because I enjoy it. It is fun.

But I love to temper with other languages, too. To be honest, I do not really mind what language or technology I have to use.

I just want to create.

Now, often there are multiple possible tools to pick from. If I want to write an easy cross-platform tool, I pick C#/Mono or Java.

Let's assume I would prefer C# over Java, what now? If I become really good at C# and look for job offers, will people rather look for .NET-framework experts?

As I'm not interested of .NET, there would probably a large chunk of the industry gone for me.

So specialising Java and practising Java seems to be more rewarding, especially since Java seems to be even more mainstream.

I really dislike to think about all of this. When I started programming, I just picked something and did the job, now, the industry is my mind and what they expect.

If I know C++ very well and found an interesting offer about a project that I like, but they want Java experts, I'm technically rejected already, right?

There are so many cool technologies, as Electron, offering cross-platform GUI desktop application, but practising seems to be more for personal usage rather than being interesting on the mar

I know, I should be able to know more than one language well, but I cannot predict the future nor do I know what languages are being commonly used in certain areas of software development.

Are there any sources for that? Listing programming languages in their often used areas?

I wish I could just learn things I'm interested in and stop bothering even a second about this. It feels like it is wasting essential time to just develop nice applications.

Is there a trick to determine the right programming language/technology for a project? Any tips for this?

This is not only about usual business applications but about pretty much every kind of application. Java and C# were just prominent examples in my head.

Thanks for reading, I'm really struggling with this.

Edited by Angelic Ice

##### Share on other sites

A) "I want to do the things that are fun for me."

B) "I want to eat meals and sleep indoors."

Figure out where the balance is for you between A and B. If you want to be able to work for Java people then learn Java. If being disqualified for not knowing .NET makes you sad then learn .NET. If you can't deal with learning things that you're not interested in then search forever until you find a job that lets you do only the things you like. Tech is a moving industry. If you can't adapt to the job market you're not going to survive. Stop trying to predict the future and put all your eggs in one basket. If all the openings are for Java then practice your Java. If they're all for Lisp then work on your Lisp. If something is so offensive to you that you can't handle it then just remove it from your list of things you do and understand that you're going to have to work harder to make up for it.

I don't really see any "struggle" here except you not wanting to do what needs done. You may have to think ahead a little bit here and work your way toward a place where you're comfortable.

##### Share on other sites

This is the primary reason I have avoided the development sector of IT. I love programming...as long as it's something I want to program. If you truly want to get your foot into development the last thing you wanna do is avoid things that you don't fancy. Sure, it's easy to go to an interview, and say, "I may not know it, but I can learn it" as opposed to, "Pfff, that? I know that". The former is still good, but the latter is best. In IT, whether it's System Administration, Network Engineering, Development/Devops, hell even low-end Desktop Support, you have to keep up with Technology. You don't want to put yourself in a position were your beta-maxed two years into your career.

Like, right now. .NET development, and ASP.net (MVC) is the all the flippin' rage around my area. I to dislike .NET, but than again, i'm not actively trying to break into the development sector as of yet. Also I love being able to leave my office in 15 minute delimiters and jog around the server room. I don't know if I have it in me to sit...and code...for 8 hours. That does not sound fun to me, for others it does, so it's up to you to decide.

Marcus Hansen

##### Share on other sites

I know a lot of people say "programming languages are just tools" and pick the right tool for the job. But as it seems, companies what experts at certain tools.

They worry a lot about continuity, and integration of the expensive software that they have made by programmers. They want to be able to shift programmers, or hire new ones. The best strategy for that is to pick one main stream language that works in the application domain, and use it for everything.

Second, you need guys that can program, what do you ask for? People that can program in that main stream language, of course, as that's what they need to do.

Looks completely logical and good strategy to me.

Now, I'm not really sure if I want to be an expert for one tool, I want to be a great developer instead. Knowing my way around Git and how to write readable, decoupled and maintainable code. This requires knowledge of paradigms and patterns of a language of course.

At the end of the day, they want a solution in their mainstream language, they hire you to do that, so you better actually program a solution in that language, if you want money in exchange for your time and skills. Sounds like a perfectly reasonable trade.

What I believe your mismatch is coming from, is from the hiring ad "wanted: Java programmer". Obviously that means you'll have to code a solution in Java, but I think they don't actually want a Java coder. They want an allround skilled programmer that you aim to be, that can code his/her solution in the Java language. (Or at least, that is how I read such ads.)

Programming is not about languages. It's about the data structures, and the algorithms, how you hook things together. How you break down the problem in a number of tasks and steps, and how these things interact, making sure you meet all the constraints. Employers add just one more constraint, "give me the result in language X". It's typically a very easy constraint.

Compare

class Pair {
public:
int x;
int y;
};

public class Pair {
public int x;
public int y;
}

class Pair:
def __init__(self):
self.x = None
self.y = None

Looks pretty much the same, right? I mean, the words change a bit here and there, but no structural changes at all. The Python one gets a constructor, but it's not even needed, strictly speaking.

So if my algorithm needs an xy pair, I write one of the above, depending on what language I use today.

This holds for a lot of things in various programming languages. Much of the ideas are the same everywhere, the words are just a little different. There are also deeper differences. One of the bigger changes are reference-based languages (Java, C#, Python) versus value-based languages (C, C++, Pascal, assembly language). There are things you can do in one language and not in another. Since the employer is so kind to give you his constraint early in the process, it's something you can design for. Some algorithms won't work nicely in a reference-based language. Some data structures however become possible, or become easier.

You know the language constraint during the design, and you can adapt and exploit that constraint just as you do that with other constraints and options. (Ie if I need speed, have a lot of expensive-to-compute data, and I have memory, I pre-compute in memory on application start-up. If I don't have memory but a disk, I pre-compute at design-time, and load from disk. You shift the design around the constraints. A language constraint is no different.)

I wish I could just learn things I'm interested in...
It exists, and is typically known as "rich parents". Unfortunately, most of us don't have that, and as others have said, one must eat and have a roof to sleep under. Luckily however, employers own you only for 8 hours/day, and you're free to do whatever you like (almost), during the other 16 hours. You can write code for money in whatever stupid language they want, and do what you really want to do in your free time.

One step further is to become an indie developer, you'll be free to code whatever you like, but you'll have to find a way to make enough money for living.

Another thing, if you're a new guy, an employer won't give you total freedom. You're a nobody until you have shown to deliver. Typically the 'better' jobs are not for new hires, they are for people that have earned trust.

##### Share on other sites

There are two parts to programming knowledge:

1. general programming theory: basically algorithms and data structures, that kind of stuff.

2. How to do something in a specific language (assuming the language can even do it) -  the syntax and idiosyncrasies of the language in question.

you want to learn #1.

for #2, you want to determine the most marketable language skills and learn those - whether you like them or not - its about making money - not having fun - right?

Edited by Norman Barrows

##### Share on other sites

But as it seems, companies what experts at certain tools.

Meh. I'm primarily a C++ developer, specializing in 3D graphics and low-level networking, but for the past year I have worked on a team delivering Java services at scale. Before that I worked on a team that built Android UI frameworks in a hybrid of Java and C++. On my own time I prefer to work mostly in Python and Rust.

Point being, there's nothing actually standing in your way of deeply specializing in multiple programming languages and paradigms - once you understand the concepts at work, it's just a time investment for each subsequent language (especially when they are all as strikingly familiar to one another. as Java and C# are).

##### Share on other sites

Tech companies tend to be technologically-narrow minded when hiring engineers.  If their tech stack is Java, then they would normally only want to hire Java engineers.  I think it's pretty sad, but it is their choice.  They can hire whoever they want.

So, if you are looking to get hired, then you should pick the most popular languages/frameworks out there to maximize your coverage.

##### Share on other sites

Seems like the sane thing to do?

##### Share on other sites
You need to take some time to sort out your opinions. Right now what I see is a convoluted jumble of antithetical statements and guesses, mostly ill-formed. I'm not even clear what question you're trying to answer here.

If you have a goal, then you should be filtering your decision-making process by what gets you closer to that goal.

If you don't have a goal at all, then establishing one is your first priority.

To be honest, I do not really mind what language or technology I have to use. I just want to create.

I wish I could just learn things I'm interested in and stop bothering even a second about this. It feels like it is wasting essential time to just develop nice applications.

These two statements are fundamentally contradictory. Either you don't care and you'll just go learn the right tools for the job, or you do care and picking the right tool is an inconvenience that you'd rather avoid.

Is there a trick to determine the right programming language/technology for a project? Any tips for this?

I know, I should be able to know more than one language well, but I cannot predict the future nor do I know what languages are being commonly used in certain areas of software development.

Are you intending to find a programming job? If so, there are two things to consider:

1. The things you can do
2. The things the job requires

If those two have a good overlap, then apply for the job. You should be looking for jobs that you want to do, so ideally you have some selection criteria beyond just "does it take skills I already possess." Maybe you want a career that is demanding on some skillset you lack; then learn those skills. It's all really simple once you focus it through the lens of your objectives.

If you just want to hack in your spare time, then who the hell cares? Make stuff, what the industry does is largely irrelevant and you're obsessing over trivia.

The bottom line is it's your life, and you can (within reason) do whatever you want. You just have to accept the consequences of your choices.

##### Share on other sites

First, thanks a lot to everyone!

These two statements are fundamentally contradictory. Either you don't care and you'll just go learn the right tools for the job, or you do care and picking the right tool is an inconvenience that you'd rather avoid.

Haha, I've been too unclear, I guess. I do not care if somebody would tell me to use Java or C# or create a time travel machine via Lisp. The pure idea of creating something that works and is interesting to me, is what I like.

But that is not the reality. There might be jobs that want C# or Java or ... I just would love to walk to a project and be like, hey, I want to do this, the programming language you require is not something I used as much as C++ but deeply learning it would be no problem to me.

If I could say that, I could try out things like Electron without worrying about practising technologies/languages that are actually highly wanted.

Additionally, as I'm not sure in what programming job direction I would like to go, it is difficult to specialise on something already.

At the moment I'm trying to analyse the market, see what programming languages are marketable.

I love to work in C++, but e.g. I'm not interested in developing a low-latency software for a bank.

Are there any overviews or neat websites that show what programming jobs use/require/commonly use what languages/technologies?

Like, 3D programmers probably need to know all kinds of graphics APIs: OpenGL, Direct3D, ...

Web-developer should know Node.js/PHP and so on.

Edited by Angelic Ice

##### Share on other sites

The top 9 in-demand languages at this link are: SQL (not really a programming language), Java, Javascript, C#, C++, Python, PHP, Ruby (on Rails), and iOS/Swift (they probably include Objective C in this).

At the TIOBE index they are: Java, C, C++, C#, Python, VB.NET, PHP, Javascript, assembly

The IEEE site says they are: C, Java, Python, C++, R, C#, PHP, Javascript, Ruby

Note how Java, Javascript, C#, C++, and Python appear on all the lists. They are the main contenders, if you're concerned about being marketable. And you can consider anything not in the above 3 lists as a niche language - knowing such a language may broaden your horizons and can potentially lead to a well paid job, but such jobs are relatively rare.

You can use pretty much any of the above for anything, if you choose. But generally, Java is preferred for business and enterprise software, C# is much the same as Java but for Microsoft/Windows places, Python is popular for scientific/academic work and web servers, Javascript is for all client-side web work (and increasingly for server-side too), and C++ is mostly for system (low-level) software and high performance apps (games, simulations, drivers). Swift and Objective C are for iOS apps, PHP is for web pages, R is for statistics and data analysis, and VB.NET... I have no idea who uses VB.NET these days or what for, sorry.

If you want to know which technologies are important for each area of work, that would be a much longer list and it would change so often that I doubt anybody would attempt to maintain one. The job listings are your best source of information there - they tell you what expertise people are willing to pay money for.

##### Share on other sites

SQL ... Java, Javascript, C#, C++, and Python

These are my standard recommendations.  When it comes to learning languages, professional developers should at least be able to read and work with all these languages, and be intimately familiar with several.

1. general programming theory: basically algorithms and data structures, that kind of stuff.

2. How to do something in a specific language (assuming the language can even do it) -  the syntax and idiosyncrasies of the language in question.

Languages come and go, but the algorithms and data structures are permanent.

Programmers use languages as tools, but the theory is critical.  As a parallel, it doesn't matter if I'm using a screw with a flat head, a Phillips head, a Torx head, or something else, that is the tool, all of them use the same theory of an inclined plane wrapped around a post in order to bind objects together.  It does not matter if I'm programming a sorting routine in any language, the sorting routine remains the same.  It doesn't matter which language I use to implement a linked list, it is still a linked list.

The languages are the tool to accomplish the algorithm and structure.  The popular languages my change from year to year.

The algorithms and data structures are fundamental. We will gain new algorithms and new structures, but the ones we've got will be solid and continue to have the same properties forever.

## Create an account

Register a new account

• ### Forum Statistics

• Total Topics
628394
• Total Posts
2982431

• 10
• 9
• 19
• 24
• 9