Thursday, October 3, 2013

A Recent Review

I decided to write something about my recent work experience. It mainly consists of some technologies I have come across since last year.



I used it for server-side TCP/IP programming. It is easy to learn and configure the components. The 'filter chain" design allows customization. I found that the threading model was a little bit confusing while I tried to explain to my colleagues. I had to read the documentation again and rerun some test cases in order to remember what the difference between IO processor thread and the ExecutorFilter was.




It was my first time to use a mocking framework for unit testing. It was extremely useful. Its annotations saved time writing boilerplate code for test cases. I like its syntax when defining and verifying behavior. However, you have to be careful when testing with asynchronous behaviors. timeout(sth).times(0) does not behave what you expect. In addition, I tried for some test cases. It was more powerful since it could mock static methods in the legacy code base. However, I was stuck when trying to run multiple test cases in a test suite due to memory issue with classloading.



At my last position, I learned Maven and found it very useful. But at this position, there were multiple build tasks defined with ant. Gradle did a great job allowing me to maintain my IDE workspace (eclipse actually), manage dependencies, apply plugins, handle current folder structures and most importantly, reuse the ant tasks. Also, I must say that Gradle in Groovy looks much cleaner than Maven in XML. On the other hand, I think the plugins in Maven are more matured and stable.



Apart from the pessimistic source control, I was using SVN on my desktop at the very beginning. For some reasons, I had chances to work remotely. My productivity suffered badly due to manual merging of source code from the pessimistic source control to the notebook. I tried first, and later changed to Git due to its popularity. Learning the Git commands was not a straightforward task. came to help. The branching in Git and some commands, such as cherry-pick, helped me a lot when dealing with the legacy code base and the pessimistic source control.



Actually, only item 1 was required. I learned the other items by myself to ease my development tasks. It was quite disappointing that the values of open-source tools and libraries were not identified for the greatest possible productivity and quality in software development. Obviously, I had never did a great job persuading others to accept these ideas. Perhaps I have to improve on this.
Full Post

No comments:

Post a Comment