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'm a C#/.NET developer looking to mess around with something completely different - something LAM(*) stackish for building web apps quickly.
I'm thinking either Django or Rails. I kind of like the Python language better and it seems to be more full-featured than Ruby for statistical, scientific and networking (let me know if you think this is wrong). However, the RoR community seems to be much bigger - which might make it a safer bet. Do you think this is important? Anybody have experience with both RoR and Django?
Update: Specifically I'm looking to be able to build a community finance oriented site quickly. There are definitely a lot of Ruby Gems to speed up the process, but I noticed Pinax on the Django side which looks promising.
I know that Python is already fairly popular for financial/mathematical programming. Anyone else have an opinion?
Update 2: Noticed some comments about ASP.NET MVC. I have in fact done pretty significant work with ASP.NET MVC - a LOB app for Medical Equipment Servicing, and I loved it. It is IMHO a much better and more intuitive way to write web apps compared with ASP.NET web forms. But, I'm really looking for a non-.NET development environment to develop some chops in.
I kind of like the Python language
better and it seems to be more
full-featured than Ruby for
statistical, scientific and networking
(let me know if you think this is
wrong).
If you think you'll need libraries like NumPy or SciPy, probably best to stick with python/django. I've struggled to find ruby equivalents.
However, the RoR community seems to be
much bigger
Bigger is of course not going to be better. I've had great experiences with the django community in terms of support, and the pluggable app ecosystem is maturing quite quickly.
I would also add that I find the django documentation to be very easy to follow.
If you want a quick stack check out Sinatra.
Django will make more sense faster. It has awesome routing, simple file structure, nice clean syntax, not a lot of WTF moments, and understandable ORM functionality.
Rails you will have to dive into. You will battle activerecord. You will try to wrap your head around the many facets of a rails application.
I like them both. Try them both out. They don't take that long to get a feel for. You should ultimately base your decision on a per-app basis and factor in which language has better modules/extensions/gems for what you need.
Since your stated preference is Python, I wouldn't hesitate to recommend Django. The documentation available for Django is top-notch, and the community is very helpful. Browse the django-users archives or hang out in IRC for a while and you'll get a good sense of the support available.
I like Django better because it's less magic, with Rails i feel they pushed the convention over configuration principle too far, so i prefer the more explicit nature of Django.
funny... I'm in the same boat, though perhaps I've been looking around for a bit longer.
I came in from MS-land (C# too) and I went with Django, but only after I tinkered around with Google's AppEngine, which re-introduced me to Python. Django is well organized, internally consistent (as far as I could tell), and well supported with a vibrant community. Python is well organized, internally consistent (as far as I can tell), and extremely well supported with an amazing community.
Anyhow, there's more to rapid Python web development than Django. You might want to search for: python wsgi framework. Pylons and TurboGears offer enormous flexibility and focus on "best of breed" components, web2py appears to have a very cool DAL/ORM that I'm itching to dig into, and web.py and werkzeug (amongst others) are minimalistic and don't try to dictate how you should build your app. And if you're sticking with Django, definitely check out the Pinax project - it might help kickstart your development efforts.
I just finished building a small social networking site with Django for a client. I was new to Python and new to Django, but it was one of the most enjoyable development experiences I've had in a while (even with the headaches of being new to a language and framework). And it only took two weeks.
If you're building this for yourself then I would try both Rails and Django (or one of the other frameworks that c.batt mentioned) to see what feels the most comfortable. I ended up choosing Django/Python because I liked the language. It felt clean and efficient, and you can't argue with the speed at which you can get a bare-bones site up and running.
As mentioned previously, Pinax is great. If anything you get a solid base to build on top of. I found that I had to extend parts of it to get exactly what I wanted, and a couple of sections I decided to code from scratch because the changes would get "hacky" to match what I needed. Other parts, however, are perfect. The private messaging was used out of the box, just with some new templates to match the site.
i'm another C#/.net guy with the same itch to tinker. Django is appealing. Though the development is easy and fun, i've heard some stories about deployment and configuration headaches with both Rails and Django (mostly rails). It's not like just throwing an asp.net app at IIS or PHP at Apache. For those things you can set it and forget it. I'd be curious to get c.batt's comments on his/her experince with deploying django.
Lately I've been looking at Grails. It uses Groovy which is ruby like. It's very easy to develop in and you can build apps as fast as Rails but you get access to the Java platform via the JVM which could come in handy. There's a ton of open source java components you could drop into your Grails app, plenty of the types of components you'd be looking for. It's really not like building a java app. So far it does feel like Rails. Good luck.
You are at a point where you cant make a bad choice!
My personal preference is django, but I know for a fact rails is good too.
I think the best answer is what the BFDLs of django themselves say:
Try both, use whichever you like.
Rails is like Bible. Unless you are a Saint, you do not need to understand it and you probably will never understand; all you need to do is to believe in it.
Since you're a seasoned .NET programmer, you really should look at ASP.NET and MVC before turning to Rails and Django, at least if your goal is to get up-and-running quickly. It's always easier to leverage something that you already know in-depth.
I was in a similar situation recently -- I had a project that I wanted to push out on Windows and Unix, and so rather than leveraging what I know well (Ruby/Rails), I jumped ship and gave Groovy on Grails a go. It was a really rewarding experience, and I'm really glad I did a few small projects in Grails, but in the end I had a tiny fraction of the productivity I did in the environment where I had a few years' experience, even after months of hacking away on Grails.
So, pick up Django, Rails, Lift, or whatever you feel like doing -- it will help expand your mind, and give you different ways to look at solving problems. But if you want to get going quickly, use what you know (.NET) on a platform designed for you (MVC).
You express a preference for Python so I'd go with Django - it's a fine framework. My personal preference is for the alternative, but I'm not you and both options are good.
This is mostly a duplicate of https://stackoverflow.com/questions/91846/rails-or-django-or-something-else, btw
Like others suggest, trying both is one good way, but really, to me, I would base it more on which language you prefer to use. Sure, if it's a web app, you'll do a lot with the framework, but "every" line of code you write will be in that language. Since both frameworks are strong, it's really more a matter of what language you'll be happiest writing code in, day in and day out.
I personally use Rails and love it, but have many friends using Django. When we discuss things, time and again, it boils down more to language than framework. The languages are fairly different, and you'll typically find one you prefer a lot more than the other, at least in my opinion. I had originally thought Python sounded great, learned it, wrote a few things with it, etc., but it just never "clicked" for me. When I first saw Ruby many years ago it seemed a bit odd, but when I revisited it via Rails, it just felt so natural. When I write code in Ruby I feel like I'm pretty much writing English - if I can think of how I think the code should be written, I can pretty much type that and it works. It just fits my brain better.
Community wise, you'll get a lot of different opinions. I don't think being "too big" means it's bad, nor do I think the Ruby community is by any means "too big", especially compared to say the Java community. Ruby and Rails have certainly gone mainstream to some degree, and for those of us who've worked with it for several years, it seems mainstream, but in the grand scheme of things it's actually still fairly small.
Anyway, good luck, and enjoy looking into them and finding what will delight you to work with.
I'm curious. If you are a C# programmer, why have you ruled out Microsoft's MVC?
You have two different needs expressed in your question:
1) Want to try something new
2) Want to build community finance site quickly.
I understand the desire to look at RoR or Django for need 1, but for need 2 I'd expect you would be more productive more quickly with MVC.
Please note I am not saying that EVERYONE would be more productive more quickly nor am I saying that Microsoft's MVP is inherently more productive, just that someone who is currently a C# programmer would be able to come up to speed more quickly on something that uses C#...
Although I've never tried it personally beyond playing around, you might also want to check out ASP.NET with IronPython. Here's a blog post that details it.
I agree with the people who say: try both and use what you like best.
I think Rails will be an interesting experience because of the convention over configuration and forced MVC architecture. Also, I am not sure what people's experience with Django is on StackOverflow, but all of my Rails questions get answered very quickly.
Also keep in mind that you can call a python service to do some statistical calculations if necessary.
Here is an article written by a guy who went from .NET/C# to Rails to Django/Python, and then back to Rails. Might be worth a quick read.
http://blog.carlmercier.com/2007/01/30/why-i-moved-from-ruby-on-rails-to-pythondjango-and-back/
Your question must be : Python or Ruby ;)
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.
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 have been doing active development in C# for several years now. I primarily build enterprise application and in house frameworks on the .NET stack.
I've never had the need to use any other mainstream high level languages besides C# for my tasks, since .NET is the standard platform we use.
There are some legacy Python applications that I have been asked to support going forward, I have no exposure to python and dynamic languages in general(although I've done a fair bit of JavaScript).
I was hoping to get some guidance/advise to aid in how to go about learning a language like python for the statically typed mind.
EDIT: Using IronPython is not an option!
Foord and Muirhead's IronPython in Action is an amazingly good book, perfectly suitable for teaching Python to .NET folks as well as teaching .NET to Python folks. I may be biased, as I was a tech reviewer and Foord is a friend, but I've had other cases in the past where a friend wrote a book and I tech reviewed it -- and ended up deciding the book was just wrong and publicly saying so (way to lose friends, but, I just can't tell a lie, not where Python is concerned at least!-)
Edit: If you're forbidden from moving to IronPython (which would probably support your legacy apps just fine, btw), there are better answers: Mark Pilgrim's Dive into Python is often considered the best Python intro for the experienced developer, and my own Python in a Nutshell has been praised as the fastest way onboard for superstar developers. I am of course biased in favor of these -- Mark is a colleague, and my wife was a key tech editor for his book (and my own as well), and obviously I'm biased in favor of my own book too;-). But then, I do tend to be biased towards a lot of the best Python books, as I've either had a hand in their editing, or am friends with their authors, or both;-).
Hardest thing I was confronted to in using python coming from Java was to properly wrap my head around the Duck Typing thing... At first I thought it was just plain horrible and just dressed the hairs on the back on my neck.
Next is the scope by convention, but that one is pretty easy. And the importance of white spaces gave me a few bumps.
However once you ease yourself in the language's concision and speed of development you learn to appreciate it a lot more. After a while I thought it was the best thing that ever happened to me !! :-)
here are a few things that helped me a lot :
First I started with this book and got the basics of the language and for everyday use the Python Quick Reference Card was very helpful. Also the console will be your best ally to try quick things and solidify your learning.
For IDEs, coming from the eclipse world PyDev was a natural choice for me, but there were many more to choose from. But if you are more familiar to the Visual Studio environment the Python Tools for Visual Studio is pretty darn good too.
Good luck, Hopefully you'll find Python as much fun as I did.
There is a big initial hurdle of getting comfortable with dynamic typing. The first step is when you look at Python-code and realize that variables aren't defined anywhere, you just create them out of thin air, which feels like jumping over a cliff. There is a brief moment before your hang glider catches the air properly.
And then it's going to take time before you trust your newfound dynamic wings, and you probably only can get their by doing aerobatics with them. Learn how python handles references, have fun with monkey-patching methods, duck type various animals. Try to learn some ugly tricks.
And although you can't use IronPython for this, there is no reason you can't use it to learn Python.
You're going to experience quite a bit of culture-shock going from C# to the wild duck-typed outback of Python. Lack of types and intellisense can be pretty daunting. Good thing that you're experienced in JavaScript. Also know that indent-sensitive block rules of Python can be very confusing for the inexperience (usually you either love it or hate it :-)
Apart from that the biggest challenge moving from one language to another is usually the framework. Getting to know all the classes and functions Just Takes Time unfortunately.
For an experienced developer learning Python, Dive Into Python is a very good book.
Wesley Chun's Core Python Programming book takes a more "ground up" approach, which may be a little slow for an experienced developer. But it allowed for very easy comparisons of the basic syntax and operators compared to other languages. Wesley's writing style is very easy to read, and his example projects are non-trivial enough to actually be interesting.
The Python Cookbook is an excellent reference for learning to program in a 'Pythonic' way. This book contains hundreds (?) of examples of how to solve common everyday problems with Python. In general, the "Cookbook" series will expose you to the idioms of the language faster than any other book.
Whenever I need to learn a new programming language, I start using it for all the 'daily maintenance' tasks that come up - all the little things that I would normally solve with a shell script or with common unix tools - I start to use the new language to solve those problems. Since you have .NET experience, IronPython is probably a good way to leverage that knowledge while learning Python. Even if you only install IronPython in a personal sandbox...and use it for all your daily busy work coding tasks - that can be a great way to learn the syntax and idioms of Python.
The book Pro IronPython is worth reading too if you have time.
I would recommend just to read a book about it. A book for beginners. It'll contain many stuff you already know but you won't miss anything regarding using a dynamic language. I can point you to Dive into Python, which seems to be very friendly, or The Python Tutorial which seems to be very to the point (that's how I learned).
I would recommend using IronPython to help you learn. It is an implementation of Python on the .NET framework. So you can use/learn Python with access to the .NET class library.
A good place to start is by downloading IronPython and looking at IronPython in Action, which is a very good book looking at Python on the .NET framework.
EDIT: Since IronPython is not an option, disregard this answer. Thanks though.
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
Up till now all my programming experience has been desktop development (mostly C/C++ with OpenGL/DirectX) but I'm interested in trying my hand at some web dev.
The two directions I'm considering are Ruby on Rails and ASP.net.
Which is most widely used?
Which would be a more marketable skill to have?
Thanks!
PHP, Ruby On Rails, ASP.Net, or Java.
It's a religious choce and it depends on who you ask.
Everyone you ask will give you a different answer.
You should ask yourself how you want to work, PHP java and ASP all let you write markup that is interspersed with code or code that writes the markup for you.
To be honest it's subjective and no one will be able to give you a straight answer.
Given your two options ASP is probably a better choice for industry though, there is a lot of money in it and C# is close enough to C/C++ for it to be readable.
Why don't you take a few days or a week to experiment with Rails, just for fun? You might, like many other devs before, find a real liking for it and 'fall in love' with Ruby and revitalize your programming interest. If not you just embrace ASP.net which will feel more natural to you anyway.
Other commenters have not mentioned that the number 1 advantage of both Ruby and Rails is 'pleasure of programming'.
Alsa these days talented Ruby programmers are in very high demand. There is much more demand than supply. You can do the math as far as earning potential.
I spend most of my time doing ASP.NET development and recently I had taken a turn against it due to the difficulty in really testing my apps. Like lubos hasko outlined above, with ASP.NET MVC, LINQ and the new features in C# and even the ability to write .NET web service that can be consumed by Silverlight, I have gotten excited about it again and think you could do well getting into it. That said, I have no experience of Ruby but after some of the comment on here, I think I'll have a look at it.
Learning Ruby will help you learn a different way of thinking about programming. It will help you become a better programmer, even if you determine that it's not a language for you. The same applies to several other languages (including Python). There are fewer job opportunities for Ruby developers.
ASP.Net is a fairly pedestrian way to develop fairly pedestrian webapps that don't really challenge how you think as a programmer. Job and consulting opportunities are more common.
From this point, it's your call. I chose Ruby six years ago.
If you are planning to do enterprise business development, then ASP.NET wins hands down (IMHO).
If not, RoR would definitely add to your breadth of knowledge.
I would suggest taking a look at the Rails for .NET Developers book before making your decision. At the very least, have a trawl through the Softies on Rails blog.
Beware of the "there are more .NET jobs around" argument. That may be true, but in tough times (i.e., now and for the next year or two), you're probably going to see more .NET developers fighting over fewer and fewer jobs. Lots of jobs in good times equates to lots of competition in bad times. So it is worth branching out and learning something new. What is key, in terms of marketability, is staying agile rather than sticking religiously to one technology.
.NET platform, without a doubt.
Pick up RoR as a secondary.
As a C++ you probably won't like the nature and character of Ruby. You might even hate it. Type safety and strictness is an issue of importance for most C/C++ programmers. If you move into a type-free, "dynamically maliable at run time" kind of environment like Ruby, it will feel extremely sloppy.
C# would be the much easier move, from a language and thought-process standpoint. I would not recommend doing classic ASP.NET development anymore. So-called WebForms are quickly becoming outdated and outmoded. The 4th rev of Microsoft's MVC framework just got published a few days ago, and it is pretty terrific. This is the way to go.
So why not just use Ruby on Rails? Why use Microsoft MVC? There are very good reasons why you should.
A strict type safe compiler
Fully compiled code leads to speed. All of your code is fully transformed to X86 machine code before it runs,
High performance. C# is very very fast. Ruby is very very slow. C# approaches C++ levels of performance. Ruby is slower than Perl, Python and Lua. There is a very large performance gap.
You get a rich IDE. The thing I personally can't stand about RoR is that you are mostly stuck in a plain text editor and a command line console. ASP.NET MVC means access to the power of Visual Studio
RoR doesn't scale. Microsoft MVC does.
I like the simplicity of Microsoft Test
I haven't gotten far with it yet, but Unity seems like a nice AOP IOC. I've gotten farther with it than with Spring or Windsor.
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 am not that good at programming. I finished my masters degree in electronics. I want to learn C#, the .NET Framework, and SQL. How much time do you think it would take (if I have 5 hours a day to devote to it)? Also, what order do I learn them in? I have Visual Web Developer 2008, is that enough to begin?
Copied from a new question by the same user:
I should have specified that I wish to make a career out .NET Development. I'd like to give myself 2 months to get the 'basics' down. As a developer, what is expected out of you in IT companies? What skillset do they require and what are the responsibilities as a junior or mid-level developer? I don't have any industry experience, will I be able to get a feel of the job duties while at home?
That's like asking how long it would take to learn French:
1 day to learn what it is
1 week to learn it to an infant/elementary level
1 year to be considered a beginner by professionals
Several years to be considered an experienced professional
Plus there's "deep" knowledge of those subjects which a mere mortal such as you or I will never learn
Then again, plenty of people (most normal people, non-programmers) never learn those subjects, so if you're like "most" people then the answer would be "it would take forever" or "it will never happen".
Dive right it, make it a hobby, and have fun :)
Coming from an electronics background myself I can tell you that you should pick it up pretty quickly. And having an electronics background will give you a deeper understanding of the underlying hardware.
IMHO the root of information technology is electronics.
For example..
Think of objects as components.
The .NET framework is essentially drawers full of standard components.
For example you know what a 7400 (NAND gate) is capable of doing. You have a data sheet showing the pin outs and sample configurations. You don't typically care about the circuitry inside. Software objects are the same way. We have inputs and we have methods that do something to the inputs to produce predictable outputs. As developers we typically don't care how the object was written... just that it does what it says it will do.
You also know that you can build additional logic circuits by using two or more NAND gates. This of this as instantiation.
You also know that you can take a NAND gate and place it inside a circuit where you can modify the input signals coming in so the outputs have different behaviors. This is a crude example but you can think of this as inheritance.
I have also learned it helps to have a project to work on. It could be a hobbyist project or a work project. Start small, get something very basic working, and work up from there.
To answer your specific question on "what should I learn first".
1) Take your project you have in mind and break it into steps. For example... get a number from the user, add one to the number, display the result. Think of this as your design.
2) Learn basic C#. Write a simple console application that does something. Learn what an if statement is (this is all boolean logic so it should be somewhat familiar), learn about loops, learn about mathematical operations, learn about functions (subroutines). Play with simple file i/o (reading and writing text files). The basic C# can be thought of as your wiring and discrete components (resistors, caps, transistors, etc) to your chips (object).
3) Learn how to instantiate and use objects from the framework. You have already been doing this but now it's time to delve in further. For example... play with System.Console some more... try making the speaker beep. Also start looking for objects that you may want to use for database work.
4) Learn basic SQL. Lots of help and examples online. Pick a database you want to work with. I personally think MS Access is a great beginners database. I would not use it for multi-user or cross platform desktop applications... but it is a great single user database for Windows users... and it is a great way to learn the basics of SQL. There are other simple free databases available (Open Office has one for example) if you don't want to shell out $ for Access.
5) Expand your app to do something with a database.
Just do it! Don't sweat the details.
Well, it will take you forever. There is so much to learn about programming that 10 years are not enough.
http://norvig.com/21-days.html
Don't get me wrong, you will learn the basics quickly enough, but to become good at it will take much longer.
You should focus on an area and try to make some examples, if you choose web development, start with an hello world web page, then add some code to it. Learn about postbacks, viewstate and Sessions. Try to master ifs, cycles and functions, you really have a lot to cover, it's not easy to say "this is the best way to learn".
I guess in the end you will learn on a need to do basis.
The best thing about C# is that it is very catchy. Easy to pick up, and you'll also have fun doing it.
But .Net framework is a very big library full of wonderful things to discover, and yet again due to the nature of .Net you'll also have fun learning it. It's a coherent, object oriented, well documented library, and C# makes it so simple to work with it that you can simply discover your way through it while coding.
The vast majority of articles, books or resources about .Net and C# simply concentrate on explaining functionality and the framework and far less about how to avoid quirks, workarounds or exceptional cases, like it happens with other languages I don't want to name (*cough C++*) so in the end the experience of learning C# and .Net is very enjoyable from start to finish, and the things you can accomplish using .Net also makes it very rewarding.
You picked a good language to start with, in my opinion, and finally to answer your question, it will take you about:
2 to 3 months to learn the basics
1 to 2 years to become a versed developer
5 years or more to become a expert or, depending on your dedication, a "guru".
But then again, beating the numbers and breaking the limits lies inside human nature. Can you do it faster than this? ;-)
How long is a piece of string? I think this is subjective. I know programmers that have learned an extraordinary amount in a very short time based on the experience that they've exposed themselves to.
Basically, get your hands dirty and you're bound to learn more.
It really depends on what you mean by "learn". You could probably spend a week and get a couple of pages up on the web that had some minimal level of interactivity to save information entered by the user in some database, and then have some other pages for querying and displaying the information. You could then spend the next 10 years of your life learning all the intricacies of the .Net framework, SQL, and mastering using the IDE.
The period of which you are capable of learning really depends on your ability to grasp the logic behind programming while where to learn from depends on your learning style.
If you are a learn-by-a-book type of guy, just jump on Amazon.com and perform a quick search, pick up the book with the best reviews or wait for someone here to recommend a book (I'm not a programming by book guy)
If you prefer screencasts (video feeds demonstrating what to do) or tutorials, then go straight to the source: http://www.asp.net/learn/. There are tons of videos and tutorials explaining everything you need to get started.
Visual Web Developer 2008 Express should be all you need to get started. Basically, the express editions are Visual Studio chopped down to a precise set of functionality to accomplish one thing. They don't have some of the bells and whistles needed for large scale development, but everything you should need.
Can't tell how long it would take, it really depends on your existing knowlege. I managed to learn the C#/.NET 2.0 core basics in about 2 months.
My suggestion to you: Try to learn towards exams, they make sure your learning covers all important parts and also guide you through this new technology. See Microsoft Learning.
If you have any programming experience, you can probably learn the C# syntax in a few hours, and be comfortable with it within a week or so. However, you will not be writing complex structures unless you write a lot of code with it. It's really the same as learning any language: you can learn all the words and grammer fairly quickly, but it takes a while to be fluent.
EDIT
A book you may want to pick up for learning C# is C# in a Nutshell (3.0) which I found to be very useful, and has been recommended by several people here.
If you want to learn, REALLY want to learn, then time is not of consequence. Just move forward everyday. Let your passion for this stuff drive you forward. And one day you'll see that you are good at C#/.NET.
You'll pick up c# fairly quickly (the language syntax is not that complicated). It will take you a long time to really learn the .NET framework, but you'll pick up the heavily used parts of the framework fairly quickly, and you should start seeing patterns in the framework.
My advice to you: don't just learn from a book or website. They will teach you the language and framework, but they will not teach you how to program anything useful.
Writing little code snippets will teach you how to do a very specific tasks, but they do not teach you how to write applications. My suggestion is that you think of an app that might be fun to work on (and doable... e.g. don't think that you're going to write an operating system or crysis or something in a month or two). Personally, when I was learning, wrote my own full featured IRC app, complete with rich text, personal messaging, etc.
The answer in my view is related to whether you have a tangible problem to solve or if you just want to learn for example to be prepared for a possible new job. If you have a problem then you are in better shape. You can start by looking around and seeing how other people went about solving that problem. Languages in general you should be able to pick up fairly quickly (after all you hold an MS in EE, no small feat IMO).
What you need to be on the lookout for is good programming practices. You'll probably see yourself asking "why is this method so small", "why is this method empty and what the heck is this abstract word doing here". That will give you perspective beyond syntax towards good writing.
When I switched careers out of Finance, I took 9 months off to study C++ full-time out of a book by Ivor Horton. I had a lot of support from my best friend, who is a guru, and I had been programming as a hobby since high school (I was 36 at the time).
It's not just the syntax that's an issue. The idea of things like pointers, passing by reference, multi-tiered architectures, struct's vs classes, etc., these all take time to understand and learn to use. And you're adding to that the .Net framework, which is huge and constantly evolving, and SQL, which is a totally different skill set than C#. You also haven't mentioned various subsets of the framework that are becoming more widely used, like WPF, WCF, WF, etc.
You're an academic so you can definitely do it, but it's going to take serious effort for a long time, and you definitely will need some projects to work on and learn from. Good luck to you.
According to Malcolm Gladwell, it will take you 10,000 hours to get really good. So get cracking.
Simple answer: a lot longer than two months. Learning to program competently will take longer than that, no matter what. It took me years to learn to be a competent object-oriented programmer, and I'm good at this stuff.
More detailed answers: it doesn't really matter whether you learn C# or SQL first, as they're very different. I'd probably suggest SQL, as it's easier to learn and more independently useful.
You will have a hard time getting used to the on-the-job realities at home, much as if you were studying plumbing or quantitative finance.
You're going to have a hard time putting all the information together without one or more projects you try to do. You're going to need to have other people to tell you when you're being stupid, when you're being overclever and will pay for it later, and when you're actually getting it.
Try to find an open source project you find vaguely interesting. Study their code. Figure out why they do what they do. Look at the bug list, and try to find something as trivial as possible to fix. Work from there. Learning to contribute is going to teach you things that are useful in the work world, and it will give you something to point at. It will be far easier to get your first job if you have some experience to point to.
All "relativity" aside, not fast. Based on the fact that you said you never programmed before...to become a basic programmer, a few years.
And to become a good to outstanding (using design patterns and industry recognized standards that relate to common standards as defined by ISO/IEC 9126 Standard such as testability, maintainability, etc.) programmer, it takes years of experience and coding often.. you do not become "Sr." or an "Architect" overnight and the same thing is true for a mid-level developer who doesn't code slop.
It's always a process where you improve. So learning is relative. But to learn the basics, seems simple until you start to design classes and interfaces. And even Leads stumble on the basics..doing things wrong. Everyone does. There is so much to be aware of.
If you're just going to be adding features (using classes your Lead or Architect has stubbed out for the team) and not really adding new classes, etc. it's easier....but you should take care in coding using standards and you still have to know complex areas of OOP. But that's not really OOP. When you start to creating classes, interfaces and knowing about inheritance, heap, references, etc. yada yada...and REALLY understanding it takes time no matter how smart you are or think you may be.
So, for a new programmer. Not easy. Be prepared to code a lot. And if you are not, find a job where you are. It's all about coding as much possible so you can get better.
Read these books FIRST. Do not dive into any others out there because they are not geared toward teaching you the language in a way you can get up to speed fast:
http://www.amazon.com/Head-First-Object-Oriented-Analysis-Design/dp/0596008678/ref=pd_bbs_sr_4?ie=UTF8&s=books&qid=1231280335&sr=8-4
http://www.amazon.com/Head-First-SQL-Brain-Learners/dp/0596526849/ref=pd_bbs_sr_7?ie=UTF8&s=books&qid=1231280335&sr=8-7
http://www.amazon.com/Head-First-C-Brain-Friendly-Guides/dp/0596514824/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1231280393&sr=8-1
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=pd_bbs_sr_3?ie=UTF8&s=books&qid=1231280393&sr=8-3
they will get you the fasted jump start into understanding, better than any books out there.
Also for these lame type of responses, ignore them:
"Then again, plenty of people (most normal people, non-programmers) never learn those subjects, so if you're like "most" people then the answer would be "it would take forever" or "it will never happen"."
Those come from developers (typically leads) who have some Ego trip that DON'T want you to learn. Everyone learns differently and at different paces and eventually you will become "fast". I get very tired of hearing Sr. developers say statements like this when their sh** also stinks many times no matter how good they are. Instead they should be helping the team to succeed and learn as long as their team is working hard to keep abreast and doing what they can on their own as well (not leachers).
Make sure you try to get a Jr. Level Developer position first...
2-3 months to learn the basics...no way. Unless you're gonna code spaghetti sure. Same goes for the 1-2 years. Spaghetti it is then..
Build on what you already know and have a look at lot of job adverts. E.g I have seen jobs asking for WinForms/WPF AND electronics for the writing of a UI to control a custom bit of hardware.
You may find the “robotics” .net toolkit interesting.
.Net is now too big for anyone to learn both WEB and Desktop so you have to decide the way you are going to go. Web has lots more jobs, but there are very few people with good desktop stills.
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?