JavaRush /Blog Java /Random-VI /Làm thế nào một nhà nhân văn già đã đến với CNTT
PieIsLie
Mức độ
Санкт-Петербург

Làm thế nào một nhà nhân văn già đã đến với CNTT

Xuất bản trong nhóm
Pháo hoa! Thực ra, tôi đã suy nghĩ rất lâu về chính xác những gì tôi sẽ viết trong bài đăng này và liệu tôi có viết nó hay không. Điều đó đã xảy ra là trong các giai đoạn khác nhau của hai năm qua, tôi đã đánh giá cơ hội nhận được vị trí nhà phát triển Java của mình theo nhiều cách khác nhau: từ “sớm hay muộn - chắc chắn” đến “Tôi không có cơ hội trong lĩnh vực CNTT”. Một ông già nhân văn đã đến với CNTT như thế nào - 1Tuy nhiên, đã gần đúng hai năm trôi qua kể từ khi tôi đăng ký JavaRush. Vài tháng trước, tôi nhận được lời đề nghị đầu tiên, một lát sau tôi nhận được lời đề nghị thứ hai, và sau đó tôi bắt đầu một công việc mới. Những câu chuyện thành công đã giúp tôi rất nhiều trong suốt khóa học nên tôi quyết định đăng bài của chính mình. Vì khóa học diễn ra vào năm 18 nên một số thông tin có thể không cập nhật. Tôi sẽ nói ngay rằng sẽ có rất nhiều văn bản, bởi vì... Tôi sẽ cố gắng cho bạn biết về đào tạo và tìm kiếm việc làm (yêu cầu, phản hồi, thông số kỹ thuật, phỏng vấn, v.v.). Tôi cũng sẽ viết một số lời khuyên chung đã giúp ích cho cá nhân tôi và có thể giúp ích cho người khác. Sơ lược về bản thân: 32 tuổi, 10 năm kinh nghiệm quản lý và bán hàng, học giáo dục khai phóng và hoàn toàn không có nền tảng kỹ thuật. Vài năm trước, tôi đã cố gắng học C++, sau đó vào Python - tôi chẳng thấy gì ngoài việc đau đầu. Vì vậy, thật khó để gọi tôi là một nhà phát triển tài năng: ngược lại.

GIAI ĐOẠN 1. Đào tạo

Tôi đến với JavaRush một cách có ý thức: bảng giá đầy đủ hàng tháng, cấu trúc tài liệu rõ ràng, thực hành nhiều và sự hiện diện của cộng đồng của riêng tôi. Điểm đầu tiên đều rõ ràng, nhưng việc học một ngôn ngữ không có cấu trúc khá khó khăn và việc đào tạo như vậy chắc chắn sẽ khiến một người có những lỗ hổng nghiêm trọng về Java Core. Kinh nghiệm từ các cuộc phỏng vấn và thông số kỹ thuật cho thấy rằng các câu hỏi về “cốt lõi” có thể được sử dụng cho mọi thứ: từ dịch chuyển theo bit và truyền các khái quát đến IO và tuần tự hóa. Thực hành là điều cần phải có; Tôi vẫn chỉ có thể hiểu và nhớ được một nửa số điều nếu tôi tự viết ra. Chà, cộng đồng: bạn đã giải quyết được vấn đề - hãy khoe khoang về nó trong phần bình luận; Nếu bạn chưa quyết định, bạn có thể đặt câu hỏi, nhưng rất có thể sẽ không có ai đưa ra giải pháp làm sẵn cho bạn. Và tôi đã quay lại các bài viết tùy chỉnh về các chủ đề miễn phí ngay cả sau khi kết thúc khóa học, có rất nhiều nội dung hay để bắt đầu (đặc biệt là trải nghiệm đầu tiên với các khung sử dụng ví dụ từng bước + câu hỏi phỏng vấn). Nói chung, tôi biết ơn dự án này vì cơ sở mà tôi đã nhận được, nhưng tôi sẽ không chỉ dựa vào JavaRush - cùng một Shildt tốt nhất là “chồng chéo” về chủ đề đang được nghiên cứu và thường tiết lộ một số điểm. Rất nhiều điều đã được nói trong các bài đánh giá về các nhiệm vụ đôi khi đi trước lý thuyết và buộc bạn phải tìm đến Google. Đối với tôi, đây là một điểm cộng hơn là một điểm trừ - và thực tế không phải là tình hình bây giờ giống như khi tôi còn đi học. Lời khuyên ngay lập tức dành cho những người, giống như tôi, nhập Java “từ đầu” : ở một giai đoạn nào đó bạn có thể trở nên nhàm chán hoặc khó khăn:
  1. Mọi người đều bắt đầu lại từ đầu rất khó; Chúa ơi, chỉ có 5% số người hoàn thành khóa học. Nhiệm vụ của bạn là trở thành một trong số họ.

  2. Sự hứng thú của tôi xuất hiện sau một hoặc hai tháng, khi các nhiệm vụ trở nên khó khăn và thú vị hơn. Kiên nhẫn.

  3. Điều chính là sự tiến bộ hàng tuần. Sau hai tuần nghỉ ngơi, việc quay trở lại đã khó khăn và không phải ai cũng có thể viết hàng ngày trong vài tháng liên tục. Hãy đặt cho mình giới hạn số giờ trong tuần - ví dụ: 15. Bạn có thể viết mã trong 1,5 giờ mỗi ngày trong tuần và 3-4 giờ nữa vào cả hai ngày cuối tuần hoặc bạn có thể nghỉ một vài buổi tối, nhưng “giới hạn cuối tuần” sẽ tăng. Bằng cách này, lịch trình sẽ linh hoạt nhưng đều đặn. Tất nhiên, sau đó có thể đo lường công việc theo nhiệm vụ và dự án, nhưng ở cấp độ cú pháp và hạt nhân, tính bằng giờ là đủ.
Nhìn chung, tôi phải mất khoảng 5 tháng để hoàn thành khóa học (trước khi bắt đầu thực tập) , mặc dù thực tế là tôi có đủ khả năng chi trả cho cả kỳ nghỉ và kỳ nghỉ ngắn hạn; Một lần nữa, làm việc một tuần năm ngày chỉ còn lại cuối tuần và buổi tối các ngày trong tuần từ 22 đến 00. Vì vậy, với một lịch trình lỏng lẻo hơn hoặc một chế độ tập luyện cứng nhắc hơn, bạn có thể đối phó sớm hơn nhiều. Sau đó, tôi dự định đi thực tập nhưng cuối cùng lại không thành công.

GIAI ĐOẠN 2. Tự giáo dục

Vì vậy, tôi đã không nhận được suất thực tập: Tôi chỉ còn vài ngày về các yêu cầu kỹ thuật cho đến khi kết thúc đợt tuyển dụng vào nhóm và không có thời gian để tìm hiểu các yêu cầu - có quá nhiều từ xa lạ. Bởi vì Tôi không muốn đợi thêm ba tháng nữa, tôi quyết định tự mình bước tiếp. May mắn thay, có hướng dẫn và video hướng dẫn cho tất cả các framework phổ biến. Trong vài tháng tiếp theo, tôi đã xử lý Spring MVC, Spring Boot + Data, Spring Security, Hibernate, jUnit, Maven, Git, RDBMS, thành thạo SQL và cố gắng kết hợp tất cả lại thành một tổng thể duy nhất. Sáu tháng sau, tôi có những dự án đáng sợ khi xem xét, nhưng tôi đã có được kinh nghiệm thực tế trong việc sử dụng các khung “người lớn” và GitHub có thể được hiển thị theo yêu cầu của nhà tuyển dụng tiềm năng. Lời khuyên :
  1. Bạn tìm hiểu về .gitignore càng sớm thì càng tốt. ;)

  2. Nhiều hướng dẫn bao gồm nhiều khung cùng một lúc; sử dụng cái này và thêm của riêng bạn. Chúng tôi đã viết một cửa hàng trực tuyến bằng Maven + Spring Boot + Data - thêm ủy quyền, kiểm tra đơn vị và ghi nhật ký.

  3. Đối với các dự án web, bạn có thể lấy các mẫu giao diện người dùng miễn phí từ Internet - chúng dễ chịu hơn khi làm việc, chúng trông đẹp hơn dưới dạng ảnh chụp màn hình trong README trên Git. Đồng thời, bạn sẽ có thể nhớ HTML và CSS - bạn có thể muốn sửa kiểu và bố cục.

Cách dễ nhất để tạo một kế hoạch phát triển như vậy cho chính bạn là xem qua các vị trí tuyển dụng của HH dành cho Nhà phát triển Java Junior\Trung và xem những công nghệ và khung công tác nào được chỉ định thường xuyên nhất. Viết chúng ra, đưa ra các thông số kỹ thuật cho chúng, tự đặt ra thời hạn thực hiện. Mặc dù vậy, có lẽ nếu tôi bắt đầu thực tập tại địa phương, tôi sẽ không phải mất vài tháng cho các dự án tại nhà.

Những gì tôi đã bỏ lỡ (sau này tôi đã thất bại trong một cuộc phỏng vấn)

  1. Thuật toán. Để tránh những sai lầm của mình, tôi ngay lập tức giới thiệu một cuốn sách ngắn bằng tiếng Nga, “Thuật toán Grocking”. Độ phức tạp của thuật toán là gì, nó bao gồm những gì, tại sao quicksort là không đủ, phần giới thiệu về lý thuyết đồ thị - mọi thứ đều ở đó và bằng ngôn ngữ dễ hiểu nhất.

  2. Bộ sưu tập "dưới mui xe". Tôi không nhớ liệu điều này có trong JavaRush hay không, nhưng sẽ rất hữu ích nếu biết HashMap.get() hoạt động như thế nào hoặc tại sao HashSet không được đảm bảo duy trì thứ tự phần tử. Một lần nữa - bộ sưu tập nào là luồng an toàn và tại sao.

  3. SQL. Bạn cần ít nhất tối đa THAM GIA - chúng là gì, chúng hoạt động như thế nào, khả năng viết CHỌN trên hai bảng trên giấy một cách nhanh chóng. Tôi khuyên dùng www.sql-ex.ru: nó sẽ đưa bạn đến cấp độ mong muốn sau một hoặc hai ngày.

  4. Spring Core: có những loại chú thích nào, ngữ cảnh là gì, đậu được tạo ra như thế nào, Bean Scope nào là an toàn cho luồng và cách giải quyết việc tiêm lẫn nhau - tất cả các câu hỏi phỏng vấn. Cách trả về một trang, cách trả về JSON, v.v. Tôi hiện đang đọc “Mùa xuân 5 dành cho chuyên gia” bằng tiếng Nga, nhưng nhìn chung họ khuyên dùng “Mùa xuân hành động”.

GIAI ĐOẠN 3. Tìm kiếm việc làm

Trên thực tế, trong vài tháng đầu tiên sau khi hoàn thành các dự án tại nhà, tôi đã gửi khoảng 30 phản hồi cho các vị trí tuyển dụng Junior\Trainee khác nhau (thông qua HH, LinkedIn, các cơ quan tuyển dụng), nhưng kết quả gần như bằng không. Tôi chỉ tập trung vào những vị trí tuyển dụng chưa có kinh nghiệm, thành thật chỉ ra những công việc quen thuộc với mình và viết về khả năng học tập cao của mình trong thư xin việc. Kết quả là hai cuộc gọi (một trong số đó ngay lập tức kết thúc bằng tiếng Anh sơ cấp của tôi), thêm hai công ty gửi thông số kỹ thuật, chỉ có một “cuộc họp”, và sau đó tôi ở đó một mình giải quyết các vấn đề về thuật toán trên một tờ giấy, sau đó bộ phận nhân sự chỉ cần lấy giấy tờ đi và "Chúng tôi sẽ gọi cho bạn." Tôi đã cố gắng xin một vài suất thực tập (không lương và được trả lương có điều kiện): Tôi đã thực hiện các yêu cầu kỹ thuật, nhưng không vượt quá mức an sinh xã hội cuối cùng; nhưng bây giờ tôi có thể nói rằng các học viên chắc chắn được tuyển dụng bởi T-Systems, CFT, Andersen và EPAM (họ có nhiều ý kiến ​​trái chiều, hãy tự quyết định). Đối với tôi, đó là một cách tốt để tham gia vào lĩnh vực này nếu bạn có cơ hội ngồi không có thu nhập trong vài tháng và không chết =) Nói chung, sau trải nghiệm này, tôi hơi chán nản và tạm dừng toàn bộ câu chuyện tìm kiếm trong gần sáu tháng - tôi tiếp tục làm việc trên hồ sơ trước đó, viết một số ứng dụng chỉ để giải trí, nhưng thậm chí còn không đăng chúng lên Git. Cho đến khi tôi gặp một người quen, người mà tôi tình cờ kể về những thất bại với các vị trí tuyển dụng: lúc đó anh ấy đang làm nhà phát triển cấp trung, nhưng anh ấy cũng bắt đầu theo cách tương tự - bằng việc tự học. Một người quen đã cho tôi một vài lời khuyên mà chính anh ấy đã sử dụng và điều này đã giúp ích rất nhiều cho tôi trong quá trình tìm kiếm việc làm trong tương lai. Theo dõi họ hay không là tùy thuộc vào bạn, bởi vì... theo một cách nào đó, họ không hoàn toàn trung thực. Vì vậy, trích dẫn thêm:
  • Bằng mọi cách, hãy cung cấp cho bản thân hơn 6 tháng kinh nghiệm thương mại trong sơ yếu lý lịch của bạn: thực tập, dự án tốt nghiệp, làm việc tự do, làm việc từ xa - bất cứ điều gì. Điều này sẽ giúp ích rất nhiều ở giai đoạn sàng lọc sơ yếu lý lịch ban đầu của bộ phận nhân sự;

  • xóa từ Junior và mức lương mong đợi khỏi sơ yếu lý lịch của bạn; chỉ cần để nó là Nhà phát triển Java và thảo luận riêng về tiền với từng công ty;

  • cố gắng để bộ phận nhân sự đặt tên là “ngã ba” của mức lương đề xuất trước khi bạn đặt tên cho những kỳ vọng của mình. Nếu một công ty đưa ra mức giá 80-120k và bạn đang tìm kiếm mức giá 40k trở lên, một số nhà tuyển chọn sẽ coi thường bạn;

  • Áp dụng cho tất cả các vị trí tuyển dụng phù hợp với nhóm của bạn, ngay cả khi chúng yêu cầu 1-3 năm kinh nghiệm thương mại.

Sau khi tôi làm theo tất cả những khuyến nghị này, tình hình tìm kiếm đã được cải thiện đáng kể. Thứ nhất, trong số khoảng 12 câu trả lời mới, một nửa gần như ngay lập tức kết thúc bằng một cuộc họp, Skype hoặc TK (điều này vốn đã rất khác so với việc bị bỏ qua trong những tháng trước). Thứ hai, nhân viên nhân sự bắt đầu viết thư cho tôi nhưng tôi không trả lời - qua tin nhắn tức thời, thư, LinkedIn. Thứ ba, yêu cầu về kinh nghiệm thương mại hóa ra thực sự không quá khắt khe - nhiều công ty sẵn sàng liên hệ với những ứng viên không thuộc phạm vi quy định từ 1-3 năm hành nghề tại công ty. Kết quả là - một lời đề nghị dành cho cấp dưới, một lời đề nghị dành cho cấp trung đang trong thời gian thử việc. Tổng cộng, việc tìm kiếm mất hai tháng. Lời khuyên :
  1. Đưa vào sơ yếu lý lịch của bạn toàn bộ ngôn ngữ, công nghệ và khuôn khổ mà bạn đã làm việc cùng.

  2. Đăng ký trên LinkedIn - thực sự có rất nhiều nhân viên nhân sự từ các công ty khác nhau ở đó. Điền vào hồ sơ của bạn một cách cẩn thận - trên thực tế, đây cũng là sơ yếu lý lịch của bạn. Để phát triển mạng lưới liên hệ của bạn, hãy thêm LION có liên quan đến hồ sơ của bạn; họ chấp nhận yêu cầu từ tất cả người dùng.

  3. Hãy thử sức mình trong các bài kiểm tra Java miễn phí - chúng thường được đưa ra trên giấy trước cuộc phỏng vấn Junior. Tốt hơn là nên chuẩn bị trước.

Một vài lời về cuộc phỏng vấn
  1. Họ luôn hỏi về các bộ sưu tập: có những bộ sưu tập nào, chúng khác nhau như thế nào, khi nào là thời điểm tốt nhất để sử dụng chúng.

  2. Luôn có trên các lớp và giao diện trừu tượng - chúng có thể có các phương thức, trường, cái nào không, chúng có thể được kế thừa không, v.v.

  3. Hầu như luôn luôn sử dụng đa luồng - những gì bạn đã sử dụng trong công việc, từ khóa, phương pháp của mình, bạn có quen thuộc với util.concurrent không.

  4. Thông thường khi làm việc với bộ nhớ - heap, stack và các chuỗi này có bằng nhau không, và các đối tượng này thì tại sao.

  5. Đôi khi về các thuật toán - bạn biết những thuật toán nào, độ phức tạp như thế nào, tại sao, bây giờ bạn có thể viết một thuật toán được không.

  6. Đôi khi dựa trên các mẫu - những mẫu bạn biết, những mẫu bạn sử dụng, viết một singleton hoặc nhà máy.

  7. Đôi khi trong SQL - các loại THAM GIA, giao dịch là gì, cách thực hiện nó trong JDBC, viết một truy vấn ngắn.

Trên thực tế, mọi thứ đều phụ thuộc rất nhiều vào công ty : ai đó không hỏi một câu nào về Java Core mà dành 40 phút để nói về các framework và SQL; Một số người hoàn toàn không sử dụng các framework phổ biến và chỉ hỏi về thuật toán, loại, bộ sưu tập và bộ nhớ. Khoảng một nửa số cuộc họp bắt đầu bằng các bài kiểm tra - đôi khi bằng tiếng Nga, đôi khi bằng tiếng Anh (20-30 câu hỏi trong 20-30 phút); Thông thường các câu hỏi ở mức độ “đây là mã, nó có chạy hay không, và nếu không thì ở dòng nào” hoặc “đây là một số đối tượng, liệu chúng có bằng nhau sau N thao tác không”. Đôi lời về thông số kỹ thuật : 70% công ty bắt đầu truyền thông đã gửi cho tôi thông số kỹ thuật trước hoặc sau cuộc họp. Thông thường, việc hoàn thành được đưa ra từ vài ngày đến một tuần, nhưng hầu hết thời hạn có thể được dời lại một chút. Bất cứ điều gì có thể được sử dụng làm thông số kỹ thuật. Dưới đây là những ví dụ tôi đã làm:
  • Trang liên hệ kinh doanh hồ sơ Salesforce với việc chỉnh sửa và thêm hồ sơ mới;

  • mô phỏng thang máy trong tòa nhà nhiều tầng sử dụng Spring State Machine với bảng điều khiển;

  • Ứng dụng Android dựa trên thư viện LibGDX với đầu ra văn bản theo từng ký tự khi nhấn nút;

  • REST bắt chước việc chia sẻ ô tô, bằng cách thêm ứng dụng khách thông qua yêu cầu HTTP và trả về JSON;

  • bài toán sắp xếp đồ thị vô hướng qua một ô trống;

  • tìm kiếm các tam giác cân bằng tọa độ từ một tệp;

  • tái cấu trúc mã hoàn chỉnh bằng API Stream;

  • Máy tính giao diện người dùng có hỗ trợ biểu thức bậc ba;

  • chủng tộc của các chủ đề bằng cách ghi kết quả vào một tập tin.

Đôi khi các phương pháp tính toán được yêu cầu phải được thực hiện bằng các bài kiểm tra đơn vị và các phương pháp truy vấn được yêu cầu phải được thực hiện bằng các bài kiểm tra tích hợp. Lời khuyên :
  1. Cố gắng không chỉ hoàn thành nhiệm vụ mà còn đảm bảo rằng mã tuân thủ các nguyên tắc OOP.

  2. Kiểm tra tính hiệu quả của mã của bạn - Tôi đã từng bị từ chối vì, trong số những thứ khác, tôi đã sử dụng PrintStream thay vì BufferedWriter.

  3. Lập kế hoạch thời gian thực hiện của bạn với mức chênh lệch 50% - tốt hơn là bắt đầu và kết thúc sớm hơn là thực hiện git push vào lúc 8 giờ sáng trước thời hạn.

Chà, mọi thứ tôi muốn, tôi nghĩ tôi đã viết. Điều quan trọng nhất là nước làm mòn đá. Bạn không thể viết rất nhiều, rất nhiều bằng Java, sau đó tìm kiếm một công việc trong một thời gian dài và cuối cùng không tìm được việc gì. Nếu một chuyên gia nhân văn 30 tuổi làm được điều đó, bạn có thể làm tốt hơn nữa. Điều chính là không sợ những cuộc gọi đầu tiên, những bài tập kỹ thuật và những cuộc phỏng vấn: sau mỗi lần thất bại, tôi đảm bảo sẽ học được điều gì đó cho bản thân và cải thiện nó - càng lâu, bạn càng cảm thấy tự tin hơn. Nếu ở đâu đó nó trở nên hỗn loạn hoặc có sai sót - tôi xin lỗi trước, viết thư, tôi sẽ sửa lại. Tôi hy vọng kinh nghiệm của tôi sẽ giúp được ít nhất ai đó =)
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION