TSS Asks: What would you teach newbies, and how?


News: TSS Asks: What would you teach newbies, and how?

  1. As the end of the year approaches for people on the Gregorian calendar, TSS would like to know: If you were asked to help a newbie learn "enterprise technologies" - presumably using Java! - what would you teach them? After that, what resources would you use? What technologies would you teach them? Would you teach them Java EE using Glassfish or Geronimo, or grid technologies like JavaSpaces? Would you go ahead and introduce them directly to Spring, or Hibernate, skipping JPA? Would you even bother with EJB or JDBC at all? What about AJAX? Would you teach them what AJAX was, as a beginning point? What would you tell them about it? What about clustering technologies? Would you use Oracle Coherence to show them data clustering, or Terracotta DSO to distribute processing? What servers would you use? JBoss? Geronimo? Glassfish? WebSphere or WebLogic? Tomcat, or Jetty? It is the end of the year, so it'd be interesting to reset the clock, as it were (mixing our metaphors like oil under a bridge of milk) and consider what resources we have at our disposal to improve others as well as ourselves. How about it, readers?

    Threaded Messages (63)

  2. I'd ensure they knew the fundamentals. Things from memory usage (pointers, offsets and stuff), to multi thread processing, to DB theory. Breaking up "stuff" into units, OOP (add in design patterns), possibly unit testing and how TCP/IP works. Toss in basic security wrapping the entire thing. A course or two in information systems and design. w/o the fundamentals, people make the most ridiculous design decisions. People start using rediciulous indicators of what is great software, and what's not. Some others think building it all themselves is awesome. Some start treating their software not as an asset, but as a small tool for money making. Then things become a mess. Most of the technologies lisited boil down to a messaging system or a multi-thread architecture that gets "extended".
  3. I would probably just take an Shooping Card sample application and explain it to him. Explaining of this application will definitly contain 1. OOPS/Design 2. Design Patterns 3. Java Fundamentals (JVM, JRE Java Core Packages) 4. Web Technologies (Servlets, JSP, Struts and XML) 5. Enterprise Technologies (EJB3.0, JPA, Hibernate, Spring) 6. Architecture concepts I hope that should give a good base to explore further.
  4. Stick to Basics[ Go to top ]

    I will recommend them to stick to basics first. Learn the basic concepts of OOAD, Java, JVM, Multithreading etc. Then go for understanding how the overall web technology works. i.e. Start from the point where you enter www.theserverside.com to the point you get to see the content on the browser. i.e. DNS, IP Address, Routers, Web Server, Web server engine, Database integration, HTTP Request and response, HTML, CSS, Java script and most importnat Application server. Once the fundamentals are crystal clear, one can swim well in any technology.
  5. just concepts[ Go to top ]

    - OOP - TDD - Web fundementals - How to search on Google - Self study Regards, Ahmed Hashim http://weblogs.java.net/blog/ahashim/ http://www.egjug.org
  6. Re: just concepts[ Go to top ]

    - How to search on Google
    Very important! I forgot about that one. Prior to high speed internet and Google, I taught a VB class. Lesson One was "How to press F1". :)
  7. I would follow these steps 1)Ask newbie how NEW he is ? I mean what he knows?Then decide what to tell. 2)Show him some enterprise applications in action and tell him in general about their advantages and limitations.This is just to motivate him that soon he will be developing the same kind of applications. 3)Tell him that to develop enterprise app one doesnt need to learn lot of technologies , one needs to use the existing opensource stuff or code and google. 4)Tell him OOPS Concepts , Database concepts and mapping of Object relationships with database? 5)Telling him how to play with data with datastructure and algorithms? 6)Telling him how to use IDE like eclipse ,RSA or an servers like Tomcat,WAS or JBOSS. 7)Ask him to be clear in the fundamentals of java and j2ee by practising the code through examples? 8)Tell him to how to learn Html,javascript & css ? 9)Tell him how to debug and learn himself. 10)Ask him to start developing a shopping cart?ultimately most of the apps are some sort of shopping cart model? 11)Ask him to subscribe to newsletters ,feeds and register in forums. 12)Teach him to be curious always about technology ?
  8. there's not short cut[ Go to top ]

    learning how to build software correctly is about making a ton of mistakes and learning the hard way. aside from that, leave the ego at the door. the best developers are critical and honest about their own code. if someone has a suggestion about how to improve their code, the good developers will listen and remember the lessons. there's no magic.
  9. I've said this many, many, MAMY times: learning Assembly at some point makes for better developers... this is of course a generality, as I'm sure we could all find examples of those that never touched Assembly that we consider excellent developers. But that being said, I firmly believe it provides a very solid grasp of things. And I'm not just talking about the underlying functioning of a computer, which is certainly important... but more importantly, if you can learn Assembly, it proves you can simply think! If you can't grasp Assembly to at least some degree, I submit that you are almost certainly not a very good developer because you don't have the fundamental thinking, logic and reasoning skills required. To be clear, I'm not saying you have to become an Assembly guru or anything... heck, I don't think I've written or even looked at Assembly in probably 6-8 years or so, although I did quite a bit before then, and I'm sure I would struggle mightily if called on to do so today. It's not something you will be using in practical application very much these days except in certain very specific circumstances that most developers don't frankly get involved with. But, developing software all comes down to being able to think, follow a flow of logic and reason through problems. If you can't do that, then programming is simply not for you, and Assembly, if nothing else, is a good proof of whether you have those qualities or not, sort of a filter if you will.
  10. I agree with Spencer's reply. In addition, I'd recommend learning the basic of GoF design patterns with Head First Design Patterns, and web application with Head First Servlet&JSP, and some more fundamental patterns. Most of the products and frameworks are based on the fundamental design patterns. With this knowledge, they'd be able choose the product, framework or technology best solve their problems.
  11. Mistakes = Expert[ Go to top ]

    Wow, a great question with some great replies. It is interesting to note that IMHO, anyone implementing "enterprise technologies", whether Java or anything else - should have OO concepts, GoF, db design, and some knowledge of assembly and networking algorithms/protocols as a PREREQUISITE to learning enterprise technologies. However, this is not a post on recruiting - so given these prerequisites, I would begin by teaching the J2EE stack and the reasons behind packages such as Hibernate and Spring. Any of the technology packages mentioned are great - so whatever the given enterprise has chosen is a decent place to start. However, illustrating to the new enterprise developer why packages were chosen over others is another great way to shed light on the subject. Finally - something which is mentioned less, is a quick history lesson. Sometimes illustrating how packages/technologies came about can illustrate how they fit into the solution puzzle. A great example is how Hibernate came from the shortcomings of EJB2. Thx, ~tim
  12. fundamentals first[ Go to top ]

    Hello Before showing them about application servers, ejbs and databases, I always try to teach the fundamentals such as plain Java, good OO design, refactoring and JUnit testing. These are through pair programming and corrections in code reviews. I'm not trying to make them design pattern/XP/TDD advocates, but rather to make them sensitive in good method and class names, encapsulation, simplicity etc. Once I saw a really junior developer being thrown in a JBoss/Seam/EJB3/JSF project. After a couple of months she was doing alright. Being productive and stuff. Management was happy. And after one year I once saw her trying to implement a method inside an Interface. I was shocked! She also didn't know the meaning of protected, transient, abstract. So, I really think that plain Java skills come first, and all the other stuff follows later. thanks, Ioannis
  13. If you were asked to help a newbie learn "enterprise technologies" - presumably using Java! - what would you teach them?
    I would teach them why we do the things we do. We test. We test because it saves money in the long run. We document - the code needs to live on, even if developers disappear. We adopt change because the marketplace changes. Technologies are not very interesting. I want as few technologies as possible involved in the solution for any given problem. If you can't point to a technology and tell me why it is there, it needs to go. I would show them how I keep up with what happens in the technology world, and why they can't expect someone to pay them to do that. (I would not teach them assembly. Real programmers draw their own microcode ROMs.) Geir
  14. The start point depends from your newbie background. If he/she is familiar with the fundamentals then you need to skip this part and move forward otherwise you need to teach them it first. 2nd checkpoint is OOP and common patterns on the table. XML fundamentals/RDBMS & SQL/Neworking I/O in parallel. And then you can start to think about J2EE stuff and step forward staring from MVC/J2EE fundamentals/Servlet Basics/JSP;JSF. In short, you need to keep an integrity in your teaching plan. You can't start from EJB without a short course about the JNDI+RMI. Another way to teach newbies enterprise fundamentals is to take a springframework and start from the introduction + playing with the parleys.com tech talk in your courses.
  15. Great question, Joseph and I hope you get tons of responses for the greater benefit! Assuming that the person has some early intro into tech, I would certainly focus on core Java skills before I talk about enterprise applications. I had certainly talk about JVM, Containers, Web Servers vs Application Servers, the three layers of MVC since we can categorize most of the technologies in the current market based on the layer they operate on, say front-end/UI, middle-tier or back-end and tell them the role played by each layer. I would either go with JBoss or TomCat, for simplicity as well being open source, and have them build a simple web application based on MVC framework just to get an end-to-end flow. Sooner than later, they need to understand JDBC, Ant/Maven, Persistence frameworks and most importantly point them to resources such as TSS, JavaWorld among others.
  16. I would learn newbies with XML first. Then how to write a good SOAP envelope, then some basic of Web Services (how to make them in Visual Studio with a few clicks). Then some SOA architecture talk with some examples implemented with EJBs. For web developers AJAX would be a must, no compromise here. For the final course I would recommend some Enterprise stuff, whatever it is.
  17. what kind of stupids answers[ Go to top ]

    First check whether the fresher have the skills to do software programming that include Analytical skills, Logical skills, Reasoning skills, Mathematical skills All these skills also have seen applied in soccer, cooking and smart driving If they have these skills Teach them Object oriented analysis and design Basic difference between Object oriented programming approach and procedure oriented programming Introduce them to supporting technologies such as JAVA .NET etc Then ask them to learn supporting technologies such as Web services, Middleware etc There are millions of programmers and managers in IT today who write and use OOPs without knowing its basics that is why most outsourcing company can fool around project by pricing it up and delivering cheap qualities. There is an immediate need for a new generation of people who get into this profession with right direction and qualification
  18. Nobody with skills...[ Go to top ]

    First check whether the fresher have the skills to do software programming that include
    Analytical skills, Logical skills, Reasoning skills, Mathematical skills
    Nobody with actual skills should really choose software development for a lifetime. Do business instead, learn how to talk to people and sell things. Be happy, in the end. And do programming for a hobby ;)
  19. Java Passion[ Go to top ]

    I'll start with this excellent set of tutorials covering almost all of the basic stuff. http://www.javapassion.com/ JSF, EJB3, SEAM, JBOSS and MAVEN is my current favorite stack.
  20. My view is that: give overall knowledge of each layer, and then ask the person for choice. Forcing someone to learn a subject not necessarily of his/her interest would not help in the long run. Once they are given the basic knowledge they can go about what are they interested and then learn that technical skill. A newbie has more open mind than someone experienced and more often quick to learn new skills/technologies. Also, one more thing is that we are (can be) versatile and later learn many technologies as we grow. As a fresher, the basic foundation you get will shape your career a lot.
  21. The best way... hm... let's see, how about telling the newbie to build an application server. By the time it's done the newbie should not be a newbie anymore. Worked for me.
  22. The Basics[ Go to top ]

    I agree with the need for a good technical foundation, starting with the fundamentals of OOP, design patterns and the intricacies of the language. Recently I had a developer in my team who was 3 years in the game that still didn't know the meaning of transient. I had another developer with 6 years Java experience who did not know about threading and synchronization. Personally I feel that in developing EE applications, there is not much focus on Core Java such as multi threading, networking algorithms/protocols, language semantics etc. as the ever-intelligent containers, application servers and frameworks take care of most of it for you. If possible, I normally start a newbie on a SE project first so as to ensure they get a solid grounding of the OOAD in Java. However, this is not always doable as project cost and profit margins normally take precedence.
  23. I guess the very first thing I would teach newbie is that software you write is a software people will end up using. And that you dont write software to experiment with funky frameworks or to show how clever you are but how business driven you are. So I would first take a awfully bloated software that is slow, with poor interface and ask them to write as much comment as they can on that software. Then I would have them using a nice and quick software (eg google, amazon) that runs fast and have a nice interface and ask them to note a few things about it, baring in mind the number of users behind it. Then and only then I would go to the actual coding : Java, OOP, networking, security, transactions and, eventually, how JEE solution integrate all this to offer a complete enterprise platform). And I would put a strong focus on the database layer with a good and bad practices bacause at the end of the day this is where most of enterprise system bottlenecks reside. I would also briefly show how these items are covered in alternative solutions such as the .Net platform and Ruby On Rails.
  24. Keep it simple[ Go to top ]

    I'd tell them to read 37 Signals book (Getting Real) and to strive to keep it real and honest. Never loose sight of why you are on a project in the first place. Java has been criticized by comparison to stacks such as Ruby on Rails because too many of its technologies/frameworks/patterns were long on description and WAY too short on anything real that could be used to actually productively produce a web application. Microsoft's older COM/DCOM/MTS/DNA/Bus Talk morass had the same ailment. People put their heads in the sand and pushed on. If your common sense tells you that what you are doing is just too complex, baroque, and downright goofy, LISTEN and consider alternatives. Projects like SEAM are a breath of fresh air because they hide unnecessary complexity. The downside is that it should not have to exist in the first place! Standard ways (with a real implementation) to do standard things makes sense. We don't JUST need a toolkit, we need a fully thought out and cohesive solution for what 85% of those using enterprise Java are doing - included with the JDK. For sure, we seem to be getting there, but why has it taken so long? If you were to randomly study 10 Java-based enterprise applications today, I bet you would find little similarities between them (struts1, struts2, jsf, jsp, wicket, jdbc, ejb1, ejb2, ejb3, hibernate, toplink, spring, ajax, ..., custom solutions and all their permutations - ug). And this is for just basic "all applications need it" sorts of functionality. All the potential permutations and patterns utilized essentially means that there is really no widely adopted standard way to do much of anything. Given that, how could any new developer prepare themselves with the technologies that will be needed for a given project? They can't and thats a big problem. Anyone worth their salt can effectively learn Java and a variety of other tools in short order. A more valuable ability is to help focus your team (and company) efforts on productively creating applications that you can leverage ASAP. That way, when a truly better mousetrap comes along, you will ready and able to use it.
  25. Re: Keep it simple[ Go to top ]

    Projects like SEAM are a breath of fresh air because they hide unnecessary complexity.
    Maybe an answer out of context, but .... If some complexity is unecessary, why is it there ? Because of few well confused original ideas? To justify the development of additional simplification layers ? Should we trust those scientists ? Maybe they come from the same school that promotes enterprise technologies learning starting with XML. A bright future is waiting. Guido
  26. Re: Keep it simple[ Go to top ]

    Do not throw fresh guys on to J2EE/JSF/Hibernate/JBoss/WebSphere. This always happens and then they are rated on how they perform. It's unfair. Make them understand what OOP ... a little bit of UML ... then Core Java. I see people who don't understand Threads. I would actually recommend fresh guys to take SCJP, which will increase their confidence level and then gradually introduce them to Web Technologies followed by SCWCD. Once they have finished with it, they are pretty much ready to go deeper into J2EE.
  27. Re: Keep it simple[ Go to top ]

    Maybe an answer out of context, but ....
    If some complexity is unecessary, why is it there ?
    Because of few well confused original ideas?
    To justify the development of additional simplification layers ?
    Should we trust those scientists ?
    Maybe they come from the same school that promotes enterprise technologies learning starting with XML.
    A bright future is waiting.
    Oh, and apart from implementing an application server, the by far most important thing for a newbie is to have the appropriate attitude: always question everything, consider the current state of the art as mostly coincidental (at best), and do not in any way become impressed with anyone who states that "this" or "that" is the so-called "only" way to do "X" (statistically and historically speaking it is always at some later point Y considered wrong, to the point of even being insane). Thanks for the reminder, Guido!
  28. Hello, During last years our company is running the special programs for beginners and I recognized several critical points which are important when you teach the newbies. The most important for Java Enterprise—as well as for Java in general—is the Java core. When beginners start to learn about JEE features they often forget about the basic things like collections, threading and basic I/O. And this often causes problems in the future. So we forbid the homegrown rewrites of standard Java methods which were created because the new developer did not pay attention to the basics. You know, today even the small web projects could have several technologies running together in one app. Spring is very good solution for small applications, so I try to get our new staff familiar with it as soon as we can. Of course we leave complex configuration stuff for more experienced people, but it is important to check that the new people learn the ways to do such things right. Also, using of Spring security is a good example for beginners how many things are have been already done for them in Java world. I think it’s very important to help people to catch the fancy of technologies instead of reinventing the wheel. For the presentation aspect we chose JSF. Why JSF? Because we developed own library of JSF controls and our beginners can have a first-hand support for all our controls. And newbies shouldn’t learn too much UI stuff up front—they could concentrate on the business value, instead of integrating too many different technologies. Until now we were using Hibernate for persistence and trained newbies to learn this. But now we are switching to JPA. j My recent experience shows that JBoss Seam is great solution for gently immersing newcomers into the world of dependency injection, object-relational mapping and rich web UI. On the application server front we often use Tomcat and JBoss, because it’s very easy to install and configure them, and to share configuration. In addition, these servers could be evolved faster than the bigger ones. So we can introduce new people to the new technologies easier and faster.
  29. If they are really new newbies - have them run through the Java tutorials online or the book. Probably just select chapters. I would then have them write an application using Naked Objects or JMatter. Then move onto other topics.
  30. I would tell them to invent a time machine and go back 10 year and start from there.
  31. Communication skills is never talked about in IT and it's probably what hurts IT the most. I would probably start with Listening 101. C http://www.ChintanRajyaguru.com
  32. "High cohesion low coupling" only required lesson that is necessary and last for ever, every thing else is just fluff and transitional.
  33. High cohesion low coupling[ Go to top ]

    "High cohesion low coupling" only required lesson that is necessary and last for ever, every thing else is just fluff and transitional.
    You are almost a wise man.
  34. Re: High cohesion low coupling[ Go to top ]

    "High cohesion low coupling" only required lesson that is necessary and last for ever, every thing else is just fluff and transitional.

    You are almost a wise man.
    Full ack! Maybe add a grain of Heraklit - change itself is the only constant.
  35. "High cohesion low coupling" only required lesson that is necessary and last for ever, every thing else is just fluff and transitional.
    There are a tonne of core concepts that have lived with us over 30 years. Last time I checked, data structures, for example, are neither of those things you state.
  36. i think better approach would be oo basics java(core concepts,classes,interface,packages,popular api's like collection,io,lang) use of IDEs' (like Eclipse,NetBeans GoF and GRASP Patterns [applets,SWING] j2ee overview,web applications,servlets (tomcat) jsp jdbc what is framework/web frameworks? struts or jsf Application Servers e.g JBoss,Gerinimo visit to TSS,sourceforge jndi hibernate rmi,ejb3.0 best practices,performance managment jms web services . . . . . . . Now he will have to wrestle with j2ee forever :)
  37. +1 Fundamentals. Understanding how to solve problems with a Turing-complete language is a universal skill that doesn't become obsolete. I completely disagree with the idea that newbies should be primarily learning hibernate or any other tool-du-jour. They will end up like someone who can only work with COBOL. They will have no understanding of how things work under the covers. It's amazing how many "Java programmers" I talk to who have no idea how to write a Java program that can run outside of a specific stack of tools.
  38. Oh dear God I forgot the 1 bloody thing that should be checked for. Analytical thinking and algorithms. If you can't traverse a tree breadth first, you can't dodge a ball.
  39. Lesson 1[ Go to top ]

    The only thing you'll learn by responding to calls for advice on topics like "teaching newbies" or "enterprise technology" is that there is no common definition of "newby" or "enterprise technology." ;)
  40. Database and Client/Server[ Go to top ]

    I'm shocked by most of the answers so far. The most important parts of "enterprise technologies" are: 1. Data (Entity-Relationship) modeling and Relational Database design (Date, Elmasri & Navathe, ...). 2. Client/Server technology Current frameworks (Struts, Spring, Hibernate, ...) are just fads that will soon be out of fashion. Even JEE is not really important. The hypes pass by, the basics remain.
  41. Newbies - the real lessons ?[ Go to top ]

    If I was working with somebody coming in to this profession, I'd tell him not to - to become a business manager instead. Why do I say this ? I recently had to consider this question for my teenaged son. I care about his success so much that this was not a superficial question for us. And that turned out to be my objective assessment : software development as a profession is losing status and dollars are slowly but surely moving overseas. I did not want my son to commit to software development durign his thirty-year career. The end of times, my friends, is upon us :-|
  42. It amazes me how we professionals who should know better treat people entering the field as if they're there to "learn computers", and that there's one approach that fits everything having to do with programming. If someone asked me to teach them programming, I'd ask them to be more specific. They want to program robots? Great, here's asm, forth, and C. They want to write web apps? Time to learn a whole raft of high-level languages. If they want to learn computer science, I'd throw them textbooks on discrete math and algorithms. Maybe throw in some denotational semantics and lambda calculus, maybe then they'd make more sense out of the papers on Citeseer than I could (but I think that'd have to wait for at least year 2 or 3).
  43. Development methodologies. Welcome to the real world, newbie. Let's run through some project phases. Here's a project - you do the requirements, then design it, create the data model, then code it and document it. Here's a bunch of changes in the requirements, here's some scope creep. Now refactor it. Now refactor it again. Learned your lesson about separation of concearns and the usage of interfaces? Good! Now refactor it again! Let's talk about Agile Methodologies. Here's some background about other stuff like Waterfall Method, Spiral, etc. You want to know about GoF, design patterns, language syntax, basics of OOP? How about frameworks like hibernate, struts, jsf, spring, swing? Here's Google! More questions? Aiight, let me teach you to design a data model better and tune your SQL. Here's your next project, see step 1, enjoy!
  44. As the end of the year approaches for people on the Gregorian calendar, TSS would like to know: If you were asked to help a newbie learn "enterprise technologies" - presumably using Java! - what would you teach them? After that, what resources would you use?

    What technologies would you teach them?
    Most likely a newbies will be joining an environment where most of the technologies have been selected already, so it would not be really up to them. Education-wise these options seem to work: 1. Adding a newbie to a small (3-4 people) team of expert ... 2. ... and letting fix the bugs across all subsystems of the application. 3. Ed Roman's Enterprise Java beans is a must-read; O'Reilly's books on the related topics; 4. Mandatory daily doze of TSS :) Regards, Slava Imeshev
  45. Compare and Iterate[ Go to top ]

    First, develop a barebones project. Start with the database. Learn SQL. Learn Java. Read/Write to the db with JDBC. Learn JSP. Write a small web app. Stop. Repeat with a different technology stack, such as PHP or Ruby On Rails. It's important to understand how systems in general are put together, and compare different solutions to the same problems. Java is not always the right answer, and Java's answers are not always right. Take a an application idea. Implement it. Throw it out. Implement it again, but better. Throw it out. Implement it again, but better. Now you're getting somewhere...
  46. I would teach them to find the nail before getting the hammer. XML, J2EE, Spring, Hibernate et al. are all about technology. Technology does not solve problems, people do. The first thing you need is to understand the problem, then find the best way to solve it. This includes finding the right technology, but not only. Be pragmatic, cold headed and never loose focus. Otherwise you won't hit the nail and it hurts :) Happy New Year
  47. In the end what you teach with respect to technology and the middleware that supports it is usually pre-defined by your business enterprise. If it's a newbie, you want to get them rolling on your platforms and your technologies so they can be productive as quickly as possible. Along the way, you can throw out pointers to further resources for future research, but ground them in your enterprise first. If you use WebSphere and EJB? Teach that. Apache and Struts? Teach that. When and where applicable, point out along the way where 1) your enterprise direction is headed and 2) the industry is headed. (Hopefully those two match up!)
  48. I will teach them java, jsp, javascript and HTML first using Eclipse. 99.999% of projects now a days use some sort of framework in web (Struts, Spring, proprietary) and data (JPA, Hibernate, proprietary) layers. So based on the project he/she is/will-be assigned to, teach that framework also. Any other stuff at this point will only confuse and irritate them. Newbies are already staying away from Java saying it is so vast. Scaring them away with more cool technologies and buzz words is the last thing you want to do. Then once they are in and comfortable working for a few months, then start with how it is better with OOP, design patterns and other stuff. And they make more sense after you have written (bad ?) code without them. Then slowly build on other stuff like messaging, clustering etc... Enterprise technologies are so many, you need atleast an year of hands-on experience and training to make out what they are.
  49. Every one here is talking about technologies but forget about an important thing - what business function that these technologies are going to solve. Just because using any particular technology / tool it does not mean that it will solve all the business problems that the customer wants to solve. It all depends on how you use that technology / tool. Why so many software projects over run budget and fail? In my experience every one including the senior developers forget about the business problem that they are trying to solve but spend lot of time figuring out how to make the technologies to work together. So let us not push the newbies into the same path through which we came in. For a newbie - No technologies first but software engineering fundamentals. 1. Teach them what is a business requirement and what is a use case - Give them simple example which will make them think. 2. What is a Functional design that meets the business requirements and obeying the business rules? 3. What is a functional specification? How many people know about the difference between the functional requirement and functional specification? 4. Now teach them how to implement the functional design using the technologies. You will appreciate here that the newbie is not tied to any technology and slowly they will become all rounders. 5. Introduce Software Configuration Management, Build, Release Cycles and Migration I have tried this with 4 freshers from college and saw them becoming extremely effective in 6 months. So I always tell the freshers - Do not get carried away with technological buzz words. Identify what is does, why it is being used and then you will realize that there are several other technologies with other buzz words does the same thing and it will all boil down into "OLD WINE IN NEW BOTTLE" Cheers Gopinath
  50. Different enterprises will have different requirements. In order to make an informed decision about persistence strategies, frameworks and the like, they will need to understand the native J2EE implementation strategies. Of course, it would be nice if they already knew Java, or at least OO! However, making NO assumptions, I would present them with a simple application model, like the ubiquitous library, contact list, hotel reservation system, etc., that will require at least a few classes and relationships. Tasks would include: 1. basic modeling w/o language assumptions (primary use cases and component models). Do this on paper - no fancy tools. 2. implement the corresponding classes in Java, testing via a standalone app with no persistence. Use vanilla eclipse as the IDE. Learn proper packaging. 3. add persistence using cloudscape, hsql, etc., using native JDBC. 4. move JDBC code to DAOs using VOs (introduces new patterns; requires defining technical use cases). 5. add a simple Swing GUI (learn interfaces, event model) 6. add some simple service classes (will evolve into SBs) 7. reimplement as servlet-based web-only app using existing classes as local business objects (use a plug-in like MyEclipse with Tomcat) 8. add JSPs as view components (learn MVC) 9. implement as J2EE under JBoss using only session beans. Several possible approaches here: a) convert local BOs to beans, b) use proxies, etc.; use BMP/BMT via existing DAOs. 10. add entities; use CMP/CMT 11. introduce JMS, MDBs At this point they'd know enough to begin looking at how the various additional technologies might fit into their enterprise's strategy.
  51. hani suleiman - where is he these days??
  52. Hi All, I may say that most of us here forget about the foundation of teaching. We have to understand that learning is a matter of picking up stuffs one-by-one. We can not just simply force someone to use Hibernate, JPA, JMS, or anything if he does not know the basic of J2EE. Okay, here is my curriculum: 1. Java Basic Programming or J2SE (this is A MUST) 2. Java Socket and I/O Programming 3. Java Servlet and JSP 4. EJB 5. Concept of JMS 6. Start using Web framework: Struts, JSF, even AJAX 7. Start using Backend framework: Hibernate, Spring, JPA 8. Start using Middleware framework: Mail, JMS For application server, here is the steps: 1. Tomcat (this is the simple one only for JSP/Servlet testing) 2. Open Source App Servers: Glassfish, JBOSS and Geronimo 3. Commercial App Servers: WebSphere If you teach newbies according to these steps, I believe that they will be a good J2EE developer or even designer
  53. If you teach newbies according to these steps, I believe that they will be a good J2EE developer or even designer
    Maybe if they read enough Sun specifications they could one day be good enough for an architecture position in the ivory tower. In your rush to quote as many technologies / specifications as possible you forgot all about databases and SQL, Web Services, Multi threading and a million other things. Seriously what would be the value in teaching a newbie to learn 4 different App servers? How would learning X number of start / stop commands, log file locations and XML configurations make them a good developer? And why on earth would you pick Geronimo?
  54. If you teach newbies according to these steps, I believe that they will be a good J2EE developer or even designer

    Maybe if they read enough Sun specifications they could one day be good enough for an architecture position in the ivory tower.

    In your rush to quote as many technologies / specifications as possible you forgot all about databases and SQL, Web Services, Multi threading and a million other things. Seriously what would be the value in teaching a newbie to learn 4 different App servers? How would learning X number of start / stop commands, log file locations and XML configurations make them a good developer? And why on earth would you pick Geronimo?
    +1 LOL :^) Hi Steve, Posts like this are just the symptom of a wider disease. If you assume that mainstream developers are too dumb to do real programming, then the language and tools become shrink wrapped commodities to be learnt by wrought and regurgitated on demand by the masses. It has become a cultural thing within the Java community, which isn't a surprise since this type of thinking underpinned Gosling's approach to language design in the first place. It is also why many people who still want to think for themselves have moved elsewhere. Even the people in the Java community that looked as though they could lead the masses out of enslavement, have become to look pretty much like the old slave masters themselves. Take a look at JBoss for instance. On the subject of freedom (changing the subject actually :^)). Samba have finally been given access to Microsoft network protocols. This case illustrates the difference between the Free Software movement and Open Source, something else that most in the mainstream just don't get. Lets face it, most people are content being sheep, and Fernando isn't unusual in this regard. Paul.
  55. Forget the technical[ Go to top ]

    Forget the frameworks and app servers (in the right environment he/she will learn most of that via osmosis), instead give the poor sod some career advice. I've met too many grads working for the Logica's / CGEY etc, who are pushed into inappropriate roles with little valuable experience (I started at Marconi and ended up doing 8 months Y2K testing Unicentre TNG!). On top of this I've noticed that the big consultancies prefer fluffy interpersonal training rather than anything useful. My advice would be to look very carefully at the company you first start with, and choose either a small / medium consultancy with a demonstratable technical training programme or a large well known company (non IT) with a decent IT department.
  56. After "criticising" the advice of others, I guess I'm obliged to add my own two cents of advice for the newbie. So here goes... 1. Question everything, and never be afraid to ask why? 2. Be willing (proud in fact) to say "I don't know". Admission of ignorance is no shame and creates an opportunity for learning. 3. Learn all the time. Even the simplest programming task can become an opportunity for experimentation and learning if approached in the right way. This is what TDD/BDD is all about. 4. Learn from others. Program with other people, especially ones you respect. You will learn a lot more then just programing by yourself. 5. Read widely. And not just manuals. Be willing to get to the core reasons why. Try asking why 5 times even if that leads you into technical white papers and PhD Dissertations :^) 6. Be willing to explore alternative ways of thinking, a good way of doing this is to learn other languages that are very different then the one you know. (Erlang anyone :^)). 7. If something smells of BS, yet everyone else seems OK with it, then don't be afraid to voice your concerns. The chances are that others have concerns too, but are afraid to say so in fear of being labeled stupid. 8. Finally, good software design comes down to just two things: mimimising coupling and increasing cohesion. There are many approaches to achieve these. Learn as many as possible (including approaches not supported by your chosen language) and understand the trades offs and compromises involved in applying each. BTW. Did I say never be afraid to say "I don't know"? :^) Paul.
  57. 1. Passion. If you don't like your job, do something else. 2. Be active, always! Read books, blogs or even write on your own. Open your favourite open source framework/project, and peruse it on your spare time. Discuss, analyze, question everything. 3. Create a fictitious medium-size project in your head and create it in your favorite programming language (who knows--it might present a business opportunity) Or better yet, join an active open source project and contribute. 4. Develop the attitude that nothing is impossible. Resist to say "I can't do it" 5. Never stop communicating in a team setting. Don't ever assume; it always comes back to haunt you. 6. Don't try to be super-man and rely entirely on yourself. Learn how to use google and all the resources available to you including your peers, colleagues, friends, and mentors. Don't be afraid to ask for help. Always willing to offer help. 7. Establish professional relationships 8. Understand how your company makes money or saves money. Understand basic business principles. 9. Everyone fails at some point in time, but never blame others for your failures. Take full responsibility for your own actions. 10. Never feel satisfied and complete. Stay hungry and stay confident.
  58. I'm reminded of my CS 1 Lecturer's opening remarks: "Software engineering is a way of life - so choose it wisely" and more recently of a scene in a Transformers in which words to this effect were spoken: "it is not you that chooses the car - the car chooses you" Really - to put up with all the BS in SE both of the above or at least one has to ring true for a newbie.
  59. Developers (here in Germany) will notice that the most sought-after skills are Struts, Spring, JSF and Hibernate. Forget about what IT and news websites tell you. Go through job-ads and focus on the skills mentioned in there. This has proven as the most efficient way of making sure you don't waste your time on stuff that you'll never need again. Rias A. Sherzad -- theserverside.de
  60. Teaching my wife[ Go to top ]

    Lots of patience, especially because you cannot make insulting comments :). 1. I started with a site using credit card payment ( voice.yahoo.com) and made her think about what is happening, functionality wise, then mapped it to technical components. Here I explained connection/protocols (http, custom, database), Webserver, Servlet/JSP, Custom classes, EJB/Application server ( Why it is needed, etc), static html and dynamic html. I think this was an example, which introduced her to enterprise application. 2. OOPS - Common examples in life and make her think everything as Objects and classes. Explain how different people view objects differently. ( Class with Dog (name, type) AND classes with Pomerenian (name), Doberman(name) etc) 2.a Relational database - just basic 3. Core Java, JDBC (mainly to keep her interested as she could connect to an access database). 4. First example again and made her design the components (static html, servlet, business logic class using jdbc) to display a dynamic page. With my help on Servlet, JSP, html 5. From now, I plan to explain only concepts, details should be looked up using google. This is my plan, but knowing my wife, she will make me write her homeworks. In all this confidence is key on how to make the person interested. You need to give them some easy things to do so that they can do something and feel happy about it. If the student is left doing only core java for a long time, they will get bored. Give them a taste of the bigger things to come. Again patience is key, especially when dealing with wife. I am very impatient with my colleagues, I find it difficult to deal with someone slow and unenthusiastic. Teaching my wife is a crash course for me on patience and controlling my insulting comments. :)
  61. Start with TDD[ Go to top ]

    I would start newbies with TDD methodology followed by Eclipse and than lead them into Spring-O-Rama. I would do the Spring introduction via Appfuse.
  62. Free Java Lectures[ Go to top ]

    I would have them start in one place: Free Java Lectures. Why? Because this one site will lead them from nothing to even the entire technology stack. This site, in short, will teach them most of what they need to know.
  63. I would teach a newbie two things. 1.) C++ - as this is still the best way to learn object oriented programming. 2.) Debugging/Problem Resolution - It is the most important skill a programmer can have. Every programmer makes mistakes and needs to resolve them. The great programmers can do this quickly with out needing a bug hunt. 3.) Every line counts - This is important, skill I think is lost on most developers because of time commitments and senior developers being over allocated. 4.) Becoming a Rockstar programmer is not achieved through time of dedication, but dedication of time.
  64. Read TheServerSide.com every day.