I'm a sun certified Programmer, developer + architect. After doing architect certification, i've been put into desinging in my current job. I'm practicing designing on the job (i'm designing the small modules of a big project). I've designed one application at home all by myself. But still i'm not satisfied with my design / architect skills. I feel that there is a lot of scope to improve.
Can somebody suggest a good book / web site / forum or any other resource which can help me improve my design and architecting skills?
I'm a silent watcher of this group. I hardly see anybody discussing s/w architectural solutions except the ones targeted to complete the assignment.
I would like to hear your opinions / suggestions / guidance in becoming a good s/w architect (in practical sense (not certification related)).
Book "The J2EE Architects Handbook. by Derek C. Ashmore." Is very helpful.
I am not certified yet. Still finishing part 2. I saw your posting back in january that you have got certified. Can you please give a bit more details on your part 2: 1) How much of the JAAS did you use in your design? 2) How did you implement Seat Availability for flights on some dates? did you include new entities for this?
Thank you, Vlad
Joined: Feb 16, 2005
Thanks Vlad for the book reference.
I've followed pet store example for my assignment. U can refer Sun's pet store example for your implementation.
I found the J2EE one-on-one Design and development book to be very good with regard to what you are looking for. Also, a thorough study of Design patterns along with design priciples (see objectmentor.com) should be very helpful. With the introduction of frameworks such as Spring (with IOC and dependency injection), our capability to do good object oriented design takes prominence - as opposed to basing your design entirely on servlet, EJB etc. I have also shared my experiences with architects in a separate thread with lot of contributions by fellow ranchers: What it takes to be an architect
1) Subscribe to as many free trade magazines focusing on software development as your schedule will allow you to read. I think it really helps to read code written/architected by others, especially if they've taken the time to write an article explaining it.
2) Practice, practice, practice! The truly great architects are the ones that have their hands in the code as well. Guys like Gavin King, Martin Fowler, Bob Martin, etc. always have lots of fresh code to show when they're lecturing, so I think we can learn something from this. I try to apply this idea by having some sort of non-work related project going all the time. This month it's Seam, last month was EJB3, before that it was Spring. Just something fun to see what everybody's raving about and how the pieces work.
I'll also try my hand at offering an anti-suggestion for being a good architect: Stay away from the code and rely only on what you've done in the past. This is a sure-fire way to become disconnected from contemporary practice and will surely lead to a massive retooling effort the next time a big shift appears on the landscape.
Those are my suggestions, I hope others will share more.
Another thought that comes to mind on questions like this is that what is said about how one gets to Carnegie Hall applies - practice, practice, practice.
If you think about it, this is how you started out, no doubt, in the field. You learned something, worked on it, and put it to use until you felt comfortable doing it. Being an architect is just another one of those things that needs to be done and is a constant matter of improving.
It sounds like you're already on the right track.
Theodore Jonathan Casser
SCJP/SCSNI/SCBCD/SCWCD/SCDJWS/SCMAD/SCEA/MCTS/MCPD... and so many more letters than you can shake a stick at!
Joined: Feb 16, 2005
THANKS to all for your suggestions. Sure to read the books specified. One request. There are many architects watching this forum. Please share your experiences , success stories, dos and don'ts so that it helps people like me to improve our design and architecting skills.
Basic problem in me is i'm still thinking in the line of a programmer. I'm reasonably a good programmer and i tend to think in those lines even after i'm put into designing. I feel that i lack the so called big picture of the project. Whenever the requirement is given, i tend to think how to implement (code it) rather than designing / architecting as a whole.
I designed one low cost version of a material resource planning system for a known company. I used jsps, servlets, java classes and html for the application. No EJBs. It's s small project. I implemented it myself using jdk1.4, MS-Access 2000, apache and tomcat engine on a windows NT environment. I made it as a web based project with two levels of users (administrator and normal user). But after demonstrating the application to the company, company rejected it because it felt security was very poor. I didn't know how to convince them.
One good thing is - they are reconsidering my project. Now i want to do it resonably well. To be frank, i would like to know whatare the loop holes in my earlier design and how can i improve in my next trial.
Also, it will be good if someone propose a design solution to the above.
Many of you in this forum will be doing designing applications. I request, if u can , pls share your design solution and experiences and how you overcome some of the problems etc. It will be helpful to many poeple like me.
Originally posted by Laxmi Raghu: ---- THANKS to all for your suggestions. [...] One request. ... Please share your experiences , success stories, dos and don'ts so that it helps people like me to improve our design and architecting skills. ---- Also, it will be good if someone propose a design solution to the above. ---- I request, if u can , pls share your design solution and experiences and how you overcome some of the problems etc. It will be helpful to many poeple like me.
On the other hand you wrote:
Originally posted by Laxmi Raghu: I'm a silent watcher of this group.
First: If you are a silent watcher, why should anybody follow your demand for help now?
Second: Besides "practice, practice" I would advise you to discuss! Risk your thoughts could be wrong, unsufficient, ... This way your whole person will get experience, not only your brain learns a set of facts. After that you will also feel as an architect, not only having the degree. And others, who help, will have a benefit too.
Setting aside that I think chastizing someone in here for being a silent observer is seriously counter-productive (as, I believe, all of us were at one point or another before seriously getting into the effort of preparing)...
Alright. So, if I'm reading your last message right, Laxmi, you've received some feedback from the downstream customer about some drawbacks to your planned architecture - this happens, obviously, in the real world. In specific, their complaints seem to be security based, which should lead you to re-evaluate the security plan for the application, including whether or not two levels of security are granular enough for access - perhaps you ought to consider some role-based security, or perhaps the ability to grant discreet users access to portions of the application.
That all being said, the best thing to start with is to ask what they liked and did not like. Evaluate what brought you to the decisions you made and go from there. I'm loathe to agree with Thomas given the tone he started out with, but I do agree there is value to discussing what you're thinking, to talking out the ideas you formulate with others invested in the project, and seeing where it leads you.
As I said, it's all practice. Even after being in a design role for over a year, I still feel more like a programmer than an architect, but it's a day-by-day process...
Joined: Feb 16, 2005
Thanks Theodore & Thomas. Here is how i designed my application inititally.
It's for managing material resources. It's for a hardware company who develops some wireless products. As part of thei product development they are buying and using some electronic components (resistors, capsitors, thyristors, semiconductors) etc. Each component has a unique id given by the company itself. The goal of the project is to have a list of all the components they use and based on each product, create a EBOM (Electronic Bill of Material). As the product matures, there will be some changes in the components used in the original h/w design (may be some components added and some might have got deleted ). In such cases, the s/w should be in a position to allow updation to the original EBOM and generate ECN (Engineering change of Note) automatically. There will be two types of users - engineering people and h/w guys who will be creating EBOMs. On the top of these users is the administrator. Administrators job is to create those users (create id and password) and create entries for semiconductors, resistors etc.
For the above project, i selected MS-Access as the DB, apache as the web server and tomcat as the JSP engine and JDK1.4 + HTML. I selected MS-Access because the company for which i'm developing project is already having ms-access installed on their machines. May be, i might have chosen PostgreSQL or MSSQL freewares so that s/w is scalable. I made a mistake here i believe.
I'm not good at Database designing. What i did was for every EBOM, i created a table programmatically so that generation of ECN will be easier. So, as the products and their versions grow, the number of tables in DB also will grow. Guess this is second mistake. I might have had one single table for EBOM and have a serial number to identify each product. Pls suggest if anybody has a good idea.
For logging, i used simple table having user id, level (to indentify engineering persons and h/w persons) and password. Based on the levels, they are able to see certain fields. For example, engineering person will be able to see few fields of EBOM and he can enter/update only values to those fields and h/w people some other fields. As Theodore suggested, may be i might have used role based authentication rather than maintaining simple table.
The s/w product is 80% ready & working. Most of the features are ready. After demonstrating that application to the company, company felt a threat to their data as it's is internet based application and can easily attached by hackers. Here i didn't know how to convince them. So they went for a small ERP application for their requirement. The catch is, that product doesn't have the feature of ECN (Engineering change Note). So the company's h/w team didn't use that s/w for their material resource planning. Now the CEO is re-considering the application developed by me only to manage their material resources.
As against to this requirement, how can i avoid some pit falls in the current design and how to implement it in a better way this time? I never used controllers / servlets. Just simple JSPs and HTML and some java classes for connecting to the database.
I can even publish my application over the net. Whoever is interested, can run through the application and suggest UI related changes and other changes that makes the user easier to use the application.
Hope i'm not mis-using this forum. If so, pls highlight. I will stop explaining my design.
Thanks to everyone whoever is contributing to the design of this project.