JavaRush /Java Blog /Random-KO /늙은 인문주의자가 어떻게 IT에 갔는가
PieIsLie
레벨 35
Санкт-Петербург

늙은 인문주의자가 어떻게 IT에 갔는가

Random-KO 그룹에 게시되었습니다
불꽃! 사실 저는 이 글에 정확히 무엇을 쓸지, 아예 쓸지 말지 고민을 오랫동안 고민했습니다. 지난 2년 동안 저는 Java 개발자 자리를 얻을 가능성을 "조만간 - 확실히"부터 "IT 분야에서는 기회가 없습니다"까지 다양한 방식으로 평가했습니다. 늙은 인문주의자가 어떻게 IT에 갔는가 - 1그러나 JavaRush에 등록한 지 정확히 2년이 지났습니다. 몇 달 전에 저는 첫 번째 제안을 받았고, 조금 후에 두 번째 제안을 받은 후 새 직장을 시작했습니다. 과정을 진행하는 동안 성공 사례가 많은 도움이 되었기 때문에 직접 게시하기로 결정했습니다. 본 과정은 '18년에 진행되었으므로 일부 정보가 최신 정보가 아닐 수 있습니다. 텍스트가 많을 거라고 바로 말씀드리죠. 왜냐면... 교육 및 구직(요구 사항, 응답, 기술 사양, 인터뷰 등)에 대해 알려 드리겠습니다. 또한 개인적으로 도움이 되었고 다른 사람들에게도 도움이 될 수 있는 몇 가지 일반적인 팁을 작성하겠습니다. 내 소개: 32세, 관리 및 영업 분야에서 10년의 경력, 교양 교육을 받았으며 기술적인 배경은 전혀 없습니다. 몇 년 전에 저는 C++를 시작하고 그다음에는 Python을 시작하려고 했습니다. 하지만 머리가 아플 뿐이었습니다. 그러므로 나를 재능 있는 개발자라고 부르기는 어렵다. 오히려 그 반대다.

1단계. 훈련

나는 적절한 월간 가격표, 자료의 명확한 구조, 많은 연습 및 내 커뮤니티의 존재 등 의식적으로 JavaRush에 왔습니다. 첫 번째 요점은 모두 명확하지만 구조 없이 언어를 배우는 것은 매우 어렵고 그러한 훈련은 확실히 Java Core에서 심각한 격차를 남길 것입니다. 인터뷰 및 기술 사양의 경험에 따르면 "핵심"에 대한 질문은 비트 단위 이동 및 일반 캐스팅부터 IO 및 직렬화에 이르기까지 모든 것에 사용될 수 있습니다. 연습은 필수입니다. 내가 직접 쓴 경우에는 여전히 내용의 절반만 이해하고 기억할 수 있습니다. 커뮤니티에서는 문제를 해결했습니다. 댓글로 자랑해 보세요. 아직 결정하지 못했다면 질문해도 되지만, 이미 준비된 솔루션을 제공하는 사람은 아무도 없을 것입니다. 그리고 과정을 마친 후에도 무료 주제에 대한 맞춤 기사로 돌아왔는데, 거기에는 시작하기에 좋은 것들이 많이 있습니다(특히 단계별 예제를 사용한 프레임워크에 대한 첫 경험 + 인터뷰용 질문). 일반적으로 저는 제가 받은 기반에 대해 이 프로젝트에 감사하지만 JavaRush에만 의존하지는 않을 것입니다. 무엇보다도 동일한 Shildt가 연구 중인 주제에 "중복"되며 종종 몇 가지 요점을 드러냅니다. 때로는 이론보다 앞서 Google을 사용하도록 강요하는 작업에 대한 리뷰에서 이미 많은 내용이 언급되었습니다. 나에게 이것은 마이너스보다 플러스에 가깝습니다. 지금 상황이 제가 공부할 때와 똑같다는 것은 사실이 아닙니다. 나처럼 "처음부터" Java를 입력하는 사람들을 위한 즉각적인 조언 : 어떤 단계에서는 지루해지거나 어려워질 수 있습니다.
  1. 처음부터 시작하는 것은 모든 사람에게 어렵습니다. 단 5%의 사람들만이 코스의 끝에 도달합니다. 당신의 임무는 그들 중 하나가 되는 것입니다.

  2. 한두 달쯤 지나서 일이 더 어렵고 흥미로워지자 관심을 갖게 되었습니다. 인내심을 가지십시오.

  3. 가장 중요한 것은 주간 진행 상황입니다. 2주간의 휴식 후에는 이미 돌아오기가 어렵고, 모든 사람이 몇 달 연속으로 매일 글을 쓸 수 있는 것은 아닙니다. 일주일에 15시간으로 제한해 보세요. 주중에는 1.5시간, 주말에는 3~4시간씩 코딩할 수 있습니다. 또는 저녁에 두세 시간 정도 쉴 수 있지만 "주말 제한"은 증가하다. 이렇게 하면 일정이 유연하면서도 규칙적이게 됩니다. 물론 작업과 프로젝트별로 작업량을 측정하는 것이 가능하지만 구문과 커널 수준에서는 시간 단위로 측정할 수 있습니다.
일반적으로 휴가와 짧은 휴식을 모두 감당할 수 있다는 사실에도 불구하고 과정을 완료하는 데 약 5개월이 걸렸습니다(인턴십에 참여하기 전) . 다시 말하지만, 주 5일 근무에는 주말과 주중 저녁만 22시부터 00시까지 무료입니다. 따라서 더 느슨한 일정이나 더 엄격한 훈련 체제를 사용하면 훨씬 더 일찍 대처할 수 있습니다. 그러다가 인턴십을 하려고 계획했는데 결국엔 안 됐어요.

2단계. 독학

그래서 인턴십을 받지 못했습니다. 그룹 모집이 끝날 때까지 기술 요구 사항에 대해 며칠 밖에 남지 않았고 요구 사항을 파악할 시간이 없었습니다. 낯선 단어가 너무 많았습니다. 왜냐하면 나는 3개월을 더 기다리고 싶지 않았고 스스로 진행하기로 결정했습니다. 다행스럽게도 널리 사용되는 모든 프레임워크에 대한 가이드와 비디오 튜토리얼이 있습니다. 다음 몇 달 동안 저는 Spring MVC, Spring Boot + Data, Spring Security, Hibernate, jUnit, Maven, Git, RDBMS를 다루고 SQL을 마스터하고 이 모든 것을 하나의 전체로 통합하려고 노력했습니다. 6개월 후, 지금 보기에는 두려운 프로젝트가 있었지만 잠재적 고용주의 요청에 따라 보여줄 수 있는 "성인용" 프레임워크와 GitHub를 사용하는 실질적인 경험을 얻었습니다. 조언 :
  1. .gitignore에 대해 빨리 배울수록 좋습니다. ;)

  2. 많은 가이드에는 여러 프레임워크가 동시에 포함되어 있습니다. 이것을 사용하고 자신을 추가하십시오. Maven + Spring Boot + Data를 사용하여 온라인 상점을 작성했습니다. 승인, 단위 테스트 및 로깅을 추가했습니다.

  3. 웹 프로젝트의 경우 인터넷에서 무료 프런트엔드 템플릿을 가져올 수 있습니다. 작업하기가 더 즐겁고 Git의 README에 있는 스크린샷처럼 보기에도 좋습니다. 동시에 HTML과 CSS를 기억할 수 있습니다. 스타일과 레이아웃을 수정하고 싶을 것입니다.

이러한 개발 계획을 스스로 수립하는 가장 쉬운 방법은 HH for Junior\Middle Java Developer vacance를 통해 어떤 기술과 프레임워크가 가장 자주 나타나는지 확인하는 것입니다. 이를 기록하고, 기술 사양을 제시하고, 구현 기한을 설정하십시오. 하지만 현지 인턴십으로 시작했다면 홈 프로젝트에 몇 달을 보낼 필요가 없을 것입니다.

내가 놓치고 있던 것 (나중에 인터뷰 중에 화상을 입었다)

  1. 알고리즘. 실수를 피하기 위해 나는 즉시 러시아어로 된 짧은 책인 "Grocking Algorithms"를 추천합니다. 알고리즘의 복잡성, 구성 요소, 퀵 정렬로는 충분하지 않은 이유, 그래프 이론에 대한 소개 등 모든 것이 가장 이해하기 쉬운 언어로 제공됩니다.

  2. "내부" 컬렉션. 이것이 JavaRush에 있었는지는 기억나지 않지만 HashMap.get()이 어떻게 작동하는지 또는 왜 HashSet이 요소 순서를 유지한다고 보장되지 않는지 아는 것이 유용합니다. 다시 말하지만 어떤 컬렉션이 스레드로부터 안전하며 그 이유는 무엇입니까?

  3. SQL. 최소한 최대 JOIN이 필요합니다. JOIN의 정의, 작동 방식, 즉석에서 두 테이블에 SELECT를 종이에 작성하는 기능 등이 필요합니다. www.sql-ex.ru를 추천합니다. 하루나 이틀 안에 원하는 수준으로 이동할 수 있습니다.

  4. Spring Core: 어떤 종류의 주석이 있는지, 컨텍스트는 무엇인지, Bean이 어떻게 생성되는지, 어떤 Bean Scope가 스레드로부터 안전한지, 상호 주입을 해결하는 방법 등 모든 인터뷰 질문입니다. 페이지를 반환하는 방법, JSON을 반환하는 방법 등 저는 현재 러시아어로 "전문가를 위한 Spring 5"를 읽고 있지만 일반적으로 "Spring in Action"을 추천합니다.

3단계. 구직

실제로 홈 프로젝트를 완료한 후 처음 몇 달 동안 다양한 Junior/Trainee 공석(HH, LinkedIn, 채용 대행사를 통해)에 약 30개의 응답을 보냈지만 결과는 거의 0에 가깝습니다. 경험이 없는 공석에만 집중하고, 익숙한 스택을 솔직하게 표시하고, 자기소개서에 나의 높은 학습능력을 적었습니다. 그 결과 두 번의 통화가 이루어졌고(그 중 한 번은 내 중급 영어로 즉시 끝났음) 두 회사가 기술 사양을 더 보냈고 단 한 번의 "회의"가 있었고 그 후 나는 혼자 종이에 알고리즘 문제를 해결하고 있었습니다. 그 후 HR은 서류를 가져가고 "전화하겠습니다."라고 말했습니다. 나는 두어 번의 인턴십(무급 및 조건부 유급)을 얻으려고 노력했습니다. 기술 사양을 수행했지만 최종 사회 보장을 넘어서지는 못했습니다. 하지만 이제 훈련생은 확실히 T-Systems, CFT, Andersen 및 EPAM에서 모집된다고 말할 수 있습니다 (리뷰가 혼합되어 있으므로 스스로 결정하세요). 저 같은 경우에는 몇 달간 수입 없이 앉아서 죽지 않을 수 있는 기회가 있다면 현장에 들어가는 것이 좋은 방법입니다 =) 일반적으로 이 경험 이후 저는 다소 우울해졌고, 검색을 잠시 중단한 채 전체 이야기를 멈췄습니다. 거의 6개월 동안 이전 프로필 작업을 계속했고 재미로 몇 가지 애플리케이션을 작성했지만 Git에는 게시하지도 않았습니다. 공석으로 인한 실패에 대해 우연히 이야기 한 한 지인을 만날 때까지 그는 이미 중간 개발자로 일하고 있었지만 같은 방식으로 자율 학습을 시작했습니다. 한 지인이 저에게 몇 가지 추천을 해줬는데 , 그 분이 직접 사용하셨고, 제가 앞으로 구직 활동을 하는 데 큰 도움이 되었습니다. 당신이 그들을 따라갈 것인지 말 것인지는 당신에게 달려 있습니다. 왜냐하면... 그들은 어떤 면에서 완전히 정직하지 않습니다. 따라서 추가 인용문은 다음과 같습니다.
  • 어떤 방식으로든 이력서에 인턴십, 졸업 프로젝트, 프리랜서, 원격 근무 등 6개월 이상의 상업적 경험을 기재하세요. 이는 HR의 초기 이력서 심사 단계에서 큰 도움이 될 것입니다.

  • 이력서에서 주니어(Junior) 및 예상 급여라는 단어를 삭제하세요. 그냥 자바 개발자로 놔두고 각 회사와 개별적으로 돈을 논의하세요.

  • 기대치를 언급하기 전에 HR에서 제안된 급여의 "포크" 이름을 지정하도록 하십시오. 회사가 80,000~120,000을 제안하고 귀하가 40,000개 이상을 찾고 있다면 일부 선택자는 귀하를 경멸할 것입니다.

  • 1~3년의 상업적 경험이 필요하더라도 귀하의 스택에 맞는 모든 공석에 지원하십시오.

이러한 권장 사항을 모두 따른 후에 검색 상황이 크게 개선되었습니다. 첫째, 약 12개의 새로운 응답 중 절반은 거의 즉시 회의, Skype 또는 TK(이전 달에 무시되었던 것과는 매우 달랐습니다)로 종료되었습니다. 둘째, HR 직원은 내가 응답하지 않은 나에게 인스턴트 메신저, 메일, LinkedIn을 통해 편지를 쓰기 시작했습니다. 셋째, 상업적 경험 요구 사항은 그다지 엄격하지 않은 것으로 나타났습니다. 많은 회사가 1-3년의 기업 관행 범위에 속하지 않는 후보자와 의사 소통할 준비가 되어 있었습니다. 결과적으로 주니어에게는 하나의 제안, 수습 기간이 있는 중간에는 하나의 제안이 제공됩니다. 검색에는 총 2개월이 걸렸습니다. 조언 :
  1. 귀하가 작업한 언어, 기술 및 프레임워크의 전체 스택을 이력서에 포함시키십시오.

  2. LinkedIn에 등록하세요. 다양한 회사의 HR 인력이 정말 많이 있습니다. 프로필을 주의 깊게 작성하세요. 사실 이 프로필도 이력서이기도 합니다. 귀하의 연락처 네트워크를 개발하려면 귀하의 프로필과 관련된 LION을 추가하십시오. 그들은 모든 사용자의 요청을 수락합니다.

  3. 무료 Java 테스트에 참여해 보세요. 주니어 인터뷰 전에 종이로 제공되는 경우가 많습니다. 미리 준비하는 것이 좋습니다.

인터뷰에 관한 몇 마디
  1. 그들은 항상 컬렉션에 대해 묻습니다. 어떤 컬렉션이 있는지, 어떻게 다른지, 언제 사용하는 것이 가장 좋은지 묻습니다.

  2. 항상 추상 클래스와 인터페이스에 있습니다. 메서드, 필드를 가질 수 있는지, 어떤 항목을 상속받을 수 있는지 등이 있습니다.

  3. 거의 항상 멀티스레딩을 사용합니다. 작업에 사용한 것, 키워드, 메소드는 util.concurrent에 익숙합니다.

  4. 종종 메모리 작업을 할 때 힙, 스택 및 이러한 문자열이 동일하며 이러한 개체는 왜 동일합니까?

  5. 때로는 알고리즘에 대해 - 어떤 알고리즘을 알고 있는지, 어떤 복잡성이 있는지, 왜 지금 알고리즘을 작성할 수 있는지에 대해.

  6. 때로는 어떤 패턴을 알고 있는지, 어떤 패턴을 사용하는지에 따라 싱글톤이나 팩토리를 작성합니다.

  7. 때로는 SQL에서 JOIN 유형, 트랜잭션이 무엇인지, JDBC에서 수행하는 방법 등 짧은 쿼리를 작성합니다.

실제로 모든 것은 회사에 따라 크게 달라집니다 . 누군가는 Java Core에 대해 단 한 번의 질문도 하지 않고 프레임워크와 SQL에 대해 이야기하는 데 40분을 보냅니다. 어떤 사람들은 인기 있는 프레임워크를 전혀 사용하지 않고 알고리즘, 유형, 컬렉션 및 메모리에 대해서만 질문합니다. 회의의 약 절반은 테스트로 시작되었습니다. 때로는 러시아어로, 때로는 영어로 시작되었습니다(20-30분 동안 20-30개의 질문). 일반적으로 "여기 코드가 있습니다. 실행될지 여부, 그렇지 않은 경우 어떤 줄에 있는지" 또는 "여기에 여러 개체가 있는데 N 작업 후에 동일합니까?" 수준의 질문이 있습니다. 기술 사양에 대한 몇 마디 : 의사소통을 시작한 회사의 70%가 회의 전후에 기술 사양을 나에게 보냈습니다. 일반적으로 완료는 며칠에서 일주일 정도 소요되지만 대부분 마감일을 약간 앞당길 수 있습니다. 기술 사양으로는 무엇이든 사용할 수 있습니다. 제가 한 예는 다음과 같습니다.
  • 새 레코드를 편집하고 추가하는 Salesforce 프로필 비즈니스 연락처 페이지

  • 콘솔 제어 기능이 있는 Spring State Machine을 사용하여 다층 건물의 엘리베이터 시뮬레이션

  • 버튼을 누르면 문자별로 텍스트가 출력되는 LibGDX 라이브러리 기반의 Android 애플리케이션입니다.

  • HTTP 요청을 통해 클라이언트를 추가하고 JSON을 반환하여 자동차 공유를 REST로 모방합니다.

  • 자유 셀을 통해 방향이 없는 그래프를 정렬하는 문제;

  • 파일의 좌표를 사용하여 이등변삼각형을 검색합니다.

  • Stream API를 사용하여 완성된 코드를 리팩토링합니다.

  • 삼항식을 지원하는 UI 계산기

  • 결과를 파일에 쓰는 스레드 경쟁.

계산 방식은 단위 테스트로 처리하도록 요청하고, 쿼리 방식은 통합 테스트로 처리하도록 요청하는 경우도 있습니다. 조언 :
  1. 작업을 완료하는 것뿐만 아니라 코드가 OOP 원칙을 준수하는지 확인하십시오.

  2. 코드의 효율성을 확인하세요. 무엇보다도 BufferedWriter 대신 PrintStream을 사용했기 때문에 저는 한때 거부당했습니다.

  3. 50%의 여유를 두고 실행 시간을 계획하세요. 마감일 아침 8시에 git push를 하는 것보다 일찍 시작하고 끝내는 것이 좋습니다.

글쎄, 내가 원하는 모든 것을 쓴 것 같습니다. 가장 중요한 것은 물이 돌을 닳게 한다는 것입니다. Java로 많은 것을 작성하고 오랫동안 일자리를 찾았다가 결국 아무것도 얻지 못할 수는 없습니다. 30세 인문학 전문가가 해냈다면 더 잘할 수 있다. 가장 중요한 것은 첫 번째 전화, 기술 과제 및 인터뷰를 두려워하지 않는 것입니다. 실패할 때마다 나는 스스로 무언가를 배우고 개선할 수 있다는 보장을 받았습니다. 시간이 길수록 자신감이 더 커집니다. 어딘가 혼란스럽거나 오류가 있는 경우 미리 사과하고 글을 쓰고 수정하겠습니다. 내 경험이 적어도 누군가에게 도움이 되길 바랍니다 =)
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION