JavaRush /Java Blog /Random-KO /커피 브레이크 #83. 뛰어난 프로그래머를 구별하는 성격 특성은 무엇입니까? 간단한 프로그래밍 안내서:...

커피 브레이크 #83. 뛰어난 프로그래머를 구별하는 성격 특성은 무엇입니까? 간단한 프로그래밍 안내서: 함수 및 방법

Random-KO 그룹에 게시되었습니다

뛰어난 프로그래머를 구별하는 성격 특성은 무엇입니까?

출처: Hackernoon 훌륭한 프로그래머와 좋은 프로그래머를 구별하는 것은 무엇입니까? 나는 훌륭한 프로그래머들이 공유하는 두 가지 특성을 발견했습니다. 그것은 일관성과 끈기였습니다. 이러한 특성 자체는 천재의 징후가 아니며 원하는 경우 누구나 이러한 특성을 개발하고 작업에 적용할 수 있습니다. 커피 브레이크 #83.  뛰어난 프로그래머를 구별하는 성격 특성은 무엇입니까?  간단한 프로그래밍 안내서: 함수 및 방법 - 1

1. 일관성을 유지하라

좋은 프로그래머는 가끔 프로그래밍을 하지 않습니다. 오히려 그들은 여가 시간, 즉 퇴근 전이나 퇴근 후, 주말에 자신의 지식과 기술을 향상시키기 위한 구체적인 일정을 가지고 있습니다. 예를 들어, 내가 아는 프로그래머는 하루 중 처음 두 시간, 즉 일주일에 6일을 개인 학습 프로젝트나 작업에 보냅니다. 그런 사람들이 24시간 내내 코드를 작성한다는 말은 아닙니다. 우리 모두와 마찬가지로 그들도 개인 생활, 의무 및 관심사를 위한 시간을 갖습니다. 그러나 그들은 일관성이 있습니다. 프로그래밍이 그들의 습관이 되었습니다. 어떻게 일관성을 유지할 수 있습니까? 이것이 우리 중 많은 사람들이 달성하려고 노력하는 것입니다. 나는 이 작업을 수행하는 데 여러 가지 방법이 있다는 것을 발견했습니다. 먼저, 프로그래밍에 사용할 수 있는 주당 시간을 결정하십시오. 이 숫자가 귀하의 주간 "프로그램 마일리지"입니다. 예전에 장거리 주자였던 저는 매주 일정 마일을 달렸습니다. 이것은 나의 주간 달리기였습니다. 이제 저는 프로그래밍 경험을 갖게 되었습니다. 이것이 제가 매주 프로그래밍에 소비하는 시간입니다. 대부분의 사람들은 이 단계를 무시합니다. 그들은 어떻게 시간을 낼지 생각하지 않고 완료하고 싶은 프로젝트나 공부하고 싶은 주제로 바로 뛰어듭니다. 결과적으로 그들은 밤에 일하거나 하루에 16시간씩 일한다. 이 접근 방식에는 문제가 있습니다. 장기적으로 지속 가능하지 않습니다. 프로그래머로서 기술을 연마하는 것은 바쁜 한두 주 동안 하는 일이 아닙니다. 대신, 오랫동안 계속해서 노력해야 합니다. 이것이 바로 프로그래밍 경험을 파악하는 것이 중요한 이유입니다. 이렇게 하려면 시간 기록을 사용하여 시간을 어디서 어떻게 보내는지 확인하는 것이 좋습니다. 종이 한 장에 소셜 미디어나 이메일을 5분 동안 확인하는 것을 포함하여 매일 하는 모든 일과 시간을 적어보세요. 이렇게 하면 일정에서 빈 자리를 더 쉽게 찾을 수 있습니다. 집안일을 하거나 TV를 시청할 수 있는 약간의 추가 시간을 가질 수도 있습니다. 그런 다음 준수해야 할 프로그래밍 교육 계획을 만들 수 있습니다. 훈련 계획은 일관성을 유지하는 가장 효과적인 방법 중 하나입니다. 이를 통해 모든 세부 정보를 미리 배포할 수 있습니다. 당신이 해야 할 일은 이 계획을 매일 실행하는 것뿐입니다. 내 달리기 훈련 계획에는 매일 달리는 데 필요한 마일 수와 이를 달리는 데 필요한 속도가 명시되어 있습니다. 이제 저는 같은 목적을 달성하는 프로그래밍 운동 계획을 만듭니다. 매일 해야 할 일을 알려줍니다. 하루가 끝나면 컴퓨터에서 Evernote를 열고 다음 날의 일정을 작성합니다. 예는 다음과 같습니다.
6:30 - 8:30 - 프로그래밍
  1. Python Anki 플래시카드 데크 검토(20분)
  2. 워드 클라우드 데이터 문제를 해결합니다.
나는 근무일 내내 이 과정을 따릅니다. 나는 작업에 소비할 시간과 그 시간에 달성하고 싶은 것을 지정합니다. 월별 훈련 계획도 세웁니다. 여기에는 다음 달에 성취하고, 배우고, 완성하고 싶은 세 가지가 포함되어 있습니다. 분기별로 계획을 세우곤 했어요. 그러나 나는 3개월 만에 너무 많은 것이 변할 수 있다는 것을 깨달았습니다. 월별 계획은 훈련에서 중요한 단계를 수행하는 데 충분한 시간을 허용합니다.

2. 끈기 있게 행동하라

좋은 프로그래머의 두 번째 특성은 끈기입니다. 그들은 문제 해결을 위한 모든 옵션을 검토하고 답을 찾습니다. 이것이 비결인 것 같습니다. 내가 만난 훌륭한 프로그래머들은 문제를 분해하고 어려운 상황에 대해 다양한 솔루션이나 솔루션을 생각해내는 놀라운 능력을 가지고 있습니다. 한마디로 문제를 해결하는 시스템을 갖고 있었던 것이다. 저는 고등학교 때 솔루션 시스템이 없었습니다. 수학 시간에 문제가 나올 때마다 나는 곧바로 그 문제에 전속력으로 뛰어들곤 했습니다. 그러다가 프로그래밍을 시작하면서 이 일을 계속했어요. 계획이 없습니다. 시스템이 없습니다. 생각할 시간이 없습니다. 분석이 없습니다. 당연히 두 경우 모두 불필요하게 바퀴를 돌리고 끊임없이 장애물에 부딪혔습니다. 이제 나는 문제를 분석하여 다양한 옵션을 찾는 데 도움이 되는 문제 해결 시스템을 갖게 되었습니다. 예를 들어, 문제 해결 과정의 첫 번째 단계는 문제를 진술하는 것입니다. 이것이 첫 번째입니다. 문제를 이해한 후에는 다음 각 단계에 중점을 둡니다.
  • 입력 데이터 및 예상 결과 분석.
  • 행동 알고리즘의 생성.
  • 의사코드 작성.
  • 문제의 단순화된 버전을 해결합니다.
당신이 아이디어를 얻기를 바랍니다. 단계는 쉽지는 않지만 관리가 가능합니다. 어려운 문제를 해결함으로써 우리는 더 나은 사람이 됩니다. 자신감도 심어줍니다. 어려운 문제 하나를 해결하면 새로운 문제를 해결할 준비가 된 것입니다.

3. 문제에 대한 태도?

더 나은 프로그래머가 되기 위한 길에서 우리가 고려해야 할 또 다른 것이 있습니다: 바로 태도입니다. 문제와 모호성에 대한 새로운 접근 방식이 있어야 합니다. 어느 날 나는 선임 개발자에게 내가 막고 있는 문제에 대해 몇 가지 질문을 했습니다. 나는 당황했고 실망했다. 처음에는 개발자도 당황했습니다. 그러나 그의 대답은 나에게 충격을 주었다. “와, 그거 정말 멋진 문제구나”라고 그는 말했습니다. 그의 관심은 그가 발견한 세부 사항에 의해 자극되었습니다. 훌륭한 프로그래머도 어떤 문제에 갇히지 않는다는 말은 아닙니다. 그들은 붙어 있습니다. 그러나 차이점은 태도에 있습니다. 그날 제가 배운 교훈은 이것이었습니다. 좋은 프로그래머는 미지의 세계에 도전하는 것을 두려워하지 않습니다. 그들은 이 문제를 연구함으로써 확실히 새로운 것을 배울 것이라는 것을 이해합니다. 우리는 다른 프로그래머들을 연구함으로써 많은 것을 배울 수 있습니다. 그러나 궁극적으로 책임은 우리에게 있습니다. 우리는 매일 출근하여 조치를 취해야 합니다.

간단한 프로그래밍 안내서: 함수 및 방법

출처: DZone 무엇이 좋은 기능이나 방법을 만드는가? 이를 위해서는 각 요소의 조합이 필요하며, 각 요소는 중요합니다. 그 중 가장 중요한 네 가지를 살펴보겠습니다. 커피 브레이크 #83.  뛰어난 프로그래머를 구별하는 성격 특성은 무엇입니까?  간단한 프로그래밍 안내서: 함수 및 방법 - 2

의미있는 이름

함수에는 그 목적이나 기능을 설명하는 이름이 있어야 합니다. 함수에 의미 있는 이름이 있으면 그 목적을 읽고 이해하기가 쉽습니다. 예를 들어 함수의 목적이 ID로 고객을 찾는 것이라면 findCustomerById(id: String) 과 같은 이름이 적합할 수 있습니다 . 또 다른 옵션은 findCustomer(id: String) 일 수 있습니다 . 여기서 함수 서명은 구매자가 자신의 ID로 발견됨을 의미합니다. '찾다'라는 단어는 구매자를 찾을 수도 있고 찾지 못할 수도 있음을 의미합니다. 함수 이름이 getCustomer(id: String) 로 변경되면 이제 롤백이 없음을 의미하므로 의미가 변경됩니다. 클라이언트가 발견되었거나 함수가 실패하여 예외가 발생할 수 있습니다. 두 이름 모두 함수의 유효한 이름이지만 의미가 다르므로 구현도 달라야 합니다.

가능한 한 적은 매개변수

나는 3의 법칙을 따르는 것을 좋아합니다. 이는 함수에 3개 이하의 매개변수가 있어야 함을 의미합니다. 함수에 3개 이상의 매개변수가 필요한 경우 함수를 다시 작성하고 매개변수를 해당 클래스, 데이터 클래스, JavaScript 개체 등과 같은 데이터 홀더에 배치해야 합니다. 이는 매개변수 수를 줄이고 애플리케이션 내에서 데이터를 구성하는 쉬운 방법입니다. 동작은 동일하지만 서명이 다른 함수를 예로 들어 보겠습니다.
fun addCustomer(
  firstname: String,
  lastname: String,
  streetAddress: String,
  city: String,
  zipCode: String
)
또 다른 옵션은 다음과 같습니다.
data class Address(
  val street: String,
  val city: String,
  val zipCode: String,
  val streetNumber: String
)

data class Customer(
  val firstname: String,
  val lastname: String,
  val address: Address
)

fun addCustomer(customer: Customer)

함수가 예상한 대로 수행됩니다.

함수는 기대되는 일을 수행해야 합니다. 그 이상도 이하도 아닌. 함수 이름이 findAddress(latitude, longitude) 인 경우 주어진 좌표에서 주소를 찾아야 하며, 주소를 좌표로 변환할 수 없는 경우 None , null , Empty 또는 주어진 언어에 적합한 유형을 반환해야 합니다. 이 함수는 근처 주소를 검색하거나 좌표 기록을 작성하는 등 다른 작업을 수행해서는 안 됩니다. 함수에는 로깅이나 분석과 같은 부작용이 있을 수 있지만 이러한 부작용은 입력 및 출력에 표시되지 않습니다.

기능을 테스트할 수 있습니다.

기능은 테스트할 수 있도록 설계되어야 합니다. 이전 코드 예제에서는 addCustomer 함수를 정의했지만 반환 유형을 정의하지 않았으므로 테스트 가능성이 의심됩니다. 물론 내부 구현이 어떤지에 따라 모의 또는 스파이를 사용하여 테스트할 수 있습니다. 이는 간단히 반환 유형을 제공하여 달성할 수 있습니다.
fun addCustomer(customer: Customer): Customer
이 함수 서명을 사용하면 추가된 클라이언트 엔터티를 호출된 구성 요소에 반환할 수 있습니다. 또한 함수가 이 클라이언트 개체에 대해 수행해야 하는 작업을 수행하는지 확인할 수도 있습니다(즉, 고유 식별자 할당).
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION