요령 배우기 일 구하기 프로그램 개발하기
소프트웨어 개발은 두 가지 그룹으로 나뉘는데, 하나가 응용 프로그램 개발이고 다른 하나는 시스템 개발이다. 전자는 사용자의 요구를 충족시키는 프로그램을 만드는 데 중점을 두며 활용 분야는 모바일 앱, 고화질 비디오 게임, 기업 회계 소프트웨어 등으로 다양하다. 반면 후자는 라이프 사이클 개발을 사용해 운영 체제를 만들고 유지 관리하는 데 중점을 두며 네트워크 운영 및 데이터 보안 등에 관련된 분야이다. 새로운 아이디어는 누구나 생각해 낼 수 있지만 개발자는 그 아이디어를 실질적으로 구현한다는 점에서 차별화된다. 소프트웨어의 디자인적인 부분의 작업만 진행하는 경우에도, 코딩에 익숙해야 하며 기본 프로토타입을 만들 수 있어야 한다. 배울 수 있는 프로그래밍 언어는 그 종류가 매우 다양한데, 그 중 더 유용하고 중요가 높은 언어는 다음과 같다.   C - 여전히 널리 사용중인 오래된 언어 중 하나이며 현재 목록의 다른 언어의 기반이 되는 기초 언어이다. C는 비교적 낮은 수준의 프로그램을 개발하는데 사용되며 컴퓨터의 하드웨어와 긴밀하게 작업된다. C ++ - 이는C의 객체 지향 버전이며, 현재 전세계에서 가장 인기있는 프로그래밍 언어이다. 크롬 (Chrome), 파이어폭스 (Firefox), 포토샵 (Photoshop) 및 기타 여러 프로그램 등이 모두 C ++로 제작되었으며 비디오 게임을 제작할 때에도 인기가 높다. C ++ 개발자의 수요는 거의 항상 높다고 한다. Java - C ++ 에서 한층 진화된 언어로, 이식성이 용이하여 널리 사용된다. 거의 모든 시스템이 Java Virtual Machine을 실행하기 때문에 Java 언어로 제작된 소프트웨어를 실행할 수 있다는 것도 장점이다. 대표적으로 비디오 게임 및 비즈니스 소프트웨어에 사용되며 많은 사람들이 필수 언어로 권장하고 있다. C # - 마이크로소프트 사의 .NET Framework에 포함된 윈도우 체제에 기반한 언어로, Java 및 C ++와 밀접한 관련이 있다. 즉, Java를 배우면 C #도 빠르게 습득이 가능하다. 이 언어는 윈도우 또는 윈도우 스마트폰의 소프트웨어로 작업하는 개발자에게 특히 유용하다. Objective-C - 애플 시스템을 위해 특별히 설계된 C 언어의 또 다른 버전으로, 아이폰 및 아이패드의 응용 프로그램에서 인기가 높다. 또한 프리랜서가 배우기 좋은 언어이다.  Python - 초보자도 배우기 쉬운 언어 중 하나로, 웹 개발을 전문으로 하는 언어이다. PHP - 정확하게 말하자면 소프트웨어 개발에 사용되는 것은 아니지만 PHP는 웹 개발에 관심이 있는 경우 필수적으로 알아두어야 하는 언어이다. PHP 개발자 역시 수요가 높지만 수입은 소프트웨어 개발자에 비해 적다. 대부분의 서점에는 프로그래밍 서적 전용 섹션이 있으며 Amazon 및 기타 온라인 쇼핑몰에서도 구입 가능한 책들이 많다. 좋은 프로그래밍 책은 프로그래밍 언어를 배우는 사람에게 최상의 도구이며, 프로젝트 작업을 하는 동안에도 효율적으로 빠르게 참고할 수 있어 도움이 된다.  책과 더불어 인터넷을 활용하면 수많은 귀중한 자료, 가이드 및 튜토리얼를 끝없이 구할 수 있다. CodeAcademy, Code.org, Bento, Udacity, Udemy, Khan Academy, W3Schools 등과 같은 사이트에서 원하는 언어에 대해 검색해본다. 소프트웨어 개발자가 되기 위해 정규 대학의 학사 학위가 필요하진 않지만, 지역내 전문 대학 또는 학습 센터 등에서 관련 수업을 듣는 것은 좋은 방법이다. 이렇게 하면 일대일 교습의 이점을 얻을 수 있으며, 스스로 학습할 때 혼자서 해결할 수 없는 문제에 대한 도움을 받을 수 있다.   수강료를 지불해야 하기 때문에 수강 신청 전 정확히 본인이 배우고자 하는 것에 대해 도움이 되는 수업에 등록하도록 한다. 많은 개발자들이 본인이 가진 기술에 따라 해당 분야에 진입하기도 하지만, 4년제 대학에서 컴퓨터 과학분야 학사 학위를 취득하면 구직에 더욱 도움이 된다. 학위 코스를 통해 지식의 배경을 넓히는 것뿐만 아니라 수학 및 논리 등과 같이 관련 있는 유용한 수업을 들을 수 있다. 새로운 프로그래밍 기술을 실제 업무에 적용하기 전, 먼저 스스로 몇몇 프로젝트를 직접 수행하여 연습해본다. 프로그래밍 언어를 사용하여 문제를 해결하며 스스로 도전하고 배우는 것이다. 이는 단순히 기술을 익히는 데 도움이 될 뿐만 아니라 이력서 및 포트폴리오 작성에도 도움이 된다.   예를 들어, 컴퓨터의 일정 관리 프로그램을 사용하는 대신 본인만의 캘린더 프로그램을 만들어 보는 것이다. 비디오 게임 개발에 관심이 있는 경우, 그래픽이나 복잡한 로직에 얽히지 않고 간단한 게임을 만들어 보도록 한다. 기술적인 부분보다 재미있고 독창적인 게임 제작에 집중하는 것이다. 소규모 게임 프로그램이라도 차후 본인의 포트폴리오를 빛나게 해줄 것이다. 인터넷은 다른 개발자와 소통할 수 있는 훌륭한 소스이다. 잘 풀리지 않는 프로젝트가 있다면, StackOverflow 등과 같은 사이트에 접속해 다른 개발자에게 도움을 요청하도록 한다. 이미 스스로 시도해본 갖가지 해결책은 알리는 등 지적이고 효율적인 방식으로 질문하도록 한다. 하루 한 시간만이라도, 매일 좋아하는 프로젝트 연습을 하는 것이 중요하다. 이는 신선하고 새로운 기술을 꾸준히 익히는데 도움이 된다. 많은 개발자들 역시 언어에 익숙해지기까지 매일 연습하고 꾸준히 노력했다는 것을 명심한다.  매일 코딩 연습을 위한 시간을 정하거나 마감 시간을 정한다. 주중에는 매일 프로젝트를 연습하고 주말에는 휴식을 갖는 것이 좋다. 계약을 통한 일들은 급여가 낮고 정규직보다 불안정하다는 단점이 있으나 여러 가지 계약 업무를 통해 포트폴리오를 발전시킬 수 있다는 장점이 있다. Elance 및 ODesk (현재 "Upwork"라고도 불림) 등과 같은 사이트를 확인하여 이러한 계약 업무를 찾을 수 있으며, 계약 체결까지 어려움이 있을 수 있으나 일단 첫 계약을 맺고 나면 점차 많은 계약이 가능해질 것이다.   Hacker News는 계약 및 프리랜서를 위한 훌륭한 사이트이다. "물어보기" 섹션을 확인해본다. 계약 업무를 확보하기 위해 낮은 가격을 제시하고 싶은 마음이 들 수도 있으나 본인의 업무 및 서비스의 가치를 하찮게 생각하지 않도록 한다. 보상에 비해 더 많은 업무를 해야할 뿐만 아니라 같은 분야에 종사하는 다른 사람들의 분노와 원망을 살 수 있고 이로 인해 같은 개발자들과의 네트워크에 부정적인 영향을 받게 될 수 있다. 계약 업무를 훌륭하게 해내면 때로 정규직 제의를 받기도 한다. 그러므로 항상, 모든 프로젝트에서 최선을 다하도록 하자! 할 수 있는 한 많은 컨벤션 및 소셜 네트워킹에 참여한다. 이렇게 하면 더 많은 코드와 문제를 해결할 수 있을 뿐만 아니라 업계의 다른 사람들을 만날 수 있다. 프로그래머라고 하면 지하실에서 홀로 작업하는 사람의 이미지가 떠오를 수도 있지만 정규직 개발자 중 대다수는 팀의 일원으로 근무하며 네트워킹은 다른 분야와 마찬가지로 중요하게 작용한다. 몇몇 계약 업무를 통해 경력이 쌓이면, 이제 정규직 취업을 위해 큰 회사로 이력서와 포트폴리오를 보낸다. Monster 외에도 GitHub Jobs, StackOverflow Job Board, AngelList, CrunchBoard, Hirelite, Hacker News 등의 개발자를 위한 다양한 구직 사이트가 있다. 훌륭한 소프트웨어 개발자는 대게 두 개 이상의 언어에 능숙하다. 물론 일을 통해 많은 것을 배우고 스킬을 향상시킬 수도 있지만, 근무 시간 외 자유 시간을 투자하여 지식을 넓히고 다른 언어를 익히도록 한다. 이렇게 하면 또 다른 새 프로젝트로 전환하는 것이 더욱 쉬워지고 정규직에 채용될 가능성도 높아지게 될 것이다. 모든 소프트웨어 개발 회사가 신입 사원에게 높은 급여를 제시하지는 않는다. 사실 처음부터 연봉이 높은 회사는 드물다. 그러나 소프트웨어 개발 분야의 장점 중 하나가 바로 고용 시장이 안정적이라는 것이다. 만약 현재 근무 중인 회사에서 받는 연봉이 충분하지 않다고 생각되면, 또 다른 회사의 새로운 직책으로 이직하는 것이 상대적으로 쉽다 (기술을 보유하고 있다는 전제하에). 그러므로 무작정 회사를 나가는 생각을 하기보다 초기 경력은 꼭 필요한 경험이라고 생각하도록 한다. 좋은 프로그램은 사용자의 삶을 편하게 해준다. 원하는 작업에 사용할 수 있는 소프트웨어를 살펴보고, 작업이 더 쉽고 원활해질 수 있는 방법이 있는지 확인한다. 성공적인 프로그램은 사용자에게 편리함과 유용함을 줄 수 있어야 한다.   컴퓨터에서 일상적으로 사용하는 작업을 살펴본다. 하나의 프로그램으로 이러한 작업의 일부를 자동화 할 수 있는 방법이 있는가? 모든 아이디어를 메모한다. 당장은 바보같거나 과장된 아이디어로 보이더라도 차후 유용하고 멋진 프로그램으로 발전할 수 있다. 다른 프로그램도 살펴본다. 그러한 프로그램들은 어떤 기능을 하는가? 어떻게 하면 더욱 효율적으로 작동할 수 있을까? 해당 프로그램들이 놓치고 있는 부분은 무엇인가? 이러한 질문에 답하여 스스로 좋은 아이디어를 탐색할 수 있다. 이는 프로젝트로 구현하고자 하는 기능과 목표를 설명하는 것으로, 개발 프로세스 중 이를 참고하면 프로젝트 진행이 원래 계획을 따라 올바른 방향으로 나아가고 더욱 집중적으로 진행되는데 도움이 된다. 디자인 문서 작성에 대한 자세한 내용은 이 가이드를 참고하도록 한다. 이는 해당 프로그램이 목표로 하는 기능을 보여주는 것으로, 속도가 빠른 프로그램이다. 적절한 디자인을 찾을 때까지 반복적으로 사용한다. 예를 들어 캘린더 프로그램을 만드는 경우, 프로토타입은 기본 캘린더와 (올바른 날짜!) 특정 이벤트를 추가하는 방식이 된다.   프로토타입은 개발 과정 동안 문제를 해결할 수 있는 새로운 방법을 찾거나 새로운 아이디어를 추가하고자 할 때 자주 변경된다. 프로토타입의 디자인은 중요하지 않다. 사실, 예술적인 부분과 디자인 관련 작업은 가장 마지막에 온다. 다시 캘린더를 예시로 들자면, 프로토타입은 단순히 텍스트 일 가능성이 높다. 버그는 모든 개발자의 적이다. 코드 오류 및 예기치 않은 사용 등으로 인해 완제품이라고 하더라도 각종 문제가 발생할 수 있다. 그러므로 프로젝트를 계속 진행하면서 가능한 많이 테스트하는 것이 좋다. 버그를 해결할 수 있는 모든 조치를 취하고, 앞으로 발생 가능한 문제로부터 예방하도록 노력한다. 친구와 가족에게 프로그램 테스트를 부탁하고 피드백을 받는다. 어떠한 방식으로 피드백을 받더라도 모두 개발 프로세스에 도움이 될 것이다.   프로그램에서 날짜 정보를 다루는 경우, 이상한 날짜를 입력해본다. 실제로 오래된 날짜 또는 먼 미래의 날짜를 입력하면 프로그램이 이상한 반응이 나타날 수 있다. 잘못된 변수를 입력한다. 예를 들어 사용자의 연령을 묻는 란이 있는 경우, 숫자 대신 단어를 입력하고 프로그램이 어떻게 반응하는지 확인한다. 프로그램에 그래픽 인터페이스가 있다면 모든 것을 클릭해본다. 이전 화면으로 돌아가거나 잘못된 순서로 버튼을 클릭했을 때 프로그램이 어떻게 반응하는가? 프로토타입 및 개발 단계에서 단순한 프로젝트를 만드는 것은 상관없으나 만약 다른 사람들이 사용할 수 있게 하려면 마무리 작업에 시간과 노력을 할애해야 한다. 즉, 모든 메뉴가 논리적으로 작동하는지, 사용자 인터페이스 (UI)가 깔끔하고 사용하기 쉬운지, 심각하거나 눈에 띄지 않는 버그가 없는지, 그리고 외관 및 디자인 등을 확인하여 마무리한다.   UI 디자인과 기능은 매우 복잡하고 다루기 어렵다. 그렇기 때문에 일반적으로 많은 사람들이 UI 디자인에서 모든 경력과 실력을 쌓는다고 해도 과언이 아니다. 그러므로 본인의 프로젝트 마무리 단계에서는 사용이 쉽고 눈에 주요 기능들이 잘 띄는지 등을 주로 확인한다. 그 외 전문적인 UI는 충분한 예산 및 전문적인 팀 없이는 혼자서 만들어 내기가 힘들다. 예산이 충분한 경우, 계약을 통해 UI를 디자인 할 수 있는 프리랜서 그래픽 디자이너를 고용할 수 있다. 차후 더욱 큰 프로젝트로 발전시키고자 하는 탄탄한 프로젝트가 있다면 실력이 좋은 UI 디자이너를 찾아 함께 팀으로 일하는 것도 좋다. GitHub는 다른 사람들과 코드를 공유 할 수 있는 오픈 소스 커뮤니티이다. 이를 통해 코드에 대한 통찰력을 얻을 수 있을 뿐 아니라 해결 방법을 찾고 있는 다른 사람들에게도 도움을 줄 수 있다. 다시 말해 GitHub는 포트폴리오를 구축 할 수 있는 좋은 방법이자 훌륭한 학습의 장이다. 완성된 프로젝트나 제품이 있다면 개발자는 배포 여부를 선택한다. 요즘은 소프트웨어의 종류에 따라 배포에도 다양한 방법이 있다.   소규모 팀 혹은 개인 개발자가 소프트웨어를 배포하는 가장 일반적인 방법 중 하나는 개인 웹 사이트를 통한 배포이다. 모든 기능이 잘 문서화되어 있는지 확인하고 몇몇 스크린 샷과 사용 방법에 대한 지침서도 잊지 않는다. 소프트웨어를 판매하려면 좋은 디지털 결제 시스템 그리고 소프트웨어를 배포할 서버를 구비해야 한다. 특정 장치 또는 운영 체제용 소프트웨어를 개발하는 경우, 배포를 위해 사용 가능한 디지털 저장소가 여러 가지 있다. 예를 들어 안드로이드 기기용 소프트웨어를 제작하는 경우에는 구글 플레이 스토어 (Google Play Store), 아마존 앱 스토어 (Amazon App Store) 또는 개인 웹 사이트를 통해 판매할 수 있다.
기본 소프트웨어 개발 유형을 고른다. 프로그래밍 언어를 배운다. 학습에 필요한 것을 찾는다. 관련 강의를 듣는다. 선호하는 프로젝트에 대한 작업으로 시작한다. 질문을 한다. 매일 연습한다. 계약 업무를 찾아본다. 가능한 많은 사람들과 교류한다. 정규직 직책에 지원한다. 본인의 스킬을 다양화한다. 임금에 대해 걱정하지 않는다. 아이디어를 브레인 스토밍한다. 디자인 문서를 작성한다. 프로토타입을 만든다. 반복해서 테스트 한다. 프로젝트를 마무리한다. GitHub에 프로젝트를 올린다. 본인의 소프트웨어를 배포한다.
https://www.wikihow.com/Develop-Software https://www.wikihow.com/Develop-Software https://www.wikihow.com/Develop-Software
Learning the Ropes Getting Work Developing a Program