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?
Related
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 7 years ago.
Improve this question
I am a final year computer science student from Mumbai University, India.
The topic of our undergraduate project is SOA.
Under this project we are supposed to build 3 service components and one example website that uses those components.
I am quite good with Java and have no experience whatsoever with C# or .NET.
I am having hard time deciding the language and platform for our project.
Can you please suggest what platform I should go for?
Please give me a brief comparison between Java/Java EE and C#.NET/ASP.NET in terms of complexity, ease of development, ease of deployment etc.
Edit:
The original reason why I put this question is:-
We have to do final year project in group of three. My both partners want to do this project in C# and asp.net and I want to do it in java. Since our project is more of server side, java holds some advantages like cross platform over C#
Also this point:-
What if we implement 2 parts in C#.net(which they will build) and 1 part in Java(which i will build) and then use them to build a sample website.
What level(kind) of difficulty it will accompany?
I am quite good with Java and have no experience whatsoever with C# or .NET.
Well then, do you have a particular desire to extend your knowledge into C# and .NET, or do you want to concentrate solely on the actual project.
People can make all sorts of arguments about C# vs Java, but in your case the pertinent facts are that C# will be much better at teaching you a new language, and Java will be much better at not requiring you to learn a new language.
Edit: Following the edit to the question, mixing the languages like you suggest as a possibility has the added advantage of needing you to show how to mix the use of two different languages, which might or might not be useful in itself.
Overall I would say that is is much easier to get started in Asp.NET. With Java EE, just setting a dev environment to do Hello World, can be a lot of work. In Asp.NET, you launch visual studio, create a project, and are ready to go. If you are using Netbeans and Glassfish, then Hello World is no longer a nightmare, but deployment is still a lot trickier.
Architecturally they are pretty similar, Java EE is a bit rustier, but has borrowed from many of the newer ideas of ASP.net.
Once you get up to speed in Java EE, it isn't that bad, so for a long term commercial project, it is a viable choice. For a short term student project it isn't worth the effort, and I would go with ASP.NET, but if I had a choice I wouldn't recommend either platform.
I would build my application in a dynamic language like python, ruby, or maybe groovy. The difference in productivity between static and dynamic languages is huge. Even if all 3 of your team members are new to the language I would expect you accomplish more in less time.
I would recommend looking into the following frameworks: django, pylons, rails, grails. I'm biased towards the python frameworks, but rails is also an excellent choice. Grails is a pretty cool clone of Rails written in groovy, but unless you have to have Java integration, I would stick with the other 3.
I am quite good with Java and have no experience whatsoever with C# or .NET.
If by that you mean you also have experience with building services and site, then use Java, no point in discussing it any further. The only possible reason is if You Want to learn .NET (a great reason imho though), but not at all because you should change to it.
Note that personally I prefer .NET vs. Java, but I would never / ever make a team experienced in Java change to .NET in the scenario you described.
If you do go with .NET, use ASP.NET MVC. It gets you closer to the right skills to learn regardless of the platform / HTML, CSS, JS, HTTP considerations, etc.
What if we implement 2 parts in
C#.net(which they will build) and 1
part in Java(which i will build) and
then use them to build a sample
website. What level(kind) of
difficulty it will accompany?
If the interface between these parts is a widely-accepted standard like SOAP or REST/JSON, then the language the individual components are developed in will matter very little - this is the whole point of such standards, and an important part of the SOA idea as well. I'd even consider such a heterogenous application a better example for what you're supposed to learn.
The only real downside will be that you'll have a harder time helping each other when you encounter problems.
Ill approach this idea by idea:
Platform: You are familiar with Java, I would recommend for the time being staying within Java for the time being.
J2EE do you mean Java EE? J2EE is quite old by today's standards.
There are not many, if any, fundamental differences between .NET and Java platform code. It comes down to a matter of preference and what Operating System you are primarily working on, imo. If it is only Windows development I would lean towards .NET, however if you need portability lean towards Java.
Also I wanted to point out SOA is more of a buzz word consultants use. You will see this as you gain experience in the industry. Cloud is the new SOA, this is purely opinion.
It may be worth your while to do the other components in something you don't know as having that experience could make you more marketable to industry. Look at job offers for a field you'd like to do work in. What experience are they asking for? Maybe use something they ask for as one of your components. I've never seen a job ad that asked solely for Java experience, it's usually accompanied by other technologies like scripting languages and framework experience.
(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 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 :)
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 8 years ago.
Improve this question
My path to a 'fulltime'- developer stated as a analyst using VBA with Excel, Access, and then onto C#. I went to college part time once I discovered I had a passion for coding not business.
I do about most of my coding in C#, but being an ASP.NET developer I also write in HTML, JavaScript, SQL etc. . . the usual suspects.
I like to keep moving forward find the edge that will get me to the next level, the next job, and of course more money. Most importantly I just want to learning something new and challenge me.
I have spent time recently learning LINQ, but was wondering what should I learn next? Something on the .NET Framework or a new language technology?
If you want to be one of the best you need to specialise. If you become very good in many skills then you may never become truly excellent in one. I know because I have taken this route myself and have found it difficult to get employment at times. After all, who wants someone who is capable at many languages when there is someone who excels at the specific thing they need. If a company develops in C# then who would want someone who is OK at C# but also is good at C, Visual Basic, Perl and Cobol, when all they really want is the best possible C# developer for the money they can afford.
After all, you will only ever be employed for one, maybe two of your skills. There are very few jobs for people who are good in 10 or 15 skills.
If you are looking to a new skill then maybe check out the job boards and find which skills are particularly in need, but be aware that what is the flavour of the month this year may not even be on the scene next year, which will make all of that effort to learn the skill futile and wasted.
What I would say is:
do one thing, and do it well. This may include supporting skills (C#, ASP.Net, SQL, LINQ etc).
If you want to choose something else, then choose something complementary.
Possibly most importantly, choose something you will enjoy. Maybe Ruby on Rails is the current flavour of the month, but if you don't enjoy doing it, then don't do it. Really, it's not worth it. You will never wish, on your death bed, that you had worked more in something you didn't enjoy.
Another direction you could look at is maybe not for a particular development skill, but look for something else, maybe soft skills like people management, better business understanding or even look to something like literary skills to help improve your communications skills. All of these will help to allow you to do what you want to do more, and cut down on the stuff you really don't enjoy, thus helping to make your job more enjoyable.
Apologies for the waffling here. Hope you are still awake :)
Yeah, the more I get into software, I start to see myself focusing less on the language and more on the design..
Yeah there are framework bits we need to get our head around but most of the time ( most not all ) you can look those up as-and-when you need them..
But a good design head? That takes years of experience to start getting it working right..
And that is what the companies really pay for.. "Build it and they will come" and all that...
As you continue to gain more experience in ASP.Net, C#, etc - it's always good to go check out the competition and see if it sparks ideas on how you can do things better in what you're doing. Taking a look at something like Rails or Django might change how you look at designing or building your apps.
If you're now proficient with the languages and technologies you use, then start spending more time focusing on the design, solution architecture, and systems integration. The "bigger picture" that will set you apart from your contemporaries.
Check out some Martin Fowler books like "Patterns of Enterprise Application Architecture", or Eric Evans' "Domain-Driven Design".
Maybe learn more about Usability (best practices, testing, etc.) if you haven't already done so.
Steve Krug's "Don't Make Me Think" is a good book to start with. Jakob Nielsen always has interesting stuff as well.
The more languages you know, the more marketable you are. Look and see what the more popular (market for, not fan base) languages are, then add on some cutting edge tech that is not in much use yet, rounded out by general programming skill.
With your skill set I would recommend (as far as languages):
Java as a starting point
For .Net add in the .Net MVC (you have LINQ or that would be here also)
Language agnostic skills:
Design Patterns (includes the MVC)
Domain Driven Design
Test Driven Design
Here would be my suggestions:
1) Design Patterns - These are really neat as well as being very useful in some situations.
2) AJAX - Assuming you haven't already done some of this, it is an interesting part of Web Development from my view.
3) Determine which parts of the chain do you enjoy the most: Front-end work(HTML, CSS, Javascript), middleware(C# for business logic parts), or back-end(MS-SQL with stored procedures, indexes, triggers, and all that stuff). If it is all of it then try to stay where the team doing web development is small as otherwise you may be asked to choose.
4) Algorithm design and analysis - Do you know various sorting algorithms? Do you know various techniques to create an algorithm, e.g. greedy, recursion, divide and conquer, dynamic programming, using custom data types like heap in heapsort etc. This can be new and cool.
5) Determine if there is a part of the development process you favor: Analyst, designer, programmer, tester, debugger? All can have varying degrees of being near the code, IMO.
# Michael DSL=Domain Specific Language
As for what you should learn, that depends on what you're interested in.
Are you looking to challenge yourself while staying in the same medium (web-centric applications)? I would suggest learning about Apache and the LAMP (Linux, Apache, MySQL, PHP) architecture and challenge yourself to build a web application that you could readily build with ASP .NET using it.
Want to learn something completely different? Try Prolog or LISP and see what you can do with those.
Maybe you'd like to get into embedded software? Learn C to start.
You have a wide variety of ways to improve your skills, and each one has career paths attached to them. (Well, maybe not Prolog, but it's fun!)
Why don't you swap stacks and look at the LAMP stack?
Or how about a functional language like haskell?
Or write a DSL?
Or an app for your phone?