블로그

개발자로서 갖춰야할 태도

오류오류가 났을 때 끝까지 추적하는 것이 필요하다.첫 번째 오류를 해결하다가 또 다른 오류가 발생할 때 두 번째 오류를 해결한 후 첫 번째 오류는 기억 저 멀리로 가는 경우가 종종 있었다.오류가 있지만 실행이 되는 경우가 해당 경우인데 바로 인지하지 못하기 때문에 큰 문제를 발생시킬 수 있다.임시적으로 오류를 처리하여 근본적인 원인을 해결하지 않는 경우도 있다.대충 넘긴다면 오류는 분명히 다시 발생하기 때문에 돌아간다고 방심하지말고 끝까지 오류를 해결하는 것이 중요하다. 재사용성모듈화공통적인 기능을 묶어서 중복 코드를 방지하자.유지보수 및 가독성은 덤으로 얻을 수 있다. 코드 일원화(상위) 한 곳에서 공통으로 처리하는 것을 의미한다.관점 지향 프로그래밍이나 MSA 서버 분산화를 통해 특정 서버에 책임을 일임하는 것도 해당한다. 예외다양한 예외 케이스 고려하여 코드를 작성한다.Java는 특히 null-safety한 편이 아니기 때문에 null check에 유의하자.Validation annotation 및 Optional 활용DB슬로우 쿼리를 지양하자가벼운 select 자주 일어나는 것을 인지하며,쿼리상에서 끝낼 수 있는 작업은 코드까지 가져오지 않도록 한다.ORDER BY A, B, C로 끝낼 수 있는 작업이 코드에서는 길어진다.연관 테이블까지 호출할 경우 Join을 잘 활용하자데이터가 대용량이라면 sub query로 범위를 좁히는 것이 나을 수 있다.데이터 일괄 조회 또는 일괄 변경을 유의하여 단건 처리를 지양하자.효율적이며, 트랜잭션은 짧게 가져가는 것이 안정성에서도 좋다.여러 쿼리 또는 외부 영향을 받는 작업 단위라면 트랜잭션을 잘 묶어주자.  기타오류 발생 시 디버깅부터 하자오류가 왜 발생하는지 모르겠어서 화면을 뜷어지게 응시하며 어디가 문제인지 찾는 경우가 종종 있었다.오류가 발생하면 얼른 디버깅을 실행하여 실제 값을 따라가며 어디가 문제인지 직접 확인하자.

회고태도

<도서정리> 함께 자라기 - 김창준

발전하는 조직 뛰어난 인재를 뽑는 것이 끝이 아니라 뽑은 후 교육하고 성장하게 도움을 주는 것이 중요하다. 이것은 개인의 발전과 더불어 조직의 발전을 이끈다. 더 나아가서 교육만큼 중요한 것은 시스템이다. 시스템은 훌륭한 개인을 묻힐 수도 있고 보통의 개인을 뛰어날 수 있게 하는 것이 시스템이다. 실수 예방 문화보다 실수 관리 문화가 조직 개선에 도움이 된다. 실수를 예방하려고 하면 실수를 하는 사람을 처벌하거나 실수를 부정적으로 인지하게 될 수 있다. 하지만 실수를 관리한다면 그 과정에서 실수에 대해 정확히 인지하고 어떤 부분을 보완해야할지 어떻게 대응하면 좋을지 명확히 알게 되기 때문이다. (학습의 기회) 조직에서의 심리적 안전감 : 내 생각이나 질문, 의견, 걱정, 실수가 드러났을 때 처벌받거나 놀림받지 않을 것이라는 믿음   성장하는 개인 확실한 동기와 짧은 주기의 피드백이 유의미한 성장을 유도한다. (애자일 정신 - 고객에게 매일 가치를 전하라) 자신의 업무의 과정과 결과를 기록하고 점검하면서 실수한 부분과 부족한 부분을 보완하는 것이 필요하다. 자기계발은 복리로 돌아온다.   업무에 대한 바람직한 태도 1. 학습프레임과 실행프레임 - 학습프레임은 내가 얼만큼 성장할 수 있는지에 관심을 갖는 것. - 실행프레임은 내가 성과를 낼 수 있는지 다음 단계로 갈 수 있는지. 실행프레임은 경쟁으로 시야가 좁혀지며 성장과 학습의 기회를 놓칠 수 있다   2. 내가 하는 일이 무엇인가 남이 시키는 대로 혼자 프로그램을 만드는 것이라면 "컴퓨터가 할 수 있는 일"을 잘 하는 것이다 창의적, 사회적으로 일을 할 수 없다면 자신이 어느 정도의 실력을 가졌는지 메타인지적으로 판단이 어려우며 협력하는 방법(==차별화된 능력)도 배울 수 없다.   사회 속에서 산다는 것. 1. 전문가란 무엇인가 새로운 기술을 도입할 때에는 사회적 자본과 사회적 기술이 필요하다. 새로운 기술이 도입되지 못하는 경우는 기술에 대한 이해보다 조직과 신뢰의 문제 때문일 가능성이 높다. 이 내용과 비슷한 경험이 있었다. TDD를 도입하고 싶어했던 개발자가 있었지만 TDD를 도입하는 것은 기존의 체계를 변화시킨다는 비용과 그것이 좋은 효과를 가져올지에 대한 불가피한 불확실성이 있었다. 그렇기 때문에 상사분은 TDD를 내켜하지 않으셨으며 TDD를 도입하지 않기 위해 제대로 정착될 수 없는 기한과 환경을 제시하셨다. 개인적인 오해였을 수 있지만 상사분이 보여준 태도는 새로운 기술을 도입하지 않는 것에 대해 솔직한 의견을 제시하기보다 그 과정에서 불필요한 부정적인 감정소모를 불러일으켰다고 느껴졌다. 결론적으로 TDD가 도입되지 않은 것보다 큰 문제는, 팀원들이 상사로부터 실망감을 얻은 것, 신뢰를 잃은 부분인 것이다. 이러한 일련의 사건들은 조직에 대한 애정을 점차 낮아지게 하며 업무와 조직에 방해가 된다는 것을 몸소 경험했었다. 프로젝트에서 기술과 방법론보다 어떤 사람들이 참여하는지가 중요할 수 있다. 나는 어떤 사람인가를 되돌아볼 것. 전문가는 홀로 특정 도메인 지식이 뛰어난 사람이 아니라 그와 더불어 사회적 자본과 사회적 기술이 뛰어난 사람이다. 뛰어난 소프트웨어 개발자는 타인과의 인터렉션에 더 많은 시간을 소요하며 기술적인 조언과 더불어 사회적인 조언을 제공한다. 협력은 프로젝트 영역을 나누어 각각 업무를 진행한 후 합치는 것이 아니다. 커뮤니케이션과 협동을 통해 다른 사람의 생각을 알게 되고 그림도 그려보며 코드의 추상성을 높이는 과정은 사람만이 할 수 있는 능력이다   2. 감정과 협력 이성과 감정은 분리할 수 있는 대상이 아니며 선택에 있어서 감정을 배제할 수 없다. 의사결정을 하는 과정에 감정적이고 직관적인 부분이 큰 역할을 한다. 그렇기 때문에 남을 설득하려면 논리성과 객관성에 대한 환상을 버려야한다. 상대방의 성향과 가치관, 선호도를 파악하고 상대방에게 신뢰를 얻는 것이 중요하다. 자료와 객관성과 더불어 상대가 어떤 사람인지가 중요하다.

도서조직태도