Searching More Effectively - Programmer Skills

Search is an important skill to programmers, it helps us to quickly find root cause, solutions, resource and etc.

Searching Code
Ctrl+alt+h to check call hierarchy
-- When write code, give class/methods easy-to-search name.
Senario 1 
One colleague asked me to help trouble shoot one problem, he wanted to split part of code from one project, so he copied all XX-related code to another project, but found that it doesn't work.

The error message is that it can't inject XXBean:
void doSomething(@Context XXClass xxBean)
Next I tried to find how old project works. The XXClass is not a spring component, so next I checked who called its constructors, then I found out that the constructor is called in XXClassProvider.

Now the root cause is clear: he forgot to copy the XXClassProvider.
@Component @Provider
public class XXClassProvider extends InjectableProvider<Context, XXClass> {}

-- Another way is to use "Open Type", search "* XXClass*" to find XXClass related class.

Github Search
Check the user guide and search the source code from project's github.
From How to ignore pojo annotations while using Jackson ObjectMapper? I know in codehause.jackson, we can configure objectMapper to ignore pojo annotation like below:
objectMapper.configure(org.codehaus.jackson.map.SerializationConfig.Feature.USE_ANNOTATIONS, false);

But how to do in Jackson2(fastxml)? So I go to Jackson GitHub, then search USE_ANNOTATIONS:
https://github.com/search?q=org%3AFasterXML+USE_ANNOTATIONS&type=Code
Now it's easy to see that I should use MapperFeature.USE_ANNOTATIONS.

Or we can try Google search: site:grepcode.com USE_ANNOTATIONS
https://github.com/jersey/jersey/search?utf8=%E2%9C%93&q=DisableWADL

Eclipse Search
Avoid duplication
If you think the constant or function defined in your class maybe used in other classes, search the codebase first to avoid duplicate code.

Give classes and methods easy-to-search names.
Command+h          -> search
Command+shift+t -> open type
Command+shift+r -> open resource
Command+o         ->  list all methods of this class
Command+o+o     ->  list all methods of this class including inherited methods
F4 to show all sub classes, then scan related code.

Searching Log
During trouble shoot, it's common that there are 200 + lines in error log that is related: first we can try to use project package name, class name to quickly locate and scan in the error log; if can't, before try other approaches, make sure first quickly scan through all error messages. 
- In most case the root cause is just hidden in the log.
- Check More at: Error creating bean with name 'org.springframework.security.config.authentication.AuthenticationManagerFactoryBean#0'

Command line search
To run command that you have ran before.
history | grep git | grep erase
history | grep solr | grep cd
history | grep solr | grep start

Google Search
Google search first before attend meeting or join discussion or ask others for help.

Know/Use internal websites
Post a Comment

Labels

Java (159) Lucene-Solr (110) All (60) Interview (59) J2SE (53) Algorithm (37) Eclipse (35) Soft Skills (35) Code Example (31) Linux (26) JavaScript (23) Spring (22) Windows (22) Web Development (20) Tools (19) Nutch2 (18) Bugs (17) Debug (15) Defects (14) Text Mining (14) J2EE (13) Network (13) PowerShell (11) Chrome (9) Continuous Integration (9) How to (9) Learning code (9) Performance (9) UIMA (9) html (9) Design (8) Dynamic Languages (8) Http Client (8) Maven (8) Security (8) Trouble Shooting (8) bat (8) blogger (8) Big Data (7) Google (7) Guava (7) JSON (7) Problem Solving (7) ANT (6) Coding Skills (6) Database (6) Scala (6) Shell (6) css (6) Algorithm Series (5) Cache (5) IDE (5) Lesson Learned (5) Miscs (5) Programmer Skills (5) System Design (5) Tips (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) OpenNLP (4) Project Managment (4) Python (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Firefox (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Google Drive (2) Gson (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Bit Operation (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Troubleshooting (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts