I've been doing mainly SQL and front-end HTML/CSS stuff for the past 4 years. I've done a quite a bit of (procedural) coding in a BASIC-like language, too. I do not have formal CS training (I have an econ degree).
Now I'm switching gears to OOP in C# .NET full-time. In order to ramp up, I've been reading about fundamental CS topics (e.g., data structures, algorithms, big-O notation) mainly on StackOverflow and Wikipedia. I've also read through sections of Code Complete 2, Refactoring, and Head First Design Patterns.
I get the feeling, however, that my approach to becoming a developer is somewhat backwards. I feel like I need to familiarize myself with the available tools in C# and .NET before I can truly benefit from learning about how best to apply them.
The part I think I'm missing is sitting down and getting familiar with the .NET framework by actually doing some programming. I need to get exposure to the day-to-day tasks that go into building a real application.
Since I don't have a mentor, I was wondering if anyone can suggest a book or website that guides beginner programmers through building a (somewhat) real .NET application as a way to teach them the fundamentals.
Thanks!
http://www.asp.net/learn/mvc-videos/
storefront covers everything from design to testing. Should get you started quickly.
http://codebetter.com/blogs/karlseguin/archive/2008/06/24/foundations-of-programming-ebook.aspx
Shows some basic concepts but they are very useful. Includes a sample app to learn from.
Finally,
http://weblogs.asp.net/Scottgu/
ScottGu's blog is full of useful real-world examples and has a ton of links.
And one more note, the book BlueJ offers some great insight into OO if you are new to it.
http://www.bluej.org/
I am in a similar position as you and was looking for how a professional would go about designing and implementing a small program from start to finish. I found these two useful resources:
Rob Conery has a series of blog posts where he takes you through how he designed an eCommerce site using ASP.NET MVC.
In a similar fashion, Stephen Walther builds a forum using ASP.NET MVC
It is hard to get real world experience through reading as most companies guard their software artifacts (designs, tests, etc.) like gold. However, sometimes companies will publish their experience with technologies as case studies. Some of these case studies are no more than marketing crap. But sometimes, you hit a gold mine of information that gives you insight on a real-world project. This Barnes & Nobles case study on the development of a new Data Warehouse does that in part. Here is a list of some more:
ASP .Net Case Studies
.Net Case Studies
Ultimately, software development is driven by business needs and that's where your Econ background could come in handy. Check out the book Return on Software: Maximizing the Return on Your Software Investment by Steven Tockey when you get the chance. He goes into things like ROI, IRR, etc. Things only an Econ major could love :)
Related
I have a friend of mine who owns his own software consulting business. Most of the stuff his employees work on is .NET related development. He's been out of actual development for many years, and has been focused on building his business. He asked me the best way to get familiar with the whole .NET platform and development under .NET. Is anyone aware of a video training series, or something similar, that's designed to get someone up to speed on all aspects of .NET?
This is the obligatory "port another project into .NET" answer.
My guess is that he doesn't have to cover all of .NET, but a great way to get up to speed with both C# and a significant part of the .NET framework is the C# 4.0 in a Nutshell book. It assumes some programming experience and covers a lot of stuff.
In my opinion the first step is to read a book which covers different parts of .Net Framework. Pro C# 2010 and the .NET 4 Platform is one possible book as it covers different technologies such as WPF, WCF, Linq, Ef, Asp.Net. They are not discussed in depth but is a good resource for getting familiar with current technology stack.
Also, I would recommend actually developing in .Net as is many knowledge comes from the actually doing it.
In addition to the other answers, maybe your friend could sit in on any code reviews, design sessions or even perform pair programming with the other developers once he gets a basic understanding of things on his own. I suppose this could be difficult in a consulting business vs. regular development shop though.
In addition to all of the books and blogs which will be mentioned, I always recommend people start learning with something practical.
When I'm teaching I make up simple exercises broken down into chunks like build a basic database, try simple things like displaying the data, filter the data using drop down, add auto postbacks and update panels, updating the data in the DB. It doesn't take long to get an overview of the basic concepts, techniques and tools when presented with examples. And then it's down to experimentation, imagination, and research!
Buy Visual Studio and an MSDN membership - in case its a startup there maybe various options to reduce this cost (Bizspark/Websitespark)
Go through common walkthroughs - areas to go through are Winforms, Asp.net, Asp.net Ajax in that order. Can go through WCF, Silverlight and other framework options later.
Search the web for 'Azure trial' - supposedly, there is a one month free pass available. Dont know if this is real, but if it is, take it and deploy simple applications on the cloud - learn what Windows Azure and Sql azure are all about. After a while can learn about Appfabric messaging platform as well.
After this, start deep-diving into any areas of the technology depending on project needs.
Channel 9
ASP.NET getting started
Dimecast
DNR TV
more than reading any book what made get started with .NET was doing projects. Start building a web site if you want to learn ASP.NET, you get to learn C# and VB as well like this. Just by reading a book each chapter would take lot of time. Initially you will do lot of mistakes and you will frequently get the dreaded yellow error page. The more mistakes you make, the merrier. My experience with .NET is limited to ASP.NET, C#,LINQ, web services, SQL Server 2008. But it took less than 20 days for me to get to know about all these stuff. Now I am trying to do WPF, WCF, Silverlight projects. IF I read any .NET book now, it wouldn't take much time for me to complete it.
I realy suggest to use a step by step teach your self book. They are good for beginners and have some practices maybe something from SAMS publishing like
Teach yourself c# in 21 days
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I've been developing with C#/ASP.NET (and now ASP.NET MVC) for several years. I'm 100% self taught, and I'd like to believe I try to do what's best practice, but...
My question is, what do you think separates self taught developers from trained professional developers? What techniques, in C#, would you consider advanced - that self taught developers may not have picked up on their own?
Update:
I love the responses so far, thank you. Here's a bit of clarification for what I was looking for.
What C# features/techniques/usage do you think that professional developers use that self-taught may not (usually self-taught go with what's easiest to learn first)?
lets say,
from 100 developers, 5 are highly motivated by their passion for technology and self teach them what they think is the best thing to know.
the other 95 developers will be trained by those 5 developers and what they think that are the best techniques.
Best practices/techniques?:
IMO these are ways, to develop a software product, known to lead to a performant and maintainable system - and these ways come with the experience from the development of a real software system and not one from a training course.
// Latter edit:
//Short on topic answer
-> C# best practices in a corporate enviroment?
They use frameworks similar with CSLA http://www.lhotka.net/cslanet/ , or they make or use frameworks which has at the basis concepts like: Business Entities, Business Components or Business Objects.
More sepecific on C# -> nothing just go with the conventions :).
//Long boring answer:
-- My background
I worked with ASP.Net MVC 1.0 in a company with 170-200 employees and now I'm working in the same company but just on ASP.Net, we pretty much do ERPs and big web apps like that.
I self taught myself ASP.Net MVC and when I worked on ASP.Net MVC I had to do small trainings for the other memebers in my team which didn't had experience with it.
By my logic,
A selft thaught is a developer who works on frelanching projects or in a startup.
A corporate trained developer is a person who works in a corporation with 100 - 50000 employees and does java/.net in well controlled and planned corporate enviroment.
Because even if you are self thaught, in a corporation you will end up beeing trained.
//Technology
A self thaught thinks more about the technology itself, not carring about: "will this thing be easy to maintain after 3 years, is this good for an enterprise client... and so on.
The thing is that a self thaught will always teach himself the latest technology while a corporate trained developer usually is trained on the "mature technology" which is "risc free" and everybody in the corporation board thinks that this will stay here for at least 10 years...
Therefor because of that an responsible PM in a corporation will enforce their devs to use in the project an Inversion of Control Framework - one that is mature :P.
While a self thaught, because he didn't went through big projects, will be tempted to just code.
I go on the logic that a big project needs over 50 devs and that is kindoff corporationish.
Remeber if you are self thaught and work in a corporation you will get trained...
//Project and scaling thinking
A corportate developer doesn't have to think, he has to know very well the flow and the practicess that are thought in the corporation.
A corporate PM will always think about scalability and to have a smooth architecture, while
a self taught person should think like this:
http://www.aorsi.com/wb/startups_die_for_not_having_customers_so_stop_thinking_about_how_to_scale/
//A little bit of coding practicess:
Corporation:
We want to develop X and Y, good let's build a framework around the solution, maybe something like CSLA, Business Entities or worst case Business Components, we create 3-tieers and split the project on tasks.
In a corporate enviroment you want to do this because you are always thinking about maintenance, which is kindoff interesting because you will reach the sentence -> "we need developer A, B, C, to train the newcomers about the framework" - so you still have a little bit off overhead with the training...
Self thaught developer:
Dives directly into the tehnology.
//Coding practicess are the same for both self thaught and coroporate trained:
For example in ASP.Net MVC
Keep your controlles very clean and small in size.
TDD is more and more frecvent used in corporations and by self thaught devs.
I am also a self-taught developer, and have moved into a company that is largely made up of "qualified" developers. I don't deny that many of my colleagues are the best people I have worked with, but being self taught has also given me a drive to improve myself constantly to try and keep at their level.
From my experience, qualified developers tend to have better grasp of process. They have good structured methods of design and implementation. The qualified developers usually also have more confidence to chose and idea and stick with it, drawing on the experience from their qualification as well as their own experience. That isn't to say that being a self-taught developer is a bad thing. Self-taught developers that I have met tend to be well read, and good at trying different solutions to find the most appropriate.
As for what techniques in C# specifically a trained professional might have that a self-taught person may not, I don't think there are really any. However the trained / qualified developer may have a better understanding of things like design patterns, data structures or development methodologies, but a good self-taught developer will be able to learn these as well.
The main pattern showing up in the differences between self-taught and trained developers is around awareness of theory, technology options available and importantly relevant technology and industry standards. That's not to say a self-taught developer cannot match a trained developer, it's just a trend. Examples of each specific to C# and ASP.NET may include understanding OO concepts and how they apply in different scenarios, application of design patterns, understanding of TCP/IP and HTTP at a protocol level, and knowledge of PCI-DSS and its implications for web application development.
self-taughts would..
be self-motivated to software development.
be passionate about their job.
be not complaining.
have far better knowledge of how web and http works [since you asked asp.net mvc].
not first solve the problem, rather first find the right problem.
eventually become ninja-developers.
All developers are self-taught developers. Training courses are an introduction. The most, and best, training comes from experience, and any professional developer must be prepared to be continuously "in training". In fact, many job postings explicitly list self-learning as an expectation.
It's unreasonable to expect schools to stay current with the various changing technologies used in the real world, so they rightly tend to focus on concepts. But even patterns and methodologies aren't static. What is the "best" pattern could depend on the language, or the framework, or the project itself. Again, developers must be adaptable and open to learning new concepts or even reevaluating concepts they were taught in school.
As for C#, general object-oriented programming practices apply. I don't think C# itself is generally taught in schools, but language-specific features are usually just convenience layers over patterns that are already used in general. For example, properties are just pairs of methods, and events are just an implementation of the observer pattern. As with all languages, you should follow the conventions used by its community, such as identifier naming rules.
If you're worried you might be overlooking some topics that are covered by professional training, you could look through complete lectures from top universities at YouTube EDU:
http://www.youtube.com/education?category=University/Engineering/Computer%20Science
One can self teach himself programming languages, algorithms, OO principles and patterns, XP and group based developing, usability principles and testing, etc.
But it's most probable that he will only learn about programming languages.
Even in universities some people learn only about programming languages.
You can teach anyone to be trained professional developer giving to them some templates and patterns etc. but you cant teach anyone to be passion for technology and self learning.
Self learning and motivation only the key to workmanship.
e.g if we compare developers with food =>
Trained professional developer - unnatural fast food (MacDonald's etc)
Self taught developers - excellent natural well cooked home food.
Now feeling the difference?
(HOBBY) I own a Macbook Pro and iPod Touch so developing iPhone/iPod/iPad apps seems like a logical thing to do in order to get some experience in the programming field. Besides I want to write a new application similar to the Capsuleer (Character skills monitor app for EVE Online MMO) but with more features. It's something I'd love to have on my own iPod Touch and I am sure other people will welcome a new EVE Online app for their iPhone or iPod Touch.
(CAREER) I want to learn ASP.NET (and possibly Silverlight later on) for my potential future job. I plan to work in the .NET field, so it's a good idea for me to start learning C# and ASP.NET ASAP.
Is it a good idea to learn completely unrelated technologies at the same time? Or would it be better to learn one thing at a time? Objective-C first, and ASP.NET second. Or vice versa.
Thanks,
Sahat
UPDATE 1: I am reading both ASP.NET 4.0 and Objective-C 2.0 books right now and let me tell it's going great so far! Diversity is probably what makes it so fun and less dry. While I am on the bus to Manhattan in the morning I learn about ASP.NET and Visual Web Developer 2010. While I am in school I am programming a robot in C++ for the Summer Robotics Workshop. And when I am heading back home I am learning Objective-C! I was really scared at first to learn 2 completely unrelated programming languages, but as it turns out it's not too bad!
It depends on your comfort level with languages in general. If you have decent experience, then moving from one language to another should eventually get to be very fluid. As an example, I'm a .NET developer during the day, but usually mess around with Objective-C and Ruby at night. I think the only downside is being frustrated with each language (for example, "why can't c# do this thing that ruby can do?") But in general, it is pretty easy to isolate the two, especially if you're good at compartmentalizing things in general.
Personally, I'd say go for it. Immersion in a single language can get you far, but I think seeing multiple languages and platforms regularly makes you a better programmer in general. It will show you different approaches to the same problem, and will teach you how to decide what tools to use for a particular problem. Plus, it beefs up the resume. Don't discount the power of Objective-C being on that piece of paper, because there are good careers to be had there. And as the Mac platform becomes more and more popular, many companies will begin to port .NET desktop apps to OSX, and knowing both could be an invaluable asset.
Since you are keen on developing for iphone. Focus on objective C.
Think of it as C with a decent Object Oriented extension.
You will learn C and object oriented. And it is apple friendly.
Career wise it will be pretty timely resume stuffer to have an Iphone app in your
portfolio.
On the other hand I recommend you learn how to design programs first.
The time you spend will be repayed in your first project.
You will be leveraging it from then on. It is really the best route.
To learn that.. go here: http://www.htdp.org
They have a great free downloadable dev environment and tons of material online.
They are the best thing since sliced bread.
You can work through their stuff really fast and dont waste time caught up
in syntax irrelevance.
That's pretty much my coding life in a nutshell, so it's quite possible and practical. I learned .NET on the job and taught myself Objective-C.
You didn't mention if you have any prior programming experience, and that changes the advice drastically. If you have no understanding of object-oriented development or programming in general, I would recommend staying the hell away from O-C for awhile. I wasted many high school hours trying to learn Cocoa working off of one semester of C++ programming. When I got into college and objects were the norm, Cocoa made much more sense.
Once you have a little understanding of object-oriented programming, you could even teach yourself the basics of Cocoa...without writing in Cocoa. Cocoa apps are written in a structure called Model-View-Controller (MVC), and Visual Studio has a very popular and well-supported MVC template for writing C# applications.
Good luck!
Objective-C on iPhone and C# on ASP.NET are very different, but there are lots of similarities too:
Both options have comprehensive Integrated Development Environments with debugger and other tools.
Both support modern program design paradigms like Model-View-Controller.
Both have online documentation and lots of sample code.
Both systems have large numbers of proponents, especially on StackOverflow :-)
Both languages have C-like syntax - curly braces, etc.
The biggest difference, in my opinion, is the output. iPhone OS will give you a binary which requires proper packaging to be able to be used by another person. Outside of ad-hoc deployment, actually getting your app to other people has some hoops to jump through and some $$$ to pay.
ASP.NET can be used by anyone you give access to - hosted on your server, etc.
To be able to compare and contrast, its often possible to write the same program in two different systems to be able to see how they differ. Due to the form factor and aforementioned iPhone deployment, this is harder.
As a learning exercise, I would go ahead and do both in parallel, sure, but understand if you want to go all the way to publishing your code, each option is very different.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I'm a pretty young developer, and still in the emulation phase of my career. I have read a lot about some topics like concurrency, and using unit of work to allow your business layer to control persistence transactions. I have even implemented some painful, but functional code that implements these topics. But I have not really ever seen a real world example of a truly elegant implementation. I don't have a lot of good TDD, pattern focused role models around me, so I'm forced to look at the outside world for guidance.
So, I'm looking for some stellar examples of open source enterprise app domain models. Preferably written in c#, but other languages would be fine as well as long as they are good examples of clean elegant domain model solutions.
Some of the things I would really like to see are elegant solutions for Concurrency, Business Rules and Object Validation, Transactions / Unit of Work, and semi transparent logging mechanisms. I'm also curious to see what some of the real world best practices are for exception handling in domain model code.
I know I could just start tearing into some open source projects at random, and try to decipher the good from the bad, but I was hoping the expert community here would have some good ideas of projects to look at to stream line the effort.
Thanks for your time.
Edit
I'm not really interested in frameworks that make design and construction easier. My choice of framework, or whether to use a framework is a necessary consideration, but is entirely separate from my question here. Unless those frameworks are themselves open source, and very good examples to dig through.
What I am looking for is a project that 'got it right', solving a real world problem with code that is flexible, and easily maintainable, so that I can see with my own eyes, and understand an example of how it should be done that is not a trivial 50 line tutorial example.
I liked lot the architecture of oxite cms at http://www.codeplex.com/oxite. I learned lot from that project. I use nhibernate for data access instead of linq2sql and it works good for me. Of course its not a large scale project but its a perfect start. CSLA does not follow the DDD paradigm.
The above book ".NET Domain-Driven Design with C#" by Tim McCarthy (Wrox Press)" is really good one.
The best book for understanding DDD is Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans. This book is the "bible" of good DDD design.
Beyond that many resources can be found on http://dddcommunity.org/. There you can find more videos and articles from DDD experts including Eric Evans and there is a sample application of good DDD design but unfortunately its in java :(
You could check out nopCommerce i used it to try it work really nice and it has a good implemantation of DDD and BO, quite generic and fast, the install pattern is olso a classic so if you aiming a web apps you could check this out too.
Have a look at Martin Fowler's book, Analysis Patterns. It's an old book, so the class diagrams are not UML but something ancient (fortunately, the front and rear cover contains a description of the diagrams symbols).
And it doesn't have C# code. In fact it doesn't have any code at all because it is not a book about code, but a book about domain models. But it does have domain models to die for!
While it's not exactly what you asked for, Juval Lowy of iDesign has coded up some wonderful WCF Samples that tackle many of the situations you mention above.
The book ".NET Domain-Driven Design with C#" by Tim McCarthy (Wrox Press) might also be of interest.
I'd take a look at CSLA and its sample application, ProjectTracker. Here at work I've done a few projects using CSLA and it really does help your BOs be much more powerful & useful.
While ProjectTracker is not a real-world domain model it does cover a lot of the situations that a real domain model would need to. So if you look at the features offered by BO layers utilizing CSLA you'll get a good idea of what good domain models should look like.
Rob Connery (of MVC Storefront and Weke Road blog) http://blog.wekeroad.com/ has been getting into DDD of late. The MVC Storefront app may be modified to reflect his learnings, or so I believe. Regardless, he has some good material on this topic.
The website http://www.domaindrivendesign.org has a C# sample app.
One thing about DDD; it tends to be tightly coupled (in the positive sense) with the bsuiness for which it is written. As a result, the best examples are probably tied up in IP and unlikely to be available as OS.
The kind of design I tend to see is usually the anaemic domain model.
I wish I could tell you that I had a great recommendation, since I would love to see this question answered with a consensus home-run choice. But as objektivs observed,
... the best examples are probably tied up in IP and unlikely to be available as OS.
However, there's one domain for which we have abundant open-source code: software development tools.
This is a cop-out (I haven't done the legwork either), but if this question fails to produce a solid choice and you want to pursue this yourself, I would recommend starting with some of the more mature tools that many of us already use: NUnit, DotNetNuke, ScrewTurnWiki, NAnt, etc.. They have several distinct advantages, not the least of which is that their domain models will already be (relatively) accessible to you.
I recently come across tutorial on building Forum application with MVC, nHibernate, AutoMapper, and I find source code really good written and structured, with nice examples on using NH/FluentNH in web apps, domain model and repositories/services:
http://mattias-jakobsson.net/Item/45/Building%20a%20forum%20application,%20Part%209
Have you considered reviwing the Castle Project?
From the Castle Project "Castle is an open source project for .net that aspires to simplify the development of enterprise and web applications. Offering a set of tools (working together or independently) and integration with others open source projects, Castle helps you get more done with less code and in less time."
I would take a look at the dofactory GoF site. They have a bunch of examples that you can purchase for a pretty small price including:
* MVC -- ASP.NET Web Application
* MVP -- Windows Forms Application
* MVVM -- WPF Appication
It also includes two very good books: "Enterprise Design Patterns" and "Head First Design Patterns"
I'm currently working on a project using StuctureMap, Fluent NHibernate, Asp.net MVC, AutoMapper, Castle, and xVal frameworks. I've been getting help from the sample projects Nerd Dinner and Code Camp Server. Please let me know if you have questions about any of these frameworks.
http://code.google.com/p/codecampserver/
http://nerddinner.codeplex.com/
Take a look at my complete Visual Studio solution on GitHub that you can use as a jump start because it includes a very simple but layered architecture.
I've published detailed videos on object persistence on my blog at http://thomasjaeger.wordpress.com where I go into the reasons of the why and how of a centralized domain model in the solution.
I've been a software developer for 10 years and came all the way from a wild world of assembly language programming, then server side of C++ and COM, and for the last 5 years I was comfortably settled in a quiet world of .NET, C# and development of business applications.
The problem is - the last couple of years was so comfortable and I was also spending almost half of my time doing a BA's work, that I feel like I forgot a good part of low level C# language, Design Pattern and ASP.NET. And after almost 5 years of not using C++ for a big projects my skills in that language are even worse.
That does not mean I can't program - I do it every day and quite successfully - but I feel what I would not be able to pass most of tough job interviews should the need arises, which is very likely in a current recession. And the reasons I think I would not pass - is that I forgot all the standard things what usually people are being asked on the interviews (e.g. I use the design patterns - but if you ask me - which pattern what that - I would probably not give you the correct name, because all he DP for me are just a smart ways of using static functions and virtual functions).
Can someone please point me to a resource or give me an advice (can I have both please?),
how can I quickly (in a week or so) could brush up my knowledge of C#/.NET, DP and ASP.NET to the level of the very good senior dev (whom I was a 2 years ago). As for the C++ - I am willing to spend a month to get my knowledge back again, but this is of less priority.
Please do understand me right - I am not a newbie and all these things I knew before - just want to be back in business 100% again.
Thank you.
For Design Patterns, I would suggest to get a copy of Head First Design Patterns.
Regarding ASP.NET, C# and the usage of some patterns, watching Rob Connerys ASP.NET MVC Storefront Webcasts would be a good start.
What you could also do, is having a look at Scott Hanselmanns interview questions which you can find at his blog. Try to find an answer to all of them and you should be in pretty good shape ;-)
In addition, I'd have a look at the code of some successfull open source projects like subtext, DasBlog, Oxite ...
They are a great learning ressource.
The next step could be to contribute to some of those projects (sending some patches to the project admins), because nothing can replace practice ...
However you should keep in mind, that one week might not be enough time to resharpen your skills.
Good luck anyway
Well, since you knew all this, which I guess means "have used all this" previously,
you could take look back at your own code as a starting point.
Really ask yourself:
why did I do it like this?
when was this, what situation was I in?
can I do it better now?
Take a small tricky and interesting part of the program out, and try to
recode it.
This is all meant to get you mentally back to those times, pick up a few discarded
threads in memory. I find such methods really useful to reactivate knowledge.
Then read up on new developments/best practices on blogs and books and skim through
books that used to be useful to you (maybe there are current editions)
I used scott meyer's "Effective C++..." series to get me back into and
advance my knowledge of c++.
Design Patterns are covered in many books today. The stanard of course is the "Gang of Four" book named "Design Patterns".
Put OO, Agile and Pattern together
Another book is more hands-on and combines Design Patterns with an other new thing -- "Agile Development". The good thing is, that design patterns are presented in live examples and interestingly presented in context. I think Robert C. Martin also brings a lot of insight into many OO development principles. The book is called Agile Software development.
But of course, it depends how far you want to go. Do you really want to brush up your knowledge (then I could maybe give further hints) or do you want to just be upto date for interviews?
I've found that the asp.net videos on www.asp.net/learn are very good for quickly learning about (or remembering) many asp.net topics.
Slides on design patterns in C#
Well if you have some two months to bursh up C++ and design patterns then I would recommend you the following books .
- C++ FAQ Second Edition
- Effective C+++
- Effective STL
I think for C++ this should be sufficient, if you have some more time you can also try
Inside c++ Object Mode
For design Patterns
I think reading complete book at one go is not a good idea.
Try to list down few design patterns from each category creational, structural and behavioral that you have worked on or that you want to talk in interviews.
There are lot of resources on net about each of them and try to completely understand each of them rather than jumping into a book and getting almost lost.