Specialization is for insects
This is entirely my opinion - so please judge this entry on its merits.
So what do you want to become?
Use case specialist, requirements capturer
Architect
Developer,coder
Tester
The right answer is - all of the above. Do not specialize !! Leave it to the insects.
The Why?
Software development when it comes to quality sucks!! Big time !! When compared to other professions, we software pros are guilty of not having perfected the fine art of making quality code. The main reason stymes from the fact that the eyes involved in the development process do not try to get a big picture of the process. I dont want to get into the schedule, budget and resource bunglings that are prevalant in the software development process of today. I am concerned with quality. Even when the software is delivered over budget and behind schedule - it has to be delivered in the best quality possible.
Use case specialist is concerned in capturing the requirements and jotting it down by drawing beautiful UML diagrams and doing copious documentation.
The Architect is more concerned in creating a "beautiful" design.
The Developer tries to bring the design to life.
Tester tries to find the bugs and checks for compliance.
Now, this sounds so utiopian. In practise its always chaotic. The Architect finds that the Use cases are ugly. The developer finds the design unimplementatble. The tester finds the system difficult to test.
Now imagine a scenario where there are 4 people - who are moderately good in all 4 ( use case development, architecture, coding, testing) . When the use case is being written the person in the use case writer role will be aware of the design. When the person in the architect role is designing the system, that person will be aware of the implementation methods, frameworks, new technologies - so his design will be elegant and sensible. The developer understands the architecture pretty well - and so when he codes he maintains the spirit with which the architect designed. Also he writes code in such a way that it can be tested - in fact he writes the tests himself which is the philosophy behind Test Driven Development (TDD). Even before a class is written, the testing stub is written. First iteration the test is made to fail. Then code is added to the class so the test passes.
So this is my philosophy. You can be good at one thing - there is no harm in that. But try to look around you. Try to learn what the UML stuff is. Try to learn design patterns. Try to learn the upcoming technologies. Try to learn testing ( JUnits,HttpUnit,Cactus).
A team consisting of such generalizing specialists is a sure winner.
So how do you become a generalizing specialist?
Its simple. By Reading books. Lots and lots of it.
Do not hesitate to invest in books. If there is a library in your organization use it extensively. Make a trip to java websites and keep tab of what people are talking - even if you dont understand. You will eventually understand over a period of time.
Here are the list of books I have in my book shelf. I have divided them into 3 phases.
Phase 1 - Beginner.
Head First Java - Kathy Sierra and Bert Bates :
Its an eye opener. If I were a beginner I will start here. I understood OO pretty well after I read this book.
A programmer's guide to Java Certification - Khalid Mughal
This is more like a reference book. If you are preparing for certification I highly recommend this book. The chapter on Collections is a must read. It will be helpfull while coding - because Java Collections offer you so much and you should know to exploit them.
Swing Second Edition - Mathew Robinson, Pavel Vorobiev
If you want to get into Java GUI development ( psspss: not much demand in the market ) this is a good start. I do not want to rule out Java GUI development - because swing apps have become faster and more beautiful. And they are inherently cross platform. I am betting on Java GUIs. Once the Java is slow myth gets forgotten we will see a flurry of activity in Java Swing apps.
Head First Servlets & JSP - Bryan Basham, Kathy Sierra, Bert Bates
This book is written for SCWCD certification - but this is also a good book for getting your feet wet in the world of JSPs, Servlets, Tags etc.
Struts in Action - Ted Husted, Cedric Dumoulin, George Franciscus
Good book to begin on Struts. Struts has become a standard for developing web applications using MVC architecture. If you want to get a job you have to know JSP, Servlets, Struts.
Phase 2 - Intermediate
Head First EJB - Kathy Sierra, Bert Bates
I have tried reading EJB tutorials and never really understood the concepts till I read this book. They make it look so simple. To enter the murky world of EJB I strongly recommend this book.
Mastering EJB - Ed Roman
expert one-on-one: J2EE Design and Development - Rod Johnson
One word : Brilliant.
Every page is loaded with information. Well written - you never get bored reading. I am half way through this book and I have learnt so much already.
expert one-on-one: J2EE Development without EJB - Rod Johnson
I havent started on this book yet. In this book he suggests alternative technologies - because EJB is overkill for most of the projects.
Head First Design Patterns - Eric Freeman, Elisabeth Freeman
Dependency injection, Inversion of control, Code to interface, Open for extension,closed for modification. Yep read it all with understandable examples. Must read book!!
Phase 3 - Becoming an expert
J2EE Performance Tuning - Jack Shirazi
Need not explain - the book's title says it all !!
Design Patterns - Gamma,Helm,Johnson,Vlissides
The Gang of Four (GoF) - examples are in small talk, and I have a tough time understanding the examples. But me and this book are slowly getting to know each other !! Use this along with the Head First Design patterns.
Core J2EE Patterns - Deepak Alur, John Crupi, Dan Malks
Based on GoF, but adapted for J2EE technology.
Other books
Hibernate in Action - Christian Bauer, Gavin King
I had played with appfuse, read tutorials but never understood Hibernate. I was suspicious of this book since its written by the developers of Hibernate. But I was in for a pleasant surprise as the book is so clear and well written. You will also learn some OR ( Object Relation Mapping) while reading this book.
Conducting the J2EE Job Interview - Jeffrey M.Hunter
This might give you some confidence when you go for a job hunt.
Then other books I dont own but I have read it from a library.
UML Distilled - Martin Fowler
Concise and neat.
Anti Patterns - William J.Brown, Raphael C. Malveau, Hays W. McCormick III, Thomas J.Mowbray
How not to design. Entertaining !!
Also it will be rewarding to research into Spring, Tapestry, Velocity templates, AJAX, Ruby, IBatis, EJB 3.0, JUnits, Webtest, Cactus, Cruise control.....list is endless !!
Guess thats all I can think of. So do you now agree : Specialization is for insects. Not for Java Pros.
Thank you Venkatraman. I found your blog via Javaranch and I have to say I had this same perspective when I left school in 2000. I wanted to know everything and be able to do everything. I still do (CTO/CIO aspirations) but my subsequent layoff in March '01 has seriously derailed my goals, at least in my opinion. As such I'm still a newb when it comes to programming and java. I can't have that myself so I've begun, albiet with little results, to get back into IT and programming. I've been looking for a roadmap to get this done but have had little luck save for a recent reply to a post I made on Javaranch and then your blog posting. I'll be checking back frequently to keep up with your postings as learning Stuts is in my future and you seem to have a good explanation below. Take care.So what do you want to become?
Use case specialist, requirements capturer
Architect
Developer,coder
Tester
The right answer is - all of the above. Do not specialize !! Leave it to the insects.
The Why?
Software development when it comes to quality sucks!! Big time !! When compared to other professions, we software pros are guilty of not having perfected the fine art of making quality code. The main reason stymes from the fact that the eyes involved in the development process do not try to get a big picture of the process. I dont want to get into the schedule, budget and resource bunglings that are prevalant in the software development process of today. I am concerned with quality. Even when the software is delivered over budget and behind schedule - it has to be delivered in the best quality possible.
Use case specialist is concerned in capturing the requirements and jotting it down by drawing beautiful UML diagrams and doing copious documentation.
The Architect is more concerned in creating a "beautiful" design.
The Developer tries to bring the design to life.
Tester tries to find the bugs and checks for compliance.
Now, this sounds so utiopian. In practise its always chaotic. The Architect finds that the Use cases are ugly. The developer finds the design unimplementatble. The tester finds the system difficult to test.
Now imagine a scenario where there are 4 people - who are moderately good in all 4 ( use case development, architecture, coding, testing) . When the use case is being written the person in the use case writer role will be aware of the design. When the person in the architect role is designing the system, that person will be aware of the implementation methods, frameworks, new technologies - so his design will be elegant and sensible. The developer understands the architecture pretty well - and so when he codes he maintains the spirit with which the architect designed. Also he writes code in such a way that it can be tested - in fact he writes the tests himself which is the philosophy behind Test Driven Development (TDD). Even before a class is written, the testing stub is written. First iteration the test is made to fail. Then code is added to the class so the test passes.
So this is my philosophy. You can be good at one thing - there is no harm in that. But try to look around you. Try to learn what the UML stuff is. Try to learn design patterns. Try to learn the upcoming technologies. Try to learn testing ( JUnits,HttpUnit,Cactus).
A team consisting of such generalizing specialists is a sure winner.
So how do you become a generalizing specialist?
Its simple. By Reading books. Lots and lots of it.
Do not hesitate to invest in books. If there is a library in your organization use it extensively. Make a trip to java websites and keep tab of what people are talking - even if you dont understand. You will eventually understand over a period of time.
Here are the list of books I have in my book shelf. I have divided them into 3 phases.
Phase 1 - Beginner.
Head First Java - Kathy Sierra and Bert Bates :
Its an eye opener. If I were a beginner I will start here. I understood OO pretty well after I read this book.
A programmer's guide to Java Certification - Khalid Mughal
This is more like a reference book. If you are preparing for certification I highly recommend this book. The chapter on Collections is a must read. It will be helpfull while coding - because Java Collections offer you so much and you should know to exploit them.
Swing Second Edition - Mathew Robinson, Pavel Vorobiev
If you want to get into Java GUI development ( psspss: not much demand in the market ) this is a good start. I do not want to rule out Java GUI development - because swing apps have become faster and more beautiful. And they are inherently cross platform. I am betting on Java GUIs. Once the Java is slow myth gets forgotten we will see a flurry of activity in Java Swing apps.
Head First Servlets & JSP - Bryan Basham, Kathy Sierra, Bert Bates
This book is written for SCWCD certification - but this is also a good book for getting your feet wet in the world of JSPs, Servlets, Tags etc.
Struts in Action - Ted Husted, Cedric Dumoulin, George Franciscus
Good book to begin on Struts. Struts has become a standard for developing web applications using MVC architecture. If you want to get a job you have to know JSP, Servlets, Struts.
Phase 2 - Intermediate
Head First EJB - Kathy Sierra, Bert Bates
I have tried reading EJB tutorials and never really understood the concepts till I read this book. They make it look so simple. To enter the murky world of EJB I strongly recommend this book.
Mastering EJB - Ed Roman
expert one-on-one: J2EE Design and Development - Rod Johnson
One word : Brilliant.
Every page is loaded with information. Well written - you never get bored reading. I am half way through this book and I have learnt so much already.
expert one-on-one: J2EE Development without EJB - Rod Johnson
I havent started on this book yet. In this book he suggests alternative technologies - because EJB is overkill for most of the projects.
Head First Design Patterns - Eric Freeman, Elisabeth Freeman
Dependency injection, Inversion of control, Code to interface, Open for extension,closed for modification. Yep read it all with understandable examples. Must read book!!
Phase 3 - Becoming an expert
J2EE Performance Tuning - Jack Shirazi
Need not explain - the book's title says it all !!
Design Patterns - Gamma,Helm,Johnson,Vlissides
The Gang of Four (GoF) - examples are in small talk, and I have a tough time understanding the examples. But me and this book are slowly getting to know each other !! Use this along with the Head First Design patterns.
Core J2EE Patterns - Deepak Alur, John Crupi, Dan Malks
Based on GoF, but adapted for J2EE technology.
Other books
Hibernate in Action - Christian Bauer, Gavin King
I had played with appfuse, read tutorials but never understood Hibernate. I was suspicious of this book since its written by the developers of Hibernate. But I was in for a pleasant surprise as the book is so clear and well written. You will also learn some OR ( Object Relation Mapping) while reading this book.
Conducting the J2EE Job Interview - Jeffrey M.Hunter
This might give you some confidence when you go for a job hunt.
Then other books I dont own but I have read it from a library.
UML Distilled - Martin Fowler
Concise and neat.
Anti Patterns - William J.Brown, Raphael C. Malveau, Hays W. McCormick III, Thomas J.Mowbray
How not to design. Entertaining !!
Also it will be rewarding to research into Spring, Tapestry, Velocity templates, AJAX, Ruby, IBatis, EJB 3.0, JUnits, Webtest, Cactus, Cruise control.....list is endless !!
Guess thats all I can think of. So do you now agree : Specialization is for insects. Not for Java Pros.
No comments:
Post a Comment