Showing posts with label Sun. Show all posts
Showing posts with label Sun. Show all posts

Monday, October 27, 2008

On System Design

In an essay entitled "On System Design", Jim Waldo, a distinguished engineer with Sun Microsystems, expresses his ideas and opinions on system design, including factors that hinder the effort necessary to do system design.

Some of the techniques that aid in the process of good system design are Six Sigma, or UML. The latter helps in the development of good design, but it is you (as an individual or a team) that has to come up with the design. UML helps you in expressing that design better. Many approaches have been found to work, but there is no general approach that works on all projects. Depending on the project, you have to decide which approach better suites your needs. The only exception to this is given by Brooks, namely that good designs have one thing in common, that is they are produced by good designers. Jim Waldo explained this in terms of probability/statistics: those who have been able to produce a good design in the past are far more likely to produce a good design in the future. Furthermore, designers have to be bale to deal with ambiguity while creating the design, and to know that the question that cannot be answered right away, will be eventually answered at the appropriate time. The author mentions that instead of learning a process of design, it is better to learn how to best design. An indicative to the best way to learn how to design includes two factors:

1. Trying, failing, and then trying again.
2. Being under the guidance of someone who is an expert at the task.

It si the way of thinking that matters most in system design, rather than the subject that can be thought in a particular course. Interesting enough, the author mentions that System Design cannot be learned in one course, but should rather be though in a much larger process, similar to an apprenticeship. The relationship needed between a master and its apprentice is found at the graduate level, where each student has an adviser with whom he is involved in academic research. One other place is at work (in industry) where you get hands-on insight on system design. I would argue that at work, you are more constrained in terms of time; hence, there is less opportunity in learning system design.

Diversity in the sense of academic backgrounds (physics, philosophy, anthropology, computer science, music, etc), and how such a diversity creates different views on a given problem, is described as being beneficial. I would particularize this to software development in the sense of not trying to think of a solution for a problem in terms of a particular programming language, but instead design the solution independent of the software platform and only afterward think of what language can help me express this design the best (similar to the MDA concepts).

The problem with doing design up front is the fact that no immediate code is produced. The pressure to produce something that can be seen, or the measure of productivity by means of the number of lines of code written, still exists. What is needed is "an act of faith by management". He continues by saying that "if you find a manager who is actually willing to give you time to do the design task, stick with him or her. He or she is a treasure much rarer than gold."

The paper also mentions intellectual property (as a note on why system design is not shared among peers anymore), and how any patent has the same value as any other patent. For me this is unbelievable; it is equivalent to saying that ideas that are behind the pattern are the same, namely have the same value. The quality of an idea is not taken into consideration at all by the patent system. Furthermore, in case of a patent litigation, the jury is made up of ordinary (non-technical) people, not technical peers. Hence, "it is very hard to learn about good system design unless you can see and study other system designs, both good and bad. The intellectual property atmosphere in industry has limited the number of designs that are actually talked about, and has convinced many system designers that they should not even look at the designs that are available."

Ways of solving the lack of system design from academia and industry are given in forms of agile methodologies and open source projects, because they enhance the discussion of a system's design in several ways: the communication between two (or a small group) of programmers can help in clarifying and better understanding the design of a system; furthermore, communicating the design to other members of an open source project will help clarify the design of a system. It is interesting to note that the author provides a different view to both agile methodologies and open source projects, namely them being a reaction to the impossibility of doing system design in academia and in the industry. Overall, the paper makes for an inspiring reading. You find yourself nodding and agreeing with the statements made while reading the essay.

Friday, August 22, 2008

Sun Certified Java Programmer (SCJP) Exam

Today, I passed the Sun Certified Java Programmer (SCJP 1.5) exam. Throughout this post, I will share my experience preparing for it.

Before I get started, a little bit of background. I started developing in Java in 2001 (second year of college). Most of the software I have written was using the standard and mobile editions of the Java Platform. I have some knowledge of the enterprise world of Java, but mostly through Servlets and JSPs than anything else. In addition, I took a 6-months Java tutorial back in 2005 that covered OO Topics and Java Core (everything up to concurrency), Java Advanced (concurrency, networking, RMI, JDBC, XML) and Java Enterprise (Servlets, JSP, Custom Tags, JMS, EJB). Hence, I was not knew to this technology when I first started preparing for the SCJP exam in mid June (I also became a SCJA in January this year).

First step was to find a study book. This was not hard since I already knew about the SCJP for Java 5 Study Guide from Sierra and Bates (I already had the 1.4 version of the book). This is an excellent material, no doubt about it. It has a complete coverage of the exam objectives, examples, exercises, exam watches, basically anything you would possibly want from a certification book. Highly recommend it. I only went through this book once, done most of the exercises, and took the free practice exam that comes with the CD (you also get a bonus MasterExam practice test). Once I indentified my weaknesses, I went over again through the specific chapters in the book. At the end, I took the MasterExam practice test and did a little better. How many times you read the book really depends on you, on how familiar you are with Java, on how fast you graps the topics detailed there. I read about people who read the books as many as five times. If you think it helps, and you have time, it is up to you!
Now I have to mention that the two practice tests were the hardest from all the test that I have done afterwards, harder than the exam, hence if you nail these tests, the real exam will feel much easier. It might be harder also because, like other practice tests I took, when you get a multiple-choice question, they don't specify how many correct answers you have, while the real exam, and some of the other test, does. I understood the reason why it is not specified, but I would have wanted an option from where to choose if I should be given, or not, the number of correct answers.

Next step, a combination of taking many mock exams, and reading online SCJP notes. The best place to go for this is to the Java Ranch SCJP Forum webpage. How much it helped me? Enormous! Beside the benefit of having a forum specifically dedicated for SCJP, you get links to basically anything that you might want (and need) for this exam, such as faq, notes, mock exams, etc. Such a pool of resources gathered under one roof is almost impossible to find. Two thumbs up for everybody involved there!

If you want commercial practice tests, I would suggest Whizlabs, uCertify, Sun's own ePractice Certification Exam. From what I read, and from my own experience, I would say that Whizlabs is harder than any practice exams I know (except the one from the book). It contains tips, study notes, and 4 practice exams - best overall preparation kit. uCertify is a bit easier than the real exam, and it contained minor software errors, but was a good resource in the end. Bundled in it come 7 tests, tips, notes, etc . Sun's web-based practice exam came the closest to how the real exam was (which kind of makes sense, I know). This is the main reason I bough it. The score that I got form the third (and last) practice test was the one I got in the real exam.

Going through many mock exams and practice tests, I started writing my own SCJP Notes document. It contains everything that I thought was essential for the exam (inspired from the book and many existing online notes), together with things I have missed at tests (my own weaknesses if you like). You can read the document here.

As for the exam itself, you get 210 minutes (I was done in around 130 minutes). Honestly, I thought I would do worse than I did. I was unsure on some of the answers I had given, but when you take so many mock and practice exams, when you read from the many resources available out there, you have to start trusting your guts. And this is mostly true on API related questions, i.e. does the reverse method exist in both String and StringBuffer classes? What about replace? Java 1.5 specific questions (topics not present on older versions of Java) were on the exam quite often (such as generics, autoboxing, varags, etc). The Thread-related questions were harder than I expected, and I did the worse on that section than I did on any other (only 75%). In the practice exams, threads were one of my strongest suites. If you aks me, Concurrency, Generics and Collections are the hardest topics around.

What can I say more? Good luck to any of you who want to take this exam, and if you have any questions, drop me a comment.

Monday, March 31, 2008

NetBeans 6.1 + Blogging Contest

NetBeans 6.1 is available, together with a contest. Some of the main features are support for Java Beans, JavaScript, MySQL, Spring Framework, Axis 2, Ruby, and many other. The MySQL support added was expected since the acquisition of MySQL by Sun. I personally am an Eclipse user since I started programming (which was only in my first year of college). From some time now I wanted to try NetBeans out, especially NetBeans Mobility, but I never got around to do it. It's funny, if you are not "constrained" to do something, you hardly do it, unless you really enjoy doing it (not that I don't enjoy playing with IDEs, but I got so used with Eclipse that I don't feel the need to try something else).

Do give it a try when you get a chance. I am sure you will find it exceeding your expectations.

P.S. I have not entered the NetBeans 6.1 blogging contest at this point, but I do hope to have some free time soon, and give NetBeans a try.