Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I am a C# developer.

My observation of the IT industry as a C# developer is that the technology keeps changing or being updated by Microsoft like LINQ, WCF, and WPF etc.

OOP has been the fundamental for all kinds of developments that we see today in any language.

My question is,

  1. Is it good if I am a decent programmer in OOPS but not mastering any specific technology?

  2. As a WinForms developer, is it necessary to know C++ with C# for better job perspective?

share|improve this question
OOPS as in ... I did it again? –  Steven Jeuris Nov 9 '11 at 9:03
No worries, I understood what it stood for, I've just never seen it with the 's' attached and am wondering what it stands for. :) –  Steven Jeuris Nov 9 '11 at 9:26
This is a bit of a silly question. You are not a "C# developer", "a WinForms developer" etc etc, you are a software engineer. Like any good engineer, you must have mastery of the tools which enable you to create solutions. –  MattDavey Nov 9 '11 at 9:42
@MattDavey Thankyou for your feedback. As per your guidance, I shall have positive approach towards learning different tools. Looking forward to your support. –  Karthik Sreenivasan Nov 9 '11 at 10:02
@MattDavey a specialist shouldn't feel they need to have the same broad knowledge base that a 'generalist' would have. A great specialist is going to spend his time focusing on his speciality rather than improving his grasp of big generalist problems. –  Kirk Broadhurst Nov 16 '11 at 20:49
show 4 more comments

4 Answers

up vote 13 down vote accepted

Object Oriented programming is a paradigm, not a technology. Different technologies follow this paradigm, like C#. There exist dozens of different paradigms, which basically are different approaches to solving problems.

LINQ inherits concepts of functional programming to make your life easier where pure OOP falls short. Learning this technology is a must if you are a C# developer.

WCF and WPF are part of the .NET framework to solve particular common scenarios. WCF can be used for networking, while WPF can be used to create visual applications. Obviously, if you aren't creating an application which does any form of communication with external applications, there is no need to learn/use WCF. Likewise for WPF, there is no use to learn it if you don't need any visuals. Alternatives exist for both WCF and WPF, but given they are frameworks supported by Microsoft they are often a good choice.

Even experimental alternatives to LINQ start to pop up, e.g. Push LINQ. These are far away from completion, and you are probably better off sticking to ordinary LINQ for the time being.

share|improve this answer
Thanks a lot Steven Jeuris. Your knowledge sharing was most helpful. I shall start learning LINQ as my current focus is only on OOP. –  Karthik Sreenivasan Nov 9 '11 at 9:45
To get you started on LINQ, see these samples :) code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –  xci13 Nov 9 '11 at 10:29
@AdelCKod Thanks for helping budding developers like me. The link was very helpful. –  Karthik Sreenivasan Nov 9 '11 at 11:10
I fell that way too (hopefully I understood you correctly): WCF is for networking and there will be other ways of doing it developed. WPF is for GUI and there will be other ways of doing it developed. LINQ, however, runs deeper, and it has to do with Monads, and is applicable to other languages, say Python. Even though stuff like PushLinQ tries to address so of the LINQ's shortcomings, mathematically-inclined coders could contract and compare both of these to stream processing, etc. that existed in LISP and ideas from lambda calculus. GUI and networking are much more transient than that. –  Job Nov 10 '11 at 3:47
add comment

As usual "it depends". Really it mainly depends on whether you need these tools to get your particular jobs done. However you should know what these particular technologies allow you to achieve otherwise you could end up reinventing the wheel to get a particular job done or creating non-standard parts to get the job done.

For example, if you don't know LINQ you could achieve the same result by using loops to query a dataset etc. but this would probably not have as good performance and take 10 lines of code where as LINQ would take 2.

I don't know every .net related tech going, e.g. I don't know WWF (Workflow) at all because its never been needed, but I do know what it is used for!

TL;DR you should know what tools are used for even if you don't know how to use that tool.

share|improve this answer
I completely agree with you. If we know what are the uses of a particular technology, then when the situation arises we will be well equipped to be able to explore that technology to get the job done. Thanks. Looking forward to your posts. –  Karthik Sreenivasan Nov 9 '11 at 11:16
add comment

Resharper is the best tool Ive found to learn LINQ. I've so far not had the need to learn more than the refactorings suggested by Resharper.

As for WCF I'd recommed learning when/if you need to. Study webservices, SOAP and remoting instead. If you grasp the concept you can very quickly learn WCF when you need to.

share|improve this answer
In my earlier company, I started to learn WCF which is an year ago but after my shift, I did not get the opportunity to work with WCF. Thanks to you I feel better. –  Karthik Sreenivasan Nov 9 '11 at 9:49
ReSharper is a great first step towards learning LINQ, but it far from learns you every way in which you can use it to compact/and even optimize your code. You can only identify this 'need' once you understand how you could use LINQ instead, so your argument is flawed. –  Steven Jeuris Nov 9 '11 at 13:34
@StevenJeuris I would like to clarify my understanding. So to begin with I can try LINQ with the tutorial specified above and when I am good with the basics, I can proceed to use Resharper to enhance my skills? Please correct me if I am wrong. –  Karthik Sreenivasan Nov 9 '11 at 14:14
@KarthikSreenivasan: When you have ReSharper installed it from time to time suggests you how to write code you have written using LINQ instead. So it is a great way to learn to do similar things as you are already doing in a more concise way. However, it can't teach you everything, which is the point I was making to Filip. –  Steven Jeuris Nov 9 '11 at 14:30
add comment

LINQ is far from necessary, but once you start using it you'll never want to go back.

Even if you've never done any functional programming, the functional aspects of LINQ will lead you into a new way of reasoning about problems and an expressive new way to represent your ideas in code.

Even if you've never used databases to store data, the fact that you can use LINQ on any data structure which implements IQueryable, means that you can learn to use LINQ with standard Collections now and when you later need to add XML, ADO or SQL, you know much of what you need already.

For me, LINQ to Objects was an elegant addition to C# and I'd love to find something equivalent for Java.

share|improve this answer
I think when projects are migrated from C# 2.0 to C# 3.5 or 4, we can observe the transition to new ways of implementation. –  Karthik Sreenivasan Nov 10 '11 at 2:13
add comment

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.