The Fundamentals
Having a bachelor’s degree in Mechanical Engineering and then transitioning to Software Engineering required me to undertake extensive research and self-study in computer science foundations such as theory of computation, data structures and algorithms, and so on, as well as fundamental discrete mathematics such as logic theory, proof methods, set theory, graph theory, counting, probability, and so on.
Many software engineering professionals who have completed their undergraduate studies in computer science may overlook these fundamentals and instead focus more on industry standards, specifications, and practices for software development. While these industry standards and practices are crucial in modeling, designing, and implementing critical software systems, I also believe that a strong understanding of computer science basics is equally essential. Not only does it provide the necessary skills for problem-solving, but it also cultivates a deeper thought process.
As such, I continue to self-educate and expand my knowledge of computer science fundamentals. The following map illustrates my journey:
Self-Study Roadmap
Study Material
Discrete Mathematics
- Albert R. Meyer, Adam Chlipala. Mathematics For Computer Science. Spring. Massachusetts Institute of Technology: MIT OpenCouseWare, https://ocw.mit.edu/. License: Creative Commons BY-NC-SA.
- Michel Goemans, Susan Ruff, Lorenzo Orecchia, Richard Peng. Principles Of Discrete Applied Mathematics. Fall. Massachusetts Institute of Technology: MIT OpenCouseWare, https://ocw.mit.edu/. License: Creative Commons BY-NC-SA.
Theory of Computation
- Michael Sipser. Theory Of Computation. Fall. Massachusetts Institute of Technology: MIT OpenCouseWare, https://ocw.mit.edu/. License: Creative Commons BY-NC-SA.
C/C++ Programming
- Jesse Dunietz, Geza Kovacs, John Marrero. Introduction To C++. January IAP. Massachusetts Institute of Technology: MIT OpenCouseWare, https://ocw.mit.edu/. License: Creative Commons BY-NC-SA.
- Andre Kessler. Effective Programming In C And C++. January IAP. Massachusetts Institute of Technology: MIT OpenCouseWare, https://ocw.mit.edu/. License: Creative Commons BY-NC-SA.
Algorithms & Problem Solving
- Cormen, Thomas, Charles Leiserson, Ronald Rivest, and Clifford Stein. Introduction to Algorithms. 3rd ed. MIT Press, 2009. ISBN: 9780262033848. Referenced with course [Charles Leiserson, Erik Demaine. Introduction To Algorithms (SMA 5503). Fall. Massachusetts Institute of Technology: MIT OpenCouseWare, https://ocw.mit.edu/. License: Creative Commons BY-NC-SA.]
- Tim Roughgarden. Algorithms Specialization. Stanford, Coursera.
Computation Structures (Computer Architecture bottom-up)
- Chris Terman. Computation Structures. Spring. Massachusetts Institute of Technology: MIT OpenCouseWare, https://ocw.mit.edu/. License: Creative Commons BY-NC-SA.
Operating Systems
Compiler Design
Computer Networks
Database Management Systems
- Samuel Madden, Robert Morris, Michael Stonebraker, Carlo Curino. Database Systems. Fall. Massachusetts Institute of Technology: MIT OpenCouseWare, https://ocw.mit.edu/. License: Creative Commons BY-NC-SA.
Object-Oriented Programming in Java
- Kal Rabb. SWEN-601 Software Construction. Rochester Institute of Technology.
- Herbert Schildt, Danny Coward. Java: The Complete Reference, Thirteenth Edition. McGraw Hill.
Java Software Development
- The Java EE Tutorial Release 7. Oracle.
- Antonio Goncalves. Beginning Java EE 7 (Expert Voice in Java). Apress. (old but still relevant)
- Iuliana Cosmina, Rob Harrop, Chris Schaefer, Clarence Ho. Pro Spring 6: An In-Depth Guide to the Spring Framework. Apress.