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 8 years ago.
Improve this question
I am a .NET developer (and have been for a while now). I work for an organization that was just recently acquired by a larger company whose primary development language is Java. There are a few .NET developers, but the ratio of .NET to Java has decreased substantially now that the teams have merged.
That being said, I've decided it would be best for me to start Java development. However, most of the books I've seen so far for "learning Java" all take a very basic approach (what is a class, OOP principles, etc etc). I am comfortable with this part of development and don't need a primer (unless there are differences so profound that someone recommends the fundamentals from a Java perspective...).
Anyway, I'm looking for a book recommendation for Java development from a software developer's perspective that discusses today's techniques. For example, MVC architecture, application best practices (I am a web developer, this includes web services), is it worthwhile to work with JSPs or consider Ruby instead, etc etc.
A HUGE bonus would be "learning through doing". Something like Murachs, where I can step through a project from start to finish, and is light enough on fundamentals that I don't get bored. I'm hoping to walk away with enough basic knowledge to volunteer for some internal projects and grow from there.
I'm sorry if my question is needlessly broad, but I'm struggling to find a starting point aside from my Eclipse installation (I am doing this on Ubuntu, deliberately avoiding Windows).
Thanks for any direction or insight you can offer.
EDIT - After discussing with a co-worker, and reading Bert's great suggestion (all of them have been excellent, thank you all very much), it turns out the main focus is on EE, and Glassfish. They use NetBeans for development, since it is tightly bound to Glassfish.
This doesn't mean much to me, except that I think the parallel drawn is IIS/Web apps to Win32 apps. But perhaps it will help clarify some of the more open-ended questions in my OP.
Effective Java By Josh Bloch
It may not be "learning by doing" but it gets into the details of how to use the Java language effectively.
I would then complement it with Java Puzzlers by Josh Bloch and Neal Gafter
My best bet is to learn Spring based on your requirements:
MVC architecture, application best
practices (I am a web developer, this
includes web services), is it
worthwhile to work with JSPs or
consider Ruby instead, etc etc.
You can start by visiting SpringSource at http://www.springsource.org/
There are a few points I would like to make to you:
The basic Java language is rather small and C-ish. To my understanding C# and Java works almost identically here.
The Java runtime library is VERY, VERY BIG, and rather unlike C#. Very few people know all of the Java 6 runtime library well.
There are several IDE's in common use for Java. You will want to learn the one used by the rest of the team.
I would suggest having a brisk walk through the Oracle Java Tutorial, just to get the hang of the spirit and do some of the exercises, and then look at the common "Java for C# programmer" cheat sheets on the internet. Then do a lot of code, and then read Effective Java.
(For those who think they know Java 6 runtime well, please consider if you are familiar with RMI, the Rhino Javascript engine, and XPath in the XSLT implementation and all the rest)
Please look at the following thread:
https://stackoverflow.com/questions/75102/best-java-book-you-have-read-so-far
Ruby makes no sense unless you're writing JRuby on the JVM.
If you're writing web apps, you'll need to know JSPs written using JSTL (JSP standard tag library), servlets, HTML, CSS, and JavaScript. Download Tomcat from Apache - it's a servlet/JSP engine that will let you deploy web apps locally for learning. It has an HTTP listener built in, so you don't need IIS or Apache.
You'll need to know how to create and deploy a web archive (WAR) file. That's a ZIP file that contains the standard format for a web application.
I'd have a look at the Tomcat "first web app" docs to get a feel for it.
Once you have that, come back and talk about frameworks. (When you do, I'll recommend Spring.)
Here are some references I like. I'm sure there are better, but there are the ones I have read and can vouch for:
Java in a Nutshell is a classic summary of the core language. If you need more, there are books like Java for Programmers for programmers transitioning to Java (I have not read it).
Sun's Core Servlets and JavaServer Pages was a good book for Java servlets and JSPs. But consider that a lot of web tech is built on top of this (e.g. Spring), so this may be giving you foundation but not direct knowledge of the specific framework you will be using. Also a lot of web tech these days are client-side/JavaScript/AJAX-based, e.g. jQuery.
As for MVC, consider focusing on MVP instead. I been playing around with Google Web Toolkit to leverage my Java background to create client-side apps, but it is also a good way to get some idea of MVP - read Large scale application development and MVP Part I and Part II, and the GWT MVP Development with Activities and Places. However, GWT keeps evolving.
My last suggestion is that you narrow your focus - try to figure out what frameworks are popular at work and decide if you want to focus on a tier: front (e.g. HTML/CSS/jQuery), middle (e.g. Spring), or back-end (e.g. Hibernate). Once you figure this out, then post a more specific question(s) (e.g. what are the best resources for learning XYZ).
Just from my experiences with java (limited but I took a Web Dev course teaching JSP's) Any decent technology for it is usually 3rd party. However, from what I can tell when doing web dev I would use Netbeans, Netbeans has Tomcat built in especially in Ubuntu for easy debugging.
More on similar lines you can find answers from this post
https://stackoverflow.com/questions/3820437/life-after-head-first-java/3820449#3820449
The Java landscape is quite wide as you probably have already figured out.
There are hundreds of frameworks and tools that can be used for basically doing the same thing. To get an idea, you can take a look at this presentation written by Matt Raible, where he compares a number of Java web frameworks.
As someone else suggested, you should definitively take a look at the Spring Framework. It is widely used in the enterprise world. There are several good books about Spring.
If you want to get the basics of Spring MVC in a "tutorialized" style, you can take a look at this book. It doesn't cover the latest Spring version (3.0) and it is not a "perfect" book, but it should allow you to get the basics while running some examples.
Also, there are literally thousand of Spring-MVC tutorials on the web.
For instance, you can take a look at:
http://www.adobocode.com/spring/a-spring-web-mvc-tutorial
RESTful services are also quite popular these days. I have been working with the Resteasy framework from JBoss and I found it very easy to setup and work with. This book explains the REST architecture and uses Resteasy as framework for the examples.
I also recommended "Head First Design Patterns" from O'Reilly. It covers the most important patterns using Java and it will help you to see how the language can be used for patterns you may be already familiar with.
One more suggestion: you may considering "tuning in" on Java TV. It's a great resource with hundreds of Java tutorial videos. It covers a wide spectrum of technologies so you should be able to find something for you.
I'm building a website for my friend's startup.
I'm currently building it on PHP, MySQL, Apache. Everything is going pretty smooth till now, but one of my friend recommends i move to a Java framework because that'd be better when the site becomes bigger.
I don't have any Java Knowledge and I have adequate knowledge of PHP but I'm a fast learner
Should i continue with PHP (can PHP be used for big sites?) or should i move to a Java Framework?
Any suggestions please.
PHP can be used for big sites. Take a look at Facebook. End of story...
When someone says something like that, you need to have them justify what they are saying. PHP is scalable and versatile. Java has it's strengths and weaknesses too, just like any other programming language.
Since you are a novice in PHP, you probably won't reuse much of the code that you are using to build the initial site. I know you plan to, but the likelyhood that you will is very slim. Go with what you know.
PHP has been used by a plethora of sites. Google, Yahoo, Facebook, etc, etc all use some php for all their sites.
I think regardless of whether you go with PHP or a Java solution you're going to have to learn a new set of frameworks/libraries. If you don't have experience building anything more than a toy website (including any you've done through education) there will be plenty to learn from both paths.
Research some frameworks for both PHP and Java and make up your own mind based on what you've read. If it's such a long project you'll have plenty of time to familiarise yourself with whichever option you choose.
Everything for a website is possible with php. No need to worry. we can make heavy sites with php in a easier way then java framework. You can use php frameworks like zend framework, codeigniter. They are scalable and easy to learn have lot of Components (libraries). And provides client services to bigger sites like twitter,amazon,yahoo etc.
:)
At least 1/3 of the top 20 sites on the web are using PHP in one way or another. Languages used by the rest include Python and Ruby. I don't see that any of them are using Java.
PHP is fine to use, ive made websites before using PHP...
Id suggest you stick with PHP but challenge yourself and expand your knowledge.
Yes. Big sites can be build using PHP. Examples are Digg.com and Facebook (which compiles to c++, but indeed).
Hi guys looking for some guidance, i have a knowledge of xhtml, css, javascript, php generated from education. But where do i go from here to reach an industrial standard? for example using those 4 languages, i have used notepad++ to write them. I'm particularly focusing on web development here.
What softwares should gain experience of?
for example where i work i looked at the intranet homepage source and i couldn't read it, i imagine it was autogenerated code, a great deal of it was javascript. I'm particularly focusing on web development here.
Where can i learn about building a website generated from a database? (which i've heard mentioned but dont know how to do) which i belive site like imdb are.
Also i was asked in an interview about Java web development and .NET web development. What does this encompass? .NET is the windows framework from what i've researched.
Any help would be fantastic, i'm just really confused and would love some clarification!
Your best bet from here is to get yourself into a junior role somewhere you can learn a development stack. You've mentioned PHP, Java and .NET in your post - it's time to get a job somewhere you can learn how to do it commercially.
If you don't fancy getting a job (this is the best option as someone can actually show you how to do things) then you'll need people to recommend you a good book that takes you right from the beginning. Any book that combines PHP and MySQL is good starting place if you want to write a website that stores data in a database - with the benefit of being able to play with all of these things for free while you are learning.
Notepad++ is great for developing at home, but if you want to do things really well, you'll need to quality IDE. Jetbrains have PHP Storm, which is a fully featured PHP development studio. Microsoft offer Visual Studio (including a free express edition) for developing .NET and there are also tons of options for developing Java, such as Eclipse.
Lots of people are going to start recommending one technology over another - but ignore any advice that seems to be too extremist as it won't benefit you. I am developing in all three technology stacks and wouldn't recommend one above another - they all have their place. Choose the language that feels right to you and when you've more confident you'll find that switching to other languages is reasonably easy.
What kind of job do you seek? Do you want to be a designer of front ends or a developer that can build layers in the front end, business layer and backend?
You say you know PHP, but dont know how to generate pages from the database. There are many articles on the internet about PHP and using databases (for example the MySQL database). You will have to learn more about scripting/programming in PHP and you need to learn about databases (designing tables, SQL, etc). Learn by reading alot and practising with it (build simple dynamic web-sites). I recommend to buy a good book on these topics.
From there you can learn a lot more about both PHP and databases. For example you can learn about advanced IDE's (editors), version control, performance optimization, advanced web interfaces with AJAX, etc..
Java and .NET are both programming environments. They can be used to built web-applications or desktop user interfaces, but that's only a small part of it. If you want to start with these you will have to learn about topics such as object oriented programming.
I have a DVD cataloging application that I wrote a few years ago with MFC. Records are saved in a sqlite database, so basically it's a CRUD app. UI-wise, it has a tree view on the left, a list view (grid) on the top right, and an HTML view (embedded IE) on the bottom right. Nothing fancy.
I wanted to update the app with more features, but I've been using Java EE for the past couple of years and I realized that I wasn't productive at all with MFC. So I'm thinking maybe I should use something else to boost my productivity. Cross-platform would be a big bonus, but it's not absolutely required.
Here are the options based on my research:
Java / Swing: I can utilize my Java knowledge; great third party libraries (such as Spring for IoC and Hibernate for ORM); cross-platform. Downside is, JRE required for users; Swing seems to be in the "maintanence" mode and it's not getting much attention from Sun.
C++ / Qt: native application;
cross-platform. But I'm new to Qt so
I have to learn it first.
C# / WPF: WPF seems to be the future
of Windows GUI development and I'm
impressed by some WPF sample apps. I
have some experience with C# but I
need learn WPF. Downside is, Windows
only; .NET 3.5 runtime required.
So what would you use if you were in my situation? Thanks in advance for any suggestions.
If you want to learn some new skills while developing this application, then C# / WPF, and LINQ in C# 3.0 is really great if you didn't have it in Java.
If you just want to get on speed, then you already answer your own question, Java / Swing. It is what you are good at.
I'm actually a big C# fan, but since you said that cross-platform would be a huge bonus, I think that Qt might actually be better for that. C# can be cross-platform via Mono, but I've had better results with Qt in that respect. They also have real good documentation in QtAssistant to get you started.
Consider PyQt + Python as well if your productivity is a big issue. Trust me when I say the learning curve for Qt is well worth it, and not as hard as it may seem at first.
Sqlite support is in both the Python standard libraries and the QSql module in Qt if you prefer to use that.
PyQt + Python is a cross-platform option as well, since Python is available for many platforms and Qt's cross-platform to begin with.
The controls you mentioned you used in your application are all available in Qt.
The only other tool apart from raw C++ is Delphi. Period.
With other tools you will have problems in the deployment.
With Delphi you will produce native exes, self-contained. Also, the database connectivity is great.
You never will be dissapointed by lack of controls or 3d party tools, a lot with source code and with free/commercial toolset.
And the compiling times are the fastest in this galaxy ;)
So, if you are serious in provide no-hasle app for your customers, and that customers are not tech-oriented like developers so could be confused because which one of the 4 .NET runtimes install, want minimal support, easy downloads, click-click-install-go, apps that work instanly like Skype,TopStyle (made with Delphi) and others,then Delphi/C++ is are your only option. Seriously. The ONLY options.
If you want a cross-plataform solution, then FreePascal/Lazarus could work if your GUI is minimalist.
In most cases, as long as the scope of the project is reasonably small, and the computational needs are modest, I tend to favor using TCL/Tk. I have not yet learned a gui api in which I'm more productive than tk (not to say that there isn't one, just that I've tried several and found them slower). TCL is not the most wonderful language to program in, to be sure, although there are a number of add-ons that help a lot, specifically [incr tcl] and tcllib.
The reason I choose this instead of other systems, I prefer coding in python, for instance, is because deployment with tcl/tk is close to unbeatable. With Starkit, you end up with a single file double clickable application that requires no installer, and is trivially portable.
Well if you really want a class platform type of application, I would convert it into a web application and host it. That way if one user uploads dvd information or a dvd cover picture another user could take advantage of that information already input into the system.
If your going to develop for the desktop try to make feel like its an application made for that platform by utilizing the OS UI tools. And for windows, pick your 3rd option C# /WPF.
If you have some non UI code in your MFC app that you would like to reuse then consider QT. Otherwise pick whatever you prefer to learn.
Instead of C#/WPF you could give Silverlight a look. You app seems simple enough that it would not take a lot to get up and running. Similar to the demos that are shown off at conferences.
Once you get the basics down it will be fairly easy to add some cool features like animations, movie clips, album art, coverflow like interface etc.
You will be able to target Windows/Mac users and possibly Linux with Moonlight. But I haven't looked at Linux in the past 8 years so I really can't say much about it.
With Eclipse RCP, you get Java, cross-platform development (see Delta Pack), native look (via SWT) and a great framework collection for desktop development (declarative UI, plugin management etc.). You should definitely give that a try.
I went the C++/wxWidgets (but you could do Qt) route a few months back when presented with almost the exact same scenario (upgrade an app with a SQLite db). wxWidgets was fairly easy to pick up, had everything I needed, and was way easier than MFC. The best part was I found a good C++ wrapper for SQLite on CodeProject (e.g., CPPSQLite) and had the whole thing up an running in no time... The project sold me on wxWidgetss, in case you couldn't tell.
I would actually look very closely at something like adobe air. It is cross platform and can be html/javascript based so chances are you won't have a heck of a lot to learn except maybe a javascript library or two. It has the ability to talk to a local datastore or over the interweb to a webservice or RESTFUL service. Development is free with aptana. Check out some of the stuff written in it:
http://www.adobe.com/products/air/showcase/
There are zillions of Java web application frameworks.
95% were designed before the modern era of AJAX/DHTML-based development, and that means these new methods are grafted on rather than designed in.
Has any framework been built from the ground up with e.g. GWT + Extjs in mind?
If not, which framework has adapted best to the world of forms with dynamic numbers of fields and pages that morph client-side?
Echo2 / Echo3 by Nextapp (www.nextapp.com) is totally awesome.
Advantages over GWT:
1) It is not limited to a sub-set of java like GWT
2) It is easier (in my estimation) to learn
3) Has extremely robust design studio for almost drag and drop designing.
4) It is very fast, and works very well on all platforms browsers
5) You can write your application using either java script or java
6) It has great and straight forward methods for handling events and actions.
Personally I think that for any web-application in which you are trying to integrate java and speedy delivery I wouldn't hesitate to pick Echo3 or Echo2.
If you're starting from scratch. I'd have to say Google Web Toolkit. I have to say it is incredibly powerful. You get keep using most of your Java tools. Plus, you don't have to duplicate code that exists on both the server and the client, it just gets compiled differently for each area.
I'd consider REST-style frameworks as well as the other recommendations here- Restlet or Jersey may be good choices for the backend, while you use something like JQuery or GWT on the front end. Both frameworks can easily produce JSON, and the REST style provides a nice clean line of demarcation between your client application and your server source; I find that JSF can make that demarcation pretty muddy.
I use JSF and IceFaces. Although JSF has a few limitations, IceFaces seems to work pretty well and has ironed out a few of the problems with JSF.
I haven't used a really good AJAX Java framework as yet, although Echo2 looks interesting.
I like the stripes framework. It lets you use whatever javascript toolkit you want.
Here is their documentation on AJAX
GWT is quite powerful and easy to use (all Java, no Javascript/HTML/CSS coding). If Google has their way it will be a dominant framework/tool in web applications development, and for good reason. It already works with Google Gears (which allows offline access to web apps) - and more than likely will be optimized to work within Google Chrome.
DWR
I use this to dynamically populate drop downs, and even filter them on the fly based on user input in other places on the form.
I like the combination of JBoss Seam and Richfaces, especially with the JBoss tools that are extentions to Eclipse - makes building these sort of RIA's incredibly easy.
Wikipedia contains some useful comparisons:
Comparison of JavaScript frameworks
List of AJAX Frameworks
Your choice depends on several different factors including whether you want the "work" done client-side (most javascript frameworks) or server-side (echo2 etc.). Other things worth looking at are tools like OpenLaszlo that provide Flash (I think) out of the box, but drop back to DHTML if there is no Flash player present.
Unfortunately I think the decision comes down to balancing several competing cocerns. Check out the comparisons and try them out - most come with online demo's for you to try.
Aptana has a server side frame work called Jaxer. This is from their site:
Jaxer's core engine is based on the same Mozilla engine that you'll find in the popular Mozilla Firefox browser. This means that the execution environment you use on both the client and the server are the same. It's Ajax all the way through and through. That means you only need one set of languages -- the languages that are native to the browser -- to create entire applications.
This framework is open source and has a very nice IDE based on Eclipse. Aptana is also working on a Javascript implementation for ActiveRecord called ActiveRecordJS. Potentially you could use this both client and server side with their framework.
GWT is one of the best AJAX framework that I used ever. Most important thing about this framework is that its maintained by Google. And Everyone know "Who is Google ?"
GWT is used by many products at Google, including Google AdWords and Google
Wallet. It's open source, completely free, and used by thousands of
enthusiastic developers around the world.
GWT provide rich widgets that can be used to built any application. Almost all the widgets they have.
Another important point is GWT is continuously developing and its also have stable release which is very good thing. Another thing Google has also released GWT-Material which is again a very good thing because everyone is moving toward material.
I hope this will help you!!!