Summary
Build learning project for computer science to improve my skills for web development.
I referenced the curriculum that J17-CS which made by Information Processing Society of Japan, CS2013 made by Association for Computing Machinery, and Course of Computer Science and Engineering in MIT.
For this learning, I built the plan that 'Why learn it', 'What learn it', and 'How learn it'.
In 2024, I plan to focus intensively on this project.
Why learn it
To enhance technical knowledge and skills, as well as to accelerate the efficient and effective acquisition of technical expertise in the rapidly advancing software industry.
What learn it
Referenced by some effective curriculum which is J17-CS, CS2013, and curriculum of MIT, we learn the body of knowledge of computer science.
In CS2013, Computer Science is classified 18 knowledge area and categorize Tier-1 and Tier-2.
In this learning project, we use as a reference it.
How learn it
*This project target is Acquire the foundation of computer science's body of knowledge
.
*
So, I Built my curriculum which benchmark of J17-CS, CS2013, and MIT curriculum.
The following the list is that all learning area and resourcing to use to learn.
Software Development Fundamentals(SDF)
Overview
Learning the fundamentals of technique and base concept for software development.
For the beginner who learning computer science, we show the acquiring concept and skills in first years. It has the course that architecture and analysis of algorithm, base concept of programming, data structure, and development ways and tools for software development fundamentals.
Purpose
Learning about software development fundamentals widely, we build the fundamentals to learn Programming Languages
area, Algorithms and Complexity
area, and Software Engineering
area.
Goal
I can explain to non-developers the roles and overviews of concepts in software development such as algorithms, data structures, and the foundational knowledge of software development.
Resource
Related course by MIT(presumption)
- Introduction to Computer Science Programming in Python(6.100A)
- Fundamentals of Programming(6.1010)
- Software Construction(6.1020)
Discrete Structures(DS)
Overview
Discrete Structures is the mathematical fundamentals of informatics.
Thorough this area, we acquire the fundamentals knowledge of mathematical principles necessary for describing and discussing things, not only in theoretical areas but also in many other applied fields.
Purpose
To acquire the level of mathematical knowledge required to understand computer science.
Goal
As a software developer and a computer science learner, we can explain about discrete structure.
Resource
- 『小学校6年間の算数が1冊でしっかりわかる本』
- 『中学校3年間の数学が1冊でしっかりわかる本』
- 『高校の数学I・Aが1冊でしっかりわかる本』
- 『高校の数学Ⅱ・Bが1冊でしっかりわかる本』
- 『離散数学―コンピュータサイエンスの基礎数学』
- Mathematics for Computer Science
Related course by MIT(presumption)
- Mathematics for Computer Science(6.1200[J])
Algorithms and Complexity(AL)
Overview
Introduction to General Algorithms, Algorithm Paradigms, and Data Structures.
Purpose
To understand the theory and application of algorithms for solving complex problems more efficiently, as well as the theory and practical methods for determining computational complexity to derive efficient solutions even within limited resources, and to be able to incorporate them into practical work.
Goal
To grasp the computational complexity of adopted algorithms in practical scenarios, such as in real-world projects or on platforms like LeetCode, and be capable of applying the most efficient algorithm from among multiple solutions to solve problems effectively.
Resource
- 『Grokking Algorithms: An illustrated guide for programmers and other curious people (English Edition)』
- 『Programming Pearls (English Edition)』
- 『Introduction to Algorithms, fourth edition』
- Introduction to Algorithms
- Design and Analysis of Algorithms
- Algorithms(Cousera)
- LeetCode
Related course by MIT(presumption)
- Introduction to Algorithms(6.1210)
- Design and Analysis of Algorithms(6.1220[J])1
Systems Fundamentals(SF)
Overview
Extracting fundamental concepts that commonly appear across various fields of computer science and forming a concise and unified understanding that spans the entire field of computer science.
Purpose
To delve deeper into computer science, it's important to grasp and understand the foundational knowledge that should be covered.
Goal
Having a sufficient understanding to explain the overview of the 12 topics covered in 'Introduction to Computer Science' to someone without prior knowledge in the field.
Resource
- 『Computer Science Distilled: Learn the Art of Solving Computational Problems』
- 『Computer Science: An Overview, Global Edition』
- 『コンピュータはなぜ動くのか 第2版 知っておきたいハードウエア&ソフトウエアの基礎知識』
Related course by MIT(presumption)
- None?
Programming Languages(PL)
Overview
To be able to understand programming models that vary from one language to another and the design principles underlying them.
Also, by studying language processing systems, static analysis of programs, memory management, and more, one can learn how to effectively use each language and understand their limitations.
Purpose
To understand the characteristics of each programming language and the internal mechanisms of the languages themselves. This enables more efficient programming implementations and the ability to choose the optimal technology without being bound to a specific language.
Goal
To implement interpreters and compilers, and explain the basic concepts and mechanisms of language processing systems, static analysis, recursion, and other related topics to a third party.
Resource
- 『Structure and Interpretation of Computer Programs: JavaScript Edition (MIT Electrical Engineering and Computer Science)』
- 『Crafting Interpreters (English Edition)』
- 『Writing An Interpreter In Go』
- 『Writing A Compiler In Go』
- Computer Language Engineering
- Lec 1 | MIT 6.035 Computer Language Engineering, Fall 2005
Related course by MIT(presumption)
Software Engineering(SE)
Overview
Learning about the software development lifecycle and acquiring the knowledge and techniques to develop high-quality software, as well as the ability to evaluate the quality of both the technical deliverables and the processes involved in software development.
This includes development processes, project management, various tools, software design and construction (coding standards, secure coding practices, exception handling, etc.).
Purpose
To understand the theories and methodologies for maintaining high quality and efficient development in software that undergoes continuous development.
Goal
To understand what efforts should be made to continuously deliver high-quality software, to comprehend what needs to be done to realize these efforts, and to establish mechanisms for the continuous delivery of high-quality software in practice. Additionally, as an output, break down each effort into documents that development team members can understand, outlining 'why it should be done' and 'how it should be done.
Resource
- 『Software Engineering: A Practitioner's Approach』
- 『Software Engineering at Google: Lessons Learned from Programming Over Time (English Edition)』
- 『Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler))』
- 『Modern Software Engineering: Doing What Works to Build Better Software Faster』
- 『Fundamentals of Software Architecture: An Engineering Approach』
- 『Software Architecture: The Hard Parts: Modern Trade-Off Analyses for Distributed Architectures』
- 『Software Mistakes and Tradeoffs: How to make good programming decisions』
Related course by MIT(presumption)
- Fundamentals of Programming(6.1010)?
Parallel and Distributed Computing(PD)
Overview
Building on an understanding of fundamental concepts in various areas such as concurrency, parallel execution, memory consistency, communication latency, and others, acquire the knowledge and skills required to efficiently perform large-scale computation and data processing (improving speed), as well as the technology to create secure and fault-tolerant systems.
Purpose
By acquiring skills in parallel and distributed processing techniques, one can learn how to efficiently perform large-scale computation and data processing, ultimately leading to improved performance in application implementations through efficient processing.
Goal
In the project, which we are working on, we are reviewing the design and implementation to achieve more efficient processing and improve performance.
Resource
- 『Concurrency in Go: Tools and Techniques for Developers』
- 『並行プログラミング入門 ―Rust、C、アセンブリによる実装からのアプローチ』
- 『Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems』
- Introduction to High-Performance and Parallel Computing(Coursera)
- Parallel, Concurrent, and Distributed Programming in Java(Coursera)
Related course by MIT(presumption)
Operating Systems(OS)
Overview
Design and implementation of an operating system that is not specific to a particular OS, including the fundamentals of system programming.
Covering the overview and principles of OS, as well as topics ranging from design and implementation to virtual machines and more.
Purpose
The operating system is the core of a computer system. Understanding the OS deepens one's comprehension of the entire computer system, leading to efficient and secure software development through processes such as multitasking and memory management.
Goal
By implementing a minimal OS, one can acquire knowledge that goes beyond conceptual understanding and delve into the fundamental features and mechanisms of an operating system, enabling the ability to explain them at a detailed level.
Resource
- 『Operating System Design: The Xinu Approach, Second Edition』
- 『Operating Systems: Three Easy Pieces』
- 『Systems Performance (Addison-Wesley Professional Computing Series) 』
- 『Advanced Programming in the UNIX Environment (Addison-Wesley Professional Computing Series)』
- 『Goならわかるシステムプログラミング』
- 『Rust in Action (English Edition)』
- Computation Structures
- Performance Engineering of Software Systems
- 『Writing an OS in 1000 Lines』
- 『Writing an OS in Rust』
Related course by MIT(presumption)
- Computation Structures(6.1910)
- Operating System Engineering(6.1810)
- Software Performance Engineering(6.1060)
Networking and Communication(NC)
Overview
To understand the fundamentals of networking, from basic concepts to general knowledge about communication as a whole.
Purpose
By understanding networking and communication, one can learn the theory and implementation of data transfer mechanisms and inter-system coordination. This enables the ability to design appropriate and efficient networks, leading to stable and efficient system operations.
Goal
To understand communication protocols and the structure of networks, and to be able to explain the roles of various elements in the information flowing through networks.
To gain an understanding of various network structures and mechanisms from a networking perspective regarding the infrastructure of the projects you are involved in, and to be able to explain these concepts to non-engineers.
Resource
- 『Computer Networks, Global Edition』
- Computer Networking
- Introduction to Data Networks and the Internet - Master's
Related course by MIT(presumption)
- Computer Systems Engineering(6.1800)
Information Assurance and Security(IAS)
Overview
To understand the fundamental principles of information security, various threats, and risks, and to learn about the mechanisms for protection and defense against them.
Purpose
By understanding how to prevent threats to a system in advance and how to defend a system from those threats, one can learn how to build secure systems and how they may be attacked.
Goal
To be able to diagnose potential security threats in projects you are involved in and, if problems exist, to assess and determine the appropriate methods for addressing them from a security perspective.
Resource
- 『Making Sense of Cybersecurity (English Edition)』
- 『Designing Secure Software: A Guide for Developers』
- 『体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践』
- 『暗号技術入門』
- 『Secure by Design (English Edition)』
- 『Building Secure and Reliable Systems: Best Practices for Designing, Implementing, and Maintaining Systems』
- 『Container Security: Fundamental Technology Concepts That Protect Containerized Applications』
- Palo Alto Networks Cybersecurity Professional Certification(Coursera)
Related course by MIT(presumption)
- Foundations of Computer Security(6.1600)
- Computer Systems Engineering(6.1800)
Information Management(IM)
Overview
To understand what information is, starting with databases, and to acquire the technical knowledge and theories necessary for effectively collecting, organizing, storing, and retrieving information, and for utilizing that information for business, organizational decision-making, strategy formulation, and operational improvement.
Purpose
To learn about appropriate data management and operations based on information, to construct conceptual and physical data models, and to be able to implement the desired design by determining suitable methodologies and technologies.
Goal
To understand the concepts used internally in database systems and storage engines, and to be able to perform appropriate data modeling for the characteristics of each database system.
Resource
- 『Database Internals: A Deep Dive into How Distributed Data Systems Work (English Edition)』
- Database systems(Coursera)
- Introduction to Databases(Coursera)
Related course by MIT(presumption)
Architecture and Organization(AR)
Overview
Building on a foundation of Systems Fundamentals (SF) knowledge, acquire the understanding of interfaces for higher-level hardware construction and advanced software layers with higher abstraction levels. Gain the ability to understand and apply the characteristics of various components of computer systems and their interactions with the surrounding environment.
Purpose
To understand the architecture and configuration of computers on which programs run, and to become capable of developing software that maximizes performance.
Goal
By assembling computer components such as hardware, software, compilers, and operating systems one by one and implementing them until an application runs, one can understand the theory and implementation of how computers operate.
Resource
- 『Essentials of Computer Architecture』
- 『Computer Organization and Design MIPS Edition: The Hardware/Software Interface (The Morgan Kaufmann Series in Computer Architecture and Design)』
- 『The Elements of Computing Systems, second edition: Building a Modern Computer from First Principles (English Edition) 』 - Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)
Related course by MIT(presumption)
- Computer Systems Engineering(6.1800)
- Computation Structures(6.1910)
Platform-based Development(PBD)
- TBD
Top comments (0)