Software layer
System software
- general-purpose software that manages basic system resources and processes
- low-level assembly language
- must meet specific hardware needs
- installed at the same time as the OS by the manufacturer
- Runs any time the computer is on
- works in the background
- runs independently
- is necessary for the system to function
Application software
- performs specific tasks to meet user needs
- higher language such as py and js
- does not take hardware into account
- installed by user or admin when needed
- user triggers and stops the program
- runs in the foreground and users work directly with the software
- needs system software to run
- isn’t needed for the system to function
problems change due to sort of software
Purpose
purely your Own purpose or based on Other person’s request
meet customer requirement
Legacy
From Scratch(bottom) or Existing platform(top)
- example of using existing platform
- reverse engineering : 시스템의 기술적인 원리를 구조분석해서 유지보수하거나 재사용하는 것
- software reuse : 프로그램 전체, 부분, 클래스 등을 재사용하는 것을 말
- design patterns : 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제애 대해 재사용 가능한 해결
- refactoring : 결과의 변경 없이 코드의 구조를 재조정하는 것, 주로 가독성을 높이고 유지보수를 편하게 하기 위해 사용
Project characteristics
Due(deployment date) or Performance(Capacity) or Resource(Number of developers)
- KPI(Key performance Indicator)
KPIs evaluate the success of an organization or of a particular activity(such as projects, programs products and other initiatives). KPIs provides a focus for strategic and operational improvement
Hardware dependency
hardware Dependent or In-dependent
- Hardware depentent problem
- Arduino : ATmega에서 돌아가고 C언어 쓰고 개발도구는 Sketch IDE 사용
- RaspberryPI : ARM Processor에서 돌아가고 GPIO, USB
- CUDA : NVIDIA gpu, c/c++
- Hardware independent problem
Web server development
- c++&proxygen(개어려움)
- python&django(시간절약)
- javascript&node.js
- apache/nginx
Mobile application development
- Native platform(ios, android)
- cross platform (html/css/js, dart/flutter)
flutter가 react를 뛰어넘고 있는 추세임
Summary
하드웨어에 의존적인지 아닌지 결정하고 처음부터 만드는지 만들어져있는거 개발하는지 결정하고 기간,퍼포먼스, 비용, 인건비가 중요한지 결정하고 개발해라