Vì bạn muốn trở thành một lập trình viên

Lần trước tôi không có ý định viết bài Làm Ơn Đừng Học Lập Trình để tạo ra sự tranh luận, nhưng nó dường như đã tạo ra một cuộc tranh cãi nảy lửa. Hình như có một số lượng rất lớn độc giả đã dừng đọc ngay khi họ xem qua tiêu đề bài viết đó.

Vì vậy hôm nay tôi sẽ mở đầu bằng một câu chuyện của chính bản thân mình. Tôi nghĩ rằng bạn sẽ tìm thấy trong đó một ý nghĩa thú vị.

Mẹ tôi một lần trước đây đã nói với tôi rằng, lý do duy nhất để bà hẹn hò với bố tôi đó là bởi vì bà ngoại tôi nói với mẹ tôi rằng hãy tránh xa thằng cha đó ra, hắn có vẻ như không được tốt.

Nếu mẹ tôi làm theo lời khuyên đó, thì đã không có tôi tồn tại trên cõi đời này.

Đây là câu chuyện hoàn toàn có thật, thưa các bạn.

Đam mê chính là động cơ thúc đẩy lớn nhất để bạn trở thành một lập trình viên.

Tôi đã tranh luận rằng những người cần học lập trình thường được khích lệ bởi tính chân thật của nó. Bởi vì không hề có những viên đạn bọc đường nào trong lập trình cả. Nếu sau khi nghe cả hai mặt ưu và nhược điểm của nó, và bạn vẫn muốn học lập trình, thì hãy học lập trình bằng tất cả mọi cách có thể. Nếu bạn là người dễ bị can ngăn bởi việc nghe một số mặt trái của công việc lập trình, thì cũng có vô số những thứ khác để bạn có thể dành thời gian của mình để học mà ít mơ hồ, hữu ích và thực tế hơn. Theo Michael Lopp, thì bạn có thể học để trở thành một người giao tiếp tốt hơn. Theo Gina Trapani, thì bạn có thể học cách làm thế nào để đề xuất những giải pháp tốt hơn. Việc học lập trình thì chỉ là một phần nhỏ của toàn bộ các giải pháp theo như kinh nghiệm của tôi. Tại sao lại cứ phải theo ngành này cơ chứ?

Ở giai đoạn sơ khai của máy tính, mọi người phải trở thành một lập trình viên bởi vì thời đó không có phần mềm. Nếu bạn muốn máy tính làm bất cứ công việc gì, thì bạn phải viết code cho nó. Máy tính lúc đó được khởi động và chạy thẳng vào một trình thông dịch BASIC với một con trỏ nhấp nháy thân thiện. Theo góc nhìn của tôi thì toàn bộ ngành phát triển phần mềm là một lĩnh vực nơi mà các lập trình viên chúng ta dành toàn bộ cuộc đời mình để viết code giúp cho các đồng loại của mình không cần phải viết code nữa (hoặc thậm chí tồi hơn, là trở thành những lập trình viên) để hoàn thành công việc với những chiếc máy tính. Vì vậy cái ý tưởng rằng “mọi người phải biết cách làm thế nào để lập trình” thì, đối với tôi, đó là một bước đi thụt lùi.

Tôi hoàn toàn ủng hộ việc đưa những kiến thức cơ bản lên Internet. Nhưng để trở thành một người lái xe hơi giỏi, thì mọi người có cần phải biết đến mức chi tiết về chiếc xe hơi của họ sẽ hoạt động như thế nào không? Liệu chúng ta có phải dạy tất cả loài người về những kiến thức cơ bản của việc trở thành một người thợ sửa xe hơi, và nên tổ chức một lớp học nâng cao cùng cấp độ như là các lớp học về tiếng Anh và Toán học? Liệu việc biết làm thế nào để thay một chiếc vỏ (lốp) xe hơi, và khi nào thì nên đưa xe hơi của bạn đi thay nhớt, thì cái nào hữu ích hơn? Nếu toilet nhà bạn bị tắc, thì bạn không cần phải dành ra hai tuần lễ để nghiên cứu chuyên sâu một khóa học thông toilet trên trang web toiletcademy.com chỉ để hiểu cách làm thế nào khắc phục vấn đề đó. Việc đọc một trang web hướng dẫn một giải pháp nhanh chóng sẽ là hữu ích hơn nhiều.

Vậy code là gì, theo ý nghĩa trừu tượng nhất?

code (kōd) …

3.      a. Là một hệ thống các ký hiệu được sử dụng để đại diện cho các chữ hoặc số trong việc truyền tải các thông điệp.

          b. Là một hệ thống các biểu tượng, các chữ hoặc từ đưa ra những ý nghĩa chắc chắn nào đó, được sử dụng để truyền tải các thông điệp mà yêu cầu bí mật hoặc ngắn gọn.
4. Một hệ thống của các ký hiệu và quy tắc được sử dụng nhằm miêu tả những tập lệnh để một máy tính thực thi…

— Trích từ điển tiếng Anh American Heritage

Có phải nó là máy đục lỗ? Các thiết bị đầu cuối từ xa? Emacs? Textmate? Eclipse? Visual Studio? C? Ruby? JavaScript? Vào những năm 1920s, một kỹ năng được xem là rất quan trọng đó là làm thế nào để sử dụng những cái thước trượt (slide rules) để tính toán. Trong những năm 1960s, thì một kỹ năng quan trọng là học cách vẽ các chi tiết máy. Không có cái nào trong số chúng còn quan trọng ngày nay. Tôi hơi do dự khi đề xuất bất kỳ một hướng tiếp cận riêng lẻ nào tới việc lập trình hơn là các nền tảng căn bản được phác họa trong cuốn sách Code: The Hidden Language of Computer Hardware and Software, bởi vì tôi không chắc rằng chúng ta sẽ thậm chí còn nhận ra công việc lập trình khoảng 20 hoặc 30 năm tới. Đối với lũ trẻ ngày nay, có lẽ công việc lập trình cuối cùng sẽ tương tự như là việc chơi trò game Minecraft, hoặc xây dựng các level trong trò game Portal 2.

Nhưng mỗi người cũng nên thử viết một chút code, bởi vì theo một ý nghĩa nào đó thì nó cũng làm sắc bén thêm trí tuệ của bạn, phải không nào? Về mặt trừu tượng thì nó cũng giống như là đọc trọn bộ Bách Khoa Toàn Thư (Encyclopedia Brittanica) từ đầu đến cuối vậy. Thành thực mà nói, tôi rất thích những người mà đã dành thời gian của họ để khám phá ra những vấn đề mà họ yêu thích rồi tìm thấy được sự thú vị, và nghiên cứu để tìm cách giải quyết những vấn đề đó. Điều khó nhất trong cuộc đời không phải là việc học hàng đống những thứ có thể hữu ích, mà bạn phải tìm ra bạn đang thực sự đam mê và muốn làm điều gì. Nếu nói rằng nghiên cứu và khám phá dẫn đến công việc lập trình, sau đó bạn học lập trình … thì điều này nghe giống như là chúng chẳng có giá trị gì cả.

Vì vậy, không, tôi không ủng hộ việc học lập trình với mục đích cưỡi ngựa xem hoa để biết cho vui. Mà tôi ủng hộ những người không biết xấu hổ để theo đuổi niềm đam mê của họ. Ví dụ, tôi vừa nhận được bức thư sau đây vào ngày hôm qua.

Tôi là một luật sư 45 tuổi đang cố gắng bỏ công việc liên quan đến nghề luật của mình sớm nhất có thể để tìm kiếm nghề nghiệp tiếp theo. Thực ra tôi đang trả tiền cho một người để giúp tôi làm công việc này, và đó là bước đầu tiên trong quá trình tôi “tìm lại chính mình”. Tôi đã nhìn lại sự nghiệp rất dài đầy gian nan trắc trở của mình và nhận ra những khoảng thời gian mà tôi đã được làm một điều gì đó mà mình thực sự cảm thấy hào hứng.

Tôi trở thành một nhân viên kế toán trong suốt giai đoạn cuộc cách mạng về máy tính PC diễn ra (khi tôi bắt đầu công việc “thực sự” đầu tiên của mình tại hãng Arthur Andersen thì chúng tôi lúc đó vẫn ngồi tính toán các hóa đơn giảm giá cho khách hàng bằng tay), tôi đã dành rất nhiều thời gian để học làm thế nào để khiến cho các máy tính, máy in, và phần mềm (như là VisiCalc) làm việc. Cái khía cạnh gần như là kỹ thuật trong công việc của tôi đã đạt tới mức đỉnh của nó khi tôi được thuê với tư cách là một nhà phân tích tài chính về dịch vụ chăm sóc sức khỏe cho một hệ thống bệnh viện lớn. Khi tôi đến làm việc ngày đầu tiên của mình ở vị trí đó, tôi biết được rằng người tiền nhiệm đã để lại cho tôi chỉ một trang bảng tính Excel tĩnh mà có nhiệm vụ là “phân tích” dữ liệu hợp đồng chăm sóc sức khỏe có doanh thu nhiều triệu đô-la cho một hệ thống lên tới 7 bệnh viện. Tôi đã tiến hành xây dựng một bảng tính của riêng mình nhưng nó nhanh chóng vượt quá khá năng lưu trữ của Excel và vì vậy tôi phải tự học Access để thay thế, nhưng rồi về sau thì dữ liệu quá lớn và cũng vượt quá khả năng lưu trữ lớn nhất của Access – tôi đã phải truy vấn hàng trăm ngàn bản ghi về bệnh nhân và sau đó áp dụng các công thức tính toán trên chúng để phân tích dữ liệu các bản hợp đồng chăm sóc sức khỏe.

Trước tiên tôi phải thừa nhận rằng mình đã không lập trình theo bất kỳ ý nghĩa nào của từ “chuyên nghiệp”. Tôi đã khiến Access phải làm những thứ mà nhân viên hỗ trợ kỹ thuật của Microsoft đã nói với tôi rằng điều đó là không thể, nhưng tôi vẫn đơn giản là sử dụng những tập lệnh hết sức cơ bản để bắt buộc một ứng dụng đang tồn tại phải hoạt động theo ý tôi. Một điều tôi còn nhớ rõ là nó đã làm cho tôi cảm thấy rất hạnh phúc. Tôi đã ngồi gõ rất nhiều dòng lệnh lồng nhau vào trong những ô công thức từ 12 đến 14 giờ mỗi ngày mà vẫn cảm thấy chưa thỏa mãn khi tôi phải dừng lại.

Kinh nghiệm của tôi trong việc xây dựng “con quỷ” đó và khiến nó có thể chạy được, tới ngày, sự thỏa mãn nghề nghiệp của tôi cũng đã hoàn thành, mặc dù sau đó tôi lại trở thành giám đốc tài chính (CFO) cho một trung tâm chăm sóc sức khỏe khác, nhưng tôi đã có những phút giây mãn nguyện nhất trong hoài bão nghề nghiệp của mình tại thời điểm ấy. Điều đó còn giá trị hơn cả một công việc. Tôi đã cộng tác cùng những nhà phân tích và IT để thử nghiệm, thất bại, lại thử, rồi debug và tiếp tục xây dựng cái cơ sở dữ liệu khổng lồ đó. Tôi đã học về Easter Eggs và những kiến thức lập trình rồi nhận ra chính mình đang vọc vậy vào trong những lĩnh vực máy tính lớn của bệnh viện mà đáng lý ra nó hoàn toàn bị cấm đối với một người được trả lương cho vị trí CFO như tôi. Và giờ đây, tôi đang theo đuổi “mục tiêu nghề nghiệp chính” của mình và sẽ chấm dứt các công việc/nghề nghiệp mà tôi ghét phải làm việc cùng với chúng.

Đây là một người mà a) đã tìm thấy một vấn đề thú vị, b) đã thử tạo ra một giải pháp cho vấn đề đó, theo một cách hết sức tự nhiên c) điều đó dẫn họ tới việc phải học lập trình. Và họ đã yêu thích nó. Tôi thì không trở thành một lập trình viên bởi vì có ai đó nói với tôi rằng học lập trình là quan trọng, mà tôi trở thành một lập trình viên bởi vì tôi đã muốn thay đổi những luật chơi của các trò video game mà tôi chơi lúc bé, và việc học lập trình là cách duy nhất để làm điều đó. Theo hướng đó, tôi cũng yêu thích công việc lập trình.

Tất cả điều đó để nói lên rằng tôi đã đứng giữa ngã ba đường nhiều hơn một lần, và tôi vẫn còn nghe thấy những bài hát du dương của những tháng ngày bình yên đó trong suốt quãng thời gian mà tôi làm việc gần như là lập trình và tôi đã thích thú với công việc đó. Tôi có một câu hỏi dành cho anh là liệu anh có nghĩ rằng một ai đó có xuất phát điểm như tôi mà có thể học lập trình tới một cấp độ mà tôi có thể được thuê như là một lập trình viên hay không? Tôi không cố gắng để làm công việc này trong khi vẫn phải chạy quanh thành phố New York để làm một công việc ban ngày khác nữa. Đúng hơn là, tôi chân thành và hoàn toàn muốn trở thành một lập trình viên đích thực và sẽ dành toàn bộ cuộc đời mình để tạo ra (và/hoặc debugging) một cái gì đó có giá trị.

Thật không may, việc gọi bản thân bạn là một “lập trình viên” có thể trở thành một bước dịch chuyển làm giới hạn cái nghề của bạn, đặc biệt là cho một người mà đã từng đảm nhiệm vị trí giám đốc tài chính (CFO) trước đây. Người mà làm việc cùng với tiền và có khả năng kiếm ra rất nhiều tiền, như những gã ở Phố Wall.

Nhưng đây không phải là nói về tiền, phải không nào? Nó là về tình yêu. Vì vậy, nếu bạn muốn trở thành một lập trình viên, thì tất cả bạn cần phải làm là hành động theo tiếng nói của con tim bạn mách bảo và hãy yêu quý những dòng code. Bất kỳ một lập trình viên giỏi nào cũng ngay lập tức nhận ra một đồng nghiệp đích thực của họ, một người mà sẵn sàng liều lĩnh trong tình yêu với code, và tất cả những gì liên quan đến nó. Xin chào mừng bạn gia nhập vào bộ lạc lập trình viên của chúng tôi.

Nếu bạn đang đọc bài viết này và nghĩ trong đầu rằng, “này anh bạn Jeff Atwood, anh hãy cho tôi lời khuyên rằng liệu tôi có nên học lập trình hay không?”, thì tất cả những gì mà tôi có thể trả lời là: vâng! Bạn còn chờ gì nữa!

ITZone via vinacode

Chia sẻ bài viết ngay