Am I missing out by only knowing C# and JavaScript

6 points by IAmTheTucan ↗ HN
All peripheral knowledge and technologies aside I really only know C# and JavaScript.

People on Hacker News seem to know a lot of different languages and it has me wondering if I am not as good of a developer because I only know those two languages.

I do need to take a second to point out the obvious. I've had exposure to a lot of different languages and technologies but I only consider myself proficient in C# and JavaScript.

20 comments

[ 17.2 ms ] story [ 424 ms ] thread
If you learn enough languages and their features, then aside from syntax, you can consider yourself language-agnostic. A syntax without its edge cases is the easiest part about learning a language. Your exposure puts you a step ahead.

How can only knowing a small number of languages make someone a bad developer? As a developer, it's about the things you can develop. You might be limited by your language and the language implementations but this is why being rounded with a good variety of languages puts you at an advantage.

My first programming language was PHP 15 years ago, but I keep myself proficient with a systems language (e.g. C or C++), a server application language (like Go), and a web client side language (like JavaScript). I have chosen to work with C++, Go, and TypeScript as much as possible for now.

I hope this helps in any way.

You will become a better developer if you study more languages.

You will become a better developer if you study more mathematics or statistics.

You will become a better developer if you study psychology and interpersonal relationships.

You will become a better developer in many, many ways.

Keep studying. Keep growing.

I appreciate and upvoted everyones comments but I agree the most with you.

Don't get me wrong, I can see a huge difference in my skill based on how I solve problems now vs a few years ago and while that change came from new things in the C#/JavaScript landscape it was still caused by learning how to code differently.

But I feel like I'm at a level where if I have 10 energy points to spend they will go a lot farther if I spend them on something other than programming.

Do you build software systems in C#/JavaScript that are useful, correct, efficient and simple? If yes then you are a good developer.
I don't think you are a bad developer just because your focus is on two languages. Othe devs might enjoy the possibility to learn more. With more languages, you may have better job opportunities.
Depends what you mean by "knowing" C# and JavaScript. I also know C# and JavaScript, I'm definitely not an expert in either or even an intermediate (probably). I also know C, Java, Ruby, Python, HTML, CSS, Databases, networking, web apps, mobile apps, web services. I'd only class myself as above intermediate in a couple of areas and that is after 20 years experience working in software teams.

You can build virtually any web app, client app, mobile app or service with these 2 languages, so ask yourself what you can do with these tools and probably whether you can earn a living using them. If you want to learn a bit about some other areas just do it...

Sounds a lot like me a year ago.

For the past eight years I've been mostly working as a .NET developer, with my last two roles being senior roles with some form of leadership. If I stuck with my last job I would've probably been in a leadership role at a large agency, but I wanted a change.

I, too, would read HN most days, and would feel a hint of "imposter syndrome". It was great enough that I decided to teach myself Python and Django. Working in another language when my life was strong-typed compiled languages felt odd, so instead of fighting the urge I decided to work somewhere that would hire me as something other than a C# dev.

So, I joined a software house that does a bit of everything. Since joining I've worked on a mixture of Ruby, Java, Python, and Node projects in the last six months, and there's opportunities to pick up pretty much anything that I feel I can roll with for a project.

It's been tricky going from being experienced in one language to being a newbie in another. When things work the way you expect, new languages are fairly easy to pick up, but the pain points or differences will bring you back to the days when you were struggling with C#.

I think imposter syndrome is more common in .NET developers than other groups, mainly because the community is so secluded from others due to its heavy use of Windows and its own tool set. Also, there's the stigma of it being a big-business language, even though many .NET devs will go their entire careers without working in an enterprise setting. From my experience, a .NET developer is no less a developer than those in other languages, but I will say that it's very easy to be comfortable in a single stack. Giving something else a try will reduce that comfort, and you might learn a few things that help in both stacks.

So, in terms of missing it, it depends on what you feel like you're missing?

I've been looking say more than usual resumes and interviewing candidates. I would now not interview a candidate for an intermediate position who only has Microsoft experience. This is a proxy for operating in a corporate environment with little exposure to a narrow range of responsibility. Having too few languages/tech also indicates a lack of curiosity/passion.

That's not to say you can't be an excellent programmer but less likely a well rounded software engineer, if that makes sense. The opposite can also be true, those of that dabble in everything with no depth or appreciation of each.

So how does one break out of only using C# and JavaScript professionally, if such a history is a black mark?

I can't imagine you'd interview someone for a junior position looking for said experience, so are such people just screwed?

Some of this is startup vs corporate needs. Corporate employment doesn’t always prepare one well for the agility and initiative needed by a startup (rather, corporations seem to pound those qualities out of employees).

The good news is that there ARE large companies that use non-MS stacks, as well as companies that use MS alongside other tooling (whether it’s having some systems in .NET and others in Java, or using Python/Perl for “glue” code or whatever).

>Having too few languages/tech also indicates a lack of curiosity/passion.

As a noob trying to start a career I ask.... at what point do you list things on your resume?

So I messed around on my own time with Python, PHP, and some other things but feel like I don't know them well. Do you still list it on your resume? At this point I don't because I feel like my knowledge isn't very strong in those areas.

Like anything else, GP’s advice is context-sensitive. In this case, it scales with experience.

If you just came out of a bootcamp and claim to know 3 backend languages, or have less than 3 years experience and list more than a half dozen languages, I’ll assume you’ve worked with each of them so little that you don’t know any of them in a meaningful sense.

If you have more than 10 years experience and know only 2 languages, your exposure is very limited, and I’ll wonder whether you’ve learned by rote rather than knowing how to learn concepts and reapply them elsewhere.

For me as a hiring manager, it’s not about curiosity or passion so much as flexibility and ability to learn and grow in both depth and breadth.

Thank you for the feedback!

I've dabbled in a number of languages but I'm focused on just a few areas and I haven't listed my dabbling as ... well exactly what you said. As a noob listing half a dozen languages seems sort of absurd when in actuality I know just one (and still need to work on it).

Yup, sounds like you’ve got the right mindset in that regard. Pick something to focus on and learn to be highly productive with it at a professional level.

Once you have expertise in one thing, you’ll find it transfers well to other languages and to some degree to other domains. You can start picking up secondary languages, or choose one other language to deep-dive into.

At the junior level, most employers are looking for moderate depth in at least one language and area, and an awareness of what the other technologies are that the developers around you will be integrating your work with. The degree of depth and the number of different technologies they’ll want you to know well will also scale with experience level.

Too many new programmers undermine themselves by trying to learn every single technology they can get their hands on. I blame the bootcamps, which by nature have to expose you to at least a handful of different skills and don’t have time to teach any of them in meaningful depth. They send an incorrect message that a few hours with a new technology, tool, or framework is as much as is worth learning before moving on to the next shiny thing.

Sounds about right.

Accordingly one of my feedbacks to the camp I attended was to drop like four things, add one (minor thing), and spend more time on the rest. Rather than sort of shotgun it.

I would definitely mention them, but not apply for positions that list them as requirements. During the interview you can mention that they were learned on your own time/projects.

That would mean more to me as an interviewer of your degree of interest and 'growth vector'.

It's so much easier to talk to someone who has used more than one language, framework, or operating system. Even if discussing something never seen before, it gives some context into how some things might be different and not assume that everything is/should be a certain way.

I'm a C# + Javascripter too. I learn a few languages on the side, plus some exposure in jobs. Java, Haskell, Ruby, Elm being the main ones.

I think it is worth dabbling to see how things are done on the other side. Learning Haskell makes dealing with Rx / Linq a bit easier - not directly but by flexing that functional-thinking brain muscle.

Having said that I still think of C# as my go-to language and enjoy programming in it, I think it is a great general purpose language and I am glad I am doing my production code in that. It's a nice mix of type safety (so prefer that to Ruby) but with plenty of escape hatches and meta-programming options (prefer that to the strictness of Haskell).

As a C#/JS-er the most useful languages might be Powershell and Typescript, and the most eye opening might be Lisp and Haskell.

If you are good in one mainstream language you will be good in any of them. And by good I mean, can you think about a complex problem and implement an algorithm to solve it. Don't listen to the haters that say Microsoft tech users must have no curiosity or other such nonsense. Like you think there aren't people working at Microsoft solving crazy problems at scale and that other companies aren't drooling over them?
Can you really put peripheral knowledge and technologies aside when all you know are pretty much garbage collected scripting languages? This is a very isolated and safe world to live in.
It depends on what your goals are. I'm a C#/Javascript developer myself and I have tried to start a few side projects using new technologies in the past, but I noticed that I spent a lot of time fighting with the new framework/platform instead of solving whatever problem I was trying to solve. So I decided to double down on C#/Javascript and put my efforts into building products using what I already knew. I'm glad I did because one of these side projects turned into a healthy business, which will likely enable me to "retire" in a couple of years.

I think that if your goal is to solve problems, leverage what you already know. If your goal is to be more employable and improve at your craft, learning new languages should help you.