As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I have some 5+ years' background in C++/Unix development. I have been trying my hand at C#/.Net/WPF based software development for some time now. I am at a stage where I can write functioning applications fluently, but am not sure how to take my skills to the next level.
So, my question(s) to you all, especially to those who are experienced in C#/.Net/WPF:
What are the component skills and knowledge that an expert developer on this platform should have?
What technology-specific books would you expect a would-be expert to have read?
What other deliberate steps can I take to become really good at application development using C#/.Net/WPF?
Many thanks in advance! I would be especially grateful for comprehensive answers - I'm pretty sure many other developers have similar questions.
Learn how the C# language and .NET runtime work by reading CLR via C#.
Scott Hanselman's article, "What Great .NET Developers Ought To Know", is a great resource on the subject.
My team has worked in C# for the past 5 years. Typically, experienced C++ programmers take a week or two to become fully functional in C#. I've even seen some do it almost instantly, after sitting with them one morning, showing them our code, and explaning the basics of the language that differ from C++. But that's not how I recommend you do it.
I recommend you do this:
Read a C# book: My pick would be Programming C# by Jesse Liberty. Important chapters are the language itself and the basics of the .NET framework libraries. The .NET Framework is huge, so you don't have to know everything in detail. You can skip through (or skim) the Windows Forms chapters. Windows Forms is so different from WPF that it won't be useful to you if you are planning on only doing WPF.
(source: amazon.com)
Read a WPF book: The best book I read so far is Windows Presentation Foundation Unleashed by Adam Nathan. WPF has a steep learning curve compared to Windows Forms, even for experienced C#/WinForms programmers. It has a lot of complex elements to understand like XAML, dependency properties, bindings, templates, animation, resources, etc. This book teaches you the basics gradually and is easy to read and understand. And it's in full color!
Read about the Model-View-ViewModel pattern: I haven't found a good book on that yet, but it's been very important for me to make my WPF applications more simple and manageable. My favorite material to learn about MVVM is this one hour presentation by Jason Dolinger. He builds a WPF application from scratch using no particular pattern, and step by step, migrates it to the MVVM pattern.
Also have a look at this past Stackoverflow question: Questions every .NET developer should be able to answer.
For WPF specifically (and the power of WPF binding) I like M-V-VM: http://karlshifflett.wordpress.com/
Make sure you learn how to use and leverage Dependency Injection / Inversion of Control in your applications. Other very important pieces of software to learn to include with your development is Microsoft Enterprise Library and Windows Communication Foundation. Those 2 tools offer an amazing amount of leverage to avoid having to recreate the wheel to solve problems.
Other really good packages to become familiar with are NHibernate and Fluent NHibernate.
Windows Workflow Foundation is a very powerful piece of software however the complexity level is high this would be another great addition to your knowledge base time permitting.
I would add unit testing, TDD, and mocking frameworks to your list of things to know.
I have "The Art of Unit Testing" and found it helpful.
I really like WPF in Action and Programming .NET Components is essential reading for any .NET developer.
Related
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I was wondering if anyone has any tips on transitioning from PHP to asp.net c#? I've been developing in PHP for 7 years and I'm interested in learning asp.net. However, I've been disappointed with the books that I've read so far. Seems like every asp.net book has so many examples of clicking here and dragging here and right click on this, etc... that I seem to get lost. Learning the C# language isn't bad...I think I'm getting lost in either the IDE or the .NET framework. Any tips would be greatly appreciated.
Thanks!
I suggest you look at asp.net/mvc, not webforms - it will be a more natural migration.
The good resource is the official site: http://asp.net/mvc - it has tutorials, videos and more.
The .NET base class library (BCL) is very large. It is what you will interact with most of the time (outside of your own code). The only advice I can give - look things up on MSDN. It has very good documentation and it is worth taking your time reading through it.
For Visual Studio - the VS tips and tricks blog is a really good resource to learn about it.
Coming from PHP there's probably less you need to un-learn (I was a classic ASP programmer for a long time and made the jump to .NET about seven years ago).
Microsoft has a bunch of free tutorials, as does the W3Schools site. I found the Macon State tutorials to be extremely helpful when I was starting out:
http://www.maconstateit.net/tutorials/aspnet20/default.htm
The Microsoft exam prep books are pretty straightforward, too, mostly dealing with code instead of drag-and-drop.
I felt the exact same way about the .NET / Visual Studio environment when I first approached it.
If you're not into all the GUI stuff I would recommend George Shepherd's ASP.NET 4 Step by Step from Microsoft Press.
I learned ASP.NET basics on the 3.5 version of this book and I loved it. He really starts with the nuts and bolts stuff (open a telnet window and interact directly with the HTTP server for example) that I think would appeal to most *NIX veterans. His approach gave me a good feel for what all the complicated controls in ASP.NET are really doing under the hood, which was instrumental in growing my understanding of the platform.
http://www.amazon.com/Microsoft-ASP-NET-Step/dp/0735627010/ref=sr_1_5?s=books&ie=UTF8&qid=1325190956&sr=1-5
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I have a C++ background and having to develop a larger application written in C# and using the .NET framework. So far I've been reading a lot of tutorials online but looking for books preferably unless there are some really good longer tutorials out there. The project I am working on involves threading, sockets, and GUI design. What are the best books these days? I'm using .NET 3.5 for my application.
As already mentioned, Jon's book is very good. Also very good is Mark's book "Essential C# 4.0".
I was the technical editor of both books.
The books are well named. If what you are looking for is an in-depth guide to the C# language, Jon's book is marginally better. If what you are looking for is thorough coverage of the essential features of the language and frameworks, Mark's book has the edge. But I would recommend either unreservedly.
Grab Jon Skeets book, C# in Depth:
http://www.manning.com/affiliate/idevaffiliate.php?id=876_230
Companion web site:
http://csharpindepth.com/
"The definitive what, how, and why of C# 3" - Eric Lippert, Microsoft (from the foreword)
"Become a C# 3 maestro!" - Fabrice Marguerie, C# MVP and author of LINQ in Action
"The best C# book I've ever read." - Chris Mullins, C# MVP
"Clear and concise." - Robin Shahan, GoldMail.com
"A treat!" - Anil Radhakrishna, ASP.NET MVP
"Reveals C#'s powerful mysteries" - Christopher Haypt, BuildingWebApps.com
"So good, it hurts my head." - J. D. Conley, Hive 7 Inc.
"Enriches the beginner, polishes the expert." - Josh Cronemeyer, ThoughtWorks
Follow Jon Skeet's answers here on StackOverflow
Without a doubt: Pro C# 2010 and the .NET 4 Platform (or Pro C# 2008 and the .NET 3.5 Platform if you insist on .NET 3.5)
I'm sure you'll get many responses for useful books and tutorials and such, but for me, one of the biggest helps was installing and using JetBrains ReSharper. I was already familiar with a lot of development methodologies used by the team I joined. ReSharper was a great way to be constantly oriented to C# and .NET-specific standards and potential usages.
Resharper site
Head First C# is pretty good. All the Head First! books are pretty good).
Another good book is C# In A Nutshell, from O'Reilly.
It's old, but still one of the the best in-depth books about .Net framework/CLR fundamentals, is Don Box's Essential .Net
For indepth learning - CLR via C# 3rd Edition
visual c# step by step does a great job of not only familiarizing you with the language and .net, it also does a good job of teaching you to get around in visual studio. It starts out very basic, but by the time you reach the end of the book it has touched on event handling, database access, xml, and even asp.net giving you a solid enough foundation to be able to decide what you want to learn next. Most students in my class had little trouble learning the concepts here. If you already know c++ you might find this a bit basic, but the starter sections could be used to familiarize yourself with the visual studio environment if you aren't already, so they wouldn't be just an extended rehash of things you already know.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I'am more a sysadmin and a webmaster than a developer, but sometime I develop, including C# principally using Winform (and optionally GTK+).
I've started few weeks ago a WPF project, and it seem really powerful, but at start I feel like a hen who found a knife! There is so many difference!
stackoverflow abounds about topic like that, and I've read carefully some who are similar like:
Hidden features of WPF and XAML?
What all should an expert C#/.Net/WPF developer know?
But, when somebody start with WPF from Winform, What are the differences to which he must pay attention?
[EDIT]
What about some advices/links for LINQ with WPF?
What about some advices/links WPF Navigation?
WPF is completely different from other systems.
I have a few years of WinForms, Win32 and web programming experience, and I believe my web programming experience helped the most.
As for books, "Windows Presentation Foundation Unleashed" from Adam Nathan, Sams Publishing has helped me tremendously.
to getting started with WPF a design pattern Model View ViewModel (MVVM) would be important to know.
also I would recommend Adam Nathan WPF4 book. I think it's great one!
Thank you all, but all this is a bit diffuse, so I made a resources compilation and add some things by my own, please tell me what you think (or improve, I make it Community Wiki)
Strangely no one has talked about LINQ which seemed to be a central element of this technology.
Another thing that seems important to know given the time I lost, is not to use the WPF navigation system that doesn't seems to work properly from numerous sources I've read. So, it seem important to use a navigation framework, like Magellan.
And the routed event system seem to be an important point to look at in WPF, if somebody have some interesting resources about it, please add to this post.
RTFM
Windows Presentation Foundation
WPF Documentation Samples
.NET Language-Integrated Query for XML Data
.NET Framework Developer Center - LINQ
Software
In the Box – MVVM Training
Caliburn Micro: A Micro-Framework for WPF, Silverlight and WP7
Blog posts
sachabarber.net
MVVM for Dummies
Deep drive into WPF graphics internals Part 1
Building WPF Applications with the Page Navigation framework
Videos
MVVM Design Pattern NDC2009
The Code Project
Articles by Sacha Barber
WPF: A Beginner's Guide Part 1 of n
WPF: A Beginner's Guide Part 2 of n
WPF: A Beginner's Guide Part 3 of n
WPF: A Beginner's Guide Part 4 of n
WPF: A Beginner's Guide Part 5 of n
WPF: A Beginner's Guide Part 6 of n
Magellan: An MVC-powered Navigation Framework for WPF
Books:
Windows Presentation Foundation Unleashed (WPF)
WPF 4 Unleashed (the same as precedent but for WPF4)
Other Stack Overflow topics
Hidden features of WPF and XAML?
What all should an expert C#/.Net/WPF developer know?
Questions every good .NET developer should be able to answer?
I agree with Arseny, learning MVVM is core to learning WPF properly. It isn't a niche thing - when applied properly it can make your code cleaner, simpler and promotes decoupling and unit testing.
There is a very nice video here which explains both the concept and implementation:
Jonas Follesø explains the MVVM Design Pattern. In the video the guy is talking about Silverlight but the implementation in WPF is pretty much identical.
Once you've watched the video, and you're happy with the basics of WPF you could do alot worse than adopt a framework to take much of the heavy lifting and plumbing off your hands. I highly reccommend Caliburn Micro. This will lead you down the path of best practice by encouraging you to use MVVM but will also take care of much of the coding detail for you. The documentation on the site is a bit thin on the ground but there are a number of tutorials there that are being steadily added to.
For example, when following MVVM you would typcially have a View (e.g. a window) and ViewModel (a C# class). If you had a textbox on the view which contained an order number, you would have a corresponding property on your ViewModel called OrderNumber. Using a WPF Binding expression:
<TextBox x:Name="OrderNumber" Text="{Binding OrderNumber}" />
the textbox would be bound to the property on your ViewModel so that when either the textbox or the property changes, the other automatically updates. Using a framework like Caliburn Micro you don't have to write any binding expressions, it uses a simple convention based approach. In the previous example, if your textbox was called OrderNumber and your ViewModel property was called OrderNumber Caliburn assumes they must be the same thing and automatically binds them for you.
<TextBox x:Name="OrderNumber" />
As above, your XAML becomes much simpler, and leaves you to focus on getting the job done. I wish I'd found a framework like this earlier before I started churning out lots of my own ViewModelBase classes, ViewLocaters etc.
I also suggest Sacha Barber's blog and all its WPF related articles in codeproject. This guy rocks!
The most important thing a Winforms/C# developer should know/accept is that WPF is very different from winforms and Winforms way of doing things is not the correct way of doing things in WPF.
I have seen a lot of WinForms developers using events/delegates and threads to solve every each and every problem instead of using Binding, commands, triggers etc.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
How can I increase my proficiency in programming? I have a grasp of the basics of C#, but don't feel too confident about my ability.
Code something in C#
Read C# Code and try to understand it.
Read a C# Book (and please none of the C# in 21 Days books)
The confidence comes with the experience.
Read Stack Overflow every day :)
Seriously. Try to solve interesting problems. Even if you don't post your solution, come back later and see if other people came up with something similar, why their solution might be different, etc.
Project Euler.
http://www.asp.net/LEARN/videos/
Voile, you are programing ASP.net.
Keep in mind that you may need a little more grasp on C# as your codes evolve. For that use a good book, most Microsoft's learn C# are pretty neat(The learn ASP.net is quite lame).
Of course, thats what I did back then(about 2 years ago), nowadays you should be able to find some awesome tutorials online.
Good luck ;)
Think of a fun project of some complexity (more that "Hello, world") and code it.
Practice, practice, practice!
Also read forums, blogs, participate in discussions. You will learn many things that aren't even mentioned in books.
read lots of code, write lots of code and keep a copy of C# 3.0 in a nutshell handy.
Learn new programming languages. Learn data structures and algorithms and design patterns. Learn regular expressions. Learn databases. Learn HTML/XHTML/DOM. Learn learn learn learn learn.
In programming, knowledge === power.
Work on something, even if it's reinventing the wheel. You can read books, watch videos and listen to podcasts all day, but the real experience comes from actually building an application. Don't build an application that you know you can build - instead, create an application that is slightly out of your reach, then rinse and repeat.
The experience when you realize that you created a mess of spaghetti code that is unmaintainable cannot really be substituted, as this then really allows you to look into techniques to improve your code. Sure, feel free to read on MSDN about Events, Delegates and Lambdas, but reading about them in the moment you need them means that the knowledge really burns into your memory.
I try to have a rough knowledge about as many topics as possible, but that's usually rather shallow: I know that a technique exists and roughly what problem it solves, so that when I need it I can learn about it.
In my opinion, the only alternative to first-hand real world experience is even more first-hand real world experience.
http://www.appdev.com/csharp.asp
:)
You say you are learning ASP.NET and C#. Have you ever done any programming or web development? Because, if you have not, then you need to take a step back and learn the basics of HTML, CSS and get a grasp of how data is passed via HTTP between client and server. I would also strongly advise getting a grounding in basic SQL, because most serious web development will utilise databases at some point.
After that, some basic OOP (Object-orientated programming) theory would do you good. That way you have a good grounding in the subject-matter before diving into the coding.
For learning C# the I'd suggest a couple of good tutorials:
The C# Station Tutorial and Softsteel Solutions C# tutorial.
I also found the ASP.NET Quickstarts useful when I was learning ASP.NET - I prefer to learn by example than by theory.
As for confidence, I'm afraid that only comes via experience. Perhaps try answering a few questions here? Getting a few up-votes might just give you that boost. Good luck.
This fits in to catagory of answers you've received thus far, but review open source projects.
Understand how they work and maybe even why they were put together in a given way. Not only will it improve your ability to write C# but it will also improve your understanding of Software Engineering which is ultimately how you put a programming language -- C# or otherwise -- to good use.
Creating a Project that makes use of a lot of different technologies is a good way to grasp a 'big picture' view.
As an example, think of an n-tier application where you input a value into a very simple web page, this value being sent into a web service, and behind that WS a simple business layer that switches between readings into a table of a data base, then you return the value finishing the output in a postback of the initial web page. In my Personal opinion, every element of the layer is a simple one, but, making the whole system work without errors is good beginner's challenge, that way you could build a confidence in your skills, enabling you to undertake any other idea.
Well, that were my two cents. Good Luck!
There may be so many projects that u can make.choose the project that makes u.it's true take a project that you consider difficult for your level.
1) analyse your project
2) define the objective
find things that are necessary to achieve the objective
3)then derive an algorithm which clearly explains the workflow
4)then start woking
In my experience "Learn By Working" is a good idea.first grab the basics then start the work soon you'll learn step by step.never give up ,be a ceaseless crusader.
practise practise it's a only way of surviving as a programmer.
Being a best programmer requires a lot of patience,thinking skills,Attention,a thrist for knowledge.
Wise people always replace the fear of unkonwn with curiosity
Actively participate in programming (and non-programming) forums.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Appart from projects funded/pushed by MS itself, are there any real-world examples of projects that opted for Silverlight?
What were your experiences? Learning curve? Advantages? Resources? Pitfalls? Sacrifices?
--EDIT--
I'm most interested in the developing (team)'s story.
I was at a conference last week, and a number of non-MS people were telling their experiences of using Silverlight for line-of-business apps. Generally, it seemed positive. The advantage seemed that you could start with the Silverlight version, and then if you (later) needed more client control, mostly just copy the xaml and app code into WPF. mostly is important, as there are currently some glitches. But it is much harder to start with WPF and port to Silverlight ;-p
Sacrifices? Not as much power over the client. Limited framework, etc.
Pitfalls? Not-quite-compatible xaml. Different IO, etc.
I can't cite specific projects, as I simply didn't write them down ;-p Besides, they might be company-private. Knowing that they exist doesn't violate NDA ;-p
I've just reviewed the Silverlight showcase for the UK, an IT market I know pretty well, there are 31 apps featured and the break down looks like this
8 x Games = 26%,
6 x Experiments and fun = 19% - eg christmas cards and Xaml XEyes,
6 x Demos = 19% - eg a Deepzoom picture,
11 x Reasonable web sites = 36%
Realistically 31 apps for the whole of the UK, of which only around a third are real, is a tiny amount of development. This could indicate a couple of things,
1) Serious Silverlight development isn't happening in the UK, but maybe is elsewhere
2) Companies doing serious silverlight dev don't want to use Microsoft's showcase
3) There isn't much serious Silverlight development happening yet
My gut feel is that Silverlight is taking a while to become mainstream, it's a brilliant technology, but users don't buy technology or features, they buy benefits .... We need a couple of killer Silverlight apps, then it will take off like Ajax did, once google (and others) showed the way
Check out the Microsoft Silverlight Showcase. There seem to be quite a few Silverlight apps in the wild.
Retouch Genie Ltd - Online photo retouching and restoration site uses Silverlight for its gallery and main client area. Its got quite an interesting photo display control which is quite nice. Here is the link to the before and after gallery that allows you to see the photos in their original state and again after image enhancement.
We are in the middle of developing a system in silverlight that does real time communications with customers. The problems we've had are due to the lack of real-world samples and the change from VB to C# as there is next to no documentation in VB. Apart from that it has been great to develop in. Everything works well and development time was very quick considering it is a brand new technology. We're looking forward to the next release and it's enhanced video handling.
Checkout silverlight case studies for developer story:
business app - http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?casestudyid=4000004876
I even developed an Android app with Silverlight and Java mixture. Without SL it would be really damn boring and probably impossible what I wanted to achieve, check it out: https://market.android.com/details?id=uk.co.aloneguid.todash&feature=search_result