학교에서 일반적으로 가르치지 않는 전문 프로그래밍에 필수적인 기술은 무엇입니까? [닫은]


14

저는 1 학년 컴퓨터 과학 전공입니다. 나는 직업 박람회에 갔다, 이력서를 나눠줬다. 놀랍게도 나는 인터뷰를 받았으며 결국 개발자로서 인턴쉽을 받았다.

나는 면접관 (내 상사가 될)에게 내가 첫해에 불과하고 프로그래밍 경험이 많지 않다고 설명했다. 그는 수학에 대한 강한 배경을 가지고 있기 때문에 (나는 수학 학사 학위를 거의 받았으며 벨트 아래에 대학원 과정이 있습니다) 그는 내가 잘 할 것이라고 확신합니다.

나는 모든 프로그래밍 과정에서 잘하지만 여전히 불이익을 느낀다. 지금은이 일이 시작될 때 정말 잘하고 싶습니다. 이 작업은 주로 C #을 사용하지만 C #을 배우는 것 외에도 실제 프로그래머가되기 전에 배울 수있는 기술은 무엇입니까?

어떤 조언이라도 대단히 감사하지만, 마음에 드는 책이 있으면 알려주세요. 감사!


8
이 질문은 여러 가지 방법으로이 사이트에서 여러 번 요청되었습니다. 먼저 검색 한 후 문의하십시오. FAQ를보십시오; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/…
tgkprog

3
나는 수색을했고 두 가지 질문을 모두 보았다. 그러나 저는 학습 디자인이나 웹 개발에 관심이 없습니다. 나는 많은 프로그래머들이 학교에서 실제로 배워야 할 느낌을 배우는 것에 관심이 있습니다. 그 질문에는 훌륭한 조언이 있지만 내가 찾고있는 것은 아닙니다. 감사합니다
Eric

+1 풀 타임 프로그래머가되기 전에 내가 마스터 할 수있는 한 가지 기술은 강력한 수학 기술입니다. 수학 기술은 문제를 해결하고 새로운 개념을 배우고 프로그래머로서 대부분 내가 매일 할 일입니다.
Anthony

3
워크 플로우. 그리고 그 코드를 실현하는 것은 유니콘 고유의 눈송이가 아닙니다. 설계 할 때 놀랍게도 최소화하는 원리를 적용하십시오. 당신이하기 전에 생각하십시오. 복잡성 관리는 매우 중요한 측면이됩니다.
sleeplessnerd

1
저는 실제로 강력한 수학 기술을 가진 사람들과 일하는 것을 좋아하지 않습니다. 소프트웨어 엔지니어링 원칙을 적용하는 대신 모든 것을 수학 공식으로 바꿉니다. 소프트웨어는 수학이 아닙니다. 이해하기 쉽도록 코드를 작성해야합니다.
Rob K

답변:


21

학교에서는 코드 작성에 대해 배웁니다. 배우지 않은 것은 소프트웨어 개발의 나머지 부분입니다. 학교에서 전혀 배우지 못한 것들은 :

  • 개발팀의 일원으로 활동
  • 버전 관리 사용
  • 버그 추적기 사용

이것들은 모든 개발자에게 매우 중요한 기술이며 불행히도 교실에서 얻을 수는 없습니다.


4
개발 팀의 일원으로 일하는 것은 미묘하고 복잡한 예술입니다. 왜 버전 제어 및 버그 추적이 항상 새로운 개발자의 주요 장애물로 구성되어 있는지 이해할 수 없습니다. 그것들은 확실히 중요한 도구이지만 새로운 사람에게 매뉴얼 페이지, O'Reilly 책 또는 온라인 자습서를 가리키면 몇 시간 만에 빵과 버터 사용법을 선택할 수 있습니다. 왜 그런 시간에 교실 시간을 낭비하겠습니까?
Charles E. Grant

1
@ CharlesE.Grant 버전 제어는 비교적 짧은 시간에 기본 사항을 줄일 수 있다는 점에서 프로그래밍과 유사하지만 효과적으로 사용하려면 경험이 필요합니다. 그리고 git 및 Mercurial과 같은 DVCS는 svn과 같은 CVCS보다 이해하는 데 더 많은 시간이 걸립니다.
이즈 카타

8
나는 확립 된 코드 (개발 팀의 일원으로 일하는 것의 주요 부분)를 유지하는 수업을 한 적이 없었으며, 코드를 테스트하는 방법에 대한 교실 경험은 최소였습니다.
Velociraptors

1
@ CharlesE.Grant : 저는 수년간 프로그래밍 및 관련 주제에 관한 대학원 수준의 과정을 가르쳤습니다. 대학원생조차도 왜 어떤 종류의 개정 관리 시스템을 사용해야하는지 이해하기가 어렵습니다. 그리고 그들이 열심히 사용하기 시작할 때, 그들은 매우 빨리 혼란스러워하는 것 같습니다. 배우지 못한 중요한 주제로 올려서 Mason에게 +1했습니다.
Peter K.

1
각 포인트 당 하나씩 +1 +1 +1. 그들이 당신에게 이런 것들을 가르치지 않을 정도로 너무 어리 석거나 적어도 당신을 가르치려고 시도하십시오.
Radu Murzea

20

저는 경력 초기에 개발자로서 비즈니스 에서 매우 중요한 역할을한다는 것을 알고 싶습니다 . 나는 단순한 코드 원숭이가 아닙니다.

개발자는 작업중인 소프트웨어와 관련된 비즈니스 부분에 큰 도움이됩니다.

회사에서 코드 테스트를 작성하지 않으면 지금 테스트 작성을 시작하십시오.

그들이 버그를 추적하지 않는다면, 지금 적절한 버그 추적기를 찾으십시오.

상사가 스프레드 시트 앱의 스플래시 화면을위한 멋진 애니메이션 작업을 즉시 시작하길 원하지만 수십 개의 버그를 수정하고 다음 고객 릴리스 마감일 전에 완료되지 않은 몇 가지 중요한 기능이 있다면 작업의 우선 순위를 올바르게 지정하는 것에 대한 대화를 나누십시오 .

"일반 직원"이라하더라도 컨설턴트처럼 행동하는 것은 코드를 작성하고 비즈니스에 관심이있는 것처럼 행동하지 않는 다른 개발자와 차별화하는 좋은 방법입니다.


9

우리 학교는 문제 해결 방법을 가르쳐주지 않았습니다. 그들은 나에게 코딩의 역학을 가르쳐 주었지만 문제를 연구하고 이해하고 해결책을 제시하는 것은 그들이 가르치지 않은 것입니다. 프로그래밍 언어에 대한 이해와 더불어 인내심, 엄격함 및 직관력이 필요합니다.

또한 팀워크, 버전 관리 및 유지 관리가 쉬운 코드 작성의 중요성에 대해 설명하지 않았습니다. 또한 소프트웨어를 테스트하는 방법에 대해서는 많이 가르치지 않았습니다. 그들은 단위 테스트를 다루었을 수도 있지만 수용 테스트, 회귀 테스트 등의 개념을 너무 많이 탐구하지는 않았습니다.

면책 조항 : 나는 80 년대에 대학에 갔다. 그러나 나는 오늘날의 고용인, 즉 버전 제어, 테스트, 깨끗한 코딩, 디버깅 기술 등 프로그래밍의 실제 세계에 대한 지식이 거의없는 신입생과 함께 이것의 증거를 본다.


테스트 파트의 경우 +1 우리 대학에서는 그들도 가르치지 않습니다. 나는 선생님이 단위 테스트를 언급 한 1 수업 (예 : 1)을 가졌습니다 ... 약 3 분 동안. 그게 다야.
Radu Murzea

나는 이것이 늦게 반응한다는 것을 알고 있지만 그것은 내 수학 학위를 고용주들에게 어필하게 만든 것들 중 하나였습니다. 이 견해는 고용주들 사이에서도 분명히 공유됩니다.
Eric

많은 학교에서 알고리즘 (일명 "문제 해결")은 제대로 가르치지 않거나 전혀 가르치지 않거나 프로그래밍 언어로 적용하는 방법을 배우지 못합니다.
umlcat

흠 .... 당신의 대답은 내가 경험 한 것과 더 반대 될 수 없습니다. 학교의 요점은 배경을 제공하여 효과적으로 문제를 연구하고 이해하며 해결책을 제시 할 수 있도록하는 것입니다. 새로운 졸업생은 학교 밖에서는 신선하지 못하지만 반드시 훈련을 받아야합니다. 우리 학교에서는 프로그래밍을 전혀 가르치지 않았습니다. 코스가 가르쳐 주려는 정보를 배우면서 프로그램하는 방법을 스스로 배워야했습니다. 그래서 당신이 그들이 "코딩의 역학"을 가르치는 곳은 저 너머입니다.
Dunk

... 괜찮은 학교에서는 단순히 코딩하는 법을 배우는 것에 대한 크레딧을 얻지 못합니다. 버전 관리를 사용하는 것이 어려운 경우, 어느 정도의 학교 교육도 도움이되지 않는 훨씬 더 심각한 문제가 있습니다. 유지 관리하기 쉬운 코드를 작성하는 확실한 방법을 찾게되면 책을 쓰고 부자가 되십시오. 아무도 그 문제를 아직 해결하지 못했습니다. 테스트를 위해 프로그램을 제출해야하는 학교의 부품을 놓 쳤어 야합니다. 수락 / 회귀 테스트는 산업별로 다르며 학교가 아닌 회사 방식으로 업무를 수행하는 것이 더 좋습니다.
Dunk

7

제 생각에는 학교에서 배우지 않았거나 제대로 배운 것이없는 가장 중요한 것들은 다음과 같습니다.

  • 올바르게 사용하는 방법과 IDE; 최신 IDE의 모든 기능을 사용하면 자동 리팩토링, 코드 탐색, VCS 통합, 코드 분석, 코드 완성 등 생산성이 크게 향상됩니다.
  • 디버거를 올바르게 사용하는 방법 : 원격 디버깅, 멀티 스레드 응용 프로그램 디버깅, 빠른 평가 등
  • 버그 수정 및 유지 보수; 대학에서 그들은 이것에 대해 거의 아무것도 가르치지 않지만 산업에서는 버그를 수정하는 것이 일반적입니다.
  • 큰 팀과 큰 프로젝트에서 일하는 방법; 기본적으로 대학에서는 프로젝트가 대규모 산업 프로젝트에 비해 규모가 작습니다.
  • 좋은 코드를 작성하고 가독성을 강조하는 방법; 이것은 경험과 함께 제공되지만 기본 사항 (Code Complete, Clean Code 등)을 가르쳐주는 책이 있습니다.
  • 프레임 워크를 커스터마이징하여 최대한 활용하는 방법; 대학에서는 아마도 아주 기본적인 시나리오에서 몇 가지 프레임 워크를 사용하는 방법을 배웠을 것입니다. 업계에서는 코너 케이스에 도달합니다.
  • 사양 후 코드를 이해하고 작성하는 방법; 사양을 작성하는 방법을 배우 겠지만 이제는 사양을 읽고 해석하는 방법을 배우게 될 것입니다

VCS, 버그 추적 시스템, 빌드 툴 등은 팀과 협력하기 위해 반드시 배워야 할 툴입니다. 그들은 기본적인 수준에서 배우는 데 많은 시간을 필요로하지 않으며, 그 후 (최소한 처음에는) 매우 간단합니다. 위의 목록에는 알려진 경우 생산성을 높이는 미묘함이 포함되어 있습니다.


일명 "프로그래밍"은 프로그래밍 언어를 아는 것이 아니라 "환경", "생태계", "프레임 워크"가 있습니다.
umlcat

4

내가 새로운 졸업생들에게서 잃어버린 것 중 가장 큰 것은 버전 관리를 잘 이해하는 것입니다.

소스 코드 리포지토리 (예 : GitHub )를 사용한 오픈 소스 소프트웨어 개발 경험이 있다면 most동료 클래스 동료 보다 한 발 앞서 있습니다.

두 번째는 복잡성에 대한 이해입니다 ( big O). 대학 외부의 대부분의 사람들은 그것에 대해 들어 왔지만 아직 실제 소프트웨어를 개발하지 않아서 실제 중요성을 이해하지 못하고 있습니다.

데이터 세트가 너무 커서 무차별 대입이 절대로 절단되지 않고 다른 기술에 대한 이해가 유용하고 상황에 대해 무차별 대입이 좋은지 추측 할 수 있다면 경험과 실수로 개발하는 것입니다.


1
버전 관리 교육의 부족이 바뀌기 시작했다고 생각합니다. 우리 학교에서는 버전 관리가 크게 강조되었습니다.
Southpaw Hare

@SouthpawHare : 나는 그것이 존재하지 않는다고 말하지 않고, 심지어 내 하루에도 그것을 가르쳤다. 이 경험을 가진 대학에서 온 사람들이 여전히 소수에 불과합니다. 그리고 그것을 가진 사람들은 더 가치가 있습니다. 지난 20 년 동안 많은 변화가 있었다는 데 동의합니다.
Martin York

3

제대로 디버깅하는 방법, 특히 디버거를 사용하고 버그를 해결하기위한 적절한 접근 방법 (예 : 원인을 파악하고 원인을 파악한 후 문제를 해결하기보다는 솔루션이 문제를 해결하는 이유를 이해)

대부분의 컴퓨터 과학 졸업생들은 디버깅에 놀랍도록 열악하므로 결과적으로 필요한 것보다 수정하는 데 훨씬 오래 걸리고 더 많은 버그를 만듭니다.

버전 제어, 버그 추적 등과 같은 다른 것들도 언급 할 가치가 있지만 디버깅에 대한 합리적인 접근 방식의 부족은 더 큰 문제이며 더 많은 학습이 필요한 문제입니다.


2

실제 프로그래머가되기 전에 배울 수있는 기술은 무엇입니까?

경험상 학교에서 문제 해결 방법을 가르쳐주지 않았습니다.

내 경험상 프로그래밍은 문제 해결에 관한 것입니다. 우리 학교에서는 구문 오류없이 프로그램을 작성할 수 있는지 여부 만 확인했습니다. 실제로 필요한 것은 입력으로 제공되지 않습니다. 구문은 필요한 경우 모든 책에서 찾아 볼 수있는 것입니다. 그러나 문제를 해결하는 능력은 당신이 잘 연습하고 스스로 훈련하는 것 외에는 어디에서나 달성 할 수 없습니다.

어떤 유형이든지 가능하면 최대한 많은 질문을 작성하여 자신감을 가지십시오. 당신의 마음에 약간의 열정을 가지고 그것을 시도하십시오, 당신은 반드시 통과 할 것입니다.


2

공장, 싱글 톤, 어댑터, 커맨드 및 옵저버와 같은 일반적인 디자인 패턴을 배우기 위해 시간을 내십시오.

회사가 소프트웨어 개발에 애자일 방법론을 사용하는 경우 소프트웨어를 이해하는 것이 중요합니다.


2

전문 프로그래머로서 필요한 많은 기술은 대학 / 학업 환경에서 거의 불가능합니다.

그들은 현장에서 직접 일한 경험에서만 얻을 수 있습니다.

  • 그래픽 디자이너, 제품 디자이너, 관리자 등과 같이 "직업"외부의 사람들과 협력하고 의사 소통하는 방법을 배웁니다.

  • 업무가 코드를 작성하는 것이 아니라 제품을 구현하는 것임을 이해합니다. 말보다 쉬웠다.

  • 실질적인 고려 사항과 우수한 코딩 방법의 균형을 유지하는 방법 코드가 "충분히", "과도하게 엔지니어링 된"또는 "리팩토링이 필요한"시기를 판단하는 능력을 얻습니다.

  • 자신의 약점과 불안을 극복하는 법을 배웁니다. 비판을 견딜 수있는 능력을 얻습니다. 자존심을 놓아주세요. 개인적인 책임을지고 이해하는 것이 무엇을 의미하는지 배우십시오.

이 모든 것에 대해 쉽게 읽을 수 있습니다. 실제로 이것을 실천하는 것은 완전히 다른 것입니다. 유일한 방법은 그렇게하는 것입니다. 당신은 여러 번 물릴 것이고, 아마 상처를 입을 것이지만, 더 강하고 나아질 것입니다.

관련 독서 : 도제 패턴


1

그것은 모두 학교에 달려 있습니다. 우리 대학에는 실용적인 프로젝트가 많이 있습니다. 팀과 다양한 소스 컨트롤을 사용하는 경우가 많습니다. 그래서 일부 학교는 그 학교에 초점을 맞추고 있다고 생각합니다.

그러나 학교가 가르치지 않는 것은 세부 사항입니다. 학교가 웹 개발, JAVA UI 개발, 고급 데이터베이스와 같은 일부 기술이나 실습을 가르 칠 때 종종이 기술을 사용하거나 실제 비즈니스에서 연습하는 데 필요한 표면을 긁어 내고 세부 사항으로 들어 가지 않습니다. 문제를 해결하는 방법에 대한 일반적인 개요를 얻을 수 있지만 필요한 세부 사항을 스스로 알아야합니다.

학교가 무언가를 자세하게 가르 칠 때만 무언가 뒤에 강한 수학적 또는 이론적 배경이있을 때입니다. 공식 언어 나 SQL 데이터베이스와 같은 것은 학교 교육 과정의 핵심 부분입니다. 수학 기반으로 만들어졌으며 컴퓨터 과학이나 공학 분야에서 많이 사용되기 때문입니다.


1
  • 요구 사항-그들을 틀리게하고 휴식은 대부분 낭비입니다
  • 우선 순위 (어느 릴리스에 어떤 기능이 있는지)
  • 즉시 사용 가능 (구매 / 프리웨어)
  • 팀워크
  • 프로젝트 관리-요구 사항, 품질 (제품 데이터, 테스트 사례, 테스트 방법, 코딩 전 적용 범위, 비용과 유사하지만 관련이 없음 PMI 책 읽기
  • 커뮤니케이션 도구 (메일, 회의 : 일정 계획자)
  • 소스 코드 관리

0

나는 전체 프로그래머가되고 싶었는지, 많은 다른 것들, 언어, 데이터베이스 및 플랫폼을 배우고 결국 웹 개발자가되는지, 아니면 하나의 CMS를 전문화해야하는지 여부를 게임의 초반에 결정했으면 좋겠다. 또는 Photoshop을 전문으로하고 전문가가 되더라도 실력있는 프로그래머가 알아야 할 것을 아는 것만큼이나 귀중하고 수익성도 있습니다. 다시 말해, 좋은 돈을 벌어야한다면 ONE THING 전문입니다. 컴퓨터를 좋아하고 문제를 해결하는 것을 좋아한다면 프로그래머가 되십시오.

[JQuery가 실제로 강하게 나오기 전에 자바 스크립트에서 4 ~ 5 개의 서로 다른 자바 스크립트 'frameworks'를 배우고 다시 생각 해본 후 JAVA에서 인증을 받고 절대 Java 위치를 얻지 못하고 여러 플랫폼에서 작업 한 후; AS400-RPG,> .NET-C # 및 PHP는 방금 포토샵을 마스터하고 버그를 수정하거나 소프트웨어를 작성하지 않고도 동등한 돈을 벌기를 원하기 전에. ]

넓은 범위의 주제를 아는 데는 어느 정도 만족이 있지만, 포토샵 현금을 아는 사람이 같은 월급을받는 것을 보면 만족감이 흐트러집니다.


2
그렇습니다. 그러나 그런 종류의 전문가는 결코 자신의 가게를 열지 않을 것입니다. 미래에 언젠가 자신의 스타트 업의 CEO가 되려는 꿈이라면 막대한 기술이 필요합니다.
Davor Ždralo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.