Most of my time at CustomerCentrix has been spent developing the LoadGenerator portion of LoadStorm. When I began the project, my knowledge of the Java programming language was poor and rusty. However, I believe I have learned much more than just Java language specifics, but also I believe I have learned more important things about the software development process. Reorganization and code clean-up add readability and reuse-ability to the code. This was supported by the fact that I had to interact with other developer’s libraries (HtmlUnit, JBehave, HttpClient, Ant, and log4j). This was something I had never tackled in-depth before. Many of the problem spots in my code were because of faulty assumptions about the underlying libraries.
Syntax and clarity have never been more important. The language of computer science shares many of its references with the related fields of mathematics, physics, and statistics. Therefore, the first steps engaged by myself was the acquisition of common terminology in reference to project clarification. What is the anticipated structure of the entire project and what terminology is used to refer to each piece? What role do I play in the implementation of the project? If/When my role interacts with a project piece not under my control, how can I create an interface between the two pieces? It is important to understand the points of interaction between your own work and others. Assumptions about behavior of another piece will be poor if there is inadequate communication between both parties.
The Java API throws around many terms which I had not previously reflected on for meaning. A few of these are parser, scraper, request, cookie, open/closed port, proxy, robot, regression test, feature bloat, and many more. It is one thing to know what something is in reference to, but you do not truly understand the connection until you understand what the reference is composed of. For example, most people know that a cookie maintains information about a user’s session/sessions. Most people do not know what information is maintained or how that information is maintained. This is important to know when you actually have to use that information or understand how a attacker may attempt to abuse it. Just like any other user-modifiable input, it must be treated with care.
One of the most interesting books I reviewed at CustomerCentrix was Peopleware. Empathy with a team or manager creates a better team member. People are generally happier if they know their job status and role are significant to the whole. Every intern I have interacted with has stressed the importance of being in this front-lines position. I have to say it is both empowering and worrisome. Your code could be the tipping point between creating a successful or failed project. This is a business with a high turnover rate. Job performance will reflect in recommendations to future job offers. I believe it is futile to stress that any bug exists in your code. Statistically, your code probably has 2 or more bugs per 500 lines. Create your own and others confidence in your code through regression testing. Thorough testing is the greatest defense if/when that dreadful system melt-down occurs.