일반적으로 소프트웨어를 설계 할 때 일반적으로 어떤 유형의 최적화를 원하십니까?
디자인 최적화를 선호하는 유형입니까?
- 개발 시간 (즉, 작성 및 / 또는 유지 관리가 더 쉬움)?
- 처리 시간
- 저장 공간 (RAM, DB, 디스크 등) 공간
물론 이것은 해결되는 문제 유형과 마감일에 매우 주관적이므로 한 가지 최적화 형식을 다른 형식보다 선택 해야하는 이유에 대해 듣고 싶습니다.
일반적으로 소프트웨어를 설계 할 때 일반적으로 어떤 유형의 최적화를 원하십니까?
디자인 최적화를 선호하는 유형입니까?
물론 이것은 해결되는 문제 유형과 마감일에 매우 주관적이므로 한 가지 최적화 형식을 다른 형식보다 선택 해야하는 이유에 대해 듣고 싶습니다.
답변:
그런 다음 필요한 경우 프로파일 링하고 속도를 최적화하십시오. 최소한 지난 10 년 동안은 스토리지가 필요하지 않았습니다. 그 전에 나는했다.
가공 및 보관이 저렴합니다. 당신의 시간은 아닙니다.
참고 사항 :
그렇다고 빨리 코드를 작성하기 위해 코드를 작성하는 일이 나쁜 것은 아닙니다. 빠른 개발을 용이하게하는 방식으로 코드를 작성하는 것을 의미합니다. 또한 전적으로 사용 사례에 따라 다릅니다. 문의 양식이있는 2 ~ 3 페이지의 웹 사이트 인 경우 PHP 프레임 워크를 사용할 필요가 없습니다. 포함과 메일러 스크립트가 몇 개 있으면 개발 속도가 빨라집니다. 대신 새로운 기능을 확장하고 추가 할 수있는 유연한 플랫폼을 만들 계획이라면 향후 개발 속도를 높이기 위해 적절히 배치하고 코드를 작성하는 데 시간을 투자 할 가치가 있습니다.
처리 시간 및 스토리지와 직접 비교할 때 더 빠른 개발 시간을 기대합니다. collectionutils 빼기 기능을 사용하는 것이 컬렉션을 빼는 가장 빠르고 효율적인 메모리 효율적인 방법입니까? 아니! 그러나 개발 시간이 더 빠릅니다. 성능이나 메모리 병목 현상이 발생하면 나중에 해결할 수 있습니다. 무엇을 최적화해야하는지 알기 전에 최적화하는 것은 시간 낭비 이며 이것이 내가 주장하는 것입니다.
이것이 고객에게 중요한 유일한 가치입니다.
개발 시간 은 덜 중요합니다. 완전한 기능을 갖춘 명령 줄 응용 프로그램을 GUI보다 훨씬 빠르게 작성할 수 있지만 Jane 부인이 원하는 보고서를 작성하는 방법을 알 수 없다면 쓸모가 없습니다.
유지 관리 는 덜 중요합니다. 시소를 정말 빨리 수리 할 수 있지만 숲 한가운데에 있으면 사용자가 찾을 수 없습니다.
처리 시간 이 덜 중요합니다. 60 초 안에 0에서 가벼운 속도로가는 차를 만들면 사용자는 조종 할 수 없습니다.
미학 은 덜 중요합니다. 모나리자를 칠할 수 있지만 벽 뒤에 숨어 있으면 아무도 그녀를 볼 수 없습니다.
중요한 것은 사용자 경험입니다. 사용자가 원하는 방식으로 원하는 것을 정확하게 수행하는 응용 프로그램을 만드는 것이 궁극적 인 성과입니다.
최적화해야 할 것은 하나 뿐이며 다음과 같습니다.
고객에게 가장 빠른 프로그램이 필요하십니까? 속도를 최적화하십시오.
고객에게 절대적인 안정성이 필요합니까? 이를 위해 최적화하십시오.
내일 배달해야합니까 아니면 쓸모가 없습니까? 개발 속도를 최적화하십시오.
엄청나게 작은 리소스 제한 장치에서 실행하고 있습니까? 이러한 리소스를 최적화하십시오.
작년에 사용한 애플리케이션을 방금 업그레이드했습니다. 그들은 앱을 완전히 다시 작성했으며 소년은 느 렸습니다. 나는 마침내 그것을 빨리 운영하기 위해 새로운 컴퓨터를 사야했다. 나는 그것이 싼 것이 아니라고 보증하지만 내 시간은 더 가치가 있습니다.
메모리 소비 및 할당을 제한하는 경향이 있습니다. 나는 그것이 오래된 학교라는 것을 알고 있지만 :
효율성을 개발 시간, 향후 유지 관리 가능성, 사용자 경험 및 소비되는 리소스 간의 절충으로 정의하면서 효율성을 향해 최적화한다고 말하고 싶습니다. 개발자는 균형을 유지하기 위해이 모든 것을 저글링해야합니다.
그 균형을 어떻게 달성합니까? 먼저, 최종 기한, 응용 프로그램이 실행될 하드웨어 및 사용하는 사람의 유형과 같은 몇 가지 상수를 설정해야합니다. 이를 알지 못하면 올바른 균형을 잡고 필요한 곳의 우선 순위를 정할 수 없습니다.
예를 들어, 강력한 시스템에서 서버 응용 프로그램을 개발하는 경우 성능 효율성을 절충하여 최종 기한을 맞출 수 있습니다. 그러나 개발자가 사용자 입력에 빠르게 응답해야하는 응용 프로그램 (비디오 게임을 생각할 경우)의 경우 입력 루틴이 지연되지 않도록 입력 루틴의 우선 순위를 정해야합니다.
512MB 이상의 RAM을 가진 시스템이 최첨단으로 여겨 졌던 시절을 기억하십니까? 나는 이전의 코드를 작성하는 데 하루를 보낸다.
주로 Xen 환경의 권한있는 도메인에서 실행되는 저수준 프로그램에서 작업합니다. 권한있는 도메인의 한도는 512MB이며 나머지 RAM은 고객이 사용할 수 있도록 남겨 둡니다. 권한있는 도메인을 단 하나의 CPU 코어로 제한하는 것도 일반적입니다.
그래서 여기에 새로운 $ 6k 서버에서 실행될 코드를 작성하고 있으며 각 프로그램은 100kb 할당 한도 내에서 (이상적으로) 작동하거나 동적 메모리 할당을 완전히 피해야합니다.
간결하게, 나는 다음을 위해 최적화한다.
또한 잠금 대기, I / O 대기 또는 일반적인 대기 시간에 관해서는 매우 부지런해야합니다. 상당한 시간을 들여 기존의 비 블로킹 소켓 라이브러리를 개선하고보다 실용적인 잠금없는 프로그래밍 방법을 모색하고 있습니다.
저는 기술의 발전 으로 지난 달에 구입 한 시스템에서 15 년 전에했던 것처럼 코드를 작성하는 것이 약간 아이러니하다는 것을 알게되었습니다 .
임베디드 플랫폼을 사용하는 모든 사람에게 일반적이지만, 대부분의 경우 1GB 이상을 처리해야합니다. Jason이 지적했듯이 모바일 장치에서 실행할 프로그램을 작성할 때도 일반적입니다. 목록은 키오스크, 씬 클라이언트, 사진 프레임 등입니다.
하드웨어 제한으로 인해 실제로 소비하는 것을 신경 쓰지 않고 무언가를 만들 수있는 사람들과 프로그래머를 분리한다고 생각하기 시작했습니다. 나는 다양한 분야의 프로그래머들 사이에서 공유하는 상식의 집단 풀에 유형과 메모리 검사를 완전히 추상화하는 언어가 무엇인지 걱정합니다 (필요한 경우 저에게 투표하십시오).
학업으로서, 내가 최적화 한 것을 공유해야한다고 생각했습니다. 이는 짧은 개발 시간을 최적화하는 것과는 다릅니다. 종종 연구 결과가 일부 연구 문제를 뒷받침 할 수 있지만, 전달 가능하고 세련된 제품이 아닐 수도 있습니다. 이것은 품질의 문제로 여겨 질 수 있으며, 많은 사람들이 (학계) 컴퓨터 과학자들이 "실제"경험이 없다고 말하는 이유를 설명 할 수 있습니다. (예 : "다른 방법으로 제공 가능한 제품을 개발하는 방법을 알지 못했습니까?" )
괜찮습니다. 임팩트 측면에서 다른 사람들이 자신의 작업을 사용하고 인용하기를 원하며 Joel의 빙산 효과 가 시작됩니다. 약간의 광택과 빛이 먼 길을 갈 수 있습니다. 그러나 다른 프로젝트를 기반으로하지 않으면 배달 가능한 제품을 만드는 데 소비 된 시간을 정당화하지 못할 수도 있습니다.
오늘날의 컴퓨터는 빠르지 만 충분하지 않습니다. 스트리밍 미디어 서버를 사용하는 경우 성능이 중요한 여러 가지 상황이 있습니다.
고객에게 1TB의 큰 디스크가있을 수 있습니다. 충분히 멀리 떨어져있는 서비스를 원한다면 1000 HD 영화로 찍을 수있는 것은 무엇입니까?
글쎄요, 이것이 "최적화"라고 생각하는지 모르겠습니다. 제가하는 일은 C ++ 대신 Java를 사용하고 개발 속도가 10 배 빨라집니다. 앞으로 완전히 바위!
BTW 개발 속도를 높이기 위해 개발 프로세스를 단축해야한다고 생각합니다. 자바를 선택해야합니다. 파이썬과 같은 쓰레기를 사용하지 마십시오 .DEV 시간을 단축 할 수 있다고 주장합니다.