소프트웨어 제품을 사용하여 전체 팀을 개발하면 한 프로그래머가 스스로 수행 할 수있는 양은 얼마입니까? 다시 말해, 한 사람이 Photoshop, MS 단어 등을 쓸 수 있습니까? 그들이 할 수 없다면, 웹 개발이 한 프로그래머가 많이 할 수있는 영역일까요?
소프트웨어 제품을 사용하여 전체 팀을 개발하면 한 프로그래머가 스스로 수행 할 수있는 양은 얼마입니까? 다시 말해, 한 사람이 Photoshop, MS 단어 등을 쓸 수 있습니까? 그들이 할 수 없다면, 웹 개발이 한 프로그래머가 많이 할 수있는 영역일까요?
답변:
리눅스는 현재 첫 번째 반복보다 훨씬 크지 만 중요한 것은 견인력을 얻기 위해 충분한 물건을 가지고 나온다는 것입니다.
나는 큰 것들이 다른 것들과 근본적으로 다르면 그냥 할 가치가 있다는 개인적인 규칙을 가지고 있습니다. 그렇지 않으면 당신은 붉은 바다 로 다이빙하고 있습니다.
소프트웨어가 충분하면 진지해지기를 원할 수 있습니다. Minecraft의 제작자 인 Markus "Notch"Persson을 예로 들어 보겠습니다. IIRC는 혼자서 게임을 시작했고, 게임이 매력을 얻었을 때 그는 협력자를 찾고 회사를 시작하기까지했습니다.
혼자서 무언가를 달성하는 것에 대한 보상을 주지만, 큰 프로젝트는 개발자가 아닌 단일 한 천재가 아닌 잠재력을 발휘하여 다음 단계로 넘어갑니다.
Google I / O 2009에서 Ben Collins-Sussman과 Brian Fitzpatrick의 이야기 인 Genius Programmer의 신화를 확인하십시오 . 모든 잘못된 기대를 얻을 수 있습니다. 내가 여기서 만들고 싶은 요점은 때로는 한 명의 개발자가 모든 것에 대한 크레딧을 얻는 반면 더 많은 사람들이 뒤에 있다는 것입니다.
Linus Torvalds를 제외한 다른 예는 John Carmack입니다. EA가 2 개월 동안 전체 팀을 추산 한 지 불과 4 일 만에 Wolfenstein을 포팅했습니다.
코드의 양이 아니며, 예상보다 적은 코드로 큰 것을 달성 할 수있는 아키텍처 및 기술 지식이 아닙니다.
기술과 지식 (평균 수준을 넘어서)을 고려하면 많은 작업을 거의 느끼지 않을 수 있습니다.
내가하고있는 작업의 특성으로 인해 나는 꽤 많은 응용 프로그램을 모두 스스로 개발했습니다. 네, 가능합니다. 나는 이것에 대해 몇 시간 동안 갈 수 있었지만 지금은 많은 시간을 얻지 못했기 때문에 개인적인 경험의 장단점이 있습니다.
장점 :
단점 :
헌신과 기술로 한 사람이 확실히 많은 것을 성취 할 수 있습니다. 그러나 쉽지는 않지만, 좋은 프로그래머가되는 것만으로는 충분하지 않습니다. 성공적인 프로젝트를 위해서는 종종 사용 사례, 사용자 인터페이스 디자인, 문서화, 지원 등을 고려해야합니다. 일이 시작되고 사용자 수가 늘어 나면 한 손으로 모든 사람이 점점 비현실적이 될 것입니다. 즉, 더 많은 사람들이 프로젝트에 참여하거나 (커뮤니티 참여, 직원 채용 등) 프로젝트가 죽는 시점입니다.
그것은 모두 기술, 소요 시간 및 기꺼이 의존합니다. 지식이 많을수록 무언가를 달성하는 데 걸리는 시간이 줄어 듭니다. 코드베이스에 대한 독자적인 지식을 얻을 수있는 유일한 개발자로서, 파악 / 리팩토링 / 디버깅 프로세스 속도를 높일 수 있습니다.
나는 개인적으로 데스크톱 대 서버 전송 응용 프로그램에서 일하고 있습니다. 서버 응용 프로그램, 데스크톱 응용 프로그램을 코딩하고 직접 테스트했습니다. 응용 프로그램의 설치 프로그램도 작성했습니다. Windows의 시스템 트레이 아이콘으로 끌어서 놓을 수있는 방법을 찾았으며 심지어 새로운 Java 라이브러리를 처음부터 작성하지 못했습니다. 나는 1 년 동안 이것을했고 여전히 개발 및 테스트 중입니다.
이 전체 프로젝트는 하나의 주된 시련이었습니다. 매일 방과 후 나는 주말뿐만 아니라 프로젝트에 참여했습니다. MS Word, Photoshop 등과 같이 방대합니까? 아니. 프로젝트는 여전히 큰 규모이며 계속 성장하고 있으며 많은 것을 성취 할 수 있습니다.
나는 현재 자유 시간에 그러한 프로젝트를 직접 수행하고 있습니다 (데스크톱 응용 프로그램이 아니라 웹 응용 프로그램이지만 원칙은 동일합니다). 지금까지 찾은 내용은 다음과 같습니다.
1) 바퀴를 재발 명하지 마십시오 . 처음부터 모든 작업을 수행하는 대신 기존 라이브러리 / 프레임 워크를 사용하십시오. 한 가지주의 사항 : 라이센스는 원하는 배포 / 릴리스 / 모든 모델에 적용되므로 라이센스에주의해야합니다. 일부 카피 레프트 라이센스는 "파생 저작물"을 오픈 소스해야합니다. 일부 라이센스는 비상업적 사용 만 허용합니다. "크레딧"화면 / 지역 / 무엇에서 적절한 속성을 제공 할 수 있도록 사용하는 라이브러리 / 프레임 워크를 추적하십시오.
2) 반복적으로 작업하십시오 . 이것은 dukeofgaming이 "작은 시작"으로 말한 것과 관련이 있습니다. 결과를 볼 수 있다면 프로젝트를 고수 할 가능성이 훨씬 높습니다. 당신이 무언가를 볼 수있을 때까지, 당신이하는 모든 개발은 어둠 속에서 그림을 그리는 것과 같습니다.
3) 초기에 피드백 / 도움 을 요청하는 것을 두려워하지 마십시오 . 당신은 모든 것을 잘하지 못할 수도 있습니다. 코딩의 하위 수준에 익숙하지 않다면 아마도 UI에 빠질 것입니다. 대화도 적용됩니다. 특정 지역에서 당신보다 더 나은 사람들로부터 조언을 얻는 것은 결코 아프지 않습니다. 많은 사람들은 누군가 자신의 아이디어를 훔치는 것에 대해 걱정하기 때문에 이것을 피할 것입니다. 걱정하지 마십시오. 누군가가 당신을 복사하려고하면, 그것은 당신이 가치있는 일을하고 있다는 것을 의미합니다. 아이디어는 저렴하고 구현이 핵심입니다. 애플은 MP3 플레이어를 발명하지 않았고, 마이크로 소프트는 운영 체제를 발명하지 않았으며, 페이스 북은 소셜 네트워크를 발명하지 않았으며, 구글은 검색 엔진을 발명하지 않았다. 그들이 한 것은 사용자에게 매력적이었습니다.