이것은 결코 생각할 수없는 일입니다 (물론 주로 Windows 플랫폼의 개발자라고 가정). 자동차 엔진이 작동하는 방식에 대한 실무 지식은 많은 일반적인 프로그래밍 작업 (디버깅, 성능 작업 등)을 훨씬 쉽게 만듭니다.
Windows 내부 는 표준 참조입니다.
-------------------그 아래에서 어떻게 작동하는지 이해하는 것이 중요하다고 생각합니다. CLR / .NET에서 C ++로, ASM에 기본, ASM에서 CPU 아키텍처로, 논리 게이트의 레지스터 및 연산, MOSFET의 논리 게이트, 양자 물리학의 트랜지스터, 후자는 각각의 수학적 장치 (그룹 이론 등)에서 생성됩니다.
낮은 수준을 이해하면 거인의 어깨에 서서 사물을 제어하는 것처럼 다르게 생각할뿐만 아니라 다르게 느끼게됩니다.
-------------------더 많은 지식이 항상 더 좋으며 여러 수준의 지식을 보유하는 것이 작업중인 추상화 계층을 아는 것보다 훨씬 더 가치가 있습니다.
경험상 작업중인 레이어 아래의 레이어에 대해 잘 알고 있어야합니다. 예를 들어 .NET 코드를 많이 작성한다면 CLR이 어떻게 작동하는지 알아야합니다. 웹 앱을 많이 작성한다면 HTTP를 이해해야합니다. HTTP를 직접 사용하는 코드를 작성하는 경우 TCP / IP를 이해해야합니다. TCP / IP 스택을 구현하는 경우 이더넷 작동 방식을 이해해야합니다.
Windows 내부에 대한 지식은 네이티브 Win32 코드를 작성하거나 OS 성능 문제가 수행하는 작업에 중요한 경우 매우 유용합니다. 더 높은 수준의 추상화에서는 덜 도움이 될 수 있지만 결코 아프지 않습니다.
-------------------Windows 팀의 구성원이나 소스 액세스 권한을 가진 사람들에게 확장 될 수있는 내부에 대한 특별한 또는 비밀 지식이 필요하다고 생각하지 않지만 내부를 이해하는 것이 더 나은 개발자가되는 데 도움이된다고 절대적으로 주장합니다.
예를 들어, 스레딩을 사용하는 응용 프로그램을 적당한 방법으로 빌드하려는 경우-Windows 작동 방식, 스레딩 작동 방식, 메모리 프로세스 작동 방식을 이해하는 것이 모두 해당 코드로 좋은 작업을 수행 할 수있는 열쇠입니다. .
나는 당신의 칙령에 동의하지만 경험 / 연습 / 지식이 상호 배타적이라는 데 동의하지 않습니다. 그 경험의 그물망은 그 경험에서 얻은 지식이 있다는 것입니다. 경험하고 실천해야 할 지혜 요소도 있지만 그것들은 일반적으로 실수를 피하기 위해 미래에 적용하는 무형의 상황 요소입니다. 결론 지식은 경험의 침전물입니다.
이런 식으로 생각해보세요. 30 년 이상의 IT 경험을 가진 사람이 몇 명인지 알고, 그들을 생각하고 상위 2 개를 차지하세요. 이제 그 메모리 뱅크에 들어가서 업계에서 아는 매우 똑똑하고 많은 것에 대해 너무 많이 알고 그중 상위 2 개를 선택하는 사람들을 생각해보십시오. 이제 최종 4 개가 있습니다. 프로젝트를 시작하기 위해 하나를 선택해야한다면 누구와 함께할까요? 언제나 우리는 매우 똑똑한 사람을 선택합니다.
-------------------예, Windows 내부를 이해하는 것은 제가 더 나은 프로그래머가되는 데 도움이되었습니다. 또한 많은 나쁜 관행, 나쁜 아이디어 및 잘못된 디자인 개념을 가르쳤습니다.
대안으로 OS X 또는 Linux 내부를 연구하는 것이 좋습니다. 시간이 덜 걸리고, 더 이해하기 쉬우 며, 훨씬 더 생산적이 될 것입니다.
코드를 읽으십시오. 많은 코드를 읽으십시오. 좋은 코드를 많이 읽으십시오 . jQuery, Django, AIR 프레임 워크 소스, Linux 커널, 컴파일러.
Lisp, Ruby, Python 또는 Javascript와 같은 새로운 접근 방식을 소개하는 프로그래밍 언어를 배우십시오. OOP는 좋지만 .net과 Java는 세뇌 접근 방식을 취하고 도구 상자에서 좋은 도구가되는 대신 일종의 종교적 수준으로 끌어 올리는 것 같습니다.
읽고있는 코드를 이해하지 못한다면 올바른 길을 가고 있고 새로운 기술을 배우고 있다는 의미 일 수 있습니다.
UI를 더 간단하고 쉽게 만들고 싶기 때문에 Mac을 구입하는 것이 좋습니다. 훌륭한 프로그래머가되고 싶다면 좋은 환경을 갖는 것이 정말 중요합니다. 자신보다 엔지니어에게 더 잘 어울리고 (가능한 경우), '엔지니어'접근 방식과 '실험자'접근 방식을 취하는 프레임 워크 및 언어로 작업하고, ... 당신보다 더 나은 코드를 포함하는 운영 체제를 사용하십시오.
나는 또한 책 " Coders at Work "를 추천합니다.
-------------------때에 따라 다르지. 시스템의 내부를 이해하는 많은 프로그래머가 해당 지식을 활용하기 위해 최적화 된 코드를 작성하기 시작합니다. 이것은 세 가지 매우 심각한 부작용이 있습니다.
1.) 그 지식이없는 다른 사람들은 코드를 확장하거나 지원하기가 더 어렵습니다.
2.) 시스템 내부는 예고없이 변경 될 수 있지만 인터페이스는 일반적으로 버전이 지정되고 변경 사항이 공개적으로 논의됩니다.
3.) 인터페이스는 일반적으로 플랫폼 개정 및 하드웨어 전반에 걸쳐 일관되며 내부는 이러한 일관성이 없습니다.
간단히 말해, 공급 업체가 예고없이 변경 한 내부 프로세스에 의존하기 때문에 지루하고 지루한 지원 불가능한 코드가 많이 있습니다.
-------------------C 언어의 아버지는 "훌륭한 코드를 작성하기 위해 언어의 모든 기능을 배울 필요는 없습니다. 문제를 더 잘 이해하고 코드를 더 잘 작성하십시오"라고 말했습니다. 지식을 갖는 것이 항상 낫습니다.
출처
https://stackoverflow.com/questions/2002896