My Journey Through Data Structures and Algorithms: Lessons, Books, and Real-World Projects
From a careless college student to a seasoned developer, the author chronicles a seven‑year odyssey of learning data structures and algorithms, sharing book recommendations, personal projects, internship experiences, and hard‑won insights on why solid algorithmic foundations are essential for modern software engineering.
Learning Summary
I first encountered data structures in a sophomore course, but I ignored it until junior year when job hunting forced me to realize my lack of programming knowledge. I devised a five‑year‑style reading plan covering C basics, data structures, and computer networks.
Books and Resources
Data Structures and Algorithm Analysis – C Language Description became my first textbook; I marked it heavily, copied code by hand, and drew algorithm states. The book’s example of the maximum sub‑sequence problem illustrated complexity reductions from O(N³) to O(N).
Algorithm Design and Analysis (by Han Jun) reinforced concepts such as divide‑and‑conquer, dynamic programming, and backtracking.
Algorithm Introduction emphasized creative algorithm design rather than cataloguing existing algorithms.
Elements of Programming offered fast, low‑level C implementations, while C Interfaces and Implementation helped me improve C coding for interviews (e.g., implementing stof).
Algorithm Design Manual , Programming Pearls , and The Science of Programming provided practical problem‑solving techniques and correctness proofs.
Internship and Early Projects
During a Microsoft Asia Research internship I built a small project, faced a failed Baidu interview (could not implement stof), and then focused on reading more books.
At Baidu I realized many interview tasks required writing C code on paper, prompting me to study Int16 and Int64 indexing techniques for a custom pinyin‑to‑Chinese lookup library, achieving 50× speed over the official Microsoft library.
Advanced Projects
Implemented an LL(k) parser for T‑SQL stored procedures to generate block‑coverage HTML reports.
Created a pinyin index for a Windows Phone contacts app, using binary packing and bit‑operations to achieve sub‑second lookup for thousands of entries.
Replaced a naïve linear search with a trie‑based multiple‑string matcher, improving matching speed by over 90×.
Developed a fast pagination algorithm for an e‑book reader based on simulated annealing.
Reflections on Algorithms
I oscillated between believing algorithms were essential and dismissing them as unnecessary. Real‑world projects eventually proved that solid algorithmic knowledge is the most cost‑effective way to overcome performance bottlenecks.
Peter Norvig’s analogy and Erik Demaine’s advice highlight that learning algorithms dramatically accelerates becoming a good programmer.
Conclusion
Algorithms are not required for simple “code monkey” tasks, but they are indispensable for developers who want to solve complex problems efficiently and advance their careers.
Author: Lucida (@peng_gong) Original: http://zh.lucida.me/blog/on-learning-algorithms/
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
21CTO
21CTO (21CTO.com) offers developers community, training, and services, making it your go‑to learning and service platform.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
