Wednesday 6 November 2019

What are the technical key areas?


  1. Language Fundamentals (LF)
  2. Specification Fundamentals (SF)
  3. Platform Fundamentals (PF)
  4. Design Considerations (DC)
  5. Design Patterns (DP)
  6. Concurrency Management (CM)
  7. Performance Considerations (PC)
  8. Memory/Resource Considerations (MC)
  9. Transaction Management (TM)
  10. Security (SE)
  11. Scalability (SC)
  12. Best Practices (BP)
  13. Coding (CO)
  14. Exception Handling (EH)
  15. Software Development Processes (SDP)
  16. Quality of Service (QoS)
  17. Low Latency
  18. Debugging – Core Java | JEE | Hadoop & Spark | Spring | Hibernate
  19. CI/CD & DevOps

Why will these key areas help you fast-track your career?

#1 Middle to senior mgmt visibility: Production or user acceptance testing (i.e. UAT) issues often demand a closer attention of middle to senior management. For example:
1) Memory/Resource leaks causing the server to be restarted every second day.
2) Thread dead locks compromising the user experience.
3) Security vulnerabilities causing reputational damages.
4) Improper transactional boundaries resulting in huge fines due to non-compliance.
5) Intermittent issues causing ….. “it works on my machine” or “cannot be reproduced” remarks are not going to cut it.
The middle to senior management will be constantly monitoring progress through regular crisis meetings. Having a good handle on these key areas to solve them, and more importantly preventing them will give you the much needed visibility as a go to person.
#2: Interviewers like to quiz you on these: Technical job interviews are conducted by senior/lead developers and architects. The above key areas are their favorite topics, and you will be probed with open ended questions, which have no right or wrong answers, but those questions can reveal a lot about your industrial experience, technical know-hows, and communication skills. Here are some popular open-ended questions to sell your experience know hows.
  • Can you describe the architecture of the last application you had worked on from a 100 feet?
  • How would you go about designing an online shopping cart application in Java/JavaScript?
  • Can you describe some of the common mistakes and pitfalls of Java? What features do you like and dislike? What features do you like to be added in the future releases?
  • If you are reviewing others’ code, what would you look for?
  • What do you like the most about your current job?
  • How do you ensure code quality within your team?
  • What is a deadlock, and how will you go about detecting and fixing a deadlock?
  • Can you describe a situation where you fixed a transaction management or a concurrency issue?
  • How will you go about automating your development & deployment process? What tools would you use?
#3: Great weapon to market your skills via open-ended questions: When you are asked the very common ice breaker interview question “tell me about yourself?” you can highlight your strengths in the technical key areas, and also for other questions like “what are your strengths?”, “why should we hire you?”, etc you can bring out your strengths in these key areas with examples.
#4: Impress your code reviewers: In code review sessions to impress your superiors and peers. I improved my coding skills by reviewing others’ quality code, and also learned what not to do from others’ bad code. Having a good handle on the above technical key areas like best practices, language and specification fundamentals, coding, exception handling, quality of service, scalability, etc will help you write robust code.
#5: Standout during any team sharing sessions: These key areas will help you contribute in your team meetings. All your contributions will be noticed for potential promotions and pay rises. Good engineers ask the right questions like
  • If an exception gets thrown here, will my transaction get rolled-back properly?
  • Will this regular expression get back tracked? As it will adversely impact performance.
  • Do I have proper service timeouts and retries implemented properly for web service calls?
  • Should I have dead lock retry here?
  • Should I go for optimistic or pessimistic locking?
  • What CI/CD tools do I require? Is it a Cloud based application? What DevOps tools to use?
This is also a part of the answer for the question — Why do you like software engineering? Good software engineers like to see all these 16 technical key areas fit together like a jig saw puzzle to build a robust application.
#6: Close your interview in a positive note: Towards the end of the interviews, you will be asked — “Do you have any questions for us?”. If you feel that you have not sold your key strengths as well as you would have liked, take this question as an opportunity to ask your interviewers the questions like — Do you think that hands-on experience in writing low latency applications and ability to identify and fix performance and concurrency issues will be considered favorably?
#7: Not just Java related, architects and other programming language developers must have these skills: Knowledge, skills, and experience gained in these key areas are transferable from one programming language to another. So, these are transferable skills.
#8: Become a problem solver: Get good handle on the key areas to solve real business problems and to better market your skills at the job interviews and on the job. I am yet to work for an organization that did not have performance issues, concurrency issues, security vulnerabilities, and memory leaks. So learn how to create and analyze thread dumps , use visual VM to analyze memory leaks and performance issues , etc. You also need to know the big picture of the baseline architectures you had worked on.

If your are a beginner to intermediate

Why wait 5 – 10 years to get a good handle on these key areas when you you can proactively learn & apply within 6 – 24 months with the myriad of free & paid resources online to fast-track your career.

How do you go about getting a good handle on these key areas?

Proactively pick a key area that you have less experience with and learn about it relating to your mainstream language. Write some sample code. Examine others’ code in your work to see how it was applied. Find a way in which you can apply it in your current project.

No comments:

Post a Comment