Microsoft technologies keep getting better but they do so on the expense of adding one more abstraction layer every time. In the early stages we used to play with C# code and SQL procedures to perform CRUD operations. Then generics came along with ADO.NET, DataSets, Entities. Next, LINQ came offering LINQ to SQL, to XML, to Entities, to Objects. To get more easier and more confusing, EF 4.1 came. C# just kept evolving and adding new abstractions layers again and again.

The end result is that I am so confused that I don't know which one is which and when to use which one. When I try to follow books, some teach EF while some are stuck with ADO.NET. Seriously I have no clue whatsoever why we have evolved so much for data manipulation

To be honest, all I know is the C# syntax and some basic stuff. Data manipulation is out of the window and so are the advanced features.

  • Is there a unified manner to learn C# ? I don't want to use Entity Framework and LINQ when I don't understand them or what they offer. I just want to have a thorough understanding from Level 0 to Level 10.
  • Also, I am thinking of learning PHP simultaneously because I feel learning some other language will might help me understand C# better. Is this the right thing?

closed as off-topic by gnat, TZHX, Robert Harvey, Jules, Marjan Venema Jul 14 '16 at 11:11

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic here. They are only meaningful to the asker and do not generate lasting value for the broader community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – gnat, TZHX, Robert Harvey, Jules, Marjan Venema
If this question can be reworded to fit the rules in the help center, please edit the question.

  • My highly subjective opinion: Start learning PHP (or Python). If you don't get basic and intermediate concepts, a language with a lower learning curve may help. Different people learn at different rates and programming languages are tools. Not just development tools, but learning tools too. It's possible that C# and you are not a good match, but with another language you will thrive. – yannis Dec 2 '11 at 7:19
  • 1
    And MS documentation is good, but at times extremely hard to understand. Unfortunately they sometimes approach documentation from a marketing perspective, inventing names for long established approaches and such, just to present them as unique in the MS ecosystem, and at times that's extremely confusing because you can't immediately identify the concepts involved. That's not the case with any open source language, although there is some idiomatic documentation in every language, you won't have to deal with all the marketing speak. – yannis Dec 2 '11 at 7:21
  • Learn how to design algorithms first - then you'll be able to spot higher level patterns and map them to the available language and library features efficiently. And stay away from learning recipies and patterns, otherwise you'll end up doing a cargo cult coding. And, learn Scheme and plain C instead of PHP in parallel, it will make you a better programmer. – SK-logic Dec 2 '11 at 10:16

You are confused? The situation is much worse in the Java world, where a different web framework is in fashion at every month.

My advice: you don't need to learn C#, you already know it. Employers rarely seek super language skills nowadays. The emphasis shifted towards the tools and frameworks, to the IT (MS or Java) "ecosystem". Don't bother with PHP.

Try to cover the whole of the application development stack, ui/server side/databases. Unless you live in the US I'd recommend a horizontal approach: try to learn many things, but not too deeply. Set yourself 3 month long 'projects', and always focus on one thing at a time. Don't rush, don't panic :)

Pick the most popular technologies first, what you can see in the job ads the most. But don't learn new languages (script/dynamic, functional) just now, those can wait a few years. Learning new languages is a gold mine from a professional point of view, unfortunately in the job market a solid technology/tool portfolio is more important.


Here is my advice:

  • Learn LINQ - Linq is useful in many situations and for different purposes.

  • Don't learn EF in detail as long as you don't really need it. Of course, you should know what it is good for, but unless you are going to create a new database application with a bunch of domain model classes, you won't need it.

  • Learning PHP will be good for understanding PHP better, but probably not so much C# (but who knows what you will find there). There are other languages which may be better suited than PHP if you want to see things from a different angle - I suggest that you try a functional language like Lisp, Scheme, Haskell, F#, or a weakly typed language like Python.


EF, LINQ, ADO.NET etc. are all tools you will use in some cases, and throw away in others. Just like in a toolbox of a craftsman, you'll find not one, but dozens of screwdrivers of different sizes and shapes. Why not using one screwdriver for everything? Because it doesn't work this way.

This also means that an experienced developer needs to be familiar with all those tools. It also means that you have two approaches:

  • Start to learn everything at once,
  • Start to learn something you understand better, then learn another tools, etc.

I'm pretty sure most of the developers would prefer the second approach, but I also believe that for some, the first one will work better. You can also mix both: go see what EF is about while just starting to learn ADO.NET for example. After all, before choosing the one you understand better, you must first try them all a little.

After learning those technologies for a while, you'll also be able to detect which ones will be useful for you, personally. I know that in my daily work I don't need EF at all. Not because it's bad, but just because my work doesn't require it. I then can concentrate my learning efforts on other technologies I use every day. Maybe in your daily work, EF will be your favorite tool, and you'll never need ADO.NET. In the same way, I may have just an idea what Workflow Foundation (WF) is, while some other developers are required to have a deep knowledge of this technology if they want to find a job in their sector.

Also, I am thinking of learning PHP simultaneously. Because I feel learning some other language will might help me understand C# better. Is this the right thing?

I would not do that. Especially with PHP. I wouldn't even learn C# and some normal language, like Python, at the same time: chances are it will make more confusion than help. F# could be an interesting choice if you're interested in LINQ and how to write code in a LINQy way, but I still recommend postpone the learning of F# until you know C# enough.

If this particular question interests you, you can search for other questions on Programmers.SE, specifically about learning several languages at the same time.


Your question is rather difficult to answer in detail because the answer would cover lengthy discussion of the many points you raised but I will try to cover the core concepts here. I will start by:

Also, I am thinking of learning PHP simultaneously. Because I feel learning some other language will might help me understand C# better. Is this the right thing?

Well, if you are a person with average IQ, it is hard to learn PHP and Microsoft Stack (C#, EF, LINQ, ADO), ...etc + different frameworks, ..., all together at the same time. The above statement is my opinion and is not scientific fact of course.

So, first, determine what you want to do with all of this. Are you building a system for yourself, do you want a job as a professional developer, etc. This is very important.

Next, I assume that you should start by focusing on ONE technology stack (or event 1 tool).

Assuming you go with Microsoft, you then have to pick an application model (eg. Silverlight, WPF, ASP.NET or Windows Forms). This is very important too because each of those technologies have its own framework and you need to be familiar with other related technology to the selected application model (e.g. HTML is needed for ASP.NET but not for WPF).

Now we come to the database part. You either pick no-sql, XML only or SQL RDBMS (like most do)

Let's say you go with SQL RDBMS, you still have a combination of choices to make regarding how to access this data from your code:

  • ADO.NET (with or without LINQ)
  • EF with LINQ
  • Use of a 3rd party ORM (I will not get into this here because it is a very lengthy subject)

ADO.NET worked for the early days of .NET and represents an important foundation for data access, so learning it is important.

You say:

I don't want to use Entity Framework and LINQ when I don't understand them and what do they offer.

If your goal is to be a professional developer with Microsoft Technologies, you need to know LINQ (and I suggest you add EF as well) to some extent even if you don't directly use them in your current project. Knowing these technologies will open a wider market than knowing ADO.NET only.

"At Microsoft’s November 2009 Professional Developer Conference, the legendary Don Box, a Distinguished Engineer at Microsoft, said, “If you’re a .NET developer Entity Framework is where we’re going. We’re there. Get on board, it’s time."


"The ADO.NET Entity Framework has shifted into becoming Microsoft’s core data access platform for building .NET applications" - From the book: Programming Entity Framework by Julia Lerman.

The EF with LINQ allows you to program using your business objects instead of programming against data tables directly. Some of the Other benefits are listed here:

Entity Framework Features

New Features in Entity Framework 4.0 (V2)


My advice is that you learn LINQ for 2 good reasons.

Although LINQ is only a tool, and is not appropriate for all purposes, it is a very powerful tool with many possible applications. Obviously it is useful for LINQ to Entities EF type db access but it can also do neat things like this file text aggregation.

Secondly, in learning LINQ you will expose yourself to many of the powerful new C# features and .NET language extensions such as Implicitly typed variables, Anonymous types, Object initializers, Lambda expressions, Delegates, First Class functions, Generics, Iterators using yield and Extension methods. Much of the features that have progressed C# significantly as a language and .Net as a platform either directly support or are indirectly involved with LINQ. If you want to get deeply into C# that would be the sensible direction to take.

Jon Skeet's book C# in depth is excellent and covers these things, although definitely not the 1st C# book you should read (and probably not the second one either)


I think if you learn PHP in parallel to C#, you will see the common values in programming languages and that is a very supportive action you can take. And when you start learning PHP you will notice that there are several frameworks there too. And all the techniques that you listed are some tools you can use in your projects when you need them. But the main branch of a language and in general what a programming language is, is your main knowledge about the craft, so make it stronger while you can.

For example you can try to use C# new language features like functional programming, anonymous objects(maybe you know them already). From there you can hop to more dynamic languages like Javascript, Lisp etc.

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