As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm looking for general opinion about which language would be best. Best in regards to many considerations.
I have a pretty strong background in c, c++, and objective-c. I feel quite comfortable with those 3. I have used very little c#. I've worked in firmware and middleware for over a decade and have moved into mobile apps lately. Mostly iOS, but now expanding to Windows RT.
I am about to write a version of my company's app for Windows Store (or Metro depending on what you want to call it). I did a proof of concept a couple months back using C++/CX. There were are few hurdles learning it (the syntax for ref classes, and the heavy use of namespaces), but that is in the past and I feel quite comfortable with it at this point.
Some drawbacks that I found were that most of the examples (both MSDN and private) of .net are in c# with fewer in c++. It also seemed to be a little tougher to get questions answered concerning .net frameworks with c++. Most of the time people would post a c# answer and I'd need to port it to c++ equiv. Sometimes this is easy, sometimes more difficult.
My question is: Would it be worth my time and my company's time to start over with c# instead of continuing in c++? I'd need to pick up c#, but I don't consider that a huge burden (actually looking forward to it). Some concerns are:
* Acquiring an more engineers down the road to work on this code. Our company will grow shortly. Will it be easier to find an engineer that knows c# vs MS's specialized c++/cx?
* Ease of getting help though examples, articles, and forums. If c# is much more common, that's useful.
* Compatibility between 3rd party libraries (Seems like WinRT components can be used from any of the main languages)
* Advantages of C# over C++? They both offer everything I need for this app, at least that I can see. What are some pitfalls of C#?
* Does c# use the continution/lambdas for asych programming in the same manner as C++/CX?
Are there any other pros/cons that I'm not thinking of?
What do YOU think? Also, what do YOU have experience with? Why do you back your answer?
C# would have the better online support (code examples, answers to questions), and the stronger base of engineers. I mean that in this specific situation, for this kind of strongly Microsoft APIs reliant software development. Windows Store highly important in Microsoft's overall strategy and C# is more important in their language strategy than C++. Thus, C# is the right fit, IMO.
*EDIT (Filip Skakun) I know reopening the question might be hard, so I can't answer it separately but I typed in all this text that could be useful, so I thought I'd add it below:
It is up to you to decide of course and it might be a very subjective choice depending on what you believe in, like if you think the higher potential productivity and better tooling and documentation support of C# outweighs the benefits of a faster, closer to the metal and (slightly subjectively) more portable C++ that you already know. C++ is still almost twice as popular as a language based on the tiobe index, so getting C++ developers might be easier than C# ones. C++/CX is something you only need to use for cross-assembly communication and talking to the WinRT library, but anything else you code should be done in the standard C++ based on all expert recommendations. Also note that C++/CX is not a managed language and you don't use it with .NET. It is highly similar in syntax though to C++/CLI which is a managed language. The good thing about WinRT is that you can use both languages if you want or need to. I use C# for all the XAML UI, networking, business logic etc. There are tons of samples for using C# with XAML while limited range of ones for C++ since it only became available and recommended for XAML platforms with WinRT. On the other hand for anything lower level like working with DirectX or CPU intensive tasks I use C++, since there is more documentation for straight DirectX than the open-source .NET wrappers for it and it performs better when you want to squeeze out all the potential power of the CPU or use the least energy from the battery.
C# is a bit cleaner language than C++ with less punctuation, the new async/await keywords that make async calls (which you must use in Windows 8 apps) a lot cleaner. It is also a managed language so in most cases you might not need to care about when memory gets released, about buffer overruns etc. Debugging C# code yields more deterministic results than C++ (I just spent 2 days debugging some C++ code and I still don't know how far along I am in finding the bug). It is also easier to maintain legacy code since debugging is so much easier.
C++ is faster, so it also uses less battery, your application will start faster and possibly use less energy. If you already know it well then you might have an advantage over the managed development crowd building apps out there. Because it doesn't use garbage collection - memory management is more deterministic and lightweight, so your animations will be more fluid.
Then there is also the motivation factor. If you really want to learn C# - you might be more happy, motivated and productive learning C# than the language you already know and will happily spend more hours learning it than you would be willing to spend writing another C++ app.
The underlying WinRT libraries are the same regardless of which language you use, but the .NET libraries are only available in .NET code and the standard C++ libraries are only available in native code.
Finally - regardless of what decision you make - you can always mix both languages. That could add to maintenance costs since whoever maintains the code in the future might need to know both languages and also the mixed language platform is very young, slightly less supported by the tools (you can't do mixed managed+native remote debugging for example) and potentially more buggy. It is a very good choice in many cases for the reasons I stated earlier though.
This question already has answers here:
Closed 12 years ago.
Possible Duplicate:
is there an effective tool to convert c# to java?
I'm not very experienced with Java and have a lot of C# that I would like to translate into Java syntax so it would become compilable.
Reason: Android and Google Cloud
I know the API/Platforms have different structures, but lets say we dont need a 100% compability, but just to get "core functionalitet" translated. The GUI itself is one story of its own, as I've learned. But instead of rewriting every SWITCH-CASE, rebuild every Class etc. it would be nice to "map" the objects to Java equals and then do a recompile on the Android/Google platform.
I am sure there would be something that cant be translated as its a "C# only thing" - but just like every language is possible to generate .NET/MONO I thought there might be a Java -> .Net available too and therefore also a decompiler kinda thing?
So are there any easy ways to overcome this translation by Frameworks, SDK or other similar methods that will take 80-95% of the task automatically?
Have a look here: JSC.
But beside, there are some c# concepts which don't easyli translate into java.
.NET and Mono are compatible because both are VMs that run C# code. Grasshopper claims to allow you to run .NET classes on the JVM, but I haven't used it. It won't work at all for Android because Android isn't the JVM, but rather Dalvik.
The differences between C# and Java are more than "structural" as you put it, and translating from one language to another is more complicated than I think you understand.
I know Microsoft has a tool that's supposed to help convert Java to C#, but considering that a great many java applications reference libraries outside of the main system (apache being the most prominent example) this type of tool would be a monumental task.
C# also has data types that aren't supported at all in Java, such as unsigned types and stack-allocated objects. Writing translations from CLR to Java bytecode would be difficult indeed. And if you're using lambda functions in your code, kiss this idea goodbye.
Then there's the fact that not all language features in Java are available to the Davlik JVM.
I'm not a microsoft fanboy, but here's a comparison of the two languages that will give you an idea why I doubt this tool exists.
http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java
This question already has answers here:
Closed 12 years ago.
Possible Duplicate:
What are the benefits of using C# vs F# or F# vs c#?
After reading some on the subject and watching this video
http://streaming.ndc2010.no/tcs/?id=29649A14-2F1B-428E-BB12-9A43A1676221 where Eric Lippert, Jon Skeet, Mads Torgersen and Neal Gafter discussing the future of C# its pretty clear that C# has some heavy baggage from earlier features added to C#. These features must be supported in later versions of the language even though they add complexity and makes adding new features more cumbersome. Probably why most languages die sooner or later.
F# is a new language and obviously don't have the same legacy to worry about, so since both are general purpose languages it seems tempting focusing more on F#. Do you think F# is going to take over C# as the language of choice within the .net world and in case how soon will this happen?
I know there is a difference between functional and imperative languages so you could argue they are too different to be compared but the fact that c# is getting more and more functional features I have to ask why not just make the jump directly to F#
Firstly, don't think of the division being "functional" vs "statically typed" - F# is still a statically typed language.
Do I think F# is going to take over from C#? Not in many areas. In some niches it will definitely make its mark... but I personally think it's more important for a different reason: it will encourage people to think more functionally.
It's absolutely worth looking closely at F# - in order to improve your C#. You won't find that every task is suited to a functional approach, but it's definitely worth learning to think in a slightly different way.
At this point, I should probably plug Real World Functional Programming - mostly written by Tomas Petricek, with a tiny bit of help from myself. It's aimed precisely at developers who want to think more functionally, with a heavy bias to existing C# developers who are interested in F#. (And today - September 4th 2010 - the ebook is only $15. Use code dotd0904cc at the checkout :)
C# is here to stay. The majority of commercial developers (and almost all commercial .NET developers) are trained in and use C derivative, imperative languages/styles.
I don't think the development world is going to undergo such a radical paradigm shift that imperative OO will vanish in favour of functional hybrids unless of course you count C#'s own move into the realm of a functional hybrid.
(by and large) You just cant hire F# developers, You can't find a job as an F# developer, you can't convince most workaday C#'ers (those who aren't language fans or hobbyist coders in their spare time) that F# is anything more than an academic toy or is simple enough to make it worth their time learning.
I SO wish that wasn't true, the more I learn F#, the more I would love it to be the language I used on a daily basis.
In reply to your question: YES! learn F# as it's a wonderful language, but it's not going to squash C# overnight (or over the next decade).
Should you take a look at F#? Yes, but because F# is an interesting language, and you will learn new things; not because you're playing defense against the chance that "C# is on its way out and F# is the wave of the future". C# is well-established, a great language with a great community and lots of existing assets (tooling, samples, templates, ...) that make it extremely unlikely to be supplanted by any other .NET language in the near future. Learn F# to play offense: to grow your own skillset, and become an overall better developer (even if you still mostly develop in C#).
(Feature creep and legacy do slow languages down some, but not much. From what I gather, C++ is still in use, despite crushing legacy. :) You said that languages die "sooner or later", but I don't recall offhand any language that reached the mainstream but then died "sooner".)
First of all, F# is a more specialized language than C#. Yes, you could write solutions to almost anything in F#, but you'll find it particularly useful at:
Implementing complex algorithms with lots of transformations
Implementing concurrent algorithms
You won't find F# that powerful at things like UI or DB access (it can be done all right, but you won't find that much a difference from using C#).
Second, I don't think that F# will take over C# overall, but there are certain niche markets (e.g. the financial industry) where F# have a real chance of getting prominent above other languages.
Lastly, the functional programming paradigm, as you yourself mentioned, has made in-roads in several other languages/platforms (Python, Ruby, C#, VB.NET, hopefully the next Java), so getting familiar with its concepts is going to be helpful, and right now, at least in the .NET platform, F# is the truest implementation of such concepts.
Short: You probably shouldn't use F# as a general purpose language* like C#, but add it to projects where appropriate.
General purpose problems do often differ too much from the functional paradigm that F# wouldn't really excel, but in some cases, F# is absolutely the right tool. It's worth a close look though anyway, since otherwise you won't be able to actually point out these cases where a functional approach (even if implemented in C#) is favorable.
Nice problems for F#:
Mathematics / Physics / Simulation / Visualization
Data extraction / processing
Reactive GUI
Asynchronous code (events, callbacks)
Parallel execution
Parsing (domain specific languages)
Language-oriented programming (customize the language using it's
own features)
Edit: Clarification after being downvoted. Of course, F# is a general purpose in the sense that you can do everything with it and target the whole .NET framework as C# can, but because it can be used, that doesn't mean it should.
As I said, many "general purpose" applications are not inherently functional, heavily based on changing state or common object-oriented patterns. While you again can use F# there, it doesn't really shine in this cases, being kinda programmed against it's nature.
Why should you use a functional language when you don't solve a functional problem? And since you don't have to, just combine F# and C# where each fits best.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I've never really had any experience with programming at all, my uncle told me to come to this site for help from total strangers if I wanted to start programming. I know the names of a couple of languages but I don't really know anything at all. I'm fourteen and I can type fast if that counts for anything. One of my uncles wanted me to learn c#. So my question is, is c# a good place to begin, and if not, where is a good place to begin and how do I learn it?
You may want to look at getting the latest edition of Head First C#. It's particularly suited to newcomers - and it concentrates on "fun" examples rather than business-oriented ones. I'm not personally a fan of that style of learning, but it clearly suits a lot of other people.
Make sure you buy either the latest edition (covering .NET 4) or the most recent printing of the previous edition though: earlier versions had quite a few errors, but those have been rectified over time.
C# is a fine language to begin with.
Here is a good free ebook to get you started. It not only discusses the programming language but also what it means to be a programmer and how to approach it professionally.
As Jon says in his answer - Head First C# is also a great first book (as are all their other books such as Head First HTML).
You can get the Visual Studio Express programming environment (editor with syntax highlighting and intellisense, compiler, debugger and more) for free here - just be sure to select the C# version.
C# is an okay place to begin, but you might find it more fun to write websites instead. It's easy, everyone can see the cool things you do, and you already have the tools to start doing it -- just a text editor and a web browser. HTML and Javascript are also much simpler and more straightforward than C# without being less powerful.
http://www.w3schools.com/ is a good starting point.
In my opinion, there is one critical tool when learning to program or when learning a new programming language. That tool is "a problem that you are sincerely interested in solving."
It may be a game you are interested in writing or a desktop or web-based tool that will actually help you with something in school or in your life.
If you have a real problem that you really want to solve, there will always be free tools, tutorials, and online geeks to help you learn how to solve it.
Learning programming without solving real problems is like learning to build a house with just a hammer and a nail and a short piece of wood. You can learn the basic mechanics of the hammer, but you'll never be a carpenter until you have to confront the problems you'll encounter while trying to build something useful.
After that, I think C# is a great general purpose language to learn programming. And there are some really great free tools available.
I agree with the poster who said experiment with several languages. Solving the same problem with different tools can be a real eye-opener into the different paradigms of those tools.
If one of your uncles wants you to learn C#, he probably sees you as his employee a couple of years from now. So ask him directly if that's his plan and persuade him to help you.
If your uncle has no idea about programming and just dropped this C# suggestion because he heard the term somewhere, he might be doing a very bad favor to you.
If I would be you and I would have free hands to choose what I want, I certainly wouldn't choose C#, because it ties you to a proprietary operating system (Mono is a joke, admit it).
My choice would probably be Python, because it runs on almost any platform. And you have two very valuable tutorials for beginners that approach teaching programming from very different points, so you can pick the one that suits you best: the official Python tutorial and Zed Shaw's Learn Python The Hard Way (don't be afraid of the scary title, the book is very valuable for a beginner).
edit:
After reading the comments, I would like to add a couple more points.
How many of those C# programmers code for fun? Most programmers that use Microsoft technologies, do it professionally - it's their job, they do it for money, most of them don't have guts to admit their job is boring sometimes (even if it is), because such a claim is against the corporate policy that slips into the culture around the infrastructure provided by their (cough!) free programming tools.
Just in a couple of years, the community of users who do programming more or less seriously has literally exploded. Back in the days there was sourceforge - the single monster that was totally programmer related. Today there is launchpad, bitbucket, github (which recently surpassed 1000000 repositories, most of which are small personal pet projects governed by free licenses). How many of those projects are using C#?
Today programming is about reusing or "stealing" (in the good sense) code more than ever. Where are the herds of C# projects, small general-purpose libraries? While some programmers who write proprietary software are not very helpful to newbies (because they see it as consulting, which they can do for money), and while some programmers who write free software are not very helpful as well (because they lack social skills), the code is more important. You don't learn programming only by reading books, you learn it by studying working code. And the free software ecosystem provides much more code to study.
Generally, people who get into programming have two choices:
avoid proprietary stuff, get access to a lot of free software at the risk of being called "anonymous internet elitist"
ignore the proprietary vs free holy war at the risk of feeling what proprietary software means indeed and how it can spoil a good intention, like this guy
There's a lot to programming but it can probably be broken down into a few key elements:
theory
craft
dialects
Theory just takes lots of learning. Books, classes, trial and error, research, etc.
Craft comes with experience.
And that leaves dialects...or rather the particular language(s) you want to become fluent in.
To answer that would require a long list of what kind of stuff you are aiming to do. If you don't really have any particular direction to go in, your 'uncle wanting you to learn it' is maybe as good of a reason as any.
I would say dibble a bit in a few hot languages like C#, Python, Ruby. The reason I say this is, I think liking a language is a bit like developing tastebuds. I know many people who disgusted coding only because of braces and syntatic sugar. All I wanted to save you was from getting intimidated by syntax and throwing it away
I believe C# is a really good starting point. That's pretty spiffy that you're really interested about programming at 14.
I suggest picking up a C# book and reading it. Follow the examples as you come by them.
One of my favorite C# books is by Andrew Troelsen: Pro C# with .NET 4.0 is his latest book. :)
http://apress.com/book/view/1430225491
C# is definitely a good place to start and here is one reason why:
C# is a proper language that will pretty much force you to know what you're doing as a programmer.
I began my programming career with PHP and that language is so loose you almost can't screw up. You can make cool sites and such but never know how terrible they are until you are hired to do something that requires a stronger language. At that time, certain terms and data types that are never used in PHP will broadside you.
As I look back, now that I know many programming languages, starting with PHP was a pretty bad way to begin programming, at least in my opinion. I can't believe I have a job in this field knowing where I began.
Java is also a good place to begin. Any strict compiling language, really. When you know the foundations from a strict compiling language, the loose ones like PHP are a breeze to add to your knowledge base.
Of course, you may want to consider what you're looking to program for. If you want to do web work, C# is a good base, but doubtful that you will use it much for web work unless you're working on something seriously deep. Objective C is used for iphone and ipad development, so you can't go wrong learning that.
Java is good for web and is now a mobile platform, so it is definitely a good investment. The principles of Java will help you write better web code, as well as form a good foundation if you want to branch to C later. Vice versa, I guess.
PHP is very easy to learn and will serve you quite well if you want to get into web development. You should know html, css and get familiar with at least mysql for databases if you go this route. Just FYI, php developers are a dime a dozen in the programming field, so don't count on getting rich doing this unless you want to run your own web company and do the site yourself.
In any case, MVC (model view controller) will be an important thing to read up on. When your code is well structured, it is immeasurably easier to maintain for yourself and anyone else that may have to pick up where you left off.
Have fun.
There's no best approach, but one place to start is here:
Express Editions
They're free and you get lots of choices.
to copy a post i posted here: https://stackoverflow.com/questions/3430705/3432079#3432079 there are two things to get a handle upon:
Academic Knowledge:
Know the Theory - get a great handle on the theory of programming, the theory of language design, the theory behind the architectures you are coding on
Know the Math - all programming eventually boils down to math - know predicate logic, trig, vectors, geometry, (basic) set theory, graphs, basic matrix theory, a little numerical analysis doesnt hurt either - as well as complexity theory
Know your Language - get a book, read it, make notes for reference. Apress titles work well for C# http://www.amazon.com/Pro-2010-NET-Platform-Fifth/dp/1430225491/ref=sr_1_1?ie=UTF8&s=books&qid=1281215548&sr=8-1 is good. Then read blogs and videos, learn to use the Redgate Reflector and MSDN help
Know your Tools - for C# this means Visual Studio 2010 - http://blogs.msdn.com/b/saraford/archive/2010/06/17/video-101-visual-studio-tips-in-55-minutes.aspx is a great way to learn. Also get a decent refactorer - ReSharper is my favorite but there are others.
Know your Ecosysyem - know what libraries are out there, learn how to use one or two of the best
Skills:
Know how to define a projct - no matter how good a programmer you are if you build the wrong thing you will have failed epically.
Know how to design - learn the theory on object orientated design - the Gang Of Four software patterns are classics and every coder should be aware of them.
Know how to document code - this is critical for long lasting code and for working well in a team. Write it, Document it, Test it => Resuse it
Know how to work in a team - work hard, play nice, communicate well.
Know which tool to use - get a feel for as many types of languages, actual languages, technologyies, libraries and so on as you can so that you know which to use in which situations
Know how to learn - from those around you, from the web, from documentation and most importantly from your own mistakes.
I'm sure others can add to these lists ;)
I personally got a great headstart on programming when I started on C++ about half a year ago. I'm about thirteen myself as well. C# is a lot like C++ (there are differences, though), so speaking from experience, I'd say yeah, that's a good language to start out with.
As for references, just grab some books at your local bookstore and start working your way through them. That's what I did. If you want to start with C++, I know for sure that there's an excellent reference called 'C++ for Dummies'. That's where I started.
Whichever language you decide to pick (nothing wrong with C#). Pickup a good book or resource, a few are mentioned here. Once you've done that, make sure to work the examples by hand and then at the computer to concrete them into your melon.
It may be totally obvious, but the more examples you can work, modify and make your own and see how they work, the quicker you'll pick up the language. IMHO this is how you really start to learn and have fun because you can start seeing things happen and begin to solve problems and gain context to issues you wouldn't have just reading...
It is an asset You have made a commitment to prgramming. It is usually advantageous to start from a keen understaning of Your working environment. Ask basic questions like what tools are already available to do Your daily assignments? Have as much fun as You can with them; and when they behave unusual, ask the why? Try finding solution to them on the net. Later on, perhaps You may want to enjoy basic html for sometime; and move all the way around c-sharp or anyother programming language; because at the end You- Yourself will figure out the link between a programmer and programming languages.
Hope it helps
I wouldn't pick C# purely as it isn't completely free and the full visual studio is very expensive.
Have a look at python, it forces you program properly in many ways whilst omitting some of the more annoying aspects of programming ({'s and ;'s).
If you do choose to learn python there is a free site with tutorials on how to make simple text based games. I used it to familiarize myself with the language before starting my current project.
link:
http://pythonbook.coffeeghost.net/book1/index.html
The most used languages are C and Java, according to Tiobe, so I'd almost say you should start there but esr has some good reasons for recommending Python as a first language.
C# is an excellent place to start. One thing I would suggest is think of something cool, but not too complex, that you would like to build the using some of the reference books other people have suggested in this thread go build it. Calculators are fun starting programs to build (Disclaimer: I am a math geek).
Having an ability to type fast using ten fingers is useful as you can do more and more exercises without causing your muscle tired quickly.
The first time I used computer, I just typed using my right index finger only and got tired fast ---typing become a nightmare !
If you have much time, you can start learning the following topics in order:
Computer architecture from hardware and software perspective.
C# (Deitel's C# book may be a good choice since it has much more details).
Any widely used language is a good place to start. Once you have done some useful projects in one language, it will be easier to pick up others because the logic is similar.
I suggest choosing based on what you want to do with it now. For example, let's say you are interested in making a few simple games while you learn (think frogger or maybe 1943 and keep the scope small). You can make 2D games pretty rapidly using an interpreted language like Python or Ruby (both have free game libraries available). With perhaps a little more work you can make them in Java or C, and have room to grow into heftier game features. Or you could make them in Objective-C and Cocoa, which would limit you to developing on a Mac, but open the possibility of distributing your games on the iPhone.
If you want to do business or finance applications, you can find a lot of support based on languages like C#, Visual Basic, Java, C, and the .NET framework (not a language, but applicable to enterprise software generally). It would also be a good idea to practice with SQL for interacting with databases (where business data like sales, customer names, or employee records are likely to be stored).
The most important thing to learning quickly is that you enjoy the projects you are working on, and are extremely interested. It will seem impossible to learn a language if you don't really want to do anything with it. On the other hand, you can be an amazingly good programmer in 6 months if you quickly start working on projects of interest, and are fanatical about solving the problems you set for yourself. Besides, you're 14 so you have the option of pushing your life and career in a direction that will give you both income and enjoyment in the work you do.
OK, is it just me or no one asked him the main question.
What do you exactly want to do ?
Do you want to play with hardware (ie have some board connected to a serial / parallel / USB port and have some LEDs flashing, have some sound coming out a speaker etc) or do you want to develop applications that have a nice user interface connecting to a database or even a game ?
Well, for number one, that will be assembly (ie for ARM SOCs) and C and that would require you to get familiar with hardware programming.
For number 2, I'd say C++/JAVA. I wouldn't recommand a language that is only supported by one OS (like C#) ...
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
What is the quickest/easiest way to learn Java for a seasoned .NET/C# (more than 7 years) and C++ (5years) developer.
When I say to learn Java - I mean being able to write applications in a "Java way" using base classes library + where needed using a popular Java libraries (it is great that so many of them are open source).
I know that Java development comes in a lot of flavors - enterprise applicatons (Java EE), mobile devices (Java ME), objects hosted in application servers (to my knowledge Java has a buch of these) - however at the moment I am interested in a general Java development - may be with a some emphasis on a integration projects/enterprise development.
So basically - I am a strong, passionate about technology, proud to be a senior C#/C++ developer with a dozen years of experience who wants to dedicate a month-worth (may be more) of evenings to learn to effectively program in Java environment.
Having said that I don't mean I am switching from .NET/C++ to Java - but I would probably have to spend 30%-50% of my development time developing/supporting/whateverstageintheSDLC in Java.
Thank you.
I suggest starting with The Java Language Specification. I don't think there is any quicker or more comprehensive way of gaining an understanding of the language for a seasoned programmer.
Followed by Java Collections Tutorial.
Followed by java.lang.* and java.util.* classes, interfaces and packages.
This will give a good basis for learning and understanding any other branch of Java as it becomes necessary.
I would take a completely different approach to reading books upfront. Simply download an IDE and get coding. The netbeans tutorials tend to get you up and running with a variety to technologies very quickly.
If you can code C# then you should have no problem getting something up and running.
Once you have some code up and running that is when you would then dig out the likes of effective Java.
Karl
Effective Java should be in every Java developer's bookshelf. It focuses not so much on performance as one might think from the title, but rather on how to program Java idiomatically, which becomes subtly different from following the idioms of C#.
Perhaps one of the best ways would be to get a copy of Bruce Eckel's Thinking in Java.
Much more than simply covering the syntax of the language, this book goes into the background - as the title says, "How to think in Java" so you can write pure Java code, not C# (or C++) code using Java Syntax.
I m only speaking for java web app development: i think its going to be quite similar to how you might've done it in C# using ASP.NET, except you don't get the visual drag and drop GUI creation using visual studio. The basic concepts are pretty much the same.
As for libraries, there are a million and one in java, and only time will help with those. But it'll help knowing the common ones, such as apache commons, google collections, spring, hibernate. It might help you get started if you start with something like Appfuse, which is a full java RAD web app framework that munges together all the above common frameworks.
On the build tools side, there are ant and maven as the major players. I prefer ant over maven personally.
Ordered list:
Thinking in Java;
Core Java, Volume II;
Spring reference;