
Ask HN: C# vs. C/C++ as career forward. - 3am_hackernews
Hola.<p>A few ago, as a grad student I was a heavy MATLAB user, working with signal - image processing, machine learning, etc. I got a job and am doing ~ 2 years of experience as a driver developer (C&#x2F;C++) and think it is pretty cool. I am still learning lots of new things everyday.<p>Now, I am at crossroads at work - I have to choose between taking up a C# developer role and C&#x2F;C++ (focused on driver development) role. I don&#x27;t have any prior C# experience; other language which I currently work as my side projects - Python.<p>Going forward, 2-3 years, I would really like get more involved in machine learning, data analytics, scientific computing. That being said, I really like my current company and would like to be here for a while (~1-2 years) before embarking on other ventures.<p>My question -
With my current skill set, future thoughts, what should I choose - C&#x2F;C++ role or C# role?
My reason for asking this community is that I have no experience with C#. I didn&#x27;t have a CS background so I am slightly wary about trusting my own judgement in such cases.<p>Thanks :)<p>Edit: To clarify, I am not opposed to C# or any language at all, just want to sure I wouldn&#x27;t pigeon hole myself.<p>Another question: If I know C# (as opposed to only C&#x2F;C++) how related would be Java?
======
vardump
C# is easy compared to C++, you'll like it.

It's a different matter whether it will truly develop your skills when it
comes to your goals. C/C++ role is guaranteed to develop you more and give you
better understanding of the underlying hardware for machine learning, data
analytics and scientific computing than C#.

If I were you, I wouldn't pick just one of anything when it comes to software
development. Sure learn C#, but don't become a one trick pony.

Looking at your goals: Learn the tools, technologies and libraries related to
your interest, be it OpenCV, R, Fortran or whatever. Write proof of concepts
and experiments on your free time. Reinvent the wheel to learn.

But also learn how the things you use work underneath.

When dealing with large data sets, you can't do it with just one system. You
need to distribute it over a larger set of systems. Learn about clustering,
distributed systems. In other words, algorithms like Paxos, MVCC, vector
clocks, etc. Hardware side of it: RDMA and NUMA (to some extent). Especially
learn how to deal with latency! Find the rest yourself. Google is your friend.
:-)

Also learn how to push the hardware to the max. Some things you might need to
deal with: NUMA, cache coherency, cache agnostic algorithms, SSE, AVX, OpenCL
and CUDA. Don't forget to take a look at the source code of that amazingly
fast library.

The items listed was just what came to my mind immediately, there's a _lot_
more of topics to cover!

------
jeremiep
Once you know C++, learning C# is a breeze. I learned it myself last year by
going over the C# Reference [1] and scanned through all the documents only
stopping for new syntax or concepts. I then installed ReSharper and learned a
bunch more as I was using the language.

Without a doubt, C# is a much, much cleaner language. If performance or low-
level systems programming isn't your main concern, I'd say go with C#.
Compilation times are much better, the garbage collector makes many things
much easier to use and you still work in a statically typed language with
powerful type inference.

One neat thing about C# is that its a hosted language, the CLR can also run F#
and Clojure to name only two, both of which can interact directly with C#
code.

Ultimately, the choice is yours. I'd suggest trying it for a week or two and
by then you'll have a better idea which you prefer.

[1]: [https://msdn.microsoft.com/en-
us/library/618ayhy6.aspx](https://msdn.microsoft.com/en-
us/library/618ayhy6.aspx)

~~~
VOYD
I couldn't agree more. C# is Java-like, and could only be a addition to your
skill set. Especially now that MSFT has put it out to the OSS community.

------
ghuntley
.NET!

C# - Project Orleans ->
[http://vimeo.com/113730934](http://vimeo.com/113730934)

F# - Path to relaxation ->
[https://www.youtube.com/watch?v=s_iMgFAY0lk](https://www.youtube.com/watch?v=s_iMgFAY0lk)

Xamarin - iOS/Android/Windows Phone apps using F#/C# ->
[http://xamarin.com/](http://xamarin.com/)

------
HeyLaughingBoy
As someone who was described as having "an interesting career path" by his
manager due to simultaneously developing Windows device drivers and GUI code,
I say learn C#.

The availability of device driver writers is shrinking rapidly, as my search
for one in the last year proves. However, it's shrinking because the market is
shrinking. Might be more accurate to say that the market has already tanked.
At the same time, the market for C# devs is exploding.

The good news is that you can make $$$ as a consultant writing device drivers,
the bad news is that those gigs are likely few and far between. With your
background in signal processing and MATLAB and good C# skills, you'll have
opened doors to some interesting opportunities. A friend of mine with a
similar background just started a machine learning gig and he's enjoying it.

Take the C# job and learn the language. I love C/C++, but it's getting harder
to find work in that language unless you want to focus on embedded systems.

~~~
vonmoltke
> I love C/C++, but it's getting harder to find work in that language unless
> you want to focus on embedded systems.

It's getting harder even if you do want to focus on embedded systems. I see
the hiring bars for those positions getting increasingly higher, to the point
where it is almost impossible to switch in if you didn't start there or back
if you took a break.

~~~
pjmlp
Fully agree.

My employer moved away from C++ projects in the enterprise space back in 2005,
into more programmer friendly languages.

In spite all the nice C++11/C++14 features, the enterprise hardly cares for
C++ nowadays.

And when it does, the code is most likely pre-C++98, written with MFC,
Tools.h++ or similar.

------
RogerL
What is the C# role doing? Is it moving your career/knowledge forward in any
way (other than learning C#)?

It just seems like an odd choice (C#) given what you want to do. Scientific
computing is C++, Fortran, and Python, along with some Matlab, R, maybe Julia.
A ton of machine learning is in R and Python. Of course Java is heavily used
in data analytics due to Hadoop, so C## will help you there.

But really, it's pretty trivial to learn a language. C# is a fantastic
language, but it seems that it is likely that your role will be taking you
further away from your future plans, not nearer them.

I don't feel super strongly about either choice, other than pick the work that
is most interesting, rather than pick based on language. I'm posting mostly
because all other replies are pro C# at the moment, and I wanted to offer a
contrast.

~~~
3am_hackernews
I think you pointed out my only concern quite well.

The C# role is mainly developing application level software which would talk
to the C/C++ drivers and such. This C# will be fitted into another framework
which is the top level platform.

Can you please elaborate on this "But really, it's pretty trivial to learn a
language. C# is a fantastic language, but it seems that it is likely that your
role will be taking you further away from your future plans, not nearer them."

As people have pointed out, learning a new language seems definitely like a
good addition to the skill set, but I wouldn't want to do it at the expense of
pigeon holing myself.

 _TL;DR: I am not sure if I should become better in C /C++ or pick up C#?_

------
chrisbennet
I really love C# but it seems like a poor fit for doing what you really want
to do ("get more involved in machine learning, data analytics, scientific
computing"). It seems like a detour and not a step toward your goal.

~~~
3am_hackernews
Can you please elaborate?

At this point I am unsure if I should develop my C/C++ chops more or learn C#
application development and add something new to the skillset.

~~~
chrisbennet
I would look on Indeed.com or some other job board for the jobs that fit what
you think you would like to do and then look at the what languages and
technologies they are asking for.

I've used C# for computer vision, visualization and even for embedded stuff
but it really isn't popular for "fun" things and I think it will be even less
so in the future.

------
_random_
"I would really like get more involved in machine learning, data analytics,
scientific computing" \- this doesn't sound like C++ at all.

~~~
3am_hackernews
Why?

A lot of ML and scientific computing libraries are in C++. Quite a few of the
roles I have see want a solid understanding/experience with C++.

~~~
_random_
OK, you probably know more than me. I just assumed that most of those
libraries are then consumed from something like Python. If you want to develop
high-performance libraries themselves, then C++ is probably the way to go.
Unless you want to be on the cutting edge with something like Rust :).

~~~
3am_hackernews
Getting a job to develop with Rust would be a dream :)

------
lingua_franca
don't take that embedded job, don't become "C# only" either. if u want to do
big data later, try to learn Java/Scala/python on the road and do some
projects.

------
jarcane
_Going forward, 2-3 years, I would really like get more involved in machine
learning, data analytics, scientific computing._

I would recommend the C# experience in so much as it will build familiarity
with .NET, and thus allow you to graduate to F#, which is increasingly popular
in those fields (and damn good at them).

~~~
detrino
> graduate to F#

This is condescending to C# programmers when F# is nearly the same language.

~~~
_random_
It's quite a different and useful language but definitely not a better one.
You have to be forgiving, as F# is struggling to get more traction, especially
in terms of tooling... No ReSharper, no CodeRush, no Roslyn. But I've heard
that F# compiler implementation is quite elegant - that's something, right?

~~~
louthy
I have never understood this 'No ReSharper,...' argument. I've been writing C#
for 10 years and the times I've used ReSharper it's just got in the way and is
slow as hell. Effective C# development doesn't require ReSharper. CodeRush? I
have literally never heard of it. So again, clearly not essential. No Roslyn?
What? No C# compiler? Of course F# doesn't have Roslyn. Until very recently C#
developers didn't have Roslyn either and they managed to develop software just
fine. So clearly not a deal breaker.

F# is a fine language, and because of its heritage doesn't come with the
mistakes that were built into C# because of its C++/Java heritage. 'Better' is
clearly subjective. I subjectively find F# better than C#.

The OP is clearly interested in machine learning and the like, which would be
much, much, easier in F# than either C# or C++ (not that they can't do it,
mind).

