9 Replies Latest reply on Jun 4, 2013 8:44 AM by gimbal2

    Advice from professionals to anm amatuer

      Hi everyone I hope you are all had a good Christmas and new years eve.

      So my profession is civil engineering (Highways, infrastructure, structures etc.) and not software engineering but I have spent years learning java in my own time and passed the SCJP back in 2010 (I found it a great tool to guide me on what to learn and make myself learn things I might not have otherwise). I find java a very useful tool for work and studies (including my final year independant study for my degree).

      Even though I'm a self taught amatuer I am well aware there is a difference between knowing the fundamentals of Java and knowing how to put together a solid piece of software and although I have got by ok so far I would like to take my skills to the next level.

      I did have in my mind to do the Java SE 6 Developer after I passed SCJP 6 but of course Oracle bought out Sun and brought in mandatory Oracle training as part of the requirements. Although I would be happy to do the training realistically I can't afford or justify the training off my own back but I did like the sound of the [Developing Applications With the Java SE 6 Platform|http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=609&p_org_id=28&lang=US&get_params=dc:D61860GC10,p_preview:N] training because not only does it look like it covers the stuff for the Developer certification (incase I decided to do it), but it would cover the right stuff to better my skills.

      I've looked all over the place for similar resources such as books but haven't been able to find anything too convincing. I know I can't realistically get real world experience to learn some of these important skills so my question is does anyone know of any books or resoureces which could help someone like me? Give me guidance of best practices for building good quality java software?

      Thank you.
        • 1. Re: Advice from professionals to anm amatuer
          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.
          1 person found this helpful
          • 2. Re: Advice from professionals to anm amatuer
            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?
            • 3. Re: Advice from professionals to anm amatuer
              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 software
              I 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.
              • 4. Re: Advice from professionals to anm amatuer
                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.
                • 5. Re: Advice from professionals to anm amatuer
                  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:
                  • 6. Re: Advice from professionals to anm amatuer
                    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.
                    • 7. Re: Advice from professionals to anm amatuer

                      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.





                      Free hosting

                      • 8. Re: Advice from professionals to anm amatuer
                        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:


                        • 9. Re: Advice from professionals to anm amatuer
                          Hm, missed the replies back then.
                          I've already written the software and it wasn't particularly difficult but I'd hardly call it commercial level gold.
                          Ha, you were lying then. You're far from an amateur. I take no blame for giving wrong advice that was based on that misleading information ;)