Saturday, October 5, 2013

Non-technical questions with hints

The open ended non-technical questions discussed below can reveal a lot about your passion and career aspirations.

Q. Why are you leaving your current job? What do you like and dislike about your current job?
A. Firstly, never be negative about your current or previous jobs. Also, don't bring salary into the discussion.

Likes: 

  • Enjoyed the people I worked with. 
  • Enjoyed solving technical and business problems.
  • Enjoyed identifying gaps in the business requirements and technical designs and getting them rectified collaboratively.
  • Enjoyed pro-actively identifying and fixing issues relating to non-functional requirements like performance, security,  concurrency and memory leaks. These issues don't surface under normal scenarios and can be very challenging and satisfying.
  • Enjoyed writing unit tests and initiating other code quality measures like automatic code reviews via tools like sonar and peer to peer reviews, and continuous build and integration tools.


Dislikes: 

  • Main reason for leaving is that I felt that I was not challenged enough at my current job. The company offered a great opportunity as someone with 2-3 year experience and appreciate the skills I acquired there, but now I am ready to face more challenges and take my career to the next level.
  • I am looking for more potential to grow in my next job.
  • I am also looking for an opportunity to get more involved with the hands-on design decisions in my next job.

Q. What was the biggest accomplishment and failure in your current job or career?
A. Reflect back on your career achievements and provide quantified answers.

Achievements:
  • Successfully completed a high profile Java/JEE based online trading system that handles 100+ concurrent users and integrates with 4 other systems.
  • Designed and developed a Java based non-blocking server that communicates with 240+ retail outlets, and integrates with 6 other internal systems.
  • Spearheaded a "Quick-Win" program that improved the site ranking from 24th to 9th in 3 months in terms of user experience, performance, and reliability.

Failures:

We all learn more from our mistakes or failures than from our successes or achievements.  When you mention your mistakes or failures, make it a point to mention what you learned from them. You could say that these are classified more as mistakes than failures.
  • The team was using a cut down database in the development environment and the technical solution I provided worked well for  low volume of data, but when was moved to production like data, it caused some performance issues. Learned a valuable lesson of validating the solution with more production like data set early on in the SDLC. I subsequently revised the solution within a week and got the the big thumbs up from the users.
  • Wrote some JUnit based integration tests that were bit fragile due to data fluctuations. The failing tests were causing the builds to fail. Took the initiative to fix this problem by performing the integration tests via more stable data sets that are populated via DBUnit during the set phase and the data are removed during the test tear down phase. Also, introduced other strategies for integration tests by using in memory databases like HSQL DB as opposed to actual database.

    Q.How do you keep your knowledge current?
    A. Via online articles, blogs, and books.


    Q. How do you know what technologies, frameworks or tools are in demand?
    A. Some  technologies/frameworks don't even make it to the mainstream. So, do your research before learning. 


    1. Through online job portals and off line advertisements to understand what the prospective employers are looking for.
    2. Through industry specific forums listed above to see what the experts are tipping.
    3. Through some research via http://www.google.com/trends
    4. Through personal experience and networking with fellow professionals.
    5. Based on requirements searching for a right tool for the right job at

    Q. How would you go about learning a new piece of technology, framework, or a tool?
    A.

    STEP 1: Get started with good online tutorials. Generally Google for relevant tutorials, but there are a number of good tutorial sites like




    STEP 2: Read online articles, blogs, and books about a particular framework, technology, or tool to understand its high level architecture, core concepts, best practices, and potential pitfalls. Google is your best bet, but there are sites like

    STEP 3: It is a best practice to always keep the Java Docs handy.





    STEP 4: If you still have any doubts to be clarified, check with your mentors and networked fellow professionals. Join popular developer forums to network with the wider community.



    STEP 5: Find a way to apply or use a particular framework, technology, or tool in a commercial, self-taught, or open-source project.

    STEP 6: Add this particular framework, technology, or tool to your resume's or CV's skills and experience section. Also, feel free to blog about your experience as you not only learn by blogging, but also increase your employ-ability by building an online persona.


    Q. Why do you think good programmers are often lazy?
    A. 
    • Good programmers hate repetitive and monotonous tasks. They find the right tools and ways to automate these monotonous and repetitive tasks.
    • Good programmers don't reinvent the wheel. They will first look for the right tool, API, library, and framework to get the job done without requiring to write their own.

    Q. What qualities do you look for in an effective programmer? How do you recognize a good programmer?
    A. Passion, continuous learning, taking pride in their achievements, ability to look at the big picture and pay attention to details, right attitude, and ability to communicate their thoughts clearly.


    Q. What do you understand by the term "hidden experience"?
    A. Good programmers are mainly self-taught and they acquire lots of so called "hidden experience" through proactive and continuous learning and helping others solve their problems. If you just rely only on your experience alone, it can take a lot longer to learn the key areas and concepts of programming. Do you have real 4 year experience or 1 year repeated 4 times?  It is imperative that you bring out your "hidden experience" in your CV and at job interviews.



    Q. When you are are coding, what documentation do you have handy?
    A. 

    1. The APIs for the relevant technologies used. For example Java API, Enterprise Java API, Spring API, jQuery API, JavaScript API, etc. Thes APIs can also be googled at will with the right search keys like "jQuery API", "Java 6 API" , etc.

    2. The relevant reference manual and home web sites bookmarked for the relevant technologies. The home sites can be Googled with right keywords like "Spring framework home", "jQuery home", etc and the reference manual can be Googled with keywords like "Spring framework 2.0 reference",etc.
     
    3. Often not knowing the key terms for a particular piece of technology is the major challenge for the beginners of a particular technology. This is where the "cheat sheets" come in very handy. You can find a number of handy cheat sheets from cheat sheets

    4.  Sites like Java Practices provide good working examples.

    No comments: