프로그래머로 어려움을 겪고 있습니다. 조언이 필요합니다.


20

나는 몇 년 동안 지금 개발자였습니다. 나는 내가하는 일에 능숙하며 "일을 끝낼 수있다".

그러나 "작업 수행"과 "작업 수행"사이에는 차이가 있습니다. 예를 들어 봅시다.

최근에 처음부터 웹 사이트를 개발했습니다. 웹 사이트가 정상적으로 실행되고 문제가 없었습니다. 코드를 살펴보면 더 잘 할 수 있다고 생각했습니다. MySQL 쿼리를 줄일 수있었습니다. 확장하기 쉽도록 MVC를 사용할 수있었습니다 (지금 확장해야 함).

CodeIgniter를 사용하여 프로젝트를 다시 작성하기로 결정했습니다. 나는 틀을 좋아한다. 그러나 MySQL 쿼리를 줄이려면 고급 조인을 배워야했기 때문에 부수적이었습니다.

그리고 이것이 문제입니다. 내가 제대로 일을 할 때마다 나는 끊임없이 학습하는 바퀴에 있습니다. 그리고 고급 MySQL 조인과 같은 주제는 학습하는 데 시간이 걸리고 구현하는 데 시간이 걸립니다.

저는 회사에서 일하지 않습니다. 나는 모든 것을 혼자한다. 따라서 회사의 PHP 개발자로 일하고 있다면 SQL을 처리하는 별도의 팀이있을 것이라고 생각합니다.

솔로이기 어렵다. 때로는 지식이 발전하더라도 질문 후에 스스로 질문을합니다. 아마 내 작품에 자부심이 많을 것입니다. 그러나 완전한 프로젝트를 처리하는 회사에서 일해야한다면 자존심을 만족시키고 "올바른"일을하기 위해 점점 더 많은 것을 배워야하므로 시간이 오래 걸리는 프로젝트를 상상할 수 있습니다.

나는 새해 후 취업을 계획하고 있습니다. 직업 보안이 필요합니다. 이것이 내가이 질문을하는 이유입니다.

자기 계발 및 자기 개선 측면에서 어떤 조언을 해 줄 수 있습니까? 덜 걱정해야합니까? 아니면 SQL 쿼리를 직접 처리하지 않을 때 PHP 개발자로 직업을 찾으십시오.


54
당신은 당신이 잘못된 필드에있는 학습을 끊임없이하고 싶지 않은 경우

6
@JamesGuvnaJeffery : 프로젝트 기간 동안 학습을 위해 시간을 전혀 허용하지 않으면 개발자로서 자신의 개선을 멈출 것이기 때문에 거기서 일하고 싶지 않습니다.
Marjan Venema 2016

3
직업은 학습이며, 그들은 당신에게 공부하기 위해 마법의 시간을주지 않습니다. 실제로 그들은 그것을 "개인 시간"이라고합니다. 그들은 아무 이유없이 "직무 교육"이라고 부르지 않습니다. 내가 말했듯이, 자기 주도 학습자가되고 무상으로 배우는 것이 편하지 않다면 아마도 잘못된 분야에있을 것입니다.

5
오래된 코드는 빨려 야합니다. 너 자신을 죽이지 마라. 시간이 지남에 따라 개선하려고합니다. 작업중인 프로젝트를 다시 작성하는 것은 거의 의미가 없습니다. 고객은 추가 비용을 지불하지 않습니다. codinghorror.com/blog/2006/10/…
Job

2
당신은 내가 말하는 것을 얻지 못합니다. 회사에서 일하는 것은 당신이 좋아하는 것을 당신이하고있는 것의 정확한 반대입니다. 그것은 다른 사람들의 일정을 계획하고 있으며, 그들이 지시 한 내용과 그들이 타협하지 않고 자신의 시간에 새로운 것을 공부할 시간이 없으며, 개인적인 시간에 배운 새로운 흥미 진진한 것들로 일을 수행 할 시간이없는 시간으로 그것을 지시하는 방법을 사용하고 있습니다. 이것이 기업 소프트웨어 개발자가되는 현실입니다. 익숙한 실험적 연구 개발 스타일에 대해 말한 것처럼 기업 환경에 전념하는 것이 의심됩니다.

답변:


33

조언 : 새로운 것을 배우는 것을 두려워하지 마십시오. 당신은 더 잘할 수 있다는 것을 인정하는 첫 걸음을 내딛고 더 잘할 수있는 방법 을 배우기 위해 노력했습니다 . 예, 더 많은 시간이 걸리지 만 일반적으로 그 대가는 그만한 가치가 있습니다. 이제 CodeIgniter를 알게되었으므로 다음 차후 프로젝트에 사용할 수 있습니다. 당신은 당신의 이력서에 넣을 수 있습니다. 이제 고급 SQL 기술을 알고 있으므로 향후 프로젝트에 도움 이 될 것입니다. 학습을 중단하면 정체됩니다.


21

당신이 겪고있는 일은 나에게 매우 정상적인 소리입니다. 이것이 우리가 공예 작업을하고 우리가하는 일을 더 잘하게 만드는 방법입니다.


10

... CodeIgniter를 사용하여 프로젝트를 다시 작성하기로 결정했습니다. 나는 틀을 좋아한다. 그러나 MySQL 쿼리를 줄이려면 고급 조인을 배워야했기 때문에 부수적 이었습니다.

그리고 이것이 문제입니다. 내가 제대로 일을 할 때마다 나는 끊임없이 학습하는 바퀴에 있습니다. 그리고 같은 고급 MySQL은 같은 주제는 걸릴 조인 시간 학습을 한 다음 시간을 구현하는 ...

위에서 주어진 것처럼, 나는 당신이 미리 계획하고, 작업 대기열을 설정하고 우선 순위를 정하고, 시간을 관리하는 능력을 향상시키는 데 집중하는 것이 합리적이라고 생각합니다.

실제로, 이것은 당신의 태도에서 빠진 유일한 것 같습니다. "사이드 트래킹"이라고하는 것은 본질적으로 계획, 우선 순위 지정 및 대기열에 넣어야하는 또 다른 작업 ( "고급 조인 학습")입니다.


감사합니다 @gnat. 이 긍정적 인 반응에 정말 감사합니다. 당신이 한 말에 반항적으로 동의 할 수 있습니다.
James Guvna Jeffery

9

이 분야의 전문가가되는 것은 자신의 부적합에 대해 끊임없이 자신을 부수는 것입니다. 월요일에서 금요일까지 8-5 일을하십시오. 마감 시한이 다가오고 주말이 좋으며 월요일에 더 많이 방문 할 경우 더 많은 정보를 얻을 수 있습니다. 그게 직업입니다.

소프트웨어를 만들려면 특정한 겸손이 필요합니다. 당신이 옳 아야하고 누군가가 이미 모든 것을 알고 있음을 증명해야하는 사람이라면, 이것은 당신에게 해당되지 않을 수도 있습니다.

나는 매일 무언가를 배우지 않을 수는 없습니다. 나는 그 일을 원한다고 생각하지 않습니다.


내 경험은 당신이 위장 부전을 일으킬 수있는 한, 옳은 사람이어야한다는 것입니다. 나는 완벽하지 않은 모든 작은 것들에 대해 스스로를 차 버립니다. 그래서 시간이 지남에 따라 더 잘하는 것입니다.
Tom Anderson

글쎄, 그것은 역설이 아닌가? Hubris는 프로그래머의 세 가지 미덕 중 하나입니다. 그러나 내 경험상, "배우기 전에 모든 것을 이미 알고 있음을 보여줌으로써 현명하다는 것을 증명하기 위해 강박 적으로 몰두하는 것"은 신인 개발자가 놓치거나이 분야에서 오래 가지 않는 경향이 있습니다.
Dan Ray

아마도 포기하지 않고 스로틀을 돌려야할까요? 나는 오래 전에 다행스럽게도 내가하지 않은 것을 알고 있다고 선포하는 습관을 잃었습니다. 그러나 나는 여전히 일을 모르는 것을 인정하는 것을 싫어합니다. 내가 아는 것과 내가 알고 싶은 말 사이의 격차를 좁힐 필요는 나를위한 원동력입니다. 모두를 위해 반드시 그런 것은 아닙니다!
Tom Anderson

모르겠어요, 톰 당신이 무언가를 아직 모르는 것은 당혹스런 순간처럼 그것을 배우는데 소비 할 수있는 순간 인 것 같습니다. 나는 다음 사람만큼 알고 싶어하지만 "모르겠다"고 말하는 데 전혀 문제가 없습니다.
Dan Ray

6

혼자있는 것은 어렵다. 반대로, 개발자 팀과 함께 일할 때 모든 사람이 서로 배우고 있습니다. 팀의 일원으로서 다른 개발자와 협력하여 많은 지식을 습득하고 모든 것을 스스로 알아낼 때보 다 훨씬 적은 노력을 기울입니다.

즉, 개발자는 끊임없이 학습해야합니다. 새로운 프레임 워크에 대한 문서를 읽든지, 개발에 관한 책을 읽고 있든, 지식을 최신 상태로 유지하고 계속 발전 시키려면 지속적인 노력을 기울여야합니다. 그러나 팀의 일원이되면 특정 시점에서 가장 알아야 할 영역을 명확하게 알 수 있습니다.

이전 코드를 다시 방문하고 다시 작성하는 것에 대한 요점과 관련하여 내 코드는 항상 내가 작성한 시점에서 내가 아는 것 중 가장 좋은 것을 나타냅니다. 여러 해 전에 몇 년 전에 쓴 글로 돌아가서 내가 지금 알고있는 것을 감안할 때 내가 얼마나 잘 할 수 있었는지 볼 때 이마에 몸을 때리십시오 . 그러나 그것은 경험의 본질입니다. 필요한 후에 그것을 얻습니다 ...

마지막으로, 응용 프로그램을 개발할 때는 항상 좋은 비즈니스 감각이 필요하고, 더 빨리 마무리하기 위해 모서리를 자르는 것이 가장 좋은시기, 디자인과 품질을 향상시킬 수있는 새로운 것을 배우는 데 더 많은 시간이 필요한 경우를 결정해야합니다. 응용 프로그램의. 소프트웨어 세계에는 많은 것들이 있습니다. 그런 종류의 훌륭한 판단력을 행사하지 않으면 학습, 사고, 재 설계, 바퀴 달린 바퀴를 돌릴 수 있지만 아무것도하지 않습니다.


두 번째 문장 +1 나는 책 (책이나 온라인)에서 배운 것보다 많은 다른 조직에서 일하면서 동료들로부터 더 많은 것을 배웠습니다. 팀에서 한동안 일하는 것과 같은 질문에서 당신은 좋은 세상을 만들 것입니다.
Dawood는 Monica Monica를

3

나는 당신의 우려가 타당하다고 생각하지만 그 이상 잠을 풀지 않아야합니다. 기술자가 되려면 다음과 같은 수하물이 포함되어 있다는 것이 제 믿음입니다.

  • 끊임없이 새로운 것을 배워야합니다. 당신은 이것을 사랑하는 법을 배우거나 사랑하지 않습니다.
  • 여러분이 알고 싶어 할 수있는 것보다 더 많은 것들을 마스터하고 싶을 것입니다.
  • 프로젝트 중 원하는 프로젝트 중에 기술을 개발하게됩니다.
  • 결과적으로, 당신은 항상 그 프로젝트로 돌아가서 다시하고 싶을 것입니다. 더 나은 것으로 알고있는 것을 공개하는 것은 매우 어렵습니다.

결국, 그것은 당신이 배울 수없는 양질의 소프트웨어를 만드는 것에 관심 이있는 것 같습니다 . 완벽한 솔루션을 구축하여 고품질 솔루션 구축을 차별화해야합니다. 마치 당신이 나인 것처럼 들리며 완벽하다고 느끼지 않을 것입니다. 자신과 업무를 개선 할 기회 가 없다고 느끼면 더 큰 문제가 될 것입니다.

모든 거래의 대가가 되기는 어렵지만 (아무도 마스터하지 않음) 가장 흥미롭고 유용한 것을 식별하고 그에 집중하는 방법을 알아 내야합니다. 다른 사람의 작업을 다른 사람이나 도구 에 "아웃소싱"하는 가장 좋은 방법을 찾으십시오 .


2

"정확하게 수행하는 것"에 대해 걱정할 필요가 없다고 생각합니다. 완벽을 추구하지만, 처음부터 완벽한 솔루션을 설계하는 것은 실제로 불가능하다는 것을 깨달으십시오. 이 질문을 올바르게하기 위해 충분히 걱정하는 것은 이미 올바른 길을 가고 있다는 것을 의미합니다.

새로운 것을 배우는 것에 대한 당신의 좌절에 관해서는, 나는 그룹에서 일하고 다른 프로그래머와 문제를 묻고 토론 할 수 있다는 것이 내가 배우는 것이 무엇인지 알아내는 고통을 제거하고 그것을 기쁨으로 대체한다는 것을 발견했습니다. 새로운 것을 발견하고 적용하는 방법을 배웁니다.

저는 소프트웨어 작성을 좋아하지만 때로는 새로운 무언가를 실제로 배우는 것이 아니라 실제로 원하는 것을 달성하기 위해 배우는 것이 무엇인지 정확히 찾는 데 어려움이 있습니다.

내가 이해 한 바에 따르면, 나는 당신과 비슷한 입장에있었습니다. 혼자서 무언가를 코딩하는 것은 때때로 실망스럽고 어려울 수 있으며, 다른 때는 보람 있고 다소 재미있을 수 있습니다.

당신이하려는 일을 정확히하고, 팀의 일원이 될 직업을 찾으십시오. 동일한 기술을 사용하고 동일한 소프트웨어를 디자인하는 다른 사람들과 협력하면 거의 매일 밤 해당 기술과 디자인 패턴에 대한 이해와 적용이 확장됩니다.

처음에 올바른 일을하는 방법을 아는 것에 관해서는, 이미 처음으로 특정 방법을 수행하지 않았다면 더 좋은 방법이 있다는 것을 어떻게 알 수 있습니까? 소프트웨어 디자인 기술은 종종 경험에 크게 의존합니다. Joel Spolsky는 소프트웨어의 천재이지만 많은 기사를 읽으면 경험과 지능의 결과라는 것을 알 수 있습니다.

SQL 부분은 .NET 개발자로서 전용 데이터베이스 개발자가있는 곳에서는 아직 작업하지 않았지만 모두 자체 SQL을 작성하지만 종종 SQL을 능숙하게 도와주는 개발자가 있습니다. 더 깊이있는 것들로.

당신은 똑똑한 사람처럼 들리는데, 나는 당신이 스스로 그렇게 열심히해야한다고 생각하지 않습니다.


1

이것은 완전히 정상이며 너무 걱정해야 할 것이 아닙니다. 새로운 기술을 지속적으로 배워야하지만 시간의 우선 순위를 정하고 관리하는 법을 배워야합니다. 또한 불필요한 재개발의 함정을 피해야합니다.

경험이없는 프로그래머는 종종 재개발 함정에 빠지게됩니다.

이 프로그램을 완벽하게 작성하지는 않았으므로 이제 확장하거나 변경해야합니다. 내가 작성한 방식으로 인해 기존 코드를 수정하는 것은 많은 작업이 될 것입니다. 그 이후로 훨씬 더 많은 것을 배웠습니다. 가장 좋은 것은 전체 프로그램을 다시 작성하는 것입니다. 이번에는 더 잘 쓸 수있을 것입니다.

이 논리에는 몇 가지 잘못된 점이 있습니다.

  • 기존 코드를 수정하거나 추가하는 것이 많은 작업이지만 모든 것을 다시 작성하는 것이 더 많은 작업이 아닙니까?
  • 모든 것을 다시 쓰면 새로운 버그가 생길 가능성이 높으며 생각보다 시간이 오래 걸립니다 (특히 경험이없는 경우). 시스템 작성과 관련된 모든 것을 고려하고 있습니까? (처음으로 걸린 시간을 기억하십시오)
  • 원래 프로그램을 작성한 이후로 많은 것을 배웠으므로 (그래서 향상시킬 수있을 것입니다), 다음 달 / 연도에 더 많이 배울 것입니다. 앞으로 어떤 시점에서 모든 것을 다시 작성하고 싶지 않다고 생각하는 이유는 무엇입니까 ?
  • 프로그램의 궁극적 인 테스트는 그것이 작동 한다는 것 입니다. 더 좋은 일이 없습니까?

재개발을 계획하고 계획하는 것은 결코 아프지 않을 것입니다. 즉, 프로그램을 다시 작성하는 방법을 고려하고 발생할 수있는 문제를 식별하십시오. 이 경우 이제 필요한 '고급 SQL 조인'을 식별 한 후 작동 방식을 조사하고 이에 대해 학습합니다.

계획을 통해 (개발을 시작하지 않고) 고급 조인 지식 격차를 식별하지 않았다면 계획 기술을 향상시켜야합니다. 계획의 어느 부분이 충분하지 않은지 생각해보십시오. 전체 시스템이 기술적으로 가능하다는 것을 확신 할 때까지 필요한만큼 자세히 설명해야합니다.

이 방법을 사용하면 미리 배울 수 있습니다 .

마지막으로, 직업 학습은 프로그래밍의 정상적인 부분입니다. 그러나 이것이 작업을 시작한 다음 기본 HTML에 대해 배우기 위해 일주일 동안 중단해야한다는 것을 의미하지는 않습니다. 당신은 무언가에 대해 배우기 위해 몇 시간 동안 멈출 수 있지만 고용주는 그 일을 끝내기 위해 돈을 지불하고 있습니다. 효율적으로 배우십시오-소개와 역사를 읽지 말고 작동 방식과 프로그램에 어떻게 적용되는지 확인하십시오. 프로그램의 일부를 완료하는 방법을 배우기 위해 며칠 동안 일을 중단해야한다면 잘못하고있는 것입니다.


1

새로운 기술과 문제를 배우는 것이 시간 낭비라고 생각할 수도 있습니다. 그러나 당황하지 마십시오. 정상입니다. 그것은 배우는 프로그래머로서의 연습의 일부입니다. 그렇지 않으면 우리는 모두 COBOL에 갇혀있을 것입니다.

프리랜서 전문가는 그에 따라 커미션을 조정하고 학습 기간 은 많은 시간 중 예상 시간을 고려해야하는 요소입니다. 다음에 새로운 프레임 워크를 도입하기로 결정할 때는 충분한 시간을 들여 학습 할 계획을 세우십시오.


0

그러나 "작업 수행"과 "작업 수행"사이에는 차이가 있습니다.

아니요, 없습니다. 문제의 근원은 여기에 있습니다. 개별 개발자로서 다른 사람들이 어떻게 작동하는지 보지 못하기 때문에 '정확하게'일을 걱정하는 것에 너무 매달린 것 같습니다. 그러나 정확히 누구에 따라? 당신이하고있는 일이 '정확하다'고 선언하는이 마술적인 사람은 누구입니까? 세계 최고의 프로그래머 중 100 명을 데려가십시오. 저는 모든 프로그래밍 주제에 대해 100 %가 동의하지 않을 것을 보증합니다.

궁극적으로 중요한 것은 고객이 행복하다면입니다. 작성한 프로그램이 문제를 해결하고 비용 효율적인 방식으로 수행하는 경우 올바르게 수행하는 것입니다. 예를 들어, 고유 프레임 워크를 사용하는 것보다 codeigniter를 사용하는 것이 더 정확하지 않습니다. 그에 대한 추론은 쓰레기 더미를 생산하는 경우 프로세스 또는 모범 사례에 관계없이 잘못하고 있다는 것입니다.

코드를 다시 방문하고 코드를 개선 할 수있는 방법을 찾는 것은 개발 프로세스의 일반적인 부분입니다. '올바로'일을하지 않았다는 신호는 아닙니다. 학습과 개선에 전념한다는 표시입니다. 내가 당신의 게시물에 보이는 모든 것에서 문제가 없습니다.

이제 좀 걷자 * * *


나는 이것에 동의하지 않습니다. 다른 방법보다 훨씬 유지 관리가 쉽고 쉽게 읽을 수있는 프로그래밍 방법이 있으며, 더 나은 코드를 작성할 수 있도록 프로그래머를 개선하기위한 서적이 많이 있습니다.
TehShrike

@grandmasterB 감사합니다. TehShrike, 그리고이 책들에 대한 언급?
James Guvna Jeffery

3
" 모든 프로그래밍 주제에 대해 100 %는 동의하지 않을 것 "-적어도 80 %는 프로그래밍 주제의 80 % 이상에 동의 할 것입니다. 그것은 전문적인 합의입니다. 절대적인 '권리'는 없지만 모범 사례가 있으며 알 가치가 있습니다.
Kirk Broadhurst

1
모든 것이 좋고 좋지만 프로그램이 문제를 해결하지 못하면 모범 사례 또는 그렇지 않은 경우 잘못 수행되었습니다. 프로그램이 올바르게 수행되었는지 알 수있는 하나의 객관적인 방법이 있습니다. 고객이 작업에 대한 대가로 녹색 용지 나 기타 지불금을 넘겨주는 경우입니다. 다른 조치는 단순히 의견입니다.
GrandmasterB

2
그리고 고객이 변경에 대한 견적이 과도하다고 생각하고 코드가 잘못 작성되어 다른 감정을 확인하는 다른 전문가를 찾으면 일을하지 않습니다.
JeffO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.