- Language Fundamentals (LF)
- Specification Fundamentals (SF)
- Platform Fundamentals (PF)
- Design Considerations (DC)
- Design Patterns (DP)
- Concurrency Management (CM)
- Performance Considerations (PC)
- Memory/Resource Considerations (MC)
- Transaction Management (TM)
- Security (SE)
- Scalability (SC)
- Best Practices (BP)
- Coding (CO)
- Exception Handling (EH)
- Software Development Processes (SDP)
- Quality of Service (QoS)
Why will they help you fast-track your career?
- I am yet to work for an organization that didn't face challenges relating to performance, memory, security, scalability, and concurrency. When you have production issues relating to these key areas, the middle to senior management will be constantly monitoring progress through regular crisis meetings. Having a good handle on these key areas to solve issues will put you on the good books with the management.
- Technical job interviews are conducted by senior/lead developers and architects. The above key areas are their favorite topics, and you can get open ended questions, which have no right or wrong answers, but you can really show off your technical and communication skills with the quality of the answers you provide. Here are some popular open-ended questions
- 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 .Net?
- Can describe some of the common mistakes and pitfalls of C#? 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?
- 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. 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 -- What kind of developers succeed in your organization?, Do you think that hands-on experience in writing low latency applications and ability to identify and fix performance and concurrency issues will be handy?, Do you have any reservations about any areas of my abilities to get the job done?, etc to give yourself a chance to sell your strengths and leave the interview with a good impression.
- 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.
- 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 gets back tracked, and 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?
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 quality application. - Knowledge, skills, and experience gained in these key areas are transferable from one programming language to another. So, these are transferable skills.
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. Blog about it in your own style. Add it to your resume.
In short, Learn --> Apply --> Let the world know
In short, Learn --> Apply --> Let the world know
Hi Arulkumaran Kumaraswamipillai sir,Thanks a LOT for this article.Very Informative for people like us who are budding developers in our field.
ReplyDelete