This content has been marked as final. Show 9 replies
Yeah. I know that you really really really want to learn this stuff from a book. But I have bad news for you: you can't. You can't learn this stuff in a classroom either; you can only learn the language and you already know enough of that to have it refreshed within a week of effort. You don't gain true understanding there, you only get that out in the field.
There is really only one way you are going to become anything more than a novice: practice. Luckily its not as costly as building a bridge, it just means you sit down behind your computer and start building something that you want to build. You'll run into many gaps in your knowledge, you'll make many mistakes, you'll need to do lots of research, you'll need to work out how to use the tools but that's all the things you need to do to actually gain expertise.
My advice is: build something fun; the fun factor makes it so you apply yourself and push yourself beyond the very minimal. Start with a game of hangman on the command prompt for example. You may think that is easy but you'll be shocked to know it is quite an exercise. How to load and randomly pick a word from a dictionary of words for example?
Give me guidance of best practices for building good quality java software?I have to ask there: what kind of software were you thinking about? The answer to that greatly determines what research material you need to be obtaining.
Thanks for the great reply and I completely understand what you mean. I have been doing Java for a number of year now on and off when time allows and I am 100% better than I was just a year or so ago. I'm not expecting a course or book to spoon feed me but having some examples of good ways to do things can help send you in the right direction or give you ideas.
My main aim is engineering software and a good example is my current project which is for my final year degree dissertation. I'm building a pogramme which creates a very large number of strucural beams from the range of parameters input by the user. Analysing them with different methods and then allowing the user to display graphical output and tables as well as output HTML and CSV reports. I've spent alot of time on it but the main reason for that is learning things the hard way around and then going back and changing things. Like you said it has helped me significantly to try and figure out how to implement features I need and want. I suppose some main features which are often included are calculations, graphical display (drawing up things in plan, section or drawing graphs) and exporting/importing files.
My question is really whether any industry experts have written any material for best practices for creating solid software such as the topics mentioned in that course I posted above, things that tie everything together. I can look up and learn individual things but sometimes you don't know something is there or what you are looking for unil you see someone else do it. Like good ways to log whats going on for debuging and what are the most appropiate ways to pass parameters between methods/classes and obtained good Oo etc. I assume software companies have best practices for how they like things to be done?
As good as it is in the long run I would like to avoid learning everything the hard way if some guidance is available but maybe I am looking for something that doesn't exist, it's just the topics of that course which have sparked my curiosity.
Has anyone done the course? is it worth a look even as self study?
Hold your horses. That is way too complex a program to start with. Start simpler and work your way up to what you want to do here. Your application will most likely involve custom painting and advanced user interface interaction that goes way beyond clicking buttons. You'll likely want to read into JavaFX 2 for that bit, but you're nowhere close enough to even attempt such a thing.
Learn to walk before you run, or expect to crack your head as you fall.
best practices for creating solid softwareI will repeat it: you can't learn that from a book. The best practice is be really, really, really good at this thing called software engineering. 10 years of experience generally is a good start.
I've already written the software and it wasn't particularly difficult but I'd hardly call it commercial level gold.
It was just a matter of using the basic swing components, painting onto a JPanels, throwing my calcs into a SwingWokrer and writing text files (I created my own classes for producing the CSV and HTML reports).
I'm not a complete beginner, like I said I've passed the SCJP and I have ben plaiyng with it doing small projects for years but I'm not a professional, I just want to take the quality to the next level.
Why JavaFX? I still don't understand what it is or what its for. Is it to replace applets?
What type of things did you have in mind I would need to know eg. the "advanced user interface interaction"?
Fair enough, I will just keep doing what I'm doing and learnt that way.
Thanks for the replies.
We'll here's my two cents worth:
Broadly speaking, there is desktop development and web based development (there are others). I think the market for jobs in web based development is much larger and I would recommend that route rather than desktop development. As I understand it, web development is roughly divided into browser based applications and various mobile device applications. I'm a browser developer and I'm only going to talk about that.
There are countless frameworks in use for browser based application development. I would suggest you stick with the most commonly used ones and not ones that few have heard of (especially employers). Some of the technologies you should eventually get familiar with is: JSP, JSF, Servlets, JDBC, Hibernate, JPA, Struts, Spring, Ant, Maven, JEE6 stack, XML, Web Services, etc. You may want to read up on what these technologies accomplish before deciding which you want to read up on in detail.
Some of these technologies are old (JSP and Struts to name two), but countless programs have been written in them and you will probably sooner or later (more likely sooner) get a job where you will have to debug and enhance them. Since you don't appear to have web experience and if you consider taking that route, I suggest you get a book on JSP/Servlets, and read on-line about JDBC. Create a web application that reads data from a database table, displays it, and allows the user to update the data using MVC design (a lot of web applications are based on filling out forms). Add validation. Then, refactor the project over and over to get it looking professional. Once you get that down pat, I suggest going onto JSF. Eventually you may want to get into Spring (I would avoid Struts), but that's an advanced topic for a later day.
I've read many books on various technologies over the years have haven't come across any that takes you step by step on setting up a complete best-practices professional web application from scratch with just about every service you typically need. I suppose no one does so because each new web application requirement is unique enough that authors prefer not to give one design example whereas there are countless services and configurations of services. Also, their example probably wil become obsolete soon enough.
Lastly, and most importantly:
Thanks thats good advice. That's the scary thing about pogramming I guess, so many different things you could learn and it's a serious comitment of time so you really want to use it wisely. For that reason I try to stick to the default Java 6 API and write anything I need myself to keep things generic.
Is there anyone on these forums that actually uses Java for desktop purposes?
My main intention is to write engineering software which is 9 times out of 10 a desktop based solution, I'm guessing partly due to the grunt needed to carry out tasks and also how the user typically accesses the software.
my 2 cents: I wouldn't recommened beginning studying a framework as someone in this thread suggested - I would rather first master the programming language you are going to use.
I wrote something very similiar, for my finaly project at university. It was a 2D truss analysis program, with the aim to use Genetic Algos to optimize the geometry of the truss to minimze weight
Anyway I pushed it to github, as it sounds like you may be able to reuse some of the components: