A way to catch up to modern programming techniques - c#

I have been programming, non professionally for about 23 years and find I am a little stuck in my ways. I find a tool I like, and it stays that way for year after year. Unfortunately this means that I am behind the times in my programming.
I am not directly planning on programming professionally per se, however, it is very handy to be able to develop client side (and lately a desire to move to cloud) apps for use by my clients, and also for myself in my day to day work (hardware, network and Internet support services).
Unfortunately, I find that I am having great difficulty in understanding recent concepts, and because I am trapped in programming styles of the 80's and 90's I am finding myself slow to understand concepts.
What I am looking for is suggestions for online and printed material offering real 'intro to concepts' and (separate material) technical usage for modern programming concepts and their usage in Java and C# (all three of which I have had only minimal exposure to).
I would be most obliged.
--UPDATE--
I just want to add in a big thank you to everyone who left a reply or comment to this question.
I have found some wonderful resources due to your recommendations, and a return of my enthusiasm for programming. No longer does the way forward feel like an uphill struggle, and for the first time in the last year or so, the light at the end of the tunnel doesn't look like an oncoming lorry.

Read developers blog. Try to keep a fair amount of resources in your feed reader and go through them every day (or so). Just pick up the things you like.
Most coders write their opinions, their view, and so on. You can learn A LOT by just reading what others do and filtering what you like or find interesting and what you don't. Books are helpful to, but, with 23 years of experience and just wanting to be up to date... I'd recommend blogs...
Some blogs I read:
Coding Horror
Good Idea
Kirill Osenkov
Joel on software
Jon Skeet
Joe Duffy
Byte Bytes
Stackoverflow is a great resource too. Not just for finding answers to your problems but also for reading answers to other problems. Seriously, I've found myself quoting some answer from stackoverflow a lot of times lately... or applying something I've seen here.
For what is worth, being up to date with the current tendencies (like TDD or Aspect Oriented Programming) is like being up to date with the world itself. You get up in the morning, and read the newspaper, maybe just the headlines and then something specific, for about 5 or 10 minutes. Then you read the articles you find interesting but you're somewhat conscious about the most important things that are happening. This is the same, but those blogs (and some others) are your newspaper for the programming world.

Read some newer programming books like The Pragmatic Programmer. This book talks about programming using modern tools, the idioms and techniques, etc.

I lot of "new" concepts are not actually new. Most "modern" language features are derived from early functional languages, for example.
Techniques such as TDD and Agile are just codifications of things that have been done for a long time, just perhaps not in the mainstream. Nor are they hard to understand per se.
I suspect your biggest obstacles will be terminology. You may be used to hearing buzzwords, but when you look at what they mean you just find them explained in terms of other buzzwords.
My recommendation is to persist. Find your way back to where things are explained in terms you can relate to then work back out. Once you've done that with a few concepts you'll feel a lot more confident in tackling more, and have a better idea of which things you really want to concentrate on.
For language related things this is probably easier because you can go back to, for example, Lisp and find the concepts explained in terms of what was familiar in the 60s and before! (of course you can find more recent coverage too).
For design and process related subjects just reading up on their histories in wikipedia should give you some clues.
Keep your focus narrow enough to not be overwhelmed, but broad enough to take account of the eco-system that a tool or technology exists in.

You will need some alternative approach to the topics. I have found the "Heads on..." series to be both entertaining and technically sound.
Have a look on Heads on Java: http://oreilly.com/catalog/9780596009205

If all you want to do is keep up with times, you should read developer blogs. I am not going to give you the regular blog list cause I don't think it's a good idea to depend on 4-7 bloggers for all your info.
Earlier I used to pool all the bloggers in Google reader and my reading list grew to over 400 blogs. That's definitely not going to help.
Better visit websites like codebix.com, dzone.com, to get the latest articles and a little help of the community in selecting the best articles ;).

Personally, I learned a lot from watching lectures and tech talks posted by google. They have a ton of content about software engineering. Watching videos is obviously a very different learning experience than reading but most of the people are very intelligent and are talented speakers.
http://www.youtube.com/GoogleDevelopers
http://www.youtube.com/GoogleTechTalks

It sounds like your programming logic skills are fine. It seems to me like the best way for you to update your skills is to pick up a copy of C# (Express is free) - Or java (I'm a .net guy) and convert one of your old applications, you will then find real world issues and will be able to solve them (With the help of SO) using the 'Modern' methods.
Good luck.

You might find these lectures on functional programming by Erik Meijer enlightening.

Related

Considering moving to .NET from java [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 11 years ago.
Improve this question
I am a 4th year computer science student, at university alot of my projects were Java based so I am pretty used to the language, platform and apis. However for a long time, I have been reading alot regarding the .net platform improvements and it's large career opportunities (at least in my country). Now I am considering shifting to the microsoft world. I have several questions:
Would it be severe to shift to .NET platform, as when I start my career I will be lacking the "4 years of java experiance" to a "1 year of c#/.net experience"?
How harsh transaction from java world to .net world would be ?
It feels like the future of Sun (and Java as a result) seems a bit blurry, can it be an issue on the long run ?
EDIT:
Sorry for the edit, I want to add that I am more into the telecommunication field (even tho I have no internship/job experience in this field yet). Plus indeed java is not my only language. I am really used to Python, LISP, Javascript,Php and some other markup languages.
Thanks
It will certainly be a shift, largely in terms of learning the .NET framework when you're used to the Java APIs. A lot of the concepts are the same, but it's a case of learning where to find things. You shouldn't expect to effectively have 4 years of C#/.NET experience - but you'll have 4 years of general software development, which is certainly important in and of itself.
Moving from C# to Java isn't too bad, although generics are very different in C#. You'll find there are a lot of features in recent versions of C# which aren't in Java, and it's worth getting to know them to use the language to its best advantage.
Personally I find C# to be a much more elegant and powerful language than Java - and certainly one which has evolved a lot more rapidly. I use both on a regular basis, but my heart is with C#... and that's having come from a Java background like yourself. I certainly don't regret "moving" from Java to C#, particularly as it isn't so much a "move" as just adding an extra string to your bow. It's not like you're giving up your Java experience to learn .NET.
Having said all this, I don't think you need to worry about Java disappearing any time soon. I think it's reasonable to have concerns over the glacial rate of progress of the core API and language (although 3rd party libraries and indeed languages are moving rather faster) but I'm sure companies will be actively developing new products in Java for quite a few years to come.
If you don't want to become the next cobol developer, get used to changing languages. Java and C# will be around for a couple of years, and so will the underlying platforms. But things will change, so better to get used to it.
You have exactly 0 years of experience. Anything done in school or university doesn't count. The reason is: the requirements are completely different. The school stuff might be way more difficult from a CS point of view, but it has fixed, rather clear requirements, and you don't have to support it for 10 years. So again get used to it: It was hopefully a fun time, but it does not count as experience.
C# was in the beginning almost a copy of Java. Now those guys have a lot of interesting features, that java is lacking. But still it should be easy to learn one, when you know the other.
For a job: It is irrelevant how many jobs there are. You only want one anyway right? So you should check what kind of job you are interested in? Web, Mobile, Embedded, Rich Client, Big Servers.
So what is the real advice? Go, find an employer NOW. Tell them you'd like to work in [whenever you are done] and you'd like them to tell you what you should learn in the mean time.
Personally I don't think Java is going away anytime soon, so IMHO Java is just as good a career move as .NET if not better. In any case, I would say that both options will give you plenty of job opportunities.
The languages are pretty similar so you'll most likely find the transition easy, but obviously you need to familiarize yourself with various libraries and frameworks as well (depending on what type of applications you'll focus on).
A lot of what you know from the Java world is really OO, patterns and so forth and that will apply equally well in the .NET world.
I work for a .NET shop, and I can say that as a hiring manager/interviewer, I don't think of a lack of .NET experience from a recent college grad to be a problem -- very few colleges and universities use Microsoft tools, and as other posters have said, the platforms are conceptually similar. What I expect from a recent college grad is energy, enthusiasm, and a solid grasp of CS fundamentals.
That said, I also don't consider a four year degree to be "4 years of java experience" -- student projects are nice on the resume, and are good to talk about in interviews, but unless you have been doing a lot of coding for hire on the side, one year of "real world" experience (where your job is to write software) teaches more about work ethic and delivery than 4 or more years in college.
It depends a bit on what type of personality you have and on what level you understand java. Allot of concepts are the same between the two platforms only with different implementation details, syntax, names etc... on one level I find .net easier since you often deal with all Microsoft products which tend to align with each other pretty well as where in the java space I've had to spent time figuring out how to get product A by supplier X to work together with product B by supplier Y. So if you have more then what I would call a "literal" understanding of java the move should be very easy.
I think you should be able to find jobs in both platforms just as easily imho
If perhaps this move is also being fuelled by eagerness to learn new things then I would advice you to go for something different like a dynamic or functional language.
There are a couple of books which focus on moving from java to c# (I haven't read them so I can not advice on one) but those should really get you up to speed in a matter of hours/days.
I wouldn't bother with learning C# for career purposes. And I say this as a happily employed C# programmer. :-) Oh, I suppose an explanation is in order...
It's much more valuable to know diverse languages. When I'm hiring for a position that's going to be writing C#, I'd much rather hire somebody with lots of Java experience and also some Scheme and Erlang (and no C# at all), than somebody with just Java and C#.
C# really seems to combine two things: the static typing and syntax from the Java world, and a handful of additional features and syntax from the functional world. If you know Java, Lisp, Python, and Javascript, then you can learn C# -- or pretty much anything else -- in almost no time at all. (You won't land an architect position, but you won't be getting that right out of school, anyway.)
The only trick is finding an employer enlightened enough to realize this, and not simply one that feeds resumes through a pattern matcher. But simply putting "Lisp" on your resume is often enough to turn the right heads.
java and .net are both fine i guess.
as long as you want to keep portability to linux, mac os or any other system, you might keep on java. if you want .net-applications for other platforms, you would need to rely on Mono, which is for sure a great project but in my opinion not yet stable enough for production.
if you want to stay on microsoft-world, i consider C# as one of the best development tool i've ever seen. indeed the visual studio, which provides many important coding features really makes the work easy.
they're both approximately the same from the learning aspect. java lacks operator overloading which is an important point in my eyes. .net might lack other features java is better at... and generally i guess in most of the applications, .net is faster than java.
hope this helped a bit
regards
If you write in C#, you will find a lot of similarities to the Java language, and the CLR shares many concepts with the Java runtime, too.
You could as well write both. For exercise i created a chat-program in C# and the server for it in Java and had a lot of fun doing that. You could concentrate on .NET and occasionally use Java. Nothing wrong with that, anyway, more important than being used to a language is the concepts you learn over the years, such as design patterns, best practices and algorithms. Those will help you to understand any new framework or library much quicker as you recognize the patterns and purpose behind it.
I agree with most of the advice others have already given. Both platforms are here to stay and both should provide decent career opportunities.
Just a word of caution though. You write "at least in my country" regarding .Net opportunities. I think you also need to consider "at least in my country" when deciding how large the career impact will be in the short term.
I have worked extensively in both the USA and Germany. My experience has been that, in the USA people are hired more for demonstrated ability than for resume points, but in Germany the situation was reversed. You will have to weigh the short-term impact in your country, unless you want to post which country that is and hopefully someone on SO has experience with that country.
Your Java experience and concepts will come in handy when transitioning to C# and they're not too different (to a certain extent, of course). I won't go into much detail about that aspect of your question since others have made good comments.
What I wanted to add is that although employers may not consider school experience to be equivalent to real world experience, don't let that stop you from referencing them on your resume. Be prepared to talk about them during the interview, as well as any side projects or interests you have. These are good for the "tell me about your favorite project?" and "what did you like most about that project?" type of questions. Be enthusiastic to learn and show a willingness to improve your skills. You can also show that you find certain aspects of C# appealing (perhaps contrast to Java) and that you're confident you'll be able to pick things up quickly and apply yourself.
Job experience is vastly different from the experience you get as a student.
Personally I think you should learn as much as you can while studying - this DEFINTIIVELY includes exotic languages - and only knowing one language, makes you a one-trick pony.
So, get your teachers to teach you exotic stuff. Like functional languages using pattern matching, logical languages for a vastly different approach to evaluating lots of possibilities, assembly language for doing the actual bit stuff, and all these other mind blowing things that people do for FUN and LEARNING :)

Brushing up a knowledge of C++, C#, ASP.NET and Design patterns

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.

How can I become a better C# programmer? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
When you can create classes and do the simple stuff (GUI, reading text files, etc...), where do I go from here? I've started reading Code Complete 2nd Edition which is great but is more of a general programming book. What topics should I learn next?
I'd argue that, at some point, it's no longer about topics. It's about doing stuff. You gotta write code an you've gotta write a lot of it.
People will often tell you to find some niche problem to try and solve when learning a new language and that's perfectly fine, but if there's an application or feature of an application that you really enjoy using or really admire, attempt to build it (or parts of it) yourself. Even more so, if you find your self wondering Hey, how does [this application] do that?! Try to build it.
Many of your projects may never see the light of day beyond your desktop, but the learning, experience, and tools you'll have under your belt will be something that you can carry over to each subsequent project.
You never know, though, one of those little hobby projects may end up solving a problem for someone.
Not to disagree with the folks who are saying "write stuff," but one topic that you should learn about next is the underlying fundamentals of the CLR -- the workings of the engine that sits behind all of these libraries. A good resource for this is Richter's "CLR Via C#."
Write a desktop RSS reader. You'll get exposure to a bunch of different areas (parsing files, graphical apps, HTTP, the flakiness of the internet), and you might actually use the result on a daily basis. Picking a specific goal or feature to work towards will help you learn more quickly than something abstract.
I agree with most of the answers so far, but I think that if you want to improve as a developer you can benefit greatly by not running solo. Try to find someone who can coach you. Over the years I've made my greatest leeps in depth of understanding by teaming up with programmers who were smarter and more experienced than I was. (They still are :-) )
Learn another language and apply the learned knowledge to C#.
F#, Scala, Haskell - lots to pick :)
Get ReSharper, keep all recommendations enabled and understand them.
Learn best practices and software engineering and how to apply them to C#.
Learn Version Control, TDD, Domain Driven Development, Continuous Integration, MVC, MVP, A handful of patterns: facade, factory, repository vs. active record, etc.
Learn tools that will help you avoid reinventing the wheel: Validation Application Block, NHibernate, etc.
I found this free e-book from the guys at CodeBetter a few days ago:
link text
I haven't read all of it but it looks like a good read.
Try reading the Mono source code to get a look at how a C# compiler written in C# looks. You'll learn so much about the language, compilers, and computer architecture. This is the great benefit of a project with source - you can learn from it.
Visit CodePlex.com and GitHub.com and look for open source projects which you can contribute towards.
looking at q/a of stackoverflow, c# topic. :-D
The best way to learn is to actually get stuck in and build some cool apps, websites, whatever. Its still a good idea to keep up with the various websites to learn new stuff that you might not have come across though.
Maybe build the next facebook or google :)
Also a good way is to get involved in a small project with multiple members (friends maybe), so you can learn from each other and see how other people do their stuff.
Read code
Write code
Test code
Read books (some suggestions), blogs etc.
Repeat
write good unit tests and try to get the code coverage as high as possible
Write code yourself, and read the code that has been written be someone else. But, not anyone else; of a person of whom you're sure that he writes good, clean, smart code.
Work in a team with better programmers - get employed
Work on large open source projects.
I disagree with most people here that learning by building stuff just by yourself is the best way.
Write code, lots of it. And not those fluffy little HelloWorld-type programs.
Find either a real project that interests you or something you've already written that can be converted to C# and do that. Only by doing (and, unfortunately, making copious mistakes) do we learn.
practice, look at open source projects, understand completely what it does and how it does it, especially complex libraries like mocking frameworks, ORM, etc
CLR via C# a great book !! helped(still helping) me a lot understanding the language also you can download the c# language specification book
If you want to become a better C# (replace with any other language), work on large scale applications, the kind that has certain features on 'musts' in it that you know you have no clue how to realize them, yet. All the easy ones around these core 'nuts-to-crack' will help you, too.. it's always good to get used to thinking in large, interwoven dependencies in projects which force you to think through and layout the architecture of your final product upfront.
This isn't particularly c# related, but if you want to become a better developer, these kind of projects (that implicitly include lots of ((c)lean) coding and testing etc etc) are the best learning grounds.
If none of the clients wants to 'give you the chance' to work on such a project with your current skill set just yet, go ahead (or in any case) and start coding on an opensource project and keep friends, colleagues and places like stackoverflow involved.
Be prepared and open to make 'errors' (as you might judge them afterwards)... because only with a gazillion errors made you see the slim/windy path in between them.
That being said, learn to not over-engineer or get tooo perfectionist too early. Bugs will be made, bugs may even remain in a final product considering certain impact conditions etc, learn to live with that as an engineer/developer.
Suggest you read C# in Depth. It is a deep dive into C# that will greatly enhance your understanding of the language. The author, Jon Skeet, is rumored to be a lurker on this site...
With a new language, try to solve some of the Project Euler problems. Improving math and coding at the same time!

How long would it take a non-programmer to learn C#, the .NET Framework, and SQL? [closed]

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.

Resources for Kids Learning C# [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
My 11 year old son is very interested in programming. He has been working with Scratch
for a couple years but has now outgrown it. I recently helped him install Visual C# Express Edition and he is very excited to work with it, but we're having a hard time finding good resources for him online.
He learns best by looking at sample programs, dissecting them, altering them, etc. Searching around I wasn't able to find many good samples for him to download and try in C# Express Edition. Can anyone point me in the direction of a good set of sample programs for a kid learning C#, or any other resources you think might be good for him?
BTW I'm a programmer myself but I've been almost exclusively working with Linux for a long time, so when it comes to Microsoft I'm pretty lost!
I would recommend Coding4Fun. There are some very nice projects out there which would appeal to an 11 year old. I recall seeing some games, screensavers, and even a sample which shows how to make a WinForms app look like it is bleeding (awesome for Halloween, eh?)
Hmm... given that C# isn't really a "teaching language" (and that's not to say it's a bad choice), I suspect there aren't a lot of tutorials targeted at younger kinds. Have you considered doing some parallel learning and trying to pick up C# with your son? It might be a good bonding experience for both of you, and with your background in programming, you'll likely have a lot of insight to share, even if it's more language agnostic knowledge about things like algorithms, style, commenting, pitfalls to avoid, etc.
If your son has already been working with Scratch and is going to be starting on C# then I would say that he is ready for a regular starting C# tutorial. Teaching programming to kids in general has been discussed several times at SO a few times. Here is one of the better results (How and when do you teach a kid to code). The principal concepts of teaching a kid to program are the same regardless of the language.
Alice is based around story-telling. It's not programming specifically, but it teaching programming mechanisms. Instead of loop, it's more like "Repeat this" type construct. Worth watching the demo video though.
I just found when zapping the web the Kid's Corner from Microsoft, he could have a go on this link as well :-)
Code Project is a good resource, but many of the sample are more complicated than you'd want to start with.
For smaller sample apps, Microsoft released their 101 Samples for Visual Studio 2005
XNA is cool, but is somewhat complicated to get started with.
Coding4Fun is also good, but the amount of content isn't that huge.
For an absolute beginner I would suggest www.codecademy.com. It is very simply written and completely interactive from the very first page load. Very ideal for a 1st timer imho. It teaches in JavaScript not C# but they are pretty similar as far as syntax goes. He might already be too advanced for this though.
Any book written in or after 2008 that states it's C# for beginners on Amazon with positive reviews. Do not buy |BLANK| for dummies, no kid likes it! and keep a maximum price of $30 for $25 you can get a book that will be so great Microsoft might have to hire him, lol jk. i recommend a wrox book but any other book will do. has he coded any program yet, is he doing freeware, opensource or paid. some books are made especially for open source. it might be hard at first, but he will end up coding some really useful programs. Main thing, make him keep going! don't let him quit. In my opinion, it isn't worth quitting; once you got the hang of it coding is really fun.
I've started with C# by joining a Minecraft (link) classic server development team. These were all people around 16+, but they really helped me learning the language. Getting into a team with people around your age who are a bit more experienced helps a lot I think, and I'd definitely recommend it.
First of all, I would love than my daughter would be interest in programming when she come to that age, and for that, congratulations.
Microsoft has Codding 4 Fun which should be a nice start, and if he's interested in Video tutorials, check the ASP.NET Learn website, he will find a lot of tutorials and video tutorials in VB and C# together with all the source code.
After that, code Project is a nice place to look to more examples :)
Good programming!
Code Project comes to mind. Lots of samples, projects, etc. available to play with.
If games interested him (which is a fair bet) check out XNA, otherwise try to find some other interest, for example music, and then look for a framework/SDK that would let you create useful content quickly without having to do too much legwork.
You might be interested in checking out Popfly. It is a system similar to Scratch but if you want you can begin adding your own components or do some extra javascript or C#. The integration of the multiple technologies might be a little too advanced but then again it might be okay. Again this is very close to Scratch but it might be fun.
As mentioned previously definitely check out Coding4Fun.
Congratulations and good luck.

Categories

Resources