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 10 years ago.
Improve this question
I've been programming in java for a while and I really like the language, I've mostly just done game programming, but I want to get a feel for some of the more commonly used api's and frameworks and just get a generally more well-rounded grasp of the language and the common libraries in the current job market.
From what I found things like spring, hibernate, and GWT are pretty in demand right now. I looked at some tutorials online and they weren't hard to follow but I really felt like I had no context for what I was learning - I had no idea how any of it would be use in a real work environment. I know nothing can rival the benefit I'd get from actual work experience but that's not an option for me right now, I need another way to learn these technologies in a way where I'll at least feel comfortable working with them and know what I'm doing beyond just understanding what code does what. I checked out a few books but they were all really old(like pre-2006, am I right to assume those books would be kind of out of date today?) or required experience with libraries that I didn't have and can't get. I hate getting stuck looking for the best resource to learn something instead of spending my time actually learning.
All I really want is someone to point me to a resource(website or ebook) that is aimed at already experienced java developers and will not only teach me some interesting useful java technology(anything that is useful, I dont know much outside of graphics libraries and game related things so I was thinking some database or web programming api's) but also give me a good perspective of it and leave me feeling confident that I could actually use what I learned on a practical application.
If my post makes you think I'm not yet experienced to be learning these things, which I doubted earlier today but am now starting to question, then what do you think is the next step for me? I just want to get better at java.
Thanks everyone
Register to the online courses at www.javapassion.com. It is cheap for the content and quality they offer.
The best way to learn is by doing. So I would recommend you to either start a private project which uses the technologies you want to learn or to find an open source project which uses them and contribute to that. The latter option has the advantage that you get feedback from other programmers, but the disadvantage that it leaves less room for experimentation.
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 6 years ago.
Improve this question
First of all, I love Python, and I currently use it for most stuff. However, as a PhD student, I mostly implement prototypes for testing and evaluating ideas. This also includes that I'm usually the only one coding, and that -- while I certainly try to write half-way efficient code -- performance is not a primary issue. And for quick prototyping, Python is for me just neat.
Now I consider to go with some of my stuff more "serious", i.e., to bring it into a productive environment, make it better maintainable, and maybe more efficient. So I wonder if it's worthy to rewrite my code to, say, Java (with which I'm also reasonably familiar). I know that Python is not slow, but things like Java's static typing including seems to make it less prone to errors on a larger scale, particularly when different people work on the same project.
It's only worth it if it solves a real problem, note, that problem could be
I want to learn something better
I need it to go faster to reduce power requirements in my colo.
I need to hire more people and the talent pool for [insert language here]
is too small.
Insert innumerable real problems here.
Python and Java are both suitable for production. Write it in whatever makes it easiest to solve the problems you and or your team are facing and if you want to preempt some problems make sure you've done your homework. Plenty of projects have died because they chose C/C++ believing performance was going to be a major factor without thinking about the extra effort involved in using these language well.
You mentioned maintainability. You're likely to require more code to rewrite it in Java and there's a direct correlation between Bugs and LOC. It's up for debate which one is easier to maintain. I'm sure both camps believe theirs is.
Of the two which one do you enjoy coding with the most?
The crucial question is this one: "Java's static typing including seems to make it less prone to errors on a larger scale". The crucial word here is "seems." Sure, Java will help you catch this one particular type of error. But how important is that, and what do you have to pay for it? The overhead imposed by Java's type system means that you have to write more lines of code, which means reduced productivity. I've used both and I have no doubt that I'm more productive in Python. I have found that type-related bugs in Python are generally easy to find and fix. Keep in mind that in a professional environment you're not going to ship code without testing it pretty carefully. The bottom line for a programming environment is productivity - usable functionality per unit of effort, not the number of bugs you found and fixed during development.
My advice: if you have a working project written in Python, don't rewrite it unless you're certain there's a benefit.
Java is inherently object oriented. Alternatively python is procedural.
As far as the ability of the language to handle large projects you can make do with either.
As far as producing more usable products I would recommend java script as opposed to java because of its viability in the browser. By embedding your js in a publicly hosted website you allow people with no coding knowledge to run your project seamlessly in the browser.
Further more all the GUI design features of HTML are available at your disposal.
That said any language has it's ups and downs and anything I've said here is simply my perception.
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 10 years ago.
Improve this question
I am new in this community. I just completed my Btech in Computer science, I have interest towards programming especially java. I started studying java but i am little bit slow in logic and understanding the concepts. I have some good books of java but when doing the program i am losing my confidence because of the logic issues. I have some doubts
How can i improve my logical and coding skills
HOw to get real interest in programming.
Is there any shortcut for studying programming
Please provide some suggestions as i knew this forum has lots of good programmers. Please share ur thoughts and how you people improving ur logics.
Any help is appreciated
Perfect way is to start with the language you love. The syntax you like. The things you know. For example, suppose you know C++ and you are a bit familiar with it. Of course, you had done any of the language before in BTECH. So, go start up with that. Go through some basics of that to intermediate. And, if you're new to programming, then don't jump towards deep nor visit the Forum's guide post until you face the same problem. Make simple programs. Ask experts for your problems and when you feels yeah I learnt so much from my self and community, start digging the complex scenerios of that language. (Here, language can be any programming. For your case, Java)
Whenever you got perfect in your own loving language, it would be easy for you to switch any of the language because all languages are same probably. Mostly, some syntax changes and some component, feature or etc changes.
Write code. Read code. Study code. Breath code.
If you aren't interested already then (1) will be a bit hard
No, you just have to put the time in and do it
At the end of the day, the real way to become a better programmer it to use your tools more and to research proper methods of using those tools. There are no short cuts, there is no go direct to go and collect $200.
As for interest in coding. I find that my interest for various projects waxes and wanes but at the end of the day, I still have a voracious apatite for solving problems and writing code. I don't know if that can be learned.
1) By practice and even more practicing.
2) Don't you have an interest you can combine this with? It's hard to find a hobby that can't use any software.
3) If there is a shortcut it's probably no good.
4) Why do something you're not interested in?
first of all
*3. There is no shortcut
you have to be patience and passionate in order to learn coding.
*2. See thing in computer, and be curios how the engineers make things so easy and simple that any person can do much complex task in a seconds
and
*1. In order to improve your logic you need to keep coding, more you code more you get sharpen, solve puzzles, and maths problems, and to learn good coding style head first java and Head First Design Patterns is the best book that I found, which I personally love to read.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 1 year ago.
Improve this question
I'm a systems engineer, recent college grad, and I've just been given a project that is exceptionally daunting.
We have a legacy system, we legally own the entire code and all rights to it. The problem is that the code is poorly documented, what little documentation is incomplete, sometimes wrong and the original devs are unavailable.
It uses a custom Perl build script requires a thousand modules from CPAN to work and I do not know Perl. Reverse engineering into UML has failed except with Doxygen and that is limited to just inheritance diagrams and call graphs.
I've obtained a massive chalkboard and I'm slowly trawling through the code, modeling packages and then the nested packages within.
My question is whether or not I'm approaching this reverse engineering from the right direction. I'm working close from the bottom trying to figure out what calls what while developing UML and writing a Design Document. I did a package diagram but it's hard to figure out what's going on at that high a level.
An academic paper I pulled up suggests I also make a new Requirements Document which would slow me down even more and I don't know if it's a good idea as the other developers are always busy trying to keep the legacy system up.
Are there any books out there that can help me and am I approaching this from the right angle? Should I hire a contract worker that knows Perl and JMX to assist me?
The book "Working Effectively with Legacy Code" by Michael Feathers will probably help you more than anything we can tell you here.
However, the most important thing you need to clarify for yourself (and from your question it sounds like it's not completely clear) is this: what is your goal? What do you want to achieve with this codebase?
If the answer is (as it sounds) "being able to effectively maintain the existing project", then trying to directly build a complete high-level model of the system may not be the most effective path. It's probably just too much at once to keep in mind.
In this case, I would try to understand only the use cases of the system that you currently need to modify; follow method calls through the code (pssibly using a debugger on the running system) to see what parts are involved. Do this for a few different use cases and you'll start to see patterns, then document those and gradually fit them together into a high-level image of the system.
This tool might assist you.
Or if the legacy system is written poorly it could just make a huge unreadable mess, but I hope it helps.
If it is a java code then a deep reverse engineering would be very helpful.
See a documentation at: http://www.ejb3.org/jar_file_reverse/jar_file_reverse.html
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 12 years ago.
Improve this question
I finished reading tutorials on Java and doing the sample exercises and I am ready to really get into coding Java, the only problem is I am a bit confused as to what I should do now. What path should I take at this point ? Should I join and start contributing to an open source project ? What suggestions would you give ? I'm not actually interested in something particular so anything will do.
For the more advanced programmers, try to put yourself in my position. What would you do now?
Contribution to OSS is definitively a good way to consider at some point, but I don't think that would be an easy task for someone who just started doing sample exercises.
For contributing to OSS, I suppose you would have to consider much more then a programming language, including:
SCMs - http://en.wikipedia.org/wiki/Revision_control,
File comparison is related - http://en.wikipedia.org/wiki/File_comparison
Software design patterns - http://en.wikipedia.org/wiki/Design_pattern_(computer_science),
Software testing - http://en.wikipedia.org/wiki/Software_testing,
Get familiar with Java libraries such as:
Apache Commons - http://commons.apache.org/,
Hibernate - http://www.hibernate.org/,
Spring Framework - http://www.springsource.org/
Documenting - http://en.wikipedia.org/wiki/Javadoc
Depending on the project you would like to get involved with, it would probably be wise to familiarize with some of these:
JDBC - http://en.wikipedia.org/wiki/Java_Database_Connectivity
JMS - http://en.wikipedia.org/wiki/Java_Message_Service
Swing - http://en.wikipedia.org/wiki/Swing_(Java)
JNDI - http://en.wikipedia.org/wiki/Java_Naming_and_Directory_Interface
JMX - http://en.wikipedia.org/wiki/Java_Management_Extensions
As you can see, it's a lot, so depending on what you want and what level you are at right now, I suppose it would be good for you to stick with some of the programming exercises such as:
Working on PLEAC Java - http://pleac.sourceforge.net/pleac_java/index.html
You may even be able to contribute to PLEAC
RubyQuiz - http://www.rubyquiz.com
Not Java, but problems are rather general, you can try solving them in Java
CodingBat - http://codingbat.com/java
Has some nice problems
Alioth - http://shootout.alioth.debian.org/
Very benchmark oriented, but can be interesting. Look at specific problems (e.g. http://shootout.alioth.debian.org/u32/performance.php?test=fasta#about) to see what is needed
When you pass through some of these and feel confident you can continue, I suggest learning some of the libraries, such as Spring.
Hope this helps. Most importantly - note there's always something you can do, whatever you do is better then not doing anything. It's going to keep you motivated and involved in things that you need to know. So learn, learn, learn... Best luck!
If I were you, I'd try to build some kind of data structure like a linked list or something of that nature. It causes you to understand the fundamentals of java and gives you a better understanding of the structure that you make also. Check out one of my old school labs to have some direction. http://www.mediafire.com/?dq1lmshdzage8xo
Try this for implementation example.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
OK I am not only new to concurrency in java but am also fairly new to java programming. I tried understanding concurrency from The java tutorials, tried reading Concurrency in practice but it seemed too advance, so tried reading from couple of other books: SCJP A comprehensive, The java programming language 4th edition.
Its as if there are things which just don't add up or make sense, I am not able to get the why's and how's and form the correct pattern of conceptual understanding. I apologize for describing this exercise in futility. But can someone please recommend good reading materials and/or ways to learn concurrency in java.
but am also fairly new to java programming
Leave the concurrency book aside for a few months and go ahead with reading a basic Java/SCJP book and practicing basic Java a lot. Create so now and then a Thread or Runnable as per the book's instructions. Play around with it for some months until you get a good grasp on it. Then continue with the concurrency book.
Learn walking before running, else you're crawling instead of running.
This sounds like you will soon be tested (class? certification?) "on Java concurrency". You have not experienced the cycle of running into a problem naturally, thinking about how to solve it, and turning to concurrency for a solution. If this is the case...
(1) Don't blame your brain. Rather, take a step back and start thinking about problems that interest you. Write them down. Internet applications are a good place to start. For example-- writing some sort of Internet server that can handle multiple connections from different users, like a game server. Or, a stock trading program that has to handle your robot's orders at the same time as processing information from the broker.
(2) Think concurrency. Now that you have a problem that interests you, and thinking of concurrency simply as multi-tasking, draw a diagram of actors/programs with arrows representing how they need to communicate with each other. Sketch out a dummy-skeleton code. You're not actually going to write a game server; but you can make a simple skeleton class library with simple, empty member functions like connectToGame(){}
(3) Now you're ready. Run a hello-world thread example or two. Flip through your books or browse the Javadocs and see the different concurrent structures that are available. Think about which ones you might apply to your problem. Don't worry about making the "right choice". You will soon find out if you've got something that works.
(4) Embrace trial and error. There is another word for it: learning!
Now, after you get some experience doing this, you'll be able to pick up a Java concurrency book and read about someone else's problem.
Hang in there and don't give up.
My favorite learning Java Book which has a great chapter on concurrency is:
Sun Certified Programmer & Developer for Java 2 Study Guide (Exam 310-035 & 310-027)
It's a difficult subject, nobody has full grasp of it, not even those who designed it.
Many people understand only a subset of it. If you only know a few tricks/patterns that you can use in your programs with confidence, that's good enough. From there you accumulate more and more.
A novice may only know that he can add 'synchronized' keyword to methods. Amazingly that solved a lot of problems and performs just fine, even if he has no idea what he is doing.
To add my two cents worth: concentrate on learning the concepts of concurrency first, rather than the machanics of actually using it in any particular language. If you get bogged down in language constructs it'll be all that much harder to get a high-level understanding of the subject.
To this end I would recommend How to Write Parallel Programs by Carriero & Gelernter (free & legal PDF download). It strikes a good balance between describing the concepts and providing concrete code examples, and doesn't get bogged down in theory. It's actually very readable and entertaining (or maybe that might be just me).
I feel like I understand concurrency backward and forward. Recently, I grabbed a book off the shelf in our office and found it was VERY good. Not just at concurrency, it gives great coverage of Java as a whole.
Introduction to Java Programming, Eighth Edition: Comprehensive Version, Y. Daniel Liang
However, most of my understanding came from experience working with code, tackling problems, and trying examples. I never truly understood threading until I did it.
Concurrency is complex and most people won't get it just from reading. Look through the API and write some test programs to try things out. Whatever book you choose, try to not just read the code, write it out and run it. After a day or two, working with it, you'll have it mostly figured out.