Software engineering is a branch of engineering involving building software. Along with hardware engineering, these two make up computer engineering.
Nowadays many applications are data-intensive instead of compute-intensive.
Resources
- Designing Data-Intensive Applications, by Martin Kleppmann
- The Pitt CS Wiki, from students at the University of Pittsburgh
- Habits of Great Software Engineers, an essay by Vadim Kravcenko
- The Missing Semester of Your CS Education, from the folks at MIT’s CSAIL
- Glossary of computer science, at the English Wikipedia
Blogs and newsletters:
Key concepts
- System design
- Team programming
- Data (storage, manipulation)
- Algorithm
- Programming language (paradigms)
- Tech stack
- Software tests
- Parallel computing
- Software optimisation
Sub-fields
Principles
- Correctness
- Portability
- Scalability
- Maintainability
- Accessibility
- Robustness
- Adaptability
- Performance
Tools
- Shell
- Integrated development environment
- Version control (Git)
- Compiler and interpreter
- Debugger
- Library
- API
- Framework
- Linter
Courses
- APS105 — Computer Fundamentals, an introduction to C
- ECE244 — Programming Fundamentals, an introduction to C++ and object-oriented design
- ECE297 — Software Design and Communication, an introduction to software design
- ECE344 — Operating Systems
- ECE345 — Algorithms and Data Structures
- ECE467 — Compilers and Interpreters
- ECE361 — Computer Networks I
- ECE419 — Distributed Systems
Development environment
choco install jetbrainstoolbox
choco install git
choco install gh
choco install neovimSee also
Some broadly related aspects of engineering: