프로그래밍을 거꾸로 배우거나 FizzBuzz 테스트에 실패했습니다. 이제 무엇?”[닫은]


94

작은 배경

저는 28 살이고 소프트웨어 개발에 대한 공식 교육을받은 적이 없지만 홍보 학사 학위와 프로젝트 관리에 중점을 둔 경영학 석사 학위와 동등한 2 개의 고등 교육 학위를 보유하고 있습니다. 나는 그 분야에서 약 6 년 동안 일했고, 2,5 년 전에는 직장을 그만두고 길을 바꾸기로 결정했습니다.

한 달 동안 생각을 한 후 WordPress에서 소규모 웹 사이트를 개발하기 시작했습니다. 나는 그것에 대한 내 방식을 스스로 배웠고 오늘 나는 내 고객을 위해 처음부터 테마와 플러그인을 개발하는 겸손하지만 성공적인 경력을 운영 할 수 있다고 말할 수 있습니다.

그러나 때로는 충분한 수학을 공부하지 않았거나 공식적인 내용을 이해하지 못하면 경험이 많은 개발자와 경쟁하거나 일해야 할 때 실제로 나를 뒤지지 않습니다. 나는 더 많은 것을 배울 수있는 방법을 끊임없이 찾고 있지만 기초가 부족한 것 같습니다.

불행히도 Computer Science에서 4 년을 더 투자하는 것은 현재 선택 사항이 아니므로 서적과 온라인 자료에서 가능한 모든 것을 배우려고 노력하고 있습니다. 이 방법은 NASA가 나를 고용하게하지는 않지만 지금은 상관하지 않습니다. 저의 목표는 먼저 변호사를 통과시키고 자신을 진정한 프로그래머라고 부를 수있는 것입니다.

나는 현재 여가 시간을 Java For Programmers (모든 사람이 어렵거나 요구하는 언어를 잡기 위해)를 배우고, Code Complete의 발췌 부분을 읽고 (모범 사례를 잡기 위해) 코드 : 숨겨진 컴퓨터 언어 하드웨어 및 소프트웨어 (컴퓨터 내부 작동 파악)

TL; DR

따라서 현재 상황은 다음과 같습니다. 기본적으로 Ajax, SQL 및 기타를 통합하여 PHP로 모든 시스템을 작성할 수 있으며 (Ajax, SQL 및 기타 기능을 통합 할 수 있음) 숙련 된 개발자가 예상하는 것보다 약간 느릴 수 있습니다 관련된 모든 연구로 인해.

그러나 나는 내가 가지고 있지 않았기 때문에 FizzBuzz 테스트를위한 솔루션을 (Google이 아닌)을 알아 내려고 어제 좌초 된 if($n1 % $n2 == 0) 방법의 나머지 연산자 기억을.

이 딜레마를 해결하는 좋은 방법으로 무엇을 제안 하시겠습니까? 문제를 더 빨리 , 그리고 아마도 "프로그래머 방식으로" 해결할 수있는 어떤 주제 / 책을 공부해야 합니까?

편집 -FizzBuzz를 해결하기 위해 몰랐던 것에 대해 약간의 혼란이 있었던 것 같습니다.

어쩌면 나는 자신을 올바르게 표현하지 못했을 수도 있습니다. 문제를 해결하는 데 필요한 단계를 알고있었습니다. 내가 암기하지 않은 것은 모듈러스 연산자였습니다. 문제는 기본 수학을 모르는 상태에서 기본 수학을 프로그램으로 바꾸는 데있었습니다.

Coding Horror 에서 읽은 후 재미를 테스트했습니다 . 방금 저와 공식적으로 훈련 된 개발자 사이의 좋은 비교 기준이었습니다.

방금 컴퓨터 환경에서 수학을 다루지 않은 방법의 예로 이것을 사용하여 간단한 문제를 해결할 수있는 모듈러스 연산자와 같은 기본 사항을 찾는 데 시간을 허비했습니다.


63
내가 이것을 읽었을 때 이것을 이것을 I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)모르고 당신과 결합 if($n1 % $n2 == 0)시키면 PHP로 작성된 것에 노출 된 것에 대해 궁금합니다. 나는 당신이하는 대부분의 일이 간단한 모듈로 계산을 넘어서는 것이라고 생각합니다. 당신이 할 수 있다고 생각하는 것에 대해 좀 더 통찰력을 줄 수 있습니까?
phant0m

10
나는 또한 스스로 가르치는 프로그래머입니다. 지금은 10 년 넘게 지금까지 모든 웹에있었습니다. 그 당시에는 웹 개발 수업이 없었습니다 ... 나는 스스로 배우는 것이 약간의 이익이라고 생각합니다. 기본적인 OO 원칙과 디자인 패턴에 대해 배우고 싶을 것입니다. 그들은 당신이 문제를 공격 할 때 당신의 머리 뒤쪽에 그것들을 갖도록 도와 줄 것입니다. 나는 일반적으로 다른 사람들이 가진 어휘를 항상 가지고 있지는 않지만, 코딩을 즐기고 우아한 솔루션을 쓰는 것을 즐기면 결국에는 당신이 원하는대로 길을 코딩 할 수있을 것입니다
hanzolo

56
stuck b/c I didn't memorize %문제 와 관련하여 다른 방법이 있음을 주목할 가치가 있습니다. ($ n2! = 0이라고 가정) if (is_int ($n1 / $n2))또는 if (($n1 / $n2) == (int) ($n1 / $n2))키워드를 아는 것이 중요하며 기본 제공 솔루션이 없을 때 기본 아이디어를 표현하는 방법을 아는 것은 다른.
grossvogel 2016 년

18
트윗 담아 가기 Fizzbuzz를 좋아하는 이유 중 하나는 해결할 수있는 방법 이 너무 많기 때문입니다. 모듈러스 연산자를 알고 있는지 확인하는 것은 단순한 트릭이 아닙니다. 핵심 프로그래밍 기술 중 하나는 문제가 지식 / 도구 / 자원 등에 가장 적합한 형태로 기술 된 형태에서 문제를 번역하는 능력입니다.
octern

18
모듈러스 연산자를 모르는 것이 FizzBuzz를 실패한 이유는 아닙니다. 빠진 것이 있으면 해결해야합니다.
Loren Pechtel 2016 년

답변:


144

귀하의 경우에, 당신은 자율적이고 이미 학습에 대한 훌륭하고 건강하며 BS가없는 접근법 인 것처럼 보입니다. 여전히 몇 가지 제안 ...

연습은 완벽합니다

다음과 같이 프로 게밍 연습에 뛰어 들어야한다고 생각합니다.

주변의 알려진 대학 또는 지역 (또는 원격) 프로그래밍 경연 대회의 과거 시험 문제도 파악할 수 있습니다. 예를 들어, 프랑스에서 고등학교 프로그래머를 야심 찬 것에 대해 좋은 것을 가지고 있습니다 .Prologin 이며 매년 좋은 일련의 헤드 스크래핑 퍼즐을 제공합니다 (아마도 프랑스어 일지라도 미안하지만 그게 내 뜻입니다. ).

알아 보기 : 프로그래밍 퍼즐과 도전을 어디서 찾을 수 있습니까?

고전 서적 및 참고 문헌

우리는 또한 매우 긴 놀라운 목록을 추천 할 수 있지만, Zen의 대답은 깨달음에 대한 올바른 방법이 없다는 것입니다.

어느 것이 목록의 최상위인지를 말하기는 어렵습니다. 따라서 올바르게 수행하는 것처럼 피해야 할 일반적인 함정과 모범 사례를 배우기 위해 많은 자료를 계속 읽으십시오.

이상:

한계를 뛰어 넘다

또한 다음과 같은 헤드 스크래치 자료를 찾으십시오.

오늘날해야 할 일의 모범으로 여겨 질 필요는 없지만 그곳에서 무슨 일이 일어나고 있는지 알아 내려고 노력할 가치가 있습니다.

동료 시스템은 동기 부여

다음 커뮤니티를 둘러보고 참여하여 다른 사람들과 대면하여 기술을 점진적으로 향상시킬 수도 있습니다.

아르바이트 교육

다른 4 년제 과정 또는 이와 유사한 활동에 참여할 시간이나 동기가 없다면 (어쨌든 불필요하고 값 비싸거나 비싸지 않을 수도 있음) 온라인으로 자료를 가르치는 것을 고려할 수 있습니다. 물론, 이것들은 컴퓨터 과학에만 국한되지 않습니다.

최초의 MIT OpenCourseWare 노력 덕분에 많은 대학들이 따라 왔으며 많은 대학 수준의 코스 자료를 무료로 찾을 수 있습니다. 항상 직접 탐색하고 읽는 것이 쉽지는 않지만 일부는 잘 수행됩니다. 처음부터 시작해서 꽤 높이 올라가려면 칸 아카데미 도 살펴보십시오 .

일부는 조금 더 나아가서 온라인 강의를 무료로 제공하는데, 여기서 강의 자료에 액세스 할 수 있지만 강의와 정기적 인 자체 평가도 제공합니다. 예를 들어 Coursera 또는 Udacity를 방문하십시오 .

위의 대부분은 종종 Youtube 또는 iTunesU에 강의를 게시하므로 지식에 대한 갈증이 이전의 모든 링크에 의해 이미 해결되지 않은 경우 많은 자료를 찾을 수 있습니다.

"실제"대학교에 더 가까운 경험을 제공하는 것을 원한다면, 원격 대학교를 고려할 수도 있습니다.이 대학교는 또한 파트 타임으로 일할 수 있지만, 진도를 따르고, 자기 평가와 종료를 모두 요구합니다. OpenUniversity 및 국제 변형과 같은 1 년 시험 (때때로 현장) .

열정은 당신을 계속합니다

  • 애완 동물 프로젝트 찾기 : 자신 만의 프로젝트를 만들거나 하나 이상의 기존 소프트웨어 프로젝트에 참여하여 기여하십시오.
  • 코드, 코드, 코드. 그런 다음 좀 더 코딩하십시오.

(그리고 당신을 비판하고 다른 관점을 사로 잡기 위해 코드를 보면서 충분한 안구를 확보하십시오)

프랑스 인의 말 :

C'est en 위조 한 que l' on devient forgeron.

하고있는 일을 계속하면 결국 전문가가됩니다. 시간과 노력이 필요합니다.

추가 제안 사항은 문제가있는 학습 을 참조하십시오 .


추신 : 인터뷰를위한 매우 논란의 여지가있는 도구이고 좋은 후보자를 식별하는 데 도움이되지는 않지만, 저는 종종 FizzBuzz를 사용하여 최소한 "나쁜 것들"을 제거합니다. 이 연습 문제에 착취하십시오! :)


3
C'est super ça! :) 목록을 가져 주셔서 감사합니다. 프로젝트 오일러와 퍼즐은 매우 멋져 보입니다. 그리고 나는 이미 다른 SE 사이트를 사용하고 있습니다. 그것에 뛰어들 것이다.
moraleida 2016 년

@ moraleida : 당신이 대답을 좋아 기쁘게 생각합니다. 천만에요.
haylem

당신의 PS에 관하여 : 나는 직원으로 돌아가고 싶지 않기 때문에 지금 인터뷰에 대해 걱정하지 않습니다. Coding Horror에서 읽은 후 재미를 테스트했습니다. 방금 저와 공식적으로 훈련 된 개발자 사이의 좋은 비교 기준이었습니다. :)
moraleida 2016 년

4
FizzBuzz가 마지막 에 사용 되는지에 대한 +1 ... 너무 자주 나는 여기 또는 회사에서 슈퍼 코더를 식별하기 위해 그것을 사용한다고 가정하기 때문에 그것을 비판하는 사람들에 대한 블로그에 의견을 볼 수 있습니다. (그 회사들에게 : 당신은 잘못하고 있습니다!)
Izkata

1
이것은 일부 링크에 나열되어 있지만 콜 아웃이 필요하다고 생각합니다 . rosettacode.org 도 둘러 보십시오 . 많은 프로그래밍 언어에서 해결 된 다양한 문제가 있습니다. 코드를 읽는 것만 큼 중요한 코드를 읽는 것이 좋으며 같은 문제를 해결하기위한 다양한 방법을 볼 수있는 좋은 방법입니다. 그리고 당신이 알고 있거나 배우고 싶은 언어로 아직 해결되지 않은 문제를 발견한다면, 그것은 바로 당신에게있어 어려운 과제입니다.
Mark Reed

60
I didn't have the if($n1 % $n2 == 0) method memorized.

나는 아주 오랫동안 코딩을하지 않았지만 (약 27 개월 전에 SQL을 가르치기 시작했고 약 20 개월 전에 Perl에서 코딩을 시작했습니다) 위의 인용문은 이전 학생들로부터 들었던 것 같습니다.

모든 문제에 사용할 통합 기술을 어떻게 암기해야합니까?

나는 확률을 더하거나 곱해야하는지, 아니면 "n choose k"를 사용하거나 계승을 사용해야하는지 기억하지 않았다.

잠깐만! 당신은 x가 어제 2와 같다고 말했습니다! 이제 0과 같습니까?!

좋아, 마지막 것은 아마 조금 가혹했을 것입니다 ...하지만 내가하려고하는 요점은 문제 해결이 암기가 아니라는 것 입니다. 그렇다면 어떤 천재는 모든 문제를 해결하기 위해 컴퓨터를 프로그래밍 할 수 있었으며 우리 중 누구도 다시는 생각할 필요가 없었습니다.

이제 지적 노력은 적어도 약간의 암기로 구성되는 것이 사실입니다. 특히 PHP로 코드를 작성하려는 경우 기본 데이터 형식 (숫자, 문자열, 배열)과 함께 수행 할 수있는 기본 작업 (숫자 : 더하기, 빼기, 곱하기, 나누기 및 모듈러스; 문자열 : 연결, 부분 문자열, 대체 및 최소한 정규 표현식에 대한 지식; 배열 : 연결, 요소에 대한 태킹, 요소 스 플라이 싱, 루핑, 계산 요소 등) 및 사용할 수있는 기본 논리 구조 (if / then / else 문, foreach 루프, while 루프 등).

그런 다음 문제점이 발생하면 문제점을 사용하여 필요한 도구에 대한 컨텍스트를 제공하십시오. FizzBuzz의 경우 숫자를 3, 5 또는 15로 나눌 수있는 시점을 알려야합니다. 자, 우리는 숫자를 다루고 있습니다. ... 한 정수를 다른 정수로 나눌 수있는 시점을 알려주는 기본 도구는 무엇입니까? 모듈러스 연산자입니다. 그래서 그것을 사용하십시오. (물론, 당신의 숫자가 인 경우 $n, 당신은 공상하고 마지막 숫자 $n가 0 또는 5인지, 및 / 또는 숫자 $n가 3으로 나눌 수있는 것에 더해 지지만 나는 벗어날 수 있습니다 ...) 1에서 100 사이의 각 숫자에 대해이 작업을 수행하여 카펠 터널을 얻지 않으려면 foreach루프를 사용하십시오 .

이야기의 사기는 한편으로는 "기본적으로 PHP로 완전한 시스템을 작성할 수 있습니다"라고 말하고 다른 한편으로는 FizzBuzz를 코딩 할 수 없다면 첫 번째 주장이 잘못되었다는 것입니다. 저의 미적분학 학생들 중 일부는 개념을 이해했다고 맹세했지만 시험 문제 나 숙제 문제, 퀴즈 문제는 할 수 없었습니다. 그들은 그들의 이해에 대해서도 틀렸다.

변명을 멈추고 기초를 배우십시오.


6
나는 암기하지 않고 신진 대사를 통해 이러한 것들을 직관의 일부로 만듭니다. 항상 그 확장을 추구하십시오.
ncmathsadist

@ncmathsadist-그렇습니다. 직관을 확장하는 것이 중요하지만 직관조차도 몇 가지 매우 기본적인 개념과 사실을 암기해야합니다.

레코드의 경우 숫자에 3을 곱한 다음 숫자를 더하여 3으로 나눌 수 있는지 확인하지 않아도 숫자를 추가 할 수 있습니다. 예를 들어, 864, 8 + 6 + 4 = 18은 3으로 나눌 수 있으며 864도 있습니다.
Oztaco

@ leaf68-h! [슬랩 이마] 당신은 절대적으로 정확합니다 ... lemme 편집!

27

FizzBuzz가 장난감 문제라고 생각할 수도 있습니다. 실제 프로그램에서 모듈러스 연산자를 언제 사용해야합니까? 그러나 실제로는 항상 사용합니다. 세 가지 일반적인 예 :

  1. 테이블을 표시하고 있으며 다른 행에 대해 서로 다른 배경색을 원합니다. 행이 짝수인지 확인하고 ( row_number % 2 == 0) 짝수 행과 홀수 행에 대해 하나의 색상을 표시합니다.
  2. 반복하는 객체 모음이 있고 행당 N 개의 객체가있는 테이블을 인쇄하려고합니다. 줄 바꿈을 추가 할 때의 기준은 (item_number % N == 0)입니다. 나는 그 정확한 언어에서 조건 if item_number % N == 0이 동등한 ( if item_number|divisbleby: N) 로 작성 되었지만 실제로이 정확한 행동 에 대한 SO 질문을했습니다 .
  3. 효율성 때문에 그룹이 특정 크기에 도달 할 때만 커밋되는 트랜잭션으로 그룹화하려는 여러 작업을 수행하고 있습니다. Google 데이터 API를 사용하고 있고 각 작업에 대해 새 트랜잭션을 만들기 위해 HTTP 헤더 / 인증 오버 헤드를 원하지 않기 때문에 50 개의 작업 그룹으로 일괄 처리 할 수 ​​있습니다. 또는 데이터베이스에 레코드를 저장하고 있고 적당한 크기 일 때 트랜잭션을 커밋하려고합니다. 같은 것 if cur_item_number % 50 == 0 then commit_data.

물론이 모든 일을하는 다른 방법이 있습니다. 그러나 모듈러스 연산자를 사용하거나 float 나누기와 integer 나누기를 비교하지 않고도 fizz 버즈를 수행 할 수 있습니다. 예를 들어, FizzBuzz의 경우 다음 의사 코드와 같은 작업을 수행 할 수 있습니다.

div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
    if(div_by_3_rem == 0 && div_by_5_rem == 0) {
       print "FizzBuzz"
    } elif(div_by_3_rem == 0) {
       print "Fizz"
    } elif(div_by_5_rem == 0) {
       print "Buzz"
    } else {
       print i
    }
    div_by_3_rem += 1
    div_by_5_rem += 1
    if(div_by_3_rem == 3) {
       div_by_3_rem = 0
    }
    if(div_by_5_rem == 5) {
       div_by_5_rem = 0
    }
}

결론적으로 언젠가 훌륭한 프로그래머가되고 싶다면 언어 책을 배우지 마십시오. 그렇습니다 .PHP / Java 책은 구글 / 스택 오버 플로우 및 반 작업 프로그램에서 다른 것보다 훨씬 빠르게 답변을받을 수있게합니다. 그러나 실제로 양질의 최적의 프로그램을 작성하고 프로그래머처럼 생각하는 방법을 알기 위해서는 실제 CS 책에 약간의 노출이 필요합니다.

컴퓨터 프로그램구조 및 해석 (Scheme-Lisp 방언을 가르 칠 것임) 의 유명한 예제 또는 Think Python 과 같은 다른 방법으로 프로그래밍 언어와 CS 배경을 소개하는 CS 책으로 시작하십시오. 컴퓨터 처럼 생각하는 방법 과학자 (내가 읽지 않은). 이 두 가지 모두 온라인에서 무료입니다.

이 무료 온라인 알고리즘은 무료이지만 좋은 알고리즘 책을 읽어야합니다. 최고의 CLRS 알고리즘 (무료 아님)CLRS를 구입할 수는 있지만 저렴한 비용으로 교체 할 수 있습니다. 알고리즘 책은 컴퓨터 문제를 해결하는 방법을 배우고 다양한 데이터 구조 (배열 / 링크 된 목록 / 힙 / 바이너리 트리 / B- 트리 / 해시 테이블)와 최적의 사용 방법을 알아야하는 중요한 알고리즘을 소개합니다. . 모든 증거를 암기하거나 모든 알고리즘 (피보나치 힙을 사용하는 사람)을 완벽하게 작성하는 방법을 알 필요는 없습니다. 그러나 두 개의 중첩 된 for 루프가 O (N ^ 2)임을 직관적으로 알아야합니다. 비교 정렬은 최고 O (N lg N)이고 이진 검색은 O (lg N)이며 O (N)에서 중앙값을 찾을 수 있습니다. 하드 디스크 데이터베이스가 B- 트리를 사용하는 이유 등). 최소한 알고리즘 책에 대한 강력한 지식은 Google / Facebook 다양성에 대한 기술 프로그래밍 인터뷰에 도움이 될 것입니다. 프로그래밍 서적을 읽을 때 단순히 훑어 보거나 읽지 마십시오. 당신'

CS 및 알고리즘 책을 습득 한 후 소프트웨어 엔지니어링 (Code Complete 또는 Pragmatic Programmer)에 대한 책을 추천합니다.이 책은 유지 관리가 가능한 좋은 코드를 작성하는 방법에 대한 모범 사례를 알려줍니다 (명칭, 필요할 때만 설명). 코드를 함께 유지하고 필요한 경우 리팩터링하고 버전 관리를 사용하십시오.


4
아직 최고의 의견; 많은 사람들이 연습, 연습, 연습을하는 것을 보았습니다. 연습은 그들이 말한 것을 완벽하게하지만 나쁜 행동 만 강요합니다. OP에게 : 다른 개념에 자신을 노출시키고, 버블 정렬보다 퀵 정렬이 선호되는 이유를 알아보십시오. 완벽한 연습 만이 완벽합니다. CS 과정을 듣습니다.
Pieter B

2
예제 코드를 게시 해 주셔서 감사합니다. 이미 직접 작성해야한다고 생각했습니다. – NAND 게이트 만 사용하여 복잡한 논리 회로를 구축 할 수 있습니다. 튜링이 완료된 간단한 조작이 거의없는 언어가 있습니다. 우리는 문제를 해결하기 위해 멋진 운영자가 필요 하지 않습니다 . 문제를 해결하는 것은 단지 올바른 도구를 아는 것만으로 문제를 해결할 수 있으며 자신의 지식에 맞는 솔루션을 찾는 것이 프로그래머를 만드는 것입니다.
찌를

22

그러나 나는 if ($ n1 % $ n2 == 0) 메소드가 기억되지 않았기 때문에 어제 FizzBuzz 테스트 솔루션을 찾으려고 노력했습니다 (Google이 아님).

아무도 그 것을 기억 하지 않습니다 . 당신은 스스로 그것을 생각해 내야합니다. 모듈러스 연산자와 그 기능을 알고 있다면 FizzBuzz 문제에 아주 적합합니다.

나는 여기서 사지로 나가서 일반적으로 문제가 PHP라고 제안합니다. 저는 자바가 설계 한 최악의 언어이고 PHP는 최악의 언어라고 말하고 싶습니다. 제작자조차도 설계되지 않았 음을 인정하기 때문입니다. 환경이 실제로 수행하지 않는 방법에 대한 정의 인 경우 훌륭한 소프트웨어 엔지니어링 방법을 배우기는 어렵 습니다. 그리고 모든 것을 끝내기위한 프레임 워크에 따라 많은 말을하지 않습니다.

나는 현재 여가 시간을 Java For Programmers 공부하고 있습니다 (모든 사람이 어렵거나 요구하는 언어를 배우기 위해)

Java는 존재하는 가장 쉽고 최악의 언어 중 하나입니다. 가비지 수집 수동 상속은 한 가지만 있습니다. 친구 나 조언자가 Java가 어렵다고하면 새로운 친구를 찾으십시오. C ++은 많은 개념을 포함하는 어려운 언어이며, 누구도 이의를 제기하지 않습니다. 적어도 일부 제네릭과 람다 가있는 C #을 수행 할 수도 있습니다 .

코딩 할 수없는 사람들이 언어를 디자인하고 구현했을 때 코딩하는 법을 어떻게 배우고 있습니까?


14
@moraleida : 사용하지 않은 연산자의 구문을 찾는 데 부끄러움이 없습니다.
DeadMG

2
@ moraleida :이 경우에는 실제 문제가 없다는 데 동의합니다. 나는 당신이 당신의 의도가 무엇인지 명확하게 표현할 수 있다면, 다른 언어의 정확한 구문에 손가락을 넣을 수 없다면 전문가, 면접관 또는 다른 사람은 신경 쓰지 않을 것이라고 생각합니다.
haylem

5
대부분의 요점에 동의했지만 왜 Java를 '최악의 언어'로 생각합니까? 나는 Java의 열렬한 팬은 아니지만 매우 의견이 많습니다.
Casey Kuball 2016 년

7
-1 질문과 관련이없는 경우 bash PHP를 무례하게하는 변명으로 질문을 사용했습니다.
StasM 2016 년

1
@ Darthfett : 나는 그것에 대한 에세이를 쓸 수 있습니다. SO C ++ 채팅으로
오시면

11

FizzBuzz를 알아 내기 위해 좌초 된 이유를 열심히 살펴 봐야한다고 생각합니다. 따라서 주어진 $n숫자로 나누는 연산자가 있다는 것을 기억했다고 가정 해 봅시다 . 그리고 당신은 그것이 무엇인지 잊어 버린 불운이 있습니다. 좋아, 다른 방법으로 진행해 보지 않겠습니까? 코드에 대해 아는 것이 있다면 다른 방법으로 코드를 찾을 수 있어야합니다. 예를 들어 배열에 5의 배수를 모두 넣은 다음 $n그중에 있는지 확인하는 것과 같이 일부는 이상하게 보일 수 있으며 나쁜 해결책이지만 여전히 해결책입니다. 그러나 당신은 당신이 아무것도 없다고 말하고 있습니다. 더 큰 문제의 증상 일 수 있습니다.

프로그래밍에는 학습해야 할 두 가지가 있습니다.

  1. 트릭의 가방. PHP에서 파일을 읽는 방법, Java에서 XML을 구문 분석하는 방법, Python에서 데이터베이스에 연결하는 방법 어떤 사람들은 그것을 암기하지만 실제로는 매일 사용하는 경우에만 암기 할 가치가 있습니다. 그렇지 않으면 문서로 이동하여 찾아보십시오. 이것들은 문자 그대로의 형태를 제외하고 어떤 물질도 가지고 있지 않습니다-당신은 단지 특정 마법의 주문이 어떻게 들리는 지 그리고 결과가 무엇인지 알아야합니다.
  2. 사고. 이것이 가장 중요한 것입니다. 이것은 당신이 프로그래밍하는 방법이며, 이것은 암기와 관련이 없습니다. 컴퓨터에 원하는 작업을 설명하는 방법, 수행 방법 및 특정 경우에 사용할 방법을 이해해야합니다. 이제 현대적인 도구와 현대적인 문서가 제공되면 "간략한 기법"접근 방식을 사용하여 PHP로 CMS 전체를 작성할 수 있지만, 미리 준비된 솔루션이없는 작업이 발생하면 "고착"된 것입니다.

당신의 설명은 첫 번째 부분에서 시작한 것처럼 보이지만 두 번째 부분에서는 다소 부족합니다. 좋은 CS 과정은 일반적으로 많은 도움이되지만 유일한 방법은 아닙니다. 다른 문제를 해결하고 이러한 문제를 해결하는 방법에 대해 읽으면서 여기에 인용 된 기본 책을 읽으면 도움이 될 것입니다. 프로그래머의 사고 방식을 알게되면 새로운 기술을 사용하는 것이 큰 문제가되지 않는다는 것을 알게 될 것입니다. 물론 여기저기서 구글을 검색해야하지만 결코 좌초되지는 않을 것입니다.


1
“이러한 문제를 해결하는 방법에 대해 읽으십시오” – 실제로 동일한 문제에 대해 다른 솔루션을 살펴보십시오. 그들 각각을 이해하고 공통점이 무엇인지, 다르게 행동하는지 비교하십시오. 이러한 것들을 이해하면 동일한 문제에 대해 다른 사고 방식을 자동으로 선택하게됩니다.
찌를

나는 사고 방식에 전적으로 동의 할 것이다. 일단 사고 방식과 개념을 이해하면 기본 언어 구성을 배우는 것이 훨씬 쉬워지며 당연히 일을 수행하는 대체 방법을 생각하기 시작합니다. (fizzbuzz와 마찬가지로, 5로 나눌 수있는 모든 숫자는 5 또는 0으로 끝나므로 해당 부분의 계수 피연산자가 필요하지 않습니다)
JohnP

9

당신은 다른 것을 잘하는 방식으로 개발을 잘합니다 : 연습. 프로그래밍 세계에는 코드 kata 라는 멋진 개념이 있습니다 . 이것은 본질적으로 상대적으로 작은 문제에 대한 솔루션을 코딩하고, 좋은 점과 나쁜 점을 분석하고, 모두 폐기하고 다시 수행하는 연습입니다. FizBuzz는 자체적으로 카타입니다. 따라서 더 많은 일을하십시오. 아주 좋지 않은 것 또는 효과가없는 것을 발견하면 조사하고 철저히 조사하십시오. Q & A 사이트에서 질문하고, 기사와 블로그를 읽고, 다른 사람들이 어떻게이를 처리 하는지 배우고 배운 내용 을 연습하십시오 .

이 연습을 수행하는 동안 필요한 추가 수학 / 이론적 배경을 배우게됩니다. 머리를 감쌀 수없는 개념에 부딪 치면, 개념과 필수 지식을 읽고 사례를 확장하기 위해 코스 또는 무엇을해야하는지 결정하십시오. 이론적 배경.


1
이 코드 카타도 굉장한 것 같습니다!
moraleida 2016 년

8

... if ($ n1 % $ n2 == 0) 메서드가 기억 나지 않았기 때문입니다.

나는 당신이 모듈러스 연산자에 대해 알지 못했거나 기억하지 않았다는 것을 해석하고 있습니다. 이 경우 시작하는 장소는 사용중인 언어로 언어 구성을 검토하는 것입니다. 당신이 '감기'를 모르는 것을 검토하고, 당신이 모르는 것을 배우십시오.


4
+1. 다른 답변은 더 나은 장인이되는 방법에 대해 이야기하지만 실제로 어떤 도구가 존재하는지 아는 것이 더 중요합니다. 쉽게 밖으로 깨진 나사를 제거하려고 ? 그것에 대해 갈 다른 방법이 있지만, 당신이 그것을 위해 만들어진 도구를 마침내 배우는 것은 이마 때리기입니다. OP가 오래 전에 PHP 연산자 목록을 숙지 하고 익숙하지 않은 연산자를 가지고 놀았 어야한다고 말하고 싶습니다 .
Tim Lehner

5

코딩을 계속하고 배우십시오. 결국 충분한 헌신으로 FizzBuzz를보고 왜 그것에 대해 생각해야했는지 궁금해 할 것입니다. 많은 회사들이 인터뷰의 초기 단계로 FizzBuzz 스타일의 질문을합니다. 따라서 이번에 실패하면 고용 과정에 대해 최소한 무언가를 배운 것입니다.

코드를 작성하고 프로젝트 아이디어를 내고 연구하십시오.


4

Java, C ++보다 먼저 JavaScript를 배우는 것이 좋습니다. 당신을위한 이유 :

  1. 프론트 엔드 디자인 (jQuery, 일부 WordPress 플러그인, Twitter 피드, 백엔드 작업이 거의 없거나 전혀없는 양식 검증 등을 통해 JSON을 통해 브라우저에 데이터베이스로드)
  2. Node.js를 통해 서버 측에서 사용 가능
  3. iOS, Android, Win8 등을위한 하이브리드 앱을 빌드하는 데 사용할 수 있습니다
  4. JS를 공부하면 다른 브라우저 및 장치에서 웹 페이지 성능을 더 잘 이해할 수 있습니다.
  5. JS는 더 초보자 친화적으로 설계되었습니다
  6. 이미 HTML 및 CSS를 알고 있기 때문에 JS에 도움이됩니다.

무료 초보자 리소스

http://www.codecademy.com/tracks/code-year
https://stackoverflow.com/tags/javascript/info
약 10 개의 링크가 더 있지만 SE는 10 명의 담당자에게 연락 할 때까지 게시 할 수 없습니다.

C ++, Java 등을 배우는 것도 도움이되지만 IMHO는 JS와 마찬가지로 웹 프로그래밍에 전체적인 영향을 미치지 않습니다. 프론트 및 백엔드 모두에서 사용할 수 있기 때문입니다. 즐기세요!



1
그리고 취업 준비가되면 : jobety.com
imns

3

giving.code (공개 : 내 사이트) 또는 Code for America 등을 찾아서 도울 수 있습니다 . 이것은 비 PHP 웹 페이지 제작 문제에 더 많이 노출되고 기분이 좋아지는 훌륭한 방법입니다.

해결해야 할 문제가 있거나 해결하는 데 도움이되거나 이해하는 경우 코드 선택은 자연스럽게 진행됩니다. 목표를 갖는 것이 무언가를 배우는 가장 좋은 방법입니다.


1
대박! 이것은 정말 공부하기 좋은 방법입니다!
moraleida 2016 년

0

따라서 FizzBuzz 문제를 해결할 수 없습니다. 큰 거래. 지금 당신은 할 수 있고, 당신은 어떻게 무수한 모든 방법을 잊지 못할 것입니다. 당신이 머리 꼭대기에서 바보 같은 문제를 해결할 수 없었기 때문에 나쁜 프로그래머가되기를 간절히 원하지 마십시오.

하나의 문제입니다. 다른 하나는 프로그래밍 학습 곡선보다 약간 뒤 떨어진 것 같습니다. 다른 사람들이 말했듯이 코딩을 계속하고 독서를 계속하십시오. 많이할수록 더 나아질 것입니다. 그렇게 간단합니다. 배경에서 가장 큰 구멍이라고 생각하는 것부터 시작하여 거기서 시작하십시오.


(이것은 들리는 소리였습니다. 내가 성공했는지 확실하지 않습니다. lol.)
Nick Spreitzer 2016 년

0

나는 그들이 다음과 같은 경우 모듈 연산자가 무엇인지 알지 못했기 때문에 고용을 위해 누군가를 추천하지 않을 것이라고 생각하지 않습니다.

  1. 그들은 그것이 일종의 연산자라는 것을 알고있었습니다.
  2. 그들은 일단 내가 그들에게 "모듈러스"가 무엇인지 말해 줄 수있었습니다.

항상 (보통은 아니지만) %는 아니며 일부 언어는 이상합니다. 그리고 10 년이 지난 지금 나는 모든 펄 연산자를 알고 있고 (그리고 우주선이 무엇을 하는가?) 솔직히 말해서 비트 연산자를 완벽하게 기억할 수는 없다. 내가 필요로하는 일을 한 지 몇 년이 지났습니다.

누군가가 그 질문 / 테스트를 놓친 것에 대해 공황 발작을 일으킨다면 누군가를 추천하는 것을 주저 할 수 있습니다. 그것은 저것이 너무 초록색이라는 인상을 줄 수 있습니다 (매우 엔트리 레벨 포지션이 아닌 한). 그런 것들을 외우거나 할 필요성을 느끼는 사람이 아무도 필요하지 않습니다. 더 넓은 개념을 이해하는 사람이 필요합니다. Google에서 찾아 보면 아무도 신경 쓰지 않을 것입니다. 그러나 %를 아는 것이 중요하지 않으며 빠른 Google을 수행 할 때 키워드로 "연산자"를 사용한다는 것을 알고 있어야합니다. 검색.

또한 이것은 단지 아이디어 일뿐입니다.하지만 지역 커뮤니티 칼리지에 compsci 프로그램이 있다면 다른 학점은 모두 이전 될 것이며 2 학년 동안 약 20 학점 만 필요할 것입니다. 학기말에 거의 끝낼 수있었습니다. 그들은 당신이 데이터 구조 코스를하도록하고, 또한 알고리즘이 당신을 조금 더 강하게 만들 것입니다.


-1

샘플 과정은 다음과 같습니다. http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science_.html

객체 지향 프로그래밍 (매우 일반적이며 어디서나 사용되는 곳은 java가 들어온 곳입니다) 동시성 (대부분의 응용 프로그램은 데이터를 저장해야합니다. 이론은 여기에서 중요합니다.) 프로그래밍 패러다임

4 년간의 과학 교육을 살펴보면 솔직히 말해서 진지하게 다루어야 할 소수의 과정이 있다고 생각합니다.

데이터 구조와 알고리즘 (그리고 다른 프로그래머들이 진지하게 받아들이려면 수학이 필요합니다), 컴퓨터 네트워킹 및 운영 체제가 가장 중요합니다. 어셈블리에서 코딩 할 수있는 것과 같이 낮은 수준의 코드를 다루는 다른 주제는 그다지 중요하지 않습니다. 소프트웨어 엔지니어링 및 테스트는 유용한 개념에 노출되며 시간이 지남에 따라이를 선택할 수 있습니다.

이러한 개념을 직관적으로 설명하는 pdf를 다운로드하기 만하면됩니다.

적어도 내에서 일부 comp 과학 과정에서 첫해는 기계, 전기, 토목 등과 같은 모든 공학 분야에 대한 소개입니다. 복잡한 수학이 많이 있습니다. 오늘날 대부분의 응용 프로그램 프로그래머에게 적합합니다. 오늘날의 많은 엔지니어들은 실제로 3 년 동안 실제 과학 교육을 받았습니다.

대답의 요점 : 매일 공부하고 한 시간 정도 이야기하는 데 시간이 걸릴 수 있으며 일정 기간 동안 꽤 좋은 프로그래머가됩니다. 계속 배우십시오. 그리고 매일 코드를 작성해야합니다.


-3

저에게있어 저의 전략은 제가 일하고있는 것과 관련된 문제 만 공격한다는 것입니다. 그래서 제 충고는 모든 것을 배울 필요는 없으며, 현재 일하고있는 것과 관련된 것을 읽으십시오. 왜냐하면 당신이 한 번에 그것을 모두 배우려고한다면, 당신은 엎드려서 미워하는 경향이 있기 때문입니다.

평화

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.