news.volyx.in

New Grad vs. Senior Dev (ericlippert.com)

788 points by kogir · 2385 days ago · 379 comments on HN

Article summary

The article discusses the difference in perspective between new graduates and senior developers, using the example of a string searching algorithm. The author, a former Microsoft employee, recounts how they once criticized the inefficiency of a brute force algorithm used in Visual Basic, only to be told by a senior developer that the algorithm was actually optimized for the typical use case. The senior developer explained that the algorithm's simplicity and speed made it a better choice than a more complex, asymptotically efficient algorithm. The article highlights the importance of considering the practical context and constraints of a problem when designing solutions.

Main themes

  • asymptotic complexity vs real-world performance
  • new graduates vs senior developers
  • optimization and simplicity
  • practicality and context
  • algorithm design and evaluation
  • software development trade-offs

What commenters say

  • New graduates often prioritize asymptotic complexity over real-world performance, which can lead to overly complex solutions.
  • Senior developers prioritize simplicity and practicality over theoretical optimality, recognizing that real-world constraints often make complex optimizations unnecessary.
  • The importance of considering the size of the input and the specific requirements of the problem when evaluating the efficiency of an algorithm is emphasized.
  • Some argue that big-O analysis is insufficient for evaluating performance, as it ignores constant factors and other practical considerations.
  • Others contend that asymptotic complexity is a good proxy for real-world performance, but acknowledge that there are exceptions.
  • The role of experience and understanding of the problem domain in making informed decisions about optimization and complexity is highlighted.
  • There is a tension between the desire to optimize for performance and the need to prioritize simplicity, maintainability, and practicality in software development.