5 ms·
Ask HN: C# vs. C/C++ as career forward.
Hola.
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/C++) and think it is pretty cool. I am still learning lots of new things everyday.
Now, I am at crossroads at work - I have to choose between taking up a C# developer role and C/C++ (focused on driver development) role. I don't have any prior C# experience; other language which I currently work as my side projects - Python.
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.
My question -
With my current skill set, future thoughts, what should I choose - C/C++ role or C# role?
My reason for asking this community is that I have no experience with C#. I didn't have a CS background so I am slightly wary about trusting my own judgement in such cases.
Thanks :)
Edit: To clarify, I am not opposed to C# or any language at all, just want to sure I wouldn't pigeon hole myself.
Another question: If I know C# (as opposed to only C/C++) how related would be Java?
- jarcane 12y agoGoing 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 12y ago> graduate to F# This is condescending to C# programmers when F# is nearly the same language.
- jjnoakes 12y agoAnd Chinese is nearly English.
- _random_ 12y agoIt'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 12y agoI 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).
- jarcane 12y agoI'd be a lot more willing to get on board with the former part of that sentence if you hadn't blundered into the latter bit. Paul Graham was right again. http://www.paulgraham.com/avg.html http://www.paulgraham.com/avg.html
- deleted 12y ago[deleted]
- ghuntley 12y ago3 reasons why the C# type system is broken, and how F# improves the situation @ https://zeckul.wordpress.com/2015/02/05/3-reasons-why-the-c-type-system-is-broken-and-how-f-improves-the-situation/ https://zeckul.wordpress.com/2015/02/05/3-reasons-why-the-c-...
- jeremiep 12y agoOnce 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 12y agoI 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.
- HeyLaughingBoy 12y agoAs 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 12y ago> 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 12y agoFully 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.
- rnc 12y agoCare to elaborate? I'm early in my career(24), love embedded systems, but I just don't know if there are good jobs available in this industry for young people. Could you give more info?
- vardump 12y ago
- deleted 12y ago[deleted]
- RogerL 12y agoWhat 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.
- vonmoltke 12y agoJava gets quite a bit of use in ML as well.
- 3am_hackernews 12y agoI 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#?
- pjmlp 12y agoC# is used a lot in health sciences.
- _random_ 12y ago"I would really like get more involved in machine learning, data analytics, scientific computing" - this doesn't sound like C++ at all.
- 3am_hackernews 12y agoWhy? 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_ 12y agoOK, 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 12y agoGetting a job to develop with Rust would be a dream :)
- chrisbennet 12y agoI 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 12y agoCan 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 12y agoI 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.
- deleted 12y ago[deleted]
- ghuntley 12y ago.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/
- vardump 12y agoC# 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!
- lingua_franca 12y agodon'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.